GNU/Linux >> Belajar Linux >  >> Linux

Apa gunanya LLVM di Android NDK Toolchains?

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.


Linux
  1. Gunakan terminal Linux untuk melihat file apa yang ada di komputer Anda

  2. Apa gunanya Perintah ‘/usr/bin/[‘ [Square Bracket] di Linux?

  3. Apa dan bagaimana menggunakan folder public_ftp

  1. Apa gunanya $# di Bash

  2. Apa itu sistem file NSFS?

  3. Apa gunanya opsi -o dalam perintah useradd?

  1. Linux vs. Unix:Apa bedanya?

  2. Apa yang dimaksud dengan POSIX?

  3. Apa itu tautan emas?