LLVM-6.0.1

Introduction à LLVM

Le paquet LLVM contient une collection de compilateur modulaire et réutilisable et des technologies de chaînes d'outils. Le cœur des bibliothèques Low Level Virtual Machine (LLVM) fournit un optimiseur moderne indépendant de la source et de la cible, ainsi que le support de génération de code pour beaucoup des processeurs populaires (ainsi que quelques autres moins courants !). Ces bibliothèques sont construites autour d'une représentation du code connu sous le nom de représentation LLVM intermédiaire ("LLVM IR").

Les paquets facultatifs Clang et Compiler RT fournissent de nouvelles interfaces C, C++, Objective C et Objective C++ et des bibliothèques d'exécution pour LLVM et sont requis par certains paquets qui utilisent Rust, par exemple firefox.

Ce paquet est connu pour se construire correctement sur une plateforme LFS-8.3.

Informations sur le paquet

  • Téléchargement (HTTP) : http://llvm.org/releases/6.0.1/llvm-6.0.1.src.tar.xz

  • Téléchargement (FTP) :

  • Somme de contrôle MD5 du téléchargement : c88c98709300ce2c285391f387fecce0

  • Taille du téléchargement : 24.1 Mo

  • Estimation de l'espace disque requis : 2.8 Go (avec Clang, plus 10.8 Go pour les tests)

  • Estimation du temps de construction : 29 SBU (avec Clang et parallélisme = 4, plus 10 SBU pour les tests)

Téléchargements facultatifs

Clang

Compiler RT

Dépendances de LLVM

Requises

CMake-3.12.1 et Python-2.7.15

Facultatives

Doxygen-1.8.14, Graphviz-2.40.1, libxml2-2.9.8, texlive-20180414 (ou install-tl-unx), Valgrind-3.13.0, Zip-3.0, OCaml et Sphinx

Notes utilisateur : http://wiki.linuxfromscratch.org/blfs/wiki/llvm

Installation de LLVM

Si vous avez téléchargé les paquets facultatifs, installez-les dans l'arborescence des sources :

tar -xf ../cfe-6.0.1.src.tar.xz -C tools &&
tar -xf ../compiler-rt-6.0.1.src.tar.xz -C projects &&

mv tools/cfe-6.0.1.src tools/clang &&
mv projects/compiler-rt-6.0.1.src projects/compiler-rt

Installez LLVM en lançant les commandes suivantes :

mkdir -v build &&
cd       build &&

CC=gcc CXX=g++                              \
cmake -DCMAKE_INSTALL_PREFIX=/usr           \
      -DLLVM_ENABLE_FFI=ON                  \
      -DCMAKE_BUILD_TYPE=Release            \
      -DLLVM_BUILD_LLVM_DYLIB=ON            \
      -DLLVM_LINK_LLVM_DYLIB=ON             \
      -DLLVM_TARGETS_TO_BUILD="host;AMDGPU" \
      -DLLVM_BUILD_TESTS=ON                 \
      -Wno-dev -G Ninja ..                           &&
ninja

Pour tester les résultats, tapez : ninja check-all. Les tests sont construits avec un seul thread, mais lancés avec le nombre maximum de processeurs et de threads disponibles. Remarquez que certains tests du Sanitizer (9 sur 26479) sont connus pour échouer.

Maintenant, en tant qu'utilisateur root :

ninja install

Si vous avez installé Sphinx et que vous souhaitez générer la documentation html et les pages de manuel, vérifiez bien que vous vous trouvez dans le répertoire build et tapez la commande suivante :

