From 2697b54d6fd7d073dbb34d4590a798d153ee1328 Mon Sep 17 00:00:00 2001 From: Jayanth Dodderi Chidanand Date: Sun, 13 Jul 2025 21:53:58 +0100 Subject: [PATCH] docker: update Shrinkwrap image to install LLVM/Clang v20 This patch replaces the manual tarball-based installation of the aarch64 LLVM toolchain with an automated setup using the official apt.llvm.org repository. This update is required to keep the Shrinkwrap Docker environment aligned with the Hafnium project's transition to Clang v20 and ensure consistent toolchain behavior across both projects. Legacy environment variables and download logic have been removed from "build.sh" accordingly. Signed-off-by: Jayanth Dodderi Chidanand --- docker/Dockerfile.full | 32 ++++++++++++++++++-------------- docker/build.sh | 11 ----------- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/docker/Dockerfile.full b/docker/Dockerfile.full index b4516a7..64dee3f 100644 --- a/docker/Dockerfile.full +++ b/docker/Dockerfile.full @@ -30,21 +30,25 @@ RUN cd /tools \ ENV TCH_PATH_AARCH32="/tools/${TCH_PATH_AARCH32}" ENV PATH="${TCH_PATH_AARCH32}:${PATH}" -# Install aarch64 llvm toolchain and dependencies. -RUN apt-get install --assume-yes --no-install-recommends --option=debug::pkgProblemResolver=yes \ - libncurses5 +# LLVM/Clang Installation. +# Set the LLVM version (keep in sync with Hafnium Project master requirements) +ENV LLVM_VERSION=20 -ARG TCH_LLVM_PKG_NAME -ARG TCH_LLVM_PATH -COPY assets/${TCH_LLVM_PKG_NAME} /tools/. -RUN cd /tools \ - && if [ "${TCH_LLVM_PKG_NAME}" != "none" ]; then \ - tar xf ${TCH_LLVM_PKG_NAME}; \ - fi \ - && rm ${TCH_LLVM_PKG_NAME} \ - && cd - -ENV TCH_LLVM_PATH="/tools/${TCH_LLVM_PATH}" -ENV PATH="${TCH_LLVM_PATH}:${PATH}" +RUN mkdir -p /etc/apt/keyrings && \ + wget https://apt.llvm.org/llvm-snapshot.gpg.key -O /etc/apt/keyrings/llvm-snapshot.key && \ + echo "deb [signed-by=/etc/apt/keyrings/llvm-snapshot.key] http://apt.llvm.org/bookworm/ llvm-toolchain-bookworm-${LLVM_VERSION} main" > /etc/apt/sources.list.d/llvm.list && \ + echo "deb-src [signed-by=/etc/apt/keyrings/llvm-snapshot.key] http://apt.llvm.org/bookworm/ llvm-toolchain-bookworm-${LLVM_VERSION} main" >> /etc/apt/sources.list.d/llvm.list && \ + apt-get update && \ + apt-get install -y \ + clang-${LLVM_VERSION} \ + clangd-${LLVM_VERSION} \ + clang-tidy-${LLVM_VERSION} \ + clang-format-${LLVM_VERSION} \ + llvm-${LLVM_VERSION} \ + lld-${LLVM_VERSION} \ + libc++-${LLVM_VERSION}-dev && \ + for f in /usr/lib/llvm-${LLVM_VERSION}/bin/*; do ln -s "$f" /usr/local/bin/$(basename $f); done && \ + rm -rf /var/lib/apt/lists/* # Install packages required to compile Linux kselftests. We install the target # versions for cross-compiling, and the native versions for good measure. diff --git a/docker/build.sh b/docker/build.sh index db9821c..741a1f8 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -102,9 +102,6 @@ if [ "${ARCH}" = "x86_64" ]; then TCH_PKG_URL_AARCH64=https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel TCH_PKG_NAME_AARCH64=arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-elf.tar.xz TCH_PATH_AARCH64=arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-elf/bin - TCH_LLVM_PKG_URL=https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.6 - TCH_LLVM_PKG_NAME=clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz - TCH_LLVM_PATH=clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04/bin TCH_PKG_URL_AARCH32=https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel TCH_PKG_NAME_AARCH32=arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz TCH_PATH_AARCH32=arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin @@ -116,9 +113,6 @@ elif [ "${ARCH}" = "aarch64" ] || [ "${ARCH}" = "arm64" ]; then TCH_PKG_URL_AARCH64=https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel TCH_PKG_NAME_AARCH64=arm-gnu-toolchain-13.2.rel1-aarch64-aarch64-none-elf.tar.xz TCH_PATH_AARCH64=arm-gnu-toolchain-13.2.Rel1-aarch64-aarch64-none-elf/bin - TCH_LLVM_PKG_URL=https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.6 - TCH_LLVM_PKG_NAME=clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz - TCH_LLVM_PATH=clang+llvm-15.0.6-aarch64-linux-gnu/bin TCH_PKG_URL_AARCH32=https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel TCH_PKG_NAME_AARCH32=arm-gnu-toolchain-13.2.rel1-aarch64-arm-none-eabi.tar.xz TCH_PATH_AARCH32=arm-gnu-toolchain-13.2.Rel1-aarch64-arm-none-eabi/bin @@ -150,7 +144,6 @@ cd ${ROOT} # Grab the pre-built packages. mkdir -p assets wget_or_cache assets/${TCH_PKG_NAME_AARCH64} ${TCH_PKG_URL_AARCH64}/${TCH_PKG_NAME_AARCH64} -wget_or_cache assets/${TCH_LLVM_PKG_NAME} ${TCH_LLVM_PKG_URL}/${TCH_LLVM_PKG_NAME} wget_or_cache assets/${TCH_PKG_NAME_AARCH32} ${TCH_PKG_URL_AARCH32}/${TCH_PKG_NAME_AARCH32} wget_or_cache assets/${FVP_PKG_NAME} ${FVP_PKG_URL}/${FVP_PKG_NAME} @@ -179,8 +172,6 @@ if [ "${DRIVER}" = "docker" ]; then --build-arg=BASE=${REGISTRY}/base-slim-nofvp:${VERSION}-${ARCH} \ --build-arg=TCH_PKG_NAME_AARCH32=${TCH_PKG_NAME_AARCH32} \ --build-arg=TCH_PATH_AARCH32=${TCH_PATH_AARCH32} \ - --build-arg=TCH_LLVM_PKG_NAME=${TCH_LLVM_PKG_NAME} \ - --build-arg=TCH_LLVM_PATH=${TCH_LLVM_PATH} \ --file=Dockerfile.full \ --tag=${REGISTRY}/base-full-nofvp:${VERSION}-${ARCH} \ . @@ -225,8 +216,6 @@ elif [ "${DRIVER}" = "kaniko" ]; then --build-arg=BASE=${REGISTRY}/base-slim-nofvp:${VERSION}-${ARCH} \ --build-arg=TCH_PKG_NAME_AARCH32=${TCH_PKG_NAME_AARCH32} \ --build-arg=TCH_PATH_AARCH32=${TCH_PATH_AARCH32} \ - --build-arg=TCH_LLVM_PKG_NAME=${TCH_LLVM_PKG_NAME} \ - --build-arg=TCH_LLVM_PATH=${TCH_LLVM_PATH} \ --dockerfile=Dockerfile.full \ --destination=${REGISTRY}/base-full-nofvp:${VERSION}-${ARCH} \ --context=. -- GitLab