Come dire a Android NDK di utilizzare una diversa toolchain

Phonon 09/02/2017. 3 answers, 18.326 views
android android android-ndk android-ndk toolchain

Ho scaricato una toolchain personalizzata ( linaro ) per creare app Android basate su ARM. Come si dice all'NDK di usarlo? Posso definire o impostare qualcosa in Android.mk e Application.mk che mi consentano di farlo? C'è un altro modo?

1 Comments
corbin 03/08/2012
Lo hai fatto su Ubuntu? Come hai installato la toolchain?

3 Answers


Peter M 03/01/2013.

Come menziona l'altra risposta, le toolchain vengono scoperte dal sistema makefile ndk-build in $(NDK_ROOT)/toolchains/ e puoi rispecchiare le idee che vedi lì. Ma ci sono alcuni concetti in più per supportare piattaforme di destinazione non Android che sono interessanti anche se potrebbero essere presto superate dato che ndk-build inizia a supportare esplicitamente altre piattaforme, come il targeting mingw win32 (o altri compilatori gcc che puntano semplicemente a 'ol linux) .

In config.mk :

TOOLCHAIN_ABIS := (list of ABIs that the toolchain supports) 

Questa è una definizione importante, perché puoi usare questo nome nel tuo Application.mk per costruire usando la toolchain per un particolare ABI. Uno dei vantaggi di corrompere l'utilizzo di questa definizione è che ndk-build può creare contemporaneamente più ABI. Presuppone always che la piattaforma sia Android, ma se si vuole indirizzare Win32 usando una toolchain basata su mingw, è possibile definire un "ABI" come x86-win32 , e quindi utilizzare questo ABI in Application.mk per selezionarlo come un ulteriore target tramite APP_ABI:= x86-win32 Quindi nei tuoi file Android.mk puoi utilizzare la definizione TARGET_ARCH_ABI per selezionare le origini specifiche di win32 e includere i percorsi, ad esempio:

ifeq ($(TARGET_ARCH_ABI),x86-win32)
  LOCAL_SRC_FILES += my_win32_file.c
  LOCAL_CFLAGS += -DSOME_WIN32_SPECIFIC
endif 

Il pezzo finale è quello in setup.mk per la tua toolchain, potrebbe non essere sufficiente guardare altri toolchain come esempi, perché ciò che setup.mk per una particolare toolchain è sovrascrivere le impostazioni di build in default-build-commands.mk , quindi quello che vuoi fare è ispezionare quel file e ridefinire le cose che non ti piacciono.

Seguendo l'esempio precedente, mingw non supporta il flag noexec nei binari e puoi eliminare questa funzione aggiungendo le seguenti righe nel tuo setup.mk :

# These flags are used to enforce the NX (no execute) security feature in the
# generated machine code. This adds a special section to the generated shared
# libraries that instruct the Linux kernel to disable code execution from
# the stack and the heap.
TARGET_NO_EXECUTE_CFLAGS  := # our platform doesn't support this flag!
TARGET_NO_EXECUTE_LDFLAGS := # our platform doesn't support this flag!

# These flags disable the above security feature
TARGET_DISABLE_NO_EXECUTE_CFLAGS  :=  # our platform doesn't support this flag!
TARGET_DISABLE_NO_EXECUTE_LDFLAGS :=  # our platform doesn't support this flag! 

Questo è solo un esempio delle numerose funzionalità di default-build-commands.mk che potrebbero dover essere sostituite e, ovviamente, è importante fornire TOOLCHAIN_NAME modo che la toolchain possa essere selezionata tramite la variabile NDK_TOOLCHAIN all'interno del file Application.mk in aggiunta alla metodologia ABI che menziono sopra.


Ian Ni-Lewis 09/12/2013.

Il sistema makefile NDK è abbastanza estendibile e puoi effettivamente definire una diversa toolchain. Avrai bisogno di capire come funziona Make.

I toolchain vengono scoperti e inizializzati nella riga build/core/init.mk 261 (in NDKr6, la linea # può cambiare nelle versioni future). Il codice di inizializzazione cerca i file denominati config.mk in $(NDK_ROOT)/toolchains/* . Quindi dovrai aggiungere la tua toolchain in una sottodirectory nella directory di toolchains NDK e aggiungere config.mk e setup.mk a quella sottodirectory. Guarda toolchains/x86-4.4.3 e toolchains/arm-linux-androideabi-4.4.3 per gli esempi. Dovresti essere in grado di tagliare e incollare la toolchain ARM config.mk e setup.mk se la tua toolchain ha un layout standard.

Una volta definita una toolchain nella directory toolchain, puoi passare ad essa impostando la variabile NDK_TOOLCHAIN all'interno del tuo file Application.mk .


lily 07/31/2017.

bene, puoi semplicemente aggiungere "NDK_TOOLCHAIN_VERSION = 4.9" nel tuo Application.mk

Related questions

Hot questions

Language

Popular Tags