rm -rf ./*
cmake -DLLVM_ENABLE_SPHINX=ON         \
      -DSPHINX_WARNINGS_AS_ERRORS=OFF \
      -Wno-dev ..                     &&
make docs-llvm-html  docs-llvm-man

Si vous avez téléchargé les paquets facultatifs, la documentation de clang peut être aussi construite :

make docs-clang-html docs-clang-man

Installez la documentation de llvm en lançant la commande suivante en tant qu'utilisateur root :

install -v -m644 docs/man/* /usr/share/man/man1             &&
install -v -d -m755 /usr/share/doc/llvm-6.0.1/llvm-html     &&
cp -Rv docs/html/* /usr/share/doc/llvm-6.0.1/llvm-html

La documentatino de clang peut être installée de la même manière (de nouveau en tant qu'utilisateur root) :

install -v -m644 tools/clang/docs/man/* /usr/share/man/man1 &&
install -v -d -m755 /usr/share/doc/llvm-6.0.1/clang-html    &&
cp -Rv tools/clang/docs/html/* /usr/share/doc/llvm-6.0.1/clang-html

Explication des commandes

-DLLVM_ENABLE-FFI=ON : Ce paramètre permet à LLVM d'utiliser libffi.

-DLLVM_BUILD_LLVM_DYLIB=ON : Construit les bibliothèques en statique et les lie toutes en une unique bibliothèque partagée. C'est la méthode recommandée pour la construction de la bibliothèque partagée.

-DCMAKE_BUILD_TYPE=Release : Ce paramètre active les optimisations du compilateur pour augmenter la vitesse du code et diminuer sa taille. Il désactive aussi quelques vérifications de compilation, non nécessaires à un système en production.

-DLLVM_TARGETS_TO_BUILD="host;AMDGPU" : Ce paramètre active la construction des mêmes cibles que l'hôte. et aussi pour le GPU r600 AMD utilisé par les pilotes r600 de Mesa et radeonsi. Par défaut tout est activé. Vous pouvez indiquer une liste de cibles séparées par des virgules. Les cibles valides sont : host, X86, Sparc, PowerPC, ARM, AArch64, Mips, Hexagon, Xcore, MSP430, NVPTX, SystemZ, AMDGPU, BPF, CppBackend ou all.

-DLLVM_LINK_LLVM_DYLIB=ON : Utilisé avec -DLLVM_BUILD_LLVM_DYLIB=ON, ce paramètre active la liaison des outils avec la bibliothèque partagée plutôt que des bibliothèques statiques. Il réduit aussi légèrement leur taille et s'assure que llvm-config utilisera bien libLLVM-6.0.so.

-DBUILD_SHARED_LIBS=ON : S'il est utilisé à la place de -DLLVM_BUILD_LLVM_DYLIB=ON et -DLLVM_LINK_LLVM_DYLIB=ON, ce paramètre construit les bibliothèques LLVM (environ 60) en tant que bibliothèques partagées plutôt que statiques.

-DLLVM_ENABLE_DOXYGEN : Active la génération de la documentation HTML navigable si vous avez installé Doxygen-1.8.14. Vous devriez lancer make doxygen-html ensuite, et installer la documentation générée à la main.

Contenu

Programmes installés: bugpoint, c-index-test, clang, clang++ (liens symboliques vers clang-<version>), clang-<version>, clang-check, clang-cl, clang-cppi (les deux derniers sont des liens symboliques vers clang), clang-format, clang-import-test, clang-offload-bundler, clang-rename, git-clang-format, llc, lli, llvm-ar, llvm-as, llvm-bcanalyzer, llvm-cat, llvm-config, llvm-cov, llvm-c-test, llvm-cvtres, llvm-cxxdump, llvm-cxxfilt, llvm-diff, llvm-dis, llvm-dlltool (lien vers llvm-ar), llvm-dsymutil, llvm-dwarfdump, llvm-dwp, llvm-extract, llvm-lib (lien vers llvm-ar), llvm-link, llvm-lto, llvm-lto2, llvm-mc, llvm-mcmarkup, llvm-modextract, llvm-mt, llvm-nm, llvm-objdump, llvm-opt-report, llvm-pdbutil, llvm-profdata, llvm-ranlib (lien vers llvm-ar), llvm-readelf (lien vers llvm-readobj), llvm-readobj, llvm-rtdyld, llvm-size, llvm-split, llvm-stress, llvm-strings, llvm-symbolizer, llvm-tblgen, llvm-xray, obj2yaml, opt, sancov, sanstats, scan-build, scan-view, verify-uselistorder, and yaml2obj
Bibliothèques installées: BugpointPasses.so, LLVMHello.so, libLLVM.so, libLLVM*.a (63 bibliothèques), libLTO.so, libclang.so and libclang*.a (25 bibliothèques)
Répertoires installés: /usr/include/{clang,clang-c,llvm,llvm-c}, /usr/lib/{clang,cmake/{clang,llvm}}, /usr/share/{clang,opt-viewer,scan-build,scan-view} et /usr/share/doc/llvm-6.0.1}

Descriptions courtes

bugpoint

est l'outil de réduction de cas de test automatique.

c-index-test

est utilisé pour tester l'API libclang et montrer son utilisation.

clang

est le compilateur Clang C, C++ et Objective-C.

clang-check

est un outil pour effectuer une analyse de code statique et afficher des arbres de syntaxe abstraite (AST).

clang-format

est un outil pour formater du code C/C++/Java/JavaScript/Objective-C/Protobuf.

clang-offload-bundler

est un outil pour rassembler/désassembler des fichiers reçus d'OpenMP associés avec un fichier source commun.

clang-rename

est un outil pour renommer des symboles dans les programmes C/C++.

git-clang-format

lance clang-format sur des correctifs générés par git (requiert git-2.18.0)

llc

est le compilateur statique LLVM.

lli

est utilisé pour exécuter directement des programmes en bytecode LLVM.

llvm-ar

est le créateur d'archive de LLVM.

llvm-as

est l'assembleur de LLVM.

llvm-bcanalyzer

est l'analyseur de bytecode LLVM.

llvm-cat

est un outil pour concaténer des modules llvm.

llvm-config

affiche les options de compilation de LLVM.

llvm-cov

est utilisé pour émettre des informations de couverture.

llvm-c-test

est un désassembleur de bytecode.

llvm-cvtres

est un outil pour convertir des fichiers de resource Microsoft en COFF.

llvm-cxxdump

est utilisé pour l'afficheur de donnée C++ ABI.

llvm-cxxfilt

est utilisé pour réassembler les symboles C++ dans le code llvm.

llvm-diff

est le diff de LLVM.

llvm-dis

est le désassembleur LLVM.

llvm-dsymutil

et un outil utilisé pour manipuler les fichiers de symboles de débogage DWARF archivés, compatible avec la commande Darwin dsymutil.

llvm-dwarfdump

affiche le contenu des sections DWARF dans les fichiers objet.

llvm-dwp

fusionne des fichiers DWARF séparés.

llvm-extract

est utilisé pour extraire une fonction depuis un module LLVM.

llvm-link

est le linker LLVM.

llvm-lto

est l'éditeur de lien LLVM LTO (optimisation à l'édition de lien).

llvm-lto2

est un banc de test pour l'interface LTO basée sur la résolution.

llvm-mc

est un assembleur / désassembleur de code machine distinct.

llvm-mcmarkup

est un analyseur pour le balisage de code machine.

llvm-modextract

est un outil pour extraire un module de fichiers de code binaire multi-modules.

llvm-mt

est un outil pour générer des fichiers et des catalogues signés à partir d'un manifeste d'assemblage (utilisé par le SDK de Microsoft).

llvm-nm

est utilisé pour lister les tables de symboles des fichiers objets et bytecode LLVM.

llvm-objdump

est un afficheur de fichiers objets LLVM.

llvm-opt-report

est un outil pour générer un rapport d'optimisation depuis les fichiers d'enregistrement d'optimisations YAML.

llvm-pdbutil

est un afficheur de PDB (Program Database). PDB est un format de Microsoft.

llvm-profdata

est un petit outil pour manipuler et afficher des fichiers de données de profil.

llvm-ranlib

est utilisé pour générer un index pour une archive LLVM.

llvm-readobj

affiche des informations bas niveau et spécifiques au format à propos de fichiers objets.

llvm-rtdyld

est l'outil MC-JIT LLVM.

llvm-size

est l'afficheur de taille d'objet de LLVM.

llvm-split

est le séparateur de module de LLVM.

llvm-stress

est utilisé pour générer des fichier .ll aléatoires.

llvm-strings

affiche les chaînes contenues dans un binaire (fichier objet, exécutable ou bibliothèque archivée)

llvm-symbolizer

convertit des adresses en emplacement dans le code source.

llvm-tblgen

est le générateur de code C++ depuis la description de la cible de LLVM.

llvm-xray

est une implémentation du système de traçage des appels de fonction XRay de Google.

obj2yaml

prends un fichier objet, et produit une représentation YAML de ce fichier.

opt

est l'optimiseur LLVM.

sancov

est l'outil de traitement de la couverture du simplificateur.

sanstats

est l'outil de traitement de la couverture du simplificateur.

scan-build

est un script Perl qui invoque l'analyseur statique Clang.

scan-view

est une visonneuse de résultats d'analyse statique de Clang.

verify-uselistorder

est l'outil de LLVM pour vérifier l'ordre d'utilisation des listes.

yaml2obj

prend une représentation YAML d'un fichier objet et le convertit en un fichier binaire.

Last updated on 2018-08-18 23:53:19 +0200