LLVM adalah kompiler (backend). Kompiler yang digunakan adalah Dentang, yang berada di dalam direktori llvm. (LLVM adalah nama komponen Clang yang melakukan pembuatan kode aktual, alias backend.)
Sebelumnya, NDK menggunakan GCC sebagai kompiler. Dengan GCC, setiap arsitektur target (arm, aarch64, x86 dll) memiliki salinan terpisah dari GCC yang dibangun dengan target individual yang dikonfigurasi. Dentang/LLVM di sisi lain dapat menargetkan arsitektur yang dikonfigurasi dengan satu kompiler yang dapat dieksekusi. Jadi dengan Dentang, Anda akan menghemat sedikit ruang disk, menghindari memiliki banyak executable kompiler yang terpisah. Itu sebabnya hanya ada satu salinan pohon direktori llvm.
Di NDK r17, Anda memiliki kompiler GCC dan Clang; Dentang digunakan secara default tetapi GCC masih tersedia untuk proyek yang belum dapat bermigrasi menggunakan Dentang. Di versi NDK yang lebih baru, GCC lama dihapus.
Dalam versi NDK yang lebih baru, meskipun GCC dihapus, direktori khusus arsitektur seperti aarch64-linux-android-4.9
masih dipertahankan, karena GNU binutils (alat minor yang digunakan oleh proses pembangunan) masih digunakan, dan itu juga tersedia dalam satu salinan per arsitektur (walaupun secara teknis mungkin bekerja lintas arsitektur).
Dan mengapa membangun untuk mis. lengan juga menyebutkan x86_64; saat Anda menjalankan Clang atau GCC, Anda menjalankan executable untuk komputer build Anda yang menjalankan x86_64, maka prebuilt/linux-x86_64
bagian dari jalan.
LLVM adalah proyek payung sekarang, dan berisi beberapa teknologi compiler dan toolchain modular dan dapat digunakan kembali. Anda dapat memeriksa detail selengkapnya di Infrastruktur Penyusun LLVM.
Untuk Android NDK, llvm menjadi toolchain default sejak r13b dan gcc telah dihapus sejak r18b.
Menurut direktori toolchains toolchains/llvm/prebuilt/darwin-x86_64
, llvm mendukung semua ABI, yaitu x86, x86_64, arm, arm64.
Mungkin hanya akan ada satu llvm
direktori di bawah toolchains
direktori di rilis NDK mendatang ketika semua alat terkait gcc, header, dan lib sepenuhnya di-porting ke llvm.
Referensi yang mungkin membantu:Variabel jalur Android NDK untuk perintah "strip" di rantai alat build CMake
Pembaruan
Baru saja melakukan tes cepat pada berbagai revisi NDK untuk memeriksa konfigurasi --gcc-toolchain
dan --sysroot
yang untuk kompilasi silang.
Pada r16b
--target=armv7-none-linux-androideabi
--gcc-toolchain=~/ndks/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
--sysroot=~/ndks/android-ndk-r16b/sysroot
Pada r17c
--target=armv7-none-linux-androideabi
--gcc-toolchain=~/ndks/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
--sysroot=~/ndks/android-ndk-r17c/sysroot
Pada r18b
--target=armv7-none-linux-androideabi19
--gcc-toolchain=~/ndks/android-ndk-r18b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
--sysroot=~/ndks/android-ndk-r18b/sysroot
Pada r19b
--target=armv7-none-linux-androideabi19
--gcc-toolchain=~/ndks/android-ndk-r19b/toolchains/llvm/prebuilt/darwin-x86_64
--sysroot=~/ndks/android-ndk-r19b/toolchains/llvm/prebuilt/darwin-x86_64/sysroot
Seperti yang terlihat di atas, sebelum NDK r19b , NDK menggunakan kompiler dentang tetapi --gcc-toolchain
dan --sysroot
dikonfigurasi sebagai jalur lama untuk alat build, header, dan lib.
Namun, sejak NDK r19b , --gcc-toolchain
dan --sysroot
dikonfigurasi sebagai rangkaian alat baru llvm , yaitu toolchains/llvm/prebuilt/darwin-x86_64
, dan alat (misalnya ranlib, ar, strip, dll) file header dan pustaka "versi llvm" akan digunakan.
Perhatikan juga bahwa toolchains/llvm/prebuilt/darwin-x86_64
berisi dukungan untuk semua ABI Android, yaitu aarch64-linux-android
untuk arm64-v8a , arm-linux-androideabi
untuk armeabi-v7a , i686-linux-android
untuk x86 , x86_64-linux-android
untuk x86_64 .
Jadi, Anda dapat mencoba NDK r19b jika hanya ingin menggunakan rantai alat llvm.