-
Star
(143)
You must be signed in to star a gist -
Fork
(43)
You must be signed in to fork a gist
-
-
Save junkdog/70231d6953592cd6f27def59fe19e50d to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash | |
# --slave /usr/bin/$1 $1 /usr/bin/$1-\${version} \\ | |
function register_clang_version { | |
local version=$1 | |
local priority=$2 | |
update-alternatives \ | |
--install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-${version} ${priority} \ | |
--slave /usr/bin/llvm-ar llvm-ar /usr/bin/llvm-ar-${version} \ | |
--slave /usr/bin/llvm-as llvm-as /usr/bin/llvm-as-${version} \ | |
--slave /usr/bin/llvm-bcanalyzer llvm-bcanalyzer /usr/bin/llvm-bcanalyzer-${version} \ | |
--slave /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${version} \ | |
--slave /usr/bin/llvm-diff llvm-diff /usr/bin/llvm-diff-${version} \ | |
--slave /usr/bin/llvm-dis llvm-dis /usr/bin/llvm-dis-${version} \ | |
--slave /usr/bin/llvm-dwarfdump llvm-dwarfdump /usr/bin/llvm-dwarfdump-${version} \ | |
--slave /usr/bin/llvm-extract llvm-extract /usr/bin/llvm-extract-${version} \ | |
--slave /usr/bin/llvm-link llvm-link /usr/bin/llvm-link-${version} \ | |
--slave /usr/bin/llvm-mc llvm-mc /usr/bin/llvm-mc-${version} \ | |
--slave /usr/bin/llvm-mcmarkup llvm-mcmarkup /usr/bin/llvm-mcmarkup-${version} \ | |
--slave /usr/bin/llvm-nm llvm-nm /usr/bin/llvm-nm-${version} \ | |
--slave /usr/bin/llvm-objdump llvm-objdump /usr/bin/llvm-objdump-${version} \ | |
--slave /usr/bin/llvm-ranlib llvm-ranlib /usr/bin/llvm-ranlib-${version} \ | |
--slave /usr/bin/llvm-readobj llvm-readobj /usr/bin/llvm-readobj-${version} \ | |
--slave /usr/bin/llvm-rtdyld llvm-rtdyld /usr/bin/llvm-rtdyld-${version} \ | |
--slave /usr/bin/llvm-size llvm-size /usr/bin/llvm-size-${version} \ | |
--slave /usr/bin/llvm-stress llvm-stress /usr/bin/llvm-stress-${version} \ | |
--slave /usr/bin/llvm-symbolizer llvm-symbolizer /usr/bin/llvm-symbolizer-${version} \ | |
--slave /usr/bin/llvm-tblgen llvm-tblgen /usr/bin/llvm-tblgen-${version} | |
update-alternatives \ | |
--install /usr/bin/clang clang /usr/bin/clang-${version} ${priority} \ | |
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-${version} \ | |
--slave /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${version} \ | |
--slave /usr/bin/c-index-test c-index-test /usr/bin/c-index-test-${version} \ | |
--slave /usr/bin/clang-check clang-check /usr/bin/clang-check-${version} \ | |
--slave /usr/bin/clang-cl clang-cl /usr/bin/clang-cl-${version} \ | |
--slave /usr/bin/clang-cpp clang-cpp /usr/bin/clang-cpp-${version} \ | |
--slave /usr/bin/clang-format clang-format /usr/bin/clang-format-${version} \ | |
--slave /usr/bin/clang-format-diff clang-format-diff /usr/bin/clang-format-diff-${version} \ | |
--slave /usr/bin/clang-import-test clang-import-test /usr/bin/clang-import-test-${version} \ | |
--slave /usr/bin/clang-include-fixer clang-include-fixer /usr/bin/clang-include-fixer-${version} \ | |
--slave /usr/bin/clang-offload-bundler clang-offload-bundler /usr/bin/clang-offload-bundler-${version} \ | |
--slave /usr/bin/clang-query clang-query /usr/bin/clang-query-${version} \ | |
--slave /usr/bin/clang-rename clang-rename /usr/bin/clang-rename-${version} \ | |
--slave /usr/bin/clang-reorder-fields clang-reorder-fields /usr/bin/clang-reorder-fields-${version} \ | |
--slave /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-${version} \ | |
--slave /usr/bin/lldb lldb /usr/bin/lldb-${version} \ | |
--slave /usr/bin/lldb-server lldb-server /usr/bin/lldb-server-${version} | |
} | |
register_clang_version $1 $2 |
Thanks
Very useful, thanks. There's one entry that could perhaps be added:
[...]
--slave /usr/bin/git-clang-format git-clang-format /usr/bin/git-clang-format-${version} \
[...]
ditto what others have said, thanks for posting!
For building the linux kernel on a distro like Ubuntu 18.04+, substituting all GNU utils, compilers, and linker and allowing for thin LTO; the above will NOT work and fail.
This is how I got it to work...
#!/usr/bin/env bash'
# --slave /usr/bin/$1 $1 /usr/bin/$1-\${version} \\
function register_clang_version {
local version=$1
local priority=$2
update-alternatives \
--verbose \
--install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-${version} ${priority} \
--slave /usr/bin/llvm-ar llvm-ar /usr/bin/llvm-ar-${version} \
--slave /usr/bin/llvm-as llvm-as /usr/bin/llvm-as-${version} \
--slave /usr/bin/llvm-bcanalyzer llvm-bcanalyzer /usr/bin/llvm-bcanalyzer-${version} \
--slave /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${version} \
--slave /usr/bin/llvm-diff llvm-diff /usr/bin/llvm-diff-${version} \
--slave /usr/bin/llvm-dis llvm-dis /usr/bin/llvm-dis-${version} \
--slave /usr/bin/llvm-dwarfdump llvm-dwarfdump /usr/bin/llvm-dwarfdump-${version} \
--slave /usr/bin/llvm-extract llvm-extract /usr/bin/llvm-extract-${version} \
--slave /usr/bin/llvm-link llvm-link /usr/bin/llvm-link-${version} \
--slave /usr/bin/llvm-mc llvm-mc /usr/bin/llvm-mc-${version} \
--slave /usr/bin/llvm-nm llvm-nm /usr/bin/llvm-nm-${version} \
--slave /usr/bin/llvm-objdump llvm-objdump /usr/bin/llvm-objdump-${version} \
--slave /usr/bin/llvm-ranlib llvm-ranlib /usr/bin/llvm-ranlib-${version} \
--slave /usr/bin/llvm-readobj llvm-readobj /usr/bin/llvm-readobj-${version} \
--slave /usr/bin/llvm-rtdyld llvm-rtdyld /usr/bin/llvm-rtdyld-${version} \
--slave /usr/bin/llvm-size llvm-size /usr/bin/llvm-size-${version} \
--slave /usr/bin/llvm-stress llvm-stress /usr/bin/llvm-stress-${version} \
--slave /usr/bin/llvm-symbolizer llvm-symbolizer /usr/bin/llvm-symbolizer-${version} \
--slave /usr/bin/llvm-tblgen llvm-tblgen /usr/bin/llvm-tblgen-${version} \
--slave /usr/bin/llvm-objcopy llvm-objcopy /usr/bin/llvm-objcopy-${version} \
--slave /usr/bin/llvm-strip llvm-strip /usr/bin/llvm-strip-${version}
update-alternatives \
--verbose \
--install /usr/bin/clang clang /usr/bin/clang-${version} ${priority} \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-${version} \
--slave /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${version} \
--slave /usr/bin/clang-cpp clang-cpp /usr/bin/clang-cpp-${version} \
--slave /usr/bin/ld.lld ld.lld /usr/bin/ld.lld-${version}
}
register_clang_version $1 $2
The above works with clang-12, llvm-12, and ld.lld-12
And will successfully build the Linux kernel even with thin LTO.
There are additions to the OP's list which are:
1. llvm-objcopy
2. llvm-strip
3. ld.lld
The rest where superfluous and deleted.
Those shims aren't superfluous at all, you probably want a debugger and formatter...
#!/usr/bin/env bash
# --slave /usr/bin/$1 $1 /usr/bin/$1-\${version} \\
function register_clang_version {
local version=$1
local priority=$2
update-alternatives \
--verbose \
--install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-${version} ${priority} \
--slave /usr/bin/llvm-ar llvm-ar /usr/bin/llvm-ar-${version} \
--slave /usr/bin/llvm-as llvm-as /usr/bin/llvm-as-${version} \
--slave /usr/bin/llvm-bcanalyzer llvm-bcanalyzer /usr/bin/llvm-bcanalyzer-${version} \
--slave /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${version} \
--slave /usr/bin/llvm-diff llvm-diff /usr/bin/llvm-diff-${version} \
--slave /usr/bin/llvm-dis llvm-dis /usr/bin/llvm-dis-${version} \
--slave /usr/bin/llvm-dwarfdump llvm-dwarfdump /usr/bin/llvm-dwarfdump-${version} \
--slave /usr/bin/llvm-extract llvm-extract /usr/bin/llvm-extract-${version} \
--slave /usr/bin/llvm-link llvm-link /usr/bin/llvm-link-${version} \
--slave /usr/bin/llvm-mc llvm-mc /usr/bin/llvm-mc-${version} \
--slave /usr/bin/llvm-nm llvm-nm /usr/bin/llvm-nm-${version} \
--slave /usr/bin/llvm-objdump llvm-objdump /usr/bin/llvm-objdump-${version} \
--slave /usr/bin/llvm-ranlib llvm-ranlib /usr/bin/llvm-ranlib-${version} \
--slave /usr/bin/llvm-readobj llvm-readobj /usr/bin/llvm-readobj-${version} \
--slave /usr/bin/llvm-rtdyld llvm-rtdyld /usr/bin/llvm-rtdyld-${version} \
--slave /usr/bin/llvm-size llvm-size /usr/bin/llvm-size-${version} \
--slave /usr/bin/llvm-stress llvm-stress /usr/bin/llvm-stress-${version} \
--slave /usr/bin/llvm-symbolizer llvm-symbolizer /usr/bin/llvm-symbolizer-${version} \
--slave /usr/bin/llvm-tblgen llvm-tblgen /usr/bin/llvm-tblgen-${version} \
--slave /usr/bin/llvm-objcopy llvm-objcopy /usr/bin/llvm-objcopy-${version} \
--slave /usr/bin/llvm-strip llvm-strip /usr/bin/llvm-strip-${version}
update-alternatives \
--verbose \
--install /usr/bin/clang clang /usr/bin/clang-${version} ${priority} \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-${version} \
--slave /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${version} \
--slave /usr/bin/clang-cpp clang-cpp /usr/bin/clang-cpp-${version} \
--slave /usr/bin/clang-check clang-check /usr/bin/clang-check-${version} \
--slave /usr/bin/clang-cl clang-cl /usr/bin/clang-cl-${version} \
--slave /usr/bin/ld.lld ld.lld /usr/bin/ld.lld-${version} \
--slave /usr/bin/lld lld /usr/bin/lld-${version} \
--slave /usr/bin/lld-link lld-link /usr/bin/lld-link-${version} \
--slave /usr/bin/clang-format clang-format /usr/bin/clang-format-${version} \
--slave /usr/bin/clang-format-diff clang-format-diff /usr/bin/clang-format-diff-${version} \
--slave /usr/bin/clang-include-fixer clang-include-fixer /usr/bin/clang-include-fixer-${version} \
--slave /usr/bin/clang-offload-bundler clang-offload-bundler /usr/bin/clang-offload-bundler-${version} \
--slave /usr/bin/clang-query clang-query /usr/bin/clang-query-${version} \
--slave /usr/bin/clang-rename clang-rename /usr/bin/clang-rename-${version} \
--slave /usr/bin/clang-reorder-fields clang-reorder-fields /usr/bin/clang-reorder-fields-${version} \
--slave /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-${version} \
--slave /usr/bin/lldb lldb /usr/bin/lldb-${version} \
--slave /usr/bin/lldb-server lldb-server /usr/bin/lldb-server-${version}
}
register_clang_version $1 $2
[2022-09-20] Added the clang language server: clangd
#!/usr/bin/env bash
# --slave /usr/bin/$1 $1 /usr/bin/$1-\${version} \\
function register_clang_version {
local version=$1
local priority=$2
update-alternatives \
--verbose \
--install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-${version} ${priority} \
--slave /usr/bin/llvm-ar llvm-ar /usr/bin/llvm-ar-${version} \
--slave /usr/bin/llvm-as llvm-as /usr/bin/llvm-as-${version} \
--slave /usr/bin/llvm-bcanalyzer llvm-bcanalyzer /usr/bin/llvm-bcanalyzer-${version} \
--slave /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${version} \
--slave /usr/bin/llvm-diff llvm-diff /usr/bin/llvm-diff-${version} \
--slave /usr/bin/llvm-dis llvm-dis /usr/bin/llvm-dis-${version} \
--slave /usr/bin/llvm-dwarfdump llvm-dwarfdump /usr/bin/llvm-dwarfdump-${version} \
--slave /usr/bin/llvm-extract llvm-extract /usr/bin/llvm-extract-${version} \
--slave /usr/bin/llvm-link llvm-link /usr/bin/llvm-link-${version} \
--slave /usr/bin/llvm-mc llvm-mc /usr/bin/llvm-mc-${version} \
--slave /usr/bin/llvm-nm llvm-nm /usr/bin/llvm-nm-${version} \
--slave /usr/bin/llvm-objdump llvm-objdump /usr/bin/llvm-objdump-${version} \
--slave /usr/bin/llvm-ranlib llvm-ranlib /usr/bin/llvm-ranlib-${version} \
--slave /usr/bin/llvm-readobj llvm-readobj /usr/bin/llvm-readobj-${version} \
--slave /usr/bin/llvm-rtdyld llvm-rtdyld /usr/bin/llvm-rtdyld-${version} \
--slave /usr/bin/llvm-size llvm-size /usr/bin/llvm-size-${version} \
--slave /usr/bin/llvm-stress llvm-stress /usr/bin/llvm-stress-${version} \
--slave /usr/bin/llvm-symbolizer llvm-symbolizer /usr/bin/llvm-symbolizer-${version} \
--slave /usr/bin/llvm-tblgen llvm-tblgen /usr/bin/llvm-tblgen-${version} \
--slave /usr/bin/llvm-objcopy llvm-objcopy /usr/bin/llvm-objcopy-${version} \
--slave /usr/bin/llvm-strip llvm-strip /usr/bin/llvm-strip-${version}
update-alternatives \
--verbose \
--install /usr/bin/clang clang /usr/bin/clang-${version} ${priority} \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-${version} \
--slave /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${version} \
--slave /usr/bin/clang-cpp clang-cpp /usr/bin/clang-cpp-${version} \
--slave /usr/bin/clang-check clang-check /usr/bin/clang-check-${version} \
--slave /usr/bin/clang-cl clang-cl /usr/bin/clang-cl-${version} \
--slave /usr/bin/ld.lld ld.lld /usr/bin/ld.lld-${version} \
--slave /usr/bin/lld lld /usr/bin/lld-${version} \
--slave /usr/bin/lld-link lld-link /usr/bin/lld-link-${version} \
--slave /usr/bin/clang-format clang-format /usr/bin/clang-format-${version} \
--slave /usr/bin/clang-format-diff clang-format-diff /usr/bin/clang-format-diff-${version} \
--slave /usr/bin/clang-include-fixer clang-include-fixer /usr/bin/clang-include-fixer-${version} \
--slave /usr/bin/clang-offload-bundler clang-offload-bundler /usr/bin/clang-offload-bundler-${version} \
--slave /usr/bin/clang-query clang-query /usr/bin/clang-query-${version} \
--slave /usr/bin/clang-rename clang-rename /usr/bin/clang-rename-${version} \
--slave /usr/bin/clang-reorder-fields clang-reorder-fields /usr/bin/clang-reorder-fields-${version} \
--slave /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-${version} \
--slave /usr/bin/lldb lldb /usr/bin/lldb-${version} \
--slave /usr/bin/lldb-server lldb-server /usr/bin/lldb-server-${version} \
--slave /usr/bin/clangd clangd /usr/bin/clangd-${version}
}
register_clang_version $1 $2
Thank you. Compact and generic version, with all the files "/usr/bin/*-20" installed by clang 20 on Ubuntu/Debian (https://apt.llvm.org/)
#!/bin/bash
# 241229
# add clang ${version} to Ubuntu
update_alternatives() {
local version=${1}
local priority=${2}
local master=${3}
local slaves=${4}
local path=${5}
local cmdln
cmdln="--verbose --install ${path}${master} ${master} ${path}${master}-${version} ${priority}"
for slave in ${slaves}; do
cmdln="${cmdln} --slave ${path}${slave} ${slave} ${path}${slave}-${version}"
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/"
sudo apt update
# download and launch the setup script
curl -sSL https://apt.llvm.org/llvm.sh | sudo bash -s ${version}
# curl -sSL https://apt.llvm.org/llvm.sh | sudo bash -s ${version} all
# configure with update-alternatives
master="llvm-config"
# up to v17
slaves="llvm-addr2line llvm-ar llvm-as llvm-bcanalyzer llvm-bitcode-strip llvm-cat llvm-cfi-verify llvm-cov llvm-c-test 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-opt-report llvm-otool llvm-pdbutil llvm-PerfectShuffle llvm-profdata llvm-profgen llvm-ranlib llvm-rc llvm-readelf llvm-readobj 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"
# v18 and v19
slaves="llvm-addr2line llvm-ar llvm-as llvm-bcanalyzer llvm-bitcode-strip llvm-cat llvm-cfi-verify llvm-cov llvm-c-test 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-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-remarkutil llvm-rtdyld llvm-sim llvm-size llvm-split llvm-stress llvm-strings llvm-strip llvm-symbolizer llvm-tblgen llvm-tli-checker llvm-undname llvm-windres llvm-xray"
# v20
slaves="llvm-addr2line llvm-ar llvm-as llvm-bcanalyzer llvm-bitcode-strip llvm-cat llvm-cfi-verify llvm-cgdata llvm-cov llvm-c-test llvm-ctxprof-util 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-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-remarkutil llvm-rtdyld llvm-sim llvm-size llvm-split llvm-stress llvm-strings llvm-strip llvm-symbolizer llvm-tblgen llvm-tli-checker llvm-undname llvm-windres llvm-xray"
update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}"
master="clang"
# up to v17
slaves="asan_symbolize bugpoint clang++ clang-cpp clangd count dsymutil FileCheck ld64.lld ld.lld llc lld lldb lldb-argdumper lldb-instr lldb-server lldb-vscode lld-link lli lli-child-target not obj2yaml opt sanstats split-file UnicodeNameMappingGenerator verify-uselistorder wasm-ld yaml2obj yaml-bench"
# v18
slaves="asan_symbolize bugpoint clang++ clang-cpp clangd count dsymutil FileCheck ld64.lld ld.lld llc lld lldb lldb-argdumper lldb-dap lldb-instr lldb-server lld-link lli lli-child-target not obj2yaml opt sanstats split-file UnicodeNameMappingGenerator verify-uselistorder wasm-ld yaml2obj yaml-bench"
# v19 and v20
slaves="asan_symbolize bugpoint clang++ clang-cpp clangd count dsymutil FileCheck ld64.lld ld.lld llc lld lldb lldb-argdumper lldb-dap lldb-instr lldb-server lld-link lli lli-child-target not obj2yaml opt reduce-chunk-list sanstats split-file UnicodeNameMappingGenerator verify-uselistorder wasm-ld yaml2obj yaml-bench"
update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}"
exit
# to uninstall a Clang version
# LLVM_VERSION=18
# sudo apt purge -y clang-${LLVM_VERSION} lldb-${LLVM_VERSION} lld-${LLVM_VERSION} clangd-${LLVM_VERSION} && sudo apt autoremove -y
# sudo update-alternatives --config clang
# sudo update-alternatives --config llvm-config
# to generate the list of slaves on a clean Ubuntu vm
sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo apt autoclean
ls /usr/bin > usr_bin_orig
version=20
curl -sSL https://apt.llvm.org/llvm.sh | sudo bash -s "$version"
# curl -sSL https://apt.llvm.org/llvm.sh | sudo bash -s "$version" all
ls /usr/bin > usr_bin_new
diff usr_bin_new usr_bin_orig | awk -v ver="$version" '/^< (llvm-).*-'"$version"'$/ && !/llvm-config-'"$version"'$/ {gsub("-" ver,""); printf "%s ", $2} END {print ""}' > slaves_llvm
diff usr_bin_new usr_bin_orig | awk -v ver="$version" '/^< / && !/llvm-/ && !/clang-'"$version"'$/ && /-'"$version"'$/ {gsub("^< ",""); gsub("-" ver "$",""); printf "%s ", $0} END {print ""}' > slaves_clang
# check if an application is already a master in:
# /var/lib/dpkg/alternatives/
Thanks, @mnesarco; it works great.
...
master="clang"
slaves="analyze-build asan_symbolize bugpoint c-index-test clang++ clang-apply-replacements clang-change-namespace clang-check clang-cl clang-cpp clangd clang-doc clang-extdef-mapping clang-format clang-format-diff clang-include-fixer 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-tidy count diagtool dsymutil FileCheck find-all-symbols git-clang-format hmaptool hwasan_symbolize intercept-build ld64.lld ld.lld llc lld lldb lldb-argdumper lldb-instr lldb-server lldb-vscode lld-link lli lli-child-target modularize not obj2yaml opt pp-trace run-clang-tidy sancov sanstats scan-build scan-build-py scan-view split-file UnicodeNameMappingGenerator verify-uselistorder wasm-ld yaml2obj yaml-bench"update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}"
This is the only correct one. The others are all missing opt
, llc
etc. Not sure how those users got their toolchain working without it.
This is the only correct one. The others are all missing opt, llc etc. Not sure how those users got their toolchain working without it.
To be honest the original script is 5 years old, but still a great reference. I wrote my version two months ago checking the differences on a clean Ubuntu before and after installing clang-15 llvm-15.
Thanks @ppigazzini. Your script at https://gist.github.com/junkdog/70231d6953592cd6f27def59fe19e50d?permalink_comment_id=4336074#gistcomment-4336074 seems to work out-of-the-box on Debian 12, too.
This is the only correct one. The others are all missing opt, llc etc. Not sure how those users got their toolchain working without it.
To be honest the original script is 5 years old, but still a great reference. I wrote my version two months ago checking the differences on a clean Ubuntu before and after installing clang-15 llvm-15.
Yeah I've had to update my script as well over the years, this is what I'm using now a days with LLVM 15.0.7.
This is on Ubuntu 22.04+ Builds Linux kernel with LTO.
#!/usr/bin/env bash
# --slave /usr/bin/$1 $1 /usr/bin/$1-\${version} \\
function register_clang_version {
local version=$1
local priority=$2
update-alternatives \
--verbose \
--install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-${version} ${priority} \
--slave /usr/bin/llvm-ar llvm-ar /usr/bin/llvm-ar-${version} \
--slave /usr/bin/llvm-as llvm-as /usr/bin/llvm-as-${version} \
--slave /usr/bin/llvm-bcanalyzer llvm-bcanalyzer /usr/bin/llvm-bcanalyzer-${version} \
--slave /usr/bin/llvm-c-test llvm-c-test /usr/bin/llvm-c-test-${version} \
--slave /usr/bin/llvm-cat llvm-cat /usr/bin/llvm-cat-${version} \
--slave /usr/bin/llvm-cfi-verify llvm-cfi-verify /usr/bin/llvm-cfi-verify-${version} \
--slave /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${version} \
--slave /usr/bin/llvm-cvtres llvm-cvtres /usr/bin/llvm-cvtres-${version} \
--slave /usr/bin/llvm-cxxdump llvm-cxxdump /usr/bin/llvm-cxxdump-${version} \
--slave /usr/bin/llvm-cxxfilt llvm-cxxfilt /usr/bin/llvm-cxxfilt-${version} \
--slave /usr/bin/llvm-diff llvm-diff /usr/bin/llvm-diff-${version} \
--slave /usr/bin/llvm-dis llvm-dis /usr/bin/llvm-dis-${version} \
--slave /usr/bin/llvm-dlltool llvm-dlltool /usr/bin/llvm-dlltool-${version} \
--slave /usr/bin/llvm-dwarfdump llvm-dwarfdump /usr/bin/llvm-dwarfdump-${version} \
--slave /usr/bin/llvm-dwp llvm-dwp /usr/bin/llvm-dwp-${version} \
--slave /usr/bin/llvm-exegesis llvm-exegesis /usr/bin/llvm-exegesis-${version} \
--slave /usr/bin/llvm-extract llvm-extract /usr/bin/llvm-extract-${version} \
--slave /usr/bin/llvm-lib llvm-lib /usr/bin/llvm-lib-${version} \
--slave /usr/bin/llvm-link llvm-link /usr/bin/llvm-link-${version} \
--slave /usr/bin/llvm-lto llvm-lto /usr/bin/llvm-lto-${version} \
--slave /usr/bin/llvm-lto2 llvm-lto2 /usr/bin/llvm-lto2-${version} \
--slave /usr/bin/llvm-mc llvm-mc /usr/bin/llvm-mc-${version} \
--slave /usr/bin/llvm-mca llvm-mca /usr/bin/llvm-mca-${version} \
--slave /usr/bin/llvm-modextract llvm-modextract /usr/bin/llvm-modextract-${version} \
--slave /usr/bin/llvm-mt llvm-mt /usr/bin/llvm-mt-${version} \
--slave /usr/bin/llvm-nm llvm-nm /usr/bin/llvm-nm-${version} \
--slave /usr/bin/llvm-objcopy llvm-objcopy /usr/bin/llvm-objcopy-${version} \
--slave /usr/bin/llvm-objdump llvm-objdump /usr/bin/llvm-objdump-${version} \
--slave /usr/bin/llvm-opt-report llvm-opt-report /usr/bin/llvm-opt-report-${version} \
--slave /usr/bin/llvm-pdbutil llvm-pdbutil /usr/bin/llvm-pdbutil-${version} \
--slave /usr/bin/llvm-PerfectShuffle llvm-PerfectShuffle /usr/bin/llvm-PerfectShuffle-${version} \
--slave /usr/bin/llvm-profdata llvm-profdata /usr/bin/llvm-profdata-${version} \
--slave /usr/bin/llvm-ranlib llvm-ranlib /usr/bin/llvm-ranlib-${version} \
--slave /usr/bin/llvm-rc llvm-rc /usr/bin/llvm-rc-${version} \
--slave /usr/bin/llvm-readelf llvm-readelf /usr/bin/llvm-readelf-${version} \
--slave /usr/bin/llvm-readobj llvm-readobj /usr/bin/llvm-readobj-${version} \
--slave /usr/bin/llvm-rtdyld llvm-rtdyld /usr/bin/llvm-rtdyld-${version} \
--slave /usr/bin/llvm-size llvm-size /usr/bin/llvm-size-${version} \
--slave /usr/bin/llvm-split llvm-split /usr/bin/llvm-split-${version} \
--slave /usr/bin/llvm-stress llvm-stress /usr/bin/llvm-stress-${version} \
--slave /usr/bin/llvm-strings llvm-strings /usr/bin/llvm-strings-${version} \
--slave /usr/bin/llvm-strip llvm-strip /usr/bin/llvm-strip-${version} \
--slave /usr/bin/llvm-symbolizer llvm-symbolizer /usr/bin/llvm-symbolizer-${version} \
--slave /usr/bin/llvm-tblgen llvm-tblgen /usr/bin/llvm-tblgen-${version} \
--slave /usr/bin/llvm-undname llvm-undname /usr/bin/llvm-undname-${version} \
--slave /usr/bin/llvm-xray llvm-xray /usr/bin/llvm-xray-${version}
update-alternatives \
--verbose \
--install /usr/bin/clang clang /usr/bin/clang-${version} ${priority} \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-${version} \
--slave /usr/bin/clang-format clang-format /usr/bin/clang-format-${version} \
--slave /usr/bin/clang-cpp clang-cpp /usr/bin/clang-cpp-${version} \
--slave /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${version} \
--slave /usr/bin/bugpoint bugpoint /usr/bin/bugpoint-${version} \
--slave /usr/bin/dsymutil dsymutil /usr/bin/dsymutil-${version} \
--slave /usr/bin/lld lld /usr/bin/lld-${version} \
--slave /usr/bin/ld.lld ld.lld /usr/bin/ld.lld-${version} \
--slave /usr/bin/lld-link lld-link /usr/bin/lld-link-${version} \
--slave /usr/bin/llc llc /usr/bin/llc-${version} \
--slave /usr/bin/lli lli /usr/bin/lli-${version} \
--slave /usr/bin/obj2yaml obj2yaml /usr/bin/obj2yaml-${version} \
--slave /usr/bin/opt opt /usr/bin/opt-${version} \
--slave /usr/bin/sanstats sanstats /usr/bin/sanstats-${version} \
--slave /usr/bin/verify-uselistorder verify-uselistorder /usr/bin/verify-uselistorder-${version} \
--slave /usr/bin/wasm-ld wasm-ld /usr/bin/wasm-ld-${version} \
--slave /usr/bin/yaml2obj yaml2obj /usr/bin/yaml2obj-${version}
}
register_clang_version $1 $2
There are plenty llvm related tools (more than 100).
I‘ve wrote a script to glob all llvm tools instead of manually specify them , tested on Ubuntu 22.04 x86_64.
It would automatically glob all the tools in /lib/llvm-${VERSION}
as slave commands of /usr/bin/clang-{VERSION}
To use it (requires sudo permission):
wget https://raw.githubusercontent.com/ShangjinTang/dotfiles/05ef87daae29475244c276db5d406b58c52be445/linux/ubuntu/22.04/bin/update-alternatives-clang
sudo bash ./update-alternatives-clang
Result:
[Adding alternative /usr/bin/clang-17 ...]
Master command: clang-17
Slave commands: amdgpu-arch-17 analyze-build-17 bugpoint-17 c-index-test-17 clang++-17 clang-apply-replacements-17 clang-change-namespace-17 clang-check-17 clang-cl-17 clang-cpp-17 clangd-17 clang-doc-17 clang-extdef-mapping-17 clang-format-17 clang-include-cleaner-17 clang-include-fixer-17 clang-linker-wrapper-17 clang-move-17 clang-offload-bundler-17 clang-offload-packager-17 clang-pseudo-17 clang-query-17 clang-refactor-17 clang-rename-17 clang-reorder-fields-17 clang-repl-17 clang-scan-deps-17 clang-tblgen-17 clang-tidy-17 count-17 diagtool-17 dsymutil-17 FileCheck-17 find-all-symbols-17 git-clang-format-17 hmaptool-17 intercept-build-17 ld64.lld-17 ld.lld-17 llc-17 lld-17 lldb-17 lldb-argdumper-17 lldb-instr-17 lldb-server-17 lldb-vscode-17 lld-link-17 lli-17 lli-child-target-17 llvm-addr2line-17 llvm-ar-17 llvm-as-17 llvm-bcanalyzer-17 llvm-bitcode-strip-17 llvm-cat-17 llvm-cfi-verify-17 llvm-config-17 llvm-cov-17 llvm-c-test-17 llvm-cvtres-17 llvm-cxxdump-17 llvm-cxxfilt-17 llvm-cxxmap-17 llvm-debuginfo-analyzer-17 llvm-debuginfod-17 llvm-debuginfod-find-17 llvm-diff-17 llvm-dis-17 llvm-dlltool-17 llvm-dwarfdump-17 llvm-dwarfutil-17 llvm-dwp-17 llvm-exegesis-17 llvm-extract-17 llvm-gsymutil-17 llvm-ifs-17 llvm-install-name-tool-17 llvm-jitlink-17 llvm-jitlink-executor-17 llvm-lib-17 llvm-libtool-darwin-17 llvm-link-17 llvm-lipo-17 llvm-lto-17 llvm-lto2-17 llvm-mc-17 llvm-mca-17 llvm-ml-17 llvm-modextract-17 llvm-mt-17 llvm-nm-17 llvm-objcopy-17 llvm-objdump-17 llvm-omp-device-info-17 llvm-omp-kernel-replay-17 llvm-opt-report-17 llvm-otool-17 llvm-pdbutil-17 llvm-PerfectShuffle-17 llvm-profdata-17 llvm-profgen-17 llvm-ranlib-17 llvm-rc-17 llvm-readelf-17 llvm-readobj-17 llvm-reduce-17 llvm-remark-size-diff-17 llvm-remarkutil-17 llvm-rtdyld-17 llvm-sim-17 llvm-size-17 llvm-split-17 llvm-stress-17 llvm-strings-17 llvm-strip-17 llvm-symbolizer-17 llvm-tapi-diff-17 llvm-tblgen-17 llvm-tli-checker-17 llvm-undname-17 llvm-windres-17 llvm-xray-17 modularize-17 not-17 nvptx-arch-17 obj2yaml-17 opt-17 pp-trace-17 run-clang-tidy-17 sancov-17 sanstats-17 scan-build-17 scan-build-py-17 scan-view-17 split-file-17 UnicodeNameMappingGenerator-17 verify-uselistorder-17 wasm-ld-17 yaml2obj-17 yaml-bench-17
[Adding alternative /usr/bin/clang-17: succeeded]
[Adding alternative /usr/bin/clang-18 ...]
Master command: clang-18
Slave commands: amdgpu-arch-18 analyze-build-18 bugpoint-18 c-index-test-18 clang++-18 clang-apply-replacements-18 clang-change-namespace-18 clang-check-18 clang-cl-18 clang-cpp-18 clangd-18 clang-doc-18 clang-extdef-mapping-18 clang-format-18 clang-include-cleaner-18 clang-include-fixer-18 clang-linker-wrapper-18 clang-move-18 clang-offload-bundler-18 clang-offload-packager-18 clang-pseudo-18 clang-query-18 clang-refactor-18 clang-rename-18 clang-reorder-fields-18 clang-repl-18 clang-scan-deps-18 clang-tblgen-18 clang-tidy-18 count-18 diagtool-18 dsymutil-18 FileCheck-18 find-all-symbols-18 git-clang-format-18 hmaptool-18 intercept-build-18 ld64.lld-18 ld.lld-18 llc-18 lld-18 lld-link-18 lli-18 lli-child-target-18 llvm-addr2line-18 llvm-ar-18 llvm-as-18 llvm-bcanalyzer-18 llvm-bitcode-strip-18 llvm-cat-18 llvm-cfi-verify-18 llvm-config-18 llvm-cov-18 llvm-c-test-18 llvm-cvtres-18 llvm-cxxdump-18 llvm-cxxfilt-18 llvm-cxxmap-18 llvm-debuginfo-analyzer-18 llvm-debuginfod-18 llvm-debuginfod-find-18 llvm-diff-18 llvm-dis-18 llvm-dlltool-18 llvm-dwarfdump-18 llvm-dwarfutil-18 llvm-dwp-18 llvm-exegesis-18 llvm-extract-18 llvm-gsymutil-18 llvm-ifs-18 llvm-install-name-tool-18 llvm-jitlink-18 llvm-jitlink-executor-18 llvm-lib-18 llvm-libtool-darwin-18 llvm-link-18 llvm-lipo-18 llvm-lto-18 llvm-lto2-18 llvm-mc-18 llvm-mca-18 llvm-ml-18 llvm-modextract-18 llvm-mt-18 llvm-nm-18 llvm-objcopy-18 llvm-objdump-18 llvm-opt-report-18 llvm-otool-18 llvm-pdbutil-18 llvm-PerfectShuffle-18 llvm-profdata-18 llvm-profgen-18 llvm-ranlib-18 llvm-rc-18 llvm-readelf-18 llvm-readobj-18 llvm-readtapi-18 llvm-reduce-18 llvm-remarkutil-18 llvm-rtdyld-18 llvm-sim-18 llvm-size-18 llvm-split-18 llvm-stress-18 llvm-strings-18 llvm-strip-18 llvm-symbolizer-18 llvm-tblgen-18 llvm-tli-checker-18 llvm-undname-18 llvm-windres-18 llvm-xray-18 modularize-18 not-18 nvptx-arch-18 obj2yaml-18 opt-18 pp-trace-18 run-clang-tidy-18 sancov-18 sanstats-18 scan-build-18 scan-build-py-18 scan-view-18 split-file-18 UnicodeNameMappingGenerator-18 verify-uselistorder-18 wasm-ld-18 yaml2obj-18 yaml-bench-18
[Adding alternative /usr/bin/clang-18: succeeded]
======================================================================
clang alternative is set to: /usr/bin/clang-18
======================================================================
Info:
use 'sudo update-alternatives --config clang' to change default clang alternative
use 'sudo update-alternatives --remove clang /usr/bin/clang-*' to delete a clang alternative
use 'sudo update-alternatives --remove-all clang' to delete all clang alternatives
I had to add a bunch of other slaves to clang config, including clangd, clang-tidy, etc.
#!/usr/bin/env bash
# --slave /usr/bin/$1 $1 /usr/bin/$1-\${version} \\
function register_clang_version {
local version=$1
local priority=$2
update-alternatives \
--verbose \
--install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-${version} ${priority} \
--slave /usr/bin/llvm-ar llvm-ar /usr/bin/llvm-ar-${version} \
--slave /usr/bin/llvm-as llvm-as /usr/bin/llvm-as-${version} \
--slave /usr/bin/llvm-bcanalyzer llvm-bcanalyzer /usr/bin/llvm-bcanalyzer-${version} \
--slave /usr/bin/llvm-c-test llvm-c-test /usr/bin/llvm-c-test-${version} \
--slave /usr/bin/llvm-cat llvm-cat /usr/bin/llvm-cat-${version} \
--slave /usr/bin/llvm-cfi-verify llvm-cfi-verify /usr/bin/llvm-cfi-verify-${version} \
--slave /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${version} \
--slave /usr/bin/llvm-cvtres llvm-cvtres /usr/bin/llvm-cvtres-${version} \
--slave /usr/bin/llvm-cxxdump llvm-cxxdump /usr/bin/llvm-cxxdump-${version} \
--slave /usr/bin/llvm-cxxfilt llvm-cxxfilt /usr/bin/llvm-cxxfilt-${version} \
--slave /usr/bin/llvm-diff llvm-diff /usr/bin/llvm-diff-${version} \
--slave /usr/bin/llvm-dis llvm-dis /usr/bin/llvm-dis-${version} \
--slave /usr/bin/llvm-dlltool llvm-dlltool /usr/bin/llvm-dlltool-${version} \
--slave /usr/bin/llvm-dwarfdump llvm-dwarfdump /usr/bin/llvm-dwarfdump-${version} \
--slave /usr/bin/llvm-dwp llvm-dwp /usr/bin/llvm-dwp-${version} \
--slave /usr/bin/llvm-exegesis llvm-exegesis /usr/bin/llvm-exegesis-${version} \
--slave /usr/bin/llvm-extract llvm-extract /usr/bin/llvm-extract-${version} \
--slave /usr/bin/llvm-lib llvm-lib /usr/bin/llvm-lib-${version} \
--slave /usr/bin/llvm-link llvm-link /usr/bin/llvm-link-${version} \
--slave /usr/bin/llvm-lto llvm-lto /usr/bin/llvm-lto-${version} \
--slave /usr/bin/llvm-lto2 llvm-lto2 /usr/bin/llvm-lto2-${version} \
--slave /usr/bin/llvm-mc llvm-mc /usr/bin/llvm-mc-${version} \
--slave /usr/bin/llvm-mca llvm-mca /usr/bin/llvm-mca-${version} \
--slave /usr/bin/llvm-modextract llvm-modextract /usr/bin/llvm-modextract-${version} \
--slave /usr/bin/llvm-mt llvm-mt /usr/bin/llvm-mt-${version} \
--slave /usr/bin/llvm-nm llvm-nm /usr/bin/llvm-nm-${version} \
--slave /usr/bin/llvm-objcopy llvm-objcopy /usr/bin/llvm-objcopy-${version} \
--slave /usr/bin/llvm-objdump llvm-objdump /usr/bin/llvm-objdump-${version} \
--slave /usr/bin/llvm-opt-report llvm-opt-report /usr/bin/llvm-opt-report-${version} \
--slave /usr/bin/llvm-pdbutil llvm-pdbutil /usr/bin/llvm-pdbutil-${version} \
--slave /usr/bin/llvm-PerfectShuffle llvm-PerfectShuffle /usr/bin/llvm-PerfectShuffle-${version} \
--slave /usr/bin/llvm-profdata llvm-profdata /usr/bin/llvm-profdata-${version} \
--slave /usr/bin/llvm-ranlib llvm-ranlib /usr/bin/llvm-ranlib-${version} \
--slave /usr/bin/llvm-rc llvm-rc /usr/bin/llvm-rc-${version} \
--slave /usr/bin/llvm-readelf llvm-readelf /usr/bin/llvm-readelf-${version} \
--slave /usr/bin/llvm-readobj llvm-readobj /usr/bin/llvm-readobj-${version} \
--slave /usr/bin/llvm-rtdyld llvm-rtdyld /usr/bin/llvm-rtdyld-${version} \
--slave /usr/bin/llvm-size llvm-size /usr/bin/llvm-size-${version} \
--slave /usr/bin/llvm-split llvm-split /usr/bin/llvm-split-${version} \
--slave /usr/bin/llvm-stress llvm-stress /usr/bin/llvm-stress-${version} \
--slave /usr/bin/llvm-strings llvm-strings /usr/bin/llvm-strings-${version} \
--slave /usr/bin/llvm-strip llvm-strip /usr/bin/llvm-strip-${version} \
--slave /usr/bin/llvm-symbolizer llvm-symbolizer /usr/bin/llvm-symbolizer-${version} \
--slave /usr/bin/llvm-tblgen llvm-tblgen /usr/bin/llvm-tblgen-${version} \
--slave /usr/bin/llvm-undname llvm-undname /usr/bin/llvm-undname-${version} \
--slave /usr/bin/llvm-xray llvm-xray /usr/bin/llvm-xray-${version}
update-alternatives \
--verbose \
--install /usr/bin/clang clang /usr/bin/clang-${version} ${priority} \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-${version} \
--slave /usr/bin/clang-format clang-format /usr/bin/clang-format-${version} \
--slave /usr/bin/clang-cpp clang-cpp /usr/bin/clang-cpp-${version} \
--slave /usr/bin/clang-cl clang-cl /usr/bin/clang-cl-${version} \
--slave /usr/bin/clangd clangd /usr/bin/clangd-${version} \
--slave /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-${version} \
--slave /usr/bin/clang-check clang-check /usr/bin/clang-check-${version} \
--slave /usr/bin/clang-query clang-query /usr/bin/clang-query-${version} \
--slave /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${version} \
--slave /usr/bin/bugpoint bugpoint /usr/bin/bugpoint-${version} \
--slave /usr/bin/dsymutil dsymutil /usr/bin/dsymutil-${version} \
--slave /usr/bin/lld lld /usr/bin/lld-${version} \
--slave /usr/bin/ld.lld ld.lld /usr/bin/ld.lld-${version} \
--slave /usr/bin/lld-link lld-link /usr/bin/lld-link-${version} \
--slave /usr/bin/llc llc /usr/bin/llc-${version} \
--slave /usr/bin/lli lli /usr/bin/lli-${version} \
--slave /usr/bin/obj2yaml obj2yaml /usr/bin/obj2yaml-${version} \
--slave /usr/bin/opt opt /usr/bin/opt-${version} \
--slave /usr/bin/sanstats sanstats /usr/bin/sanstats-${version} \
--slave /usr/bin/verify-uselistorder verify-uselistorder /usr/bin/verify-uselistorder-${version} \
--slave /usr/bin/wasm-ld wasm-ld /usr/bin/wasm-ld-${version} \
--slave /usr/bin/yaml2obj yaml2obj /usr/bin/yaml2obj-${version}
}
register_clang_version $1 $2
Did an audit of the llvm 19 family of packages on Debian from apt.llvm.org and found the below to be exhaustive, and separated by package, whereas the above conflate multiple packages together:
Here's the script snippet
update-alternatives-many() {
local exe="$1" version="$2" priority="$3"
shift 3
local args=(--install "/usr/bin/${exe}" "${exe}" "/usr/bin/${exe}-${version}" "${priority}")
local slave slave_tgt
for slave in "$@"; do
if [[ "$slave" = *.py ]]; then
slave_tgt="${slave%.py}-${version}.py"
else
slave_tgt="${slave}-${version}"
fi
args+=(--slave "/usr/bin/${slave}" "${slave}" "/usr/bin/${slave_tgt}")
done
update-alternatives "${args[@]}"
}
update-alternatives-llvm() {
local version="$1" priority="${2:-100}"
update-alternatives-many llvm-bolt "${version}" "${priority}" \
llvm-bolt-heatmap llvm-boltdiff merge-fdata perf2bolt
update-alternatives-many clang "${version}" "${priority}" \
clang++ clang-cpp asan_symbolize
update-alternatives-many clang-format "${version}" "${priority}" \
clang-format-diff git-clang-format
update-alternatives-many clang-tidy "${version}" "${priority}" \
clang-tidy-diff.py run-clang-tidy run-clang-tidy.py
# clang-tools
update-alternatives-many clang-check "${version}" "${priority}" \
amdgpu-arch analyze-build c-index-test clang-apply-replacements \
clang-change-namespace clang-cl clang-doc clang-extdef-mapping \
clang-include-cleaner clang-include-fixer clang-installapi \
clang-linker-wrapper clang-move clang-nvlink-wrapper \
clang-offload-bundler clang-offload-packager clang-pseudo \
clang-query clang-refactor clang-rename clang-reorder-fields \
clang-repl clang-scan-deps clang-tblgen diagtool find-all-symbols \
hmaptool hwasan_symbolize intercept-build modularize nvptx-arch \
pp-trace sancov scan-build scan-build-py scan-view
update-alternatives-many clangd "${version}" "${priority}"
# flang
update-alternatives-many flang-new "${version}" "${priority}" \
bbc f18-parse-demo fir-opt tco
# libomp-dev
update-alternatives-many llvm-omp-device-info "${version}" "${priority}" \
llvm-omp-kernel-replay
update-alternatives-many lld "${version}" "${priority}" \
ld.lld ld64.lld lld-link wasm-ld
update-alternatives-many lldb "${version}" "${priority}" \
lldb-argdumper lldb-dap lldb-instr lldb-server
# llvm-runtime
update-alternatives-many lli "${version}" "${priority}" \
lli-child-target
# llvm-tools
update-alternatives-many not "${version}" "${priority}" \
FileCheck UnicodeNameMappingGenerator count \
split-file yaml-bench
# llvm
update-alternatives-many llvm-config "${version}" "${priority}" \
bugpoint dsymutil llc llvm-PerfectShuffle llvm-addr2line \
llvm-ar llvm-as llvm-bcanalyzer llvm-bitcode-strip 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-opt-report llvm-otool llvm-pdbutil llvm-profdata \
llvm-profgen llvm-ranlib llvm-rc llvm-readelf llvm-readobj \
llvm-readtapi llvm-reduce llvm-remarkutil llvm-rtdyld llvm-sim \
llvm-size llvm-split llvm-stress llvm-strings llvm-strip \
llvm-symbolizer llvm-tblgen llvm-tli-checker llvm-undname \
llvm-windres llvm-xray obj2yaml opt reduce-chunk-list sanstats \
verify-uselistorder yaml2obj
# mlir-tools
update-alternatives-many mlir-tblgen "${version}" "${priority}" \
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 tblgen-lsp-server tblgen-to-irdl
}
Yes, thanks, finally got llvm/clang toolchain versions on ubuntu