Skip to content

Commit 4e6afcb

Browse files
authored
Docker: Use LLVM 16 toolchain and support arm64 crosscompile (#1019)
1 parent 54ac34a commit 4e6afcb

File tree

3 files changed

+59
-8
lines changed

3 files changed

+59
-8
lines changed

docker/.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
*
2+
!update_llvm_ver_alternatives.sh

docker/Dockerfile.ubuntu.vcpkg

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
ARG DISTRO_VERSION=focal
2-
ARG LLVM_VERSION=14
2+
ARG LLVM_VERSION=16
33

44
ARG BUILD_BASE=ubuntu:${DISTRO_VERSION}
55
FROM ${BUILD_BASE} as base
66
ARG DISTRO_VERSION
77
ARG LLVM_VERSION
88

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

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/usr/bin/env bash
2+
# Modified from https://gist.github.com/junkdog/70231d6953592cd6f27def59fe19e50d?permalink_comment_id=4336074#gistcomment-4336074
3+
4+
sudo="sudo"
5+
if [ "$(whoami)" = "root" ] || ! command -v sudo &> /dev/null ; then
6+
sudo=""
7+
fi
8+
9+
update_alternatives() {
10+
local version=${1}
11+
local priority=${2}
12+
local master=${3}
13+
local slaves=${4}
14+
local path=${5}
15+
local cmdln
16+
17+
cmdln="--verbose --install ${path}${master} ${master} ${path}${master}-${version} ${priority}"
18+
for slave in ${slaves}; do
19+
cmdln="${cmdln} --slave ${path}${slave} ${slave} ${path}${slave}-${version}"
20+
done
21+
${sudo} update-alternatives ${cmdln}
22+
}
23+
24+
if [[ ${#} -ne 2 ]]; then
25+
echo usage: "${0}" clang_version priority
26+
exit 1
27+
fi
28+
29+
version=${1}
30+
priority=${2}
31+
path="/usr/bin/"
32+
33+
master="llvm-config"
34+
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"
35+
36+
update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}"
37+
38+
master="clang"
39+
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"
40+
41+
update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}"

0 commit comments

Comments
 (0)