Skip to content

Instantly share code, notes, and snippets.

@junkdog
Created November 18, 2017 20:29
Show Gist options
  • Save junkdog/70231d6953592cd6f27def59fe19e50d to your computer and use it in GitHub Desktop.
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
@skull-squadron
Copy link

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
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment