Bagaimana cara memberitahu Android NDK untuk menggunakan toolchain yang berbeda

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

Saya telah mengunduh custom toolchain ( linaro ) untuk membuat aplikasi Android berbasis ARM. Bagaimana cara memberitahu NDK untuk menggunakannya? Bisakah saya mendefinisikan atau mengatur sesuatu di Android.mk dan Application.mk yang memungkinkan saya melakukan itu? Apakah ada cara lain?

1 Comments
corbin 03/08/2012
Apakah Anda melakukan ini di Ubuntu? Bagaimana Anda memasang toolchain?

3 Answers


Peter M 03/01/2013.

Seperti yang disebutkan oleh jawaban lainnya, toolcains ditemukan oleh sistem makefile ndk-build dalam $(NDK_ROOT)/toolchains/ dan Anda dapat mencerminkan ide-ide yang Anda lihat di sana. Tetapi ada beberapa konsep tambahan untuk mendukung platform target non-Android yang menarik meskipun mereka mungkin segera kedaluwarsa karena ndk-build mulai secara eksplisit mendukung platform lain, seperti mingw targeting win32 (atau kompiler gcc lain yang menargetkan dataran 'ol linux) .

Di config.mk :

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

Ini adalah definisi penting, karena Anda dapat menggunakan nama ini di Application.mk Anda untuk membangun menggunakan toolchain untuk ABI tertentu. Salah satu manfaat merusak penggunaan definisi ini adalah bahwa ndk-build dapat secara bersamaan membangun beberapa ABI. always diasumsikan bahwa platform adalah Android, tetapi jika Anda ingin menargetkan win32 menggunakan toolchain berbasis mingw, Anda dapat mendefinisikan "ABI" sebagai x86-win32 , dan kemudian gunakan ABI ini di Application.mk Anda untuk memilihnya sebagai tambahan target via APP_ABI:= x86-win32 Kemudian di file Android.mk Anda dapat menggunakan definisi TARGET_ARCH_ABI untuk memilih win32 sumber tertentu dan menyertakan jalur, misalnya:

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

Bagian terakhir adalah di setup.mk untuk toolchain Anda, mungkin tidak cukup untuk melihat toolchain lain sebagai contoh, karena apa yang setup.mk untuk toolchain tertentu really - really dilakukan adalah mengganti pengaturan build di default-build-commands.mk , jadi apa yang ingin Anda lakukan adalah memeriksa file itu, dan mendefinisikan kembali hal-hal di dalamnya yang tidak Anda sukai.

Mengikuti contoh sebelumnya, mingw tidak mendukung flag noexec dalam binari, dan Anda dapat membuang fitur ini dengan menambahkan baris berikut di setup.mk Anda:

# 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! 

Ini hanyalah salah satu contoh dari banyak fitur di default-build-commands.mk yang mungkin perlu diganti, dan tentu saja penting untuk menyediakan TOOLCHAIN_NAME sehingga toolchain dapat dipilih melalui variabel NDK_TOOLCHAIN di dalam file Application.mk Anda selain ke metodologi ABI yang saya sebutkan di atas.


Ian Ni-Lewis 09/12/2013.

Sistem makefile NDK cukup dapat dikembangkan dan Anda memang dapat mendefinisikan toolchain yang berbeda. Anda akan membutuhkan pemahaman tentang cara kerja Make.

Toolchains ditemukan dan diinisialisasi di build/core/init.mk line 261 (di NDKr6, baris # dapat berubah di versi mendatang). Kode inisialisasi mencari file bernama config.mk bawah $(NDK_ROOT)/toolchains/* . Jadi Anda harus menambahkan toolchain Anda dalam subdirektori di bawah direktori toolchains NDK, dan tambahkan config.mk dan setup.mk ke subdirektori itu. Lihatlah toolchains/x86-4.4.3 dan toolchains/arm-linux-androideabi-4.4.3 untuk contoh. Anda harus dapat memotong dan menyisipkan config.mk ARM dan setup.mk jika toolchain Anda memiliki tata letak standar.

Setelah Anda mendefinisikan toolchain di direktori toolchain, Anda dapat beralih ke sana dengan mengatur variabel NDK_TOOLCHAIN di dalam file Application.mk Anda.


lily 07/31/2017.

yah, Anda cukup menambahkan "NDK_TOOLCHAIN_VERSION = 4.9" di Application.mk Anda

Related questions

Hot questions

Language

Popular Tags