GNU/Linux >> Tutoriels Linux >  >> Linux

À quoi sert LLVM dans les chaînes d'outils Android NDK ?

LLVM est le compilateur (backend). Le compilateur utilisé est Clang, qui réside dans le répertoire llvm. (LLVM est le nom du composant de Clang qui effectue la génération de code proprement dite, c'est-à-dire le backend.)

Auparavant, le NDK utilisait GCC comme compilateur. Avec GCC, chaque architecture cible (arm, aarch64, x86, etc.) avait une copie distincte de GCC construite avec cette cible individuelle configurée. Clang/LLVM, d'autre part, peut cibler n'importe quelle architecture configurée avec un seul exécutable de compilateur. Ainsi, avec Clang, vous économiserez un peu d'espace disque, évitant d'avoir de nombreux exécutables de compilateur séparés. C'est pourquoi il n'y a qu'une seule copie de l'arborescence de répertoires llvm.

Dans NDK r17, vous disposez à la fois des compilateurs GCC et Clang ; Clang est utilisé par défaut mais GCC est toujours disponible pour les projets qui n'ont pas encore pu migrer vers l'utilisation de Clang. Dans les nouvelles versions de NDK, l'ancien GCC est supprimé.

Dans les nouvelles versions de NDK, même si GCC est supprimé, les répertoires spécifiques à l'architecture comme aarch64-linux-android-4.9 sont toujours conservés, car les binutils GNU (outils mineurs utilisés par le processus de construction) sont toujours utilisés, et ceux-ci sont également fournis en une copie par architecture (même s'ils peuvent techniquement fonctionner sur plusieurs architectures).

Et quant à savoir pourquoi construire pour par exemple. arm mentionne également x86_64 ; lorsque vous exécutez Clang ou GCC, vous exécutez un exécutable pour votre ordinateur de construction qui exécute x86_64, d'où le prebuilt/linux-x86_64 une partie des chemins.


LLVM est maintenant un projet parapluie, et il contient plusieurs technologies de compilateur et de chaîne d'outils modulaires et réutilisables. Vous pouvez vérifier plus de détails sur l'infrastructure du compilateur LLVM.

Pour Android NDK, llvm est devenu la chaîne d'outils par défaut depuis r13b et gcc a été supprimé depuis r18b.

Selon le répertoire des chaînes d'outils toolchains/llvm/prebuilt/darwin-x86_64 , llvm prend en charge tous les ABI, c'est-à-dire x86, x86_64, arm, arm64.

Il n'y aura probablement qu'un seul llvm répertoire sous toolchains répertoire dans les futures versions de NDK lorsque tous les outils, en-têtes et bibliothèques liés à gcc seront complètement portés sur llvm.

Références pouvant aider :variable de chemin Android NDK pour la commande "strip" dans la chaîne d'outils de génération CMake

Mises à jour

Je viens de faire un test rapide sur différentes révisions NDK pour vérifier les configurations pour --gcc-toolchain et --sysroot qui sont pour la compilation croisée.

Sur 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 

Sur 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

Sur 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

Sur 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 

Comme vu ci-dessus, avant NDK r19b , NDK utilise le compilateur clang mais le --gcc-toolchain et --sysroot sont configurés comme les anciens chemins pour les outils de construction, les en-têtes et les bibliothèques.

Mais, depuis NDK r19b , le --gcc-toolchain et --sysroot sont configurés comme les nouvelles chaînes d'outils llvm , soit toolchains/llvm/prebuilt/darwin-x86_64 , et les outils (par exemple ranlib, ar, strip, etc.) les fichiers d'en-tête et les bibliothèques de "version llvm" seront utilisés.

Notez également que toolchains/llvm/prebuilt/darwin-x86_64 contient le support de tous les ABI Android, c'est-à-dire aarch64-linux-android pour arm64-v8a , arm-linux-androideabi pour armeabi-v7a , i686-linux-android pour x86 , x86_64-linux-android pour x86_64 .

Ainsi, vous pouvez essayer le NDK r19b si vous souhaitez utiliser uniquement les chaînes d'outils llvm.


Linux
  1. Utilisez le terminal Linux pour voir quels fichiers se trouvent sur votre ordinateur

  2. Qu'est-ce que c'est et comment utiliser le dossier public_ftp

  3. Quelle est la bonne façon d'utiliser inotify ?

  4. Quelle commande dois-je utiliser pour voir quelle est l'empreinte digitale de la clé ECDSA de mon serveur ?

  5. À quoi sert $# dans Bash

Qu'est-ce que le Shell sous Linux ?

Comment utiliser le terminal Linux dans Android

Qu'est-ce que la fonctionnalité de la communauté ONLYOFFICE et pourquoi devriez-vous l'utiliser ?

Qu'est-ce que Termux sur Android ?

Quel caractère utiliser pour mettre un élément à la fin d'une liste alphabétique ?

A quoi sert l'option -o dans la commande useradd ?