Outils pour utilisateurs

Outils du site


prog:clang

Status

Installation

Compilation

Pour faire une compilation plus rapide, ajouter :

Dossier source : llvm-project\llvm.

-DLLVM_TARGETS_TO_BUILD=X86 pour compiler pour x86 et x64.

-DCMAKE_INSTALL_PREFIX=install car ce dossier a besoin d'être accessible en écriture pendant la compilation.

-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra". clang-tools-extra est nécessaire pour ClangAST.

-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi"

-DLLVM_PARALLEL_LINK_JOBS=2 pour éviter que le link plante.

-DLLVM_INCLUDE_TESTS:BOOL=OFF -DCLANG_INCLUDE_TESTS:BOOL=OFF -DLLVM_INCLUDE_BENCHMARKS:BOOL=OFF -DLLVM_INCLUDE_EXAMPLES:BOOL=OFF -DLLVM_INCLUDE_UTILS:BOOL=OFF -DLLVM_INCLUDE_DOCS:BOOL=OFF -DLLVM_BUILD_UTILS:BOOL=OFF

Ubuntu

  • Utilisation des derniers paquets

Ajouté les clés de vérification de l'authenticité en exécutant :

wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc

Key is stored in legacy trusted.gpg keyring after Ubuntu 22.04 update Archive du 21/04/2022 le 18/10/2022

Créer un fichier /etc/apt/sources.list.d/llvm.sources :

Enabled: yes
Types: deb deb-src
URIs: http://apt.llvm.org/noble/
Suites: llvm-toolchain-noble-21
Components: main
Signed-By: /etc/apt/trusted.gpg.d/apt.llvm.org.asc

Puis faire un apt update / apt upgrade.

LLVM Debian/Ubuntu nightly packages Archive du 31/07/2022 le 18/10/2022

Install LLVM on Ubuntu 22.04 Archive du 01/12/2017 le 18/10/2022

  • Installation en parallèle

Ubuntu ne fournit pas de méthode 100% automatique. Il faut passer manuellement par update-alternatives.

update-alternatives-clang.sh
#!/usr/bin/env bash
 
update_alternatives() {
    local version=${1}
    local priority=${2}
    local master=${3}
    local slaves=${4}
    local path=${5}
    local cmdln slave_tgt
 
    cmdln="--verbose --install ${path}${master} ${master} ${path}${master}-${version} ${priority}"
    for slave in ${slaves}; do
        if [[ "$slave" = *.py ]]; then
            slave_tgt="${slave%.py}-${version}.py"
        else
            slave_tgt="${slave}-${version}"
        fi
        cmdln="${cmdln} --slave ${path}${slave} ${slave} ${path}${slave_tgt}"
    done
    sudo update-alternatives ${cmdln}
}
 
if [[ ${#} -ne 2 ]]; then
    echo usage: "${0}" clang_version priority
    exit 1
fi
 
version=${1}
priority=${2}
path="/usr/bin/"
 
master="llvm-config"
slaves="ld.lld ld64.lld llc lld lld-link lldb lldb-argdumper lldb-dap lldb-instr lldb-server lldb-vscode lli lli-child-target llvm-addr2line llvm-ar llvm-as llvm-bcanalyzer llvm-bitcode-strip llvm-boltdiff llvm-c-test llvm-cat llvm-cfi-verify llvm-cov llvm-cvtres llvm-cxxdump llvm-cxxfilt llvm-cxxmap llvm-debuginfo-analyzer llvm-debuginfod llvm-debuginfod-find llvm-diff llvm-dis llvm-dlltool llvm-dwarfdump llvm-dwarfutil llvm-dwp llvm-exegesis llvm-extract llvm-gsymutil llvm-ifs llvm-install-name-tool llvm-jitlink llvm-jitlink-executor llvm-lib llvm-libtool-darwin llvm-link llvm-lipo llvm-lto llvm-lto2 llvm-mc llvm-mca llvm-ml llvm-modextract llvm-mt llvm-nm llvm-objcopy llvm-objdump llvm-omp-device-info llvm-omp-kernel-replay llvm-opt-report llvm-otool llvm-pdbutil llvm-PerfectShuffle llvm-profdata llvm-profgen llvm-ranlib llvm-rc llvm-readelf llvm-readobj llvm-readtapi llvm-reduce llvm-remark-size-diff llvm-remarkutil llvm-rtdyld llvm-sim llvm-size llvm-split llvm-stress llvm-strings llvm-strip llvm-symbolizer llvm-tapi-diff llvm-tblgen llvm-tli-checker llvm-undname llvm-windres llvm-xray"
 
update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}"
 
master="clang"
slaves="amdgpu-arch analyze-build asan_symbolize bbc bugpoint c-index-test clang-apply-replacements clang-change-namespace clang-check clang-cl clang-cpp clang-doc clang-extdef-mapping clang-format clang-format-diff clang-include-cleaner clang-include-fixer clang-installapi clang-linker-wrapper clang-move clang-nvlink-wrapper clang-offload-bundler clang-offload-packager clang-offload-wrapper clang-pseudo clang-query clang-refactor clang-rename clang-reorder-fields clang-repl clang-scan-deps clang-tblgen clang-tidy clang-tidy-diff.py clang++ clangd count diagtool dsymutil f18-parse-demo FileCheck find-all-symbols fir-opt git-clang-format hmaptool hwasan_symbolize intercept-build merge-fdata mlir-cat mlir-cpu-runner mlir-linalg-ods-yaml-gen mlir-lsp-server mlir-minimal-opt mlir-minimal-opt-canonicalize mlir-opt mlir-pdll mlir-pdll-lsp-server mlir-query mlir-reduce mlir-transform-opt mlir-translate modularize not nvptx-arch obj2yaml opt perf2bolt pp-trace reduce-chunk-list run-clang-tidy run-clang-tidy.py sancov sanstats scan-build scan-build-py scan-view split-file tblgen-lsp-server tblgen-to-irdl tco UnicodeNameMappingGenerator verify-uselistorder wasm-ld yaml-bench yaml2obj"
 
update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}"

Utilisation pour enregistrer les alternatives : ./update-alternatives-clang.sh 16 16

update-alternatives-clang.sh Archive du 18/11/2017 le 18/10/2022

Utiliser pour switcher entre les versions :

sudo update-alternatives --config llvm-config
sudo update-alternatives --config clang

How to Use update-alternatives Command on Ubuntu Archive du 01/05/2022 le 18/10/2022

Options

  • -ftime-trace

Affiche où clang passe du temps pour compiler. Le fichier .json généré s'ouvre avec Chrome chrome://tracing

time-trace: timeline / flame chart profiler for Clang Archive du 16/01/2019 le 11/11/2019

Erreurs

  • fatal error: 'iostream' file not found

Les librairies standard ne sont pas trouvées. On peut commencer par vérifier si le paquet build-essential est installé.

Ensuite, les librairies standard ne sont pas forcément celles du gcc par défaut qui sont utilisées.

Lancer clang -v pour trouver laquelle est en cours (Selected GCC installation).

$ clang -v
Ubuntu clang version 14.0.6
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-14/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/10
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Candidate multilib: .;@m64
Selected multilib: .;@m64
$ gcc -v
gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04)

Il faut donc installer les entêtes de gcc-12.

sudo apt install libstdc++-12-dev

Clang doesn't see basic headers Archive du 13/10/2014 le 11/05/2023

prog/clang.txt · Dernière modification : de root