GNU/Linux >> Znalost Linux >  >> Linux

Jaké je použití LLVM v nástrojích Android NDK Toolchains?

LLVM je kompilátor (backend). Použitý kompilátor je Clang, který se nachází v adresáři llvm. (LLVM je název komponenty Clang, která provádí skutečné generování kódu, neboli backend.)

Dříve NDK používal GCC jako kompilátor. S GCC měla každá cílová architektura (arm, aarch64, x86 atd.) samostatnou kopii GCC sestavenou s tímto individuálním cílem nakonfigurovaným. Clang/LLVM na druhé straně může cílit na jakoukoli nakonfigurovanou architekturu pomocí jediného spustitelného kompilátoru. Takže s Clangem ušetříte trochu místa na disku a nebudete mít mnoho samostatných spustitelných souborů kompilátoru. Proto existuje pouze jedna kopie stromu adresářů llvm.

V NDK r17 máte k dispozici kompilátory GCC i Clang; Clang se používá ve výchozím nastavení, ale GCC je stále k dispozici pro projekty, které ještě nebyly schopny migrovat na používání Clang. V novějších verzích NDK je starý GCC odstraněn.

V novějších verzích NDK, i když je GCC odstraněn, adresáře specifické pro architekturu jako aarch64-linux-android-4.9 jsou stále k dispozici, protože GNU binutils (menší nástroje používané procesem sestavení) se stále používají a ty také přicházejí v jedné kopii na architekturu (i když technicky mohou fungovat napříč architekturami).

A pokud jde o to, proč stavět např. arm také uvádí x86_64; když používáte Clang nebo GCC, spouštíte spustitelný soubor pro váš počítač sestavení, který běží na x86_64, tedy prebuilt/linux-x86_64 část cest.


LLVM je nyní zastřešujícím projektem a obsahuje několik modulárních a opakovaně použitelných kompilátorů a technologií toolchain. Další podrobnosti si můžete ověřit na stránce The LLVM Compiler Infrastructure.

Pro Android NDK se llvm stal výchozím toolchainem od r13b a gcc byl odstraněn od r18b.

Podle adresáře toolchains toolchains/llvm/prebuilt/darwin-x86_64 , llvm podporuje všechna rozhraní ABI, tj. x86, x86_64, arm, arm64.

Pravděpodobně bude pouze jeden llvm adresář pod toolchains adresář v budoucích vydáních NDK, až budou všechny nástroje, hlavičky a knihovny související s gcc kompletně portovány na llvm.

Odkazy, které mohou pomoci:Proměnná cesty Android NDK pro příkaz „strip“ v řetězci nástrojů pro sestavení CMake

Aktualizace

Právě jsem provedl rychlý test na různých revizích NDK, aby zkontroloval konfigurace pro --gcc-toolchain a --sysroot které jsou pro křížovou kompilaci.

Na 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 

Na 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

Na 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

Na 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 

Jak je vidět výše, před NDK r19b , NDK používá kompilátor clang, ale --gcc-toolchain a --sysroot jsou nakonfigurovány jako starší cesty pro nástroje sestavení, hlavičky a knihovny.

Ale od NDK r19b , --gcc-toolchain a --sysroot jsou nakonfigurovány jako nové nástrojové řetězce llvm , tj. toolchains/llvm/prebuilt/darwin-x86_64 a budou použity nástroje (např. ranlib, ar, strip atd.), hlavičkové soubory a knihovny "llvm version".

Všimněte si také, že toolchains/llvm/prebuilt/darwin-x86_64 obsahuje podporu pro všechna rozhraní Android ABI, tj. aarch64-linux-android pro arm64-v8a , arm-linux-androideabi pro armeabi-v7a , i686-linux-android pro x86 , x86_64-linux-android pro x86_64 .

Takže můžete vyzkoušet NDK r19b, pokud chcete používat čistě toolchainy llvm.


Linux
  1. K čemu slouží ignorování signálu `SIGCHLD` pomocí `sigaction(2)`?

  2. Co je to souborový systém NSFS?

  3. Jaké je použití volby -o v příkazu useradd?

  1. Pomocí terminálu Linux můžete zjistit, jaké soubory jsou ve vašem počítači

  2. Linux vs. Unix:Jaký je rozdíl?

  3. Co je zlatý linker?

  1. Jaké je použití příkazu „/usr/bin/[“ [hraná závorka] v Linuxu?

  2. Co se stalo s volným prostorem?

  3. Co je a jak používat složku public_ftp