LLVM はコンパイラ (バックエンド) です。使用されるコンパイラは、llvm ディレクトリ内にある Clang です。 (LLVM は、実際のコード生成、別名バックエンドを行う Clang のコンポーネントの名前です。)
以前は、NDK は GCC をコンパイラとして使用していました。 GCC では、各ターゲット アーキテクチャ (arm、aarch64、x86 など) には、その個々のターゲットが構成された GCC の個別のコピーが構築されていました。一方、Clang/LLVM は、単一のコンパイラ実行可能ファイルを使用して、構成された任意のアーキテクチャをターゲットにすることができます。そのため、Clang を使用すると、個別のコンパイラ実行可能ファイルを多数用意する必要がなくなり、ディスク容量を少し節約できます。そのため、llvm ディレクトリ ツリーのコピーは 1 つだけです。
NDK r17 では、GCC コンパイラと Clang コンパイラの両方を利用できます。デフォルトでは Clang が使用されますが、まだ Clang を使用するように移行できていないプロジェクトでは、GCC を引き続き使用できます。新しい NDK バージョンでは、古い GCC は削除されています。
新しい NDK バージョンでは、GCC が削除されても、aarch64-linux-android-4.9
のようなアーキテクチャ固有のディレクトリ GNU binutils (ビルド プロセスで使用されるマイナー ツール) がまだ使用されているため、それらはまだ保持されており、それらもアーキテクチャごとに 1 つのコピーで提供されます (技術的にはアーキテクチャ間で動作する可能性がありますが)。
そして、例えばのために構築する理由については。 arm は x86_64 についても言及しています。 Clang または GCC を実行しているときは、x86_64 を実行するビルド コンピューターの実行可能ファイルを実行しているため、prebuilt/linux-x86_64
LLVM は現在包括的なプロジェクトであり、複数のモジュール式で再利用可能なコンパイラとツールチェーン テクノロジが含まれています。詳細については、LLVM コンパイラ インフラストラクチャで確認できます。
Android NDK では、r13b から llvm がデフォルトのツールチェーンになり、r18b から gcc が削除されました。
ツールチェーン ディレクトリ toolchains/llvm/prebuilt/darwin-x86_64
によると 、llvm はすべての ABI、つまり x86、x86_64、arm、arm64 をサポートします。
おそらく llvm
は 1 つだけです。 toolchains
の下のディレクトリ 今後の NDK リリースでは、gcc 関連のすべてのツール、ヘッダー、およびライブラリが完全に llvm に移植されます。
役立つ参考文献:CMake ビルド ツール チェーンの「strip」コマンドの Android NDK パス変数
アップデート
--gcc-toolchain
の構成を確認するために、さまざまな NDK リビジョンで簡単なテストを行いました と --sysroot
これはクロスコンパイル用です。
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
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
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
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
上記のように、NDK r19b より前 、NDK は clang コンパイラを使用しますが、--gcc-toolchain
および --sysroot
ビルド ツール、ヘッダー、およびライブラリの古いパスとして構成されます。
ただし、NDK r19b 以降 、--gcc-toolchain
と --sysroot
新しいツール チェーン llvm として構成されます 、つまり toolchains/llvm/prebuilt/darwin-x86_64
、およびツール (たとえば、ranlib、ar、strip など) のヘッダー ファイルと "llvm バージョン" のライブラリが使用されます。
また、toolchains/llvm/prebuilt/darwin-x86_64
にも注意してください。 すべての Android ABI、つまり aarch64-linux-android
のサポートが含まれています arm64-v8a 用 、 arm-linux-androideabi
armeabi-v7a 用 、 i686-linux-android
x86 用 、 x86_64-linux-android
x86_64 用 .
そのため、純粋に llvm ツールチェーンを使用したい場合は、NDK r19b を試すことができます。