Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save zchrissirhcz/51ea4e43f6d35df9977165d519a30acd to your computer and use it in GitHub Desktop.
Save zchrissirhcz/51ea4e43f6d35df9977165d519a30acd to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
#
# 首先,请安装 llvm 套件
# 查看: https://apt.llvm.org/
# 例如 ubuntu 22.04, 执行:
# wget https://apt.llvm.org/llvm.sh
# 查看文件 llmv.sh 内容, 看到稳定版是 19
# 执行安装:
# chmod +x llvm.sh
# sudo ./llvm.sh all
#
#
# 如果 which clang 显示为 /usr/bin/clang, 并且 ls -al /usr/bin/clang 指向 /usr/bin/clang-16, 并且希望改为指向 /usr/bin/clang-19
# 那么执行 sudo update-alternatives --config clang
# 这会删除原本的链接
#
# 对于其他的包,如 clang-format, clang-tidy, clangd 等,如果执行当前脚本报错, 都这样执行一次
# sudo update-alternatives --config clang-format
# sudo update-alternatives --config clang-tidy
# sudo update-alternatives --config clangd
# ...
#
# 最终执行: sudo bash ./update-alternatives-clang.sh 19 1
# 其中 19 是当前安装的 llvm 套件的版本。
#
#
# --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/lldb lldb /usr/bin/lldb-${version} \
--slave /usr/bin/lldb-server lldb-server /usr/bin/lldb-server-${version} \
--slave /usr/bin/scan-build scan-build /usr/bin/scan-build-${version} \
--slave /usr/bin/scan-view scan-view /usr/bin/scan-view-${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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment