Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docker/.dockerignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
*
!update_llvm_ver_alternatives.sh
25 changes: 17 additions & 8 deletions docker/Dockerfile.ubuntu.vcpkg
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
ARG DISTRO_VERSION=focal
ARG LLVM_VERSION=14
ARG LLVM_VERSION=16

ARG BUILD_BASE=ubuntu:${DISTRO_VERSION}
FROM ${BUILD_BASE} as base
ARG DISTRO_VERSION
ARG LLVM_VERSION

COPY update_llvm_ver_alternatives.sh /

# All build dependencies for vcpkg packages
# First row is build dependencies for lifting tools
# Second row is toolchain and build programs
Expand All @@ -15,18 +17,26 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get update && apt-get install --yes apt-utils && apt-get upgrade --yes && \
apt-get install --yes --no-install-recommends apt-transport-https software-properties-common gnupg ca-certificates wget && \
apt-add-repository ppa:git-core/ppa --yes && \
\
wget "https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1-linux-$(uname -m).sh" && \
/bin/bash cmake-*.sh --skip-license --prefix=/usr/local && rm cmake-*.sh && \
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \
echo "deb http://apt.llvm.org/${DISTRO_VERSION}/ llvm-toolchain-${DISTRO_VERSION}-${LLVM_VERSION} main" >> /etc/apt/sources.list && \
echo "deb-src http://apt.llvm.org/${DISTRO_VERSION}/ llvm-toolchain-${DISTRO_VERSION}-${LLVM_VERSION} main" >> /etc/apt/sources.list && \
\
wget https://apt.llvm.org/llvm.sh && \
chmod +x llvm.sh && \
./llvm.sh ${LLVM_VERSION} clang lld && \
/update_llvm_ver_alternatives.sh ${LLVM_VERSION} 1000 && \
update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.lld" 20 && \
update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.bfd" 10 && \
\
apt-get update && apt-get upgrade --yes && \
apt-get install --yes --no-install-recommends \
"$( [ "$(uname -m)" != "aarch64" ] && echo "g++-multilib")" \
"$( [ "$(uname -m)" = "aarch64" ] && echo "libstdc++-*-dev:armhf")" \
libtinfo-dev libzstd-dev python3-pip python3-setuptools python-setuptools \
build-essential g++ gcc clang lld clang-${LLVM_VERSION} lld-${LLVM_VERSION} ninja-build \
build-essential binutils-multiarch g++ gcc ninja-build \
pixz xz-utils make rpm curl unzip tar git zip python3 pkg-config && \
apt-get install --yes --no-install-recommends \
"$( [ "$(uname -m)" = "x86_64" ] && echo "g++-multilib")" \
"$( [ "$(uname -m)" = "x86_64" ] && echo "libstdc++-$(gcc -dumpversion | cut -f1 -d.)-dev-arm64-cross")" \
"$( [ "$(uname -m)" = "aarch64" ] && echo "libstdc++-*-dev:armhf")" && \
apt-get clean --yes && \
rm -rf /var/lib/apt/lists/* && \
\
Expand All @@ -37,7 +47,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
cmake --build build --target install && \
cd .. && rm -rf ccache-ccache-*

# Default to system clang because things will break if mixing objects compiled with system clang and clang-14
ENV CC=/usr/bin/clang \
CXX=/usr/bin/clang++

Expand Down
41 changes: 41 additions & 0 deletions docker/update_llvm_ver_alternatives.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/usr/bin/env bash
# Modified from https://gist.github.com/junkdog/70231d6953592cd6f27def59fe19e50d?permalink_comment_id=4336074#gistcomment-4336074

sudo="sudo"
if [ "$(whoami)" = "root" ] || ! command -v sudo &> /dev/null ; then
sudo=""
fi

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/"

master="llvm-config"
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-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-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-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="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}"