@@ -11,22 +11,29 @@ RUN mkdir /work
1111WORKDIR /work
1212RUN apk add --no-cache ccache cmake clang curl gpg gpg-agent lld llvm ninja-is-really-ninja python3 xz
1313RUN apk add --no-cache libstdc++-dev musl-dev zlib-dev zstd-dev
14- RUN --mount=type=bind,target=/tmp/context/llvm-release-keys.asc,source=llvm-release-keys.asc \
15- gpg --import /tmp/context/llvm-release-keys.asc && \
16- curl -fsSLo /tmp/llvm-project.tar.xz.sig --retry 5 "https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz.sig" && \
17- curl -fsSLo /tmp/llvm-project.tar.xz --retry 5 "https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz" && \
18- gpg --verify /tmp/llvm-project.tar.xz.sig /tmp/llvm-project.tar.xz && \
19- mkdir llvm-project && \
20- tar --strip-components 1 -xf /tmp/llvm-project.tar.xz -C llvm-project && \
21- rm /tmp/llvm-project* && \
22- rm -rf ~/.gnupg
14+ RUN --mount=type=bind,target=/tmp/context/llvm-release-keys.asc,source=llvm-release-keys.asc <<EOT
15+ set -ex
16+ gpg --import /tmp/context/llvm-release-keys.asc
17+ curl -fsSLo /tmp/llvm-project.tar.xz.sig --retry 5 "https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz.sig"
18+ curl -fsSLo /tmp/llvm-project.tar.xz --retry 5 "https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz"
19+ gpg --verify /tmp/llvm-project.tar.xz.sig /tmp/llvm-project.tar.xz
20+ mkdir llvm-project
21+ tar --strip-components 1 -xf /tmp/llvm-project.tar.xz -C llvm-project
22+ rm /tmp/llvm-project*
23+ rm -rf ~/.gnupg
24+ EOT
2325COPY staged-build.cmake /work/staged-build.cmake
24- RUN --mount=type=cache,target=/tmp/ccache-bootstrap \
25- cmake -G Ninja -B bootstrap -S llvm-project/llvm \
26- -C staged-build.cmake \
26+ RUN --mount=type=cache,target=/tmp/ccache-bootstrap <<EOT
27+ set -ex
28+ LLVM_CCACHE_DIR=/tmp/ccache-bootstrap
29+ LLVM_CCACHE_MAXSIZE=350M
30+ ccache -d ${LLVM_CCACHE_DIR} -M ${LLVM_CCACHE_MAXSIZE} --zero-stats
31+ cmake -G Ninja -B bootstrap -S llvm-project/llvm \
2732 -DLLVM_CCACHE_BUILD=ON \
28- -DLLVM_CCACHE_DIR=/tmp/ccache-bootstrap && \
29- cmake --build bootstrap \
33+ -DLLVM_CCACHE_DIR=${LLVM_CCACHE_DIR} \
34+ -DLLVM_CCACHE_MAXSIZE=${LLVM_CCACHE_MAXSIZE} \
35+ -C staged-build.cmake
36+ cmake --build bootstrap \
3037 --target clang \
3138 --target lld \
3239 --target llvm-addr2line \
@@ -44,46 +51,72 @@ RUN --mount=type=cache,target=/tmp/ccache-bootstrap \
4451 --target llvm-strings \
4552 --target llvm-strip \
4653 --target llvm-symbolizer
54+ ccache -d ${LLVM_CCACHE_DIR} -M ${LLVM_CCACHE_MAXSIZE} --show-stats
55+ EOT
4756
4857FROM bootstrap AS builder
4958ARG TARGETPLATFORM
5059RUN xx-info env
5160RUN xx-apk add --no-cache gcc libstdc++-dev musl-dev zlib-dev zlib-static zstd-dev zstd-static
5261RUN xx-clang --print-cmake-defines
5362ENV PATH="/work/bootstrap/bin:$PATH"
54- RUN --mount=type=cache,target=/tmp/ccache-build \
55- cmake -G Ninja -B build -S llvm-project/llvm \
63+ RUN --mount=type=cache,target=/tmp/ccache-build <<EOT
64+ set -ex
65+ LLVM_CCACHE_DIR=/tmp/ccache-build
66+ LLVM_CCACHE_MAXSIZE=350M
67+ ccache -d ${LLVM_CCACHE_DIR} -M ${LLVM_CCACHE_MAXSIZE} --zero-stats
68+ cmake -G Ninja -B build -S llvm-project/llvm \
69+ -DCMAKE_INSTALL_PREFIX=/opt/clang \
5670 -DCMAKE_SYSROOT="$(xx-info sysroot)" \
57- -DLLVM_HOST_TRIPLE="$(xx-info triple)" \
58- -C staged-build.cmake \
5971 -DLLVM_CCACHE_BUILD=ON \
60- -DLLVM_CCACHE_DIR=/tmp/ccache-build && \
61- cmake \
62- --build build \
72+ -DLLVM_CCACHE_DIR=${LLVM_CCACHE_DIR} \
73+ -DLLVM_CCACHE_MAXSIZE=${LLVM_CCACHE_MAXSIZE} \
74+ -DLLVM_HOST_TRIPLE="$(xx-info triple)" \
75+ -DLLVM_NATIVE_TOOL_DIR=/work/bootstrap/bin \
76+ -C staged-build.cmake
77+ cmake --build build \
6378 --target clang \
6479 --target lld \
80+ --target llvm-addr2line \
6581 --target llvm-ar \
82+ --target llvm-config \
6683 --target llvm-cxxfilt \
84+ --target llvm-dlltool \
6785 --target llvm-dwp \
6886 --target llvm-nm \
6987 --target llvm-objcopy \
7088 --target llvm-objdump \
89+ --target llvm-ranlib \
90+ --target llvm-readelf \
7191 --target llvm-readobj \
7292 --target llvm-size \
7393 --target llvm-strings \
94+ --target llvm-strip \
7495 --target llvm-symbolizer
75- RUN cmake --install build --strip && \
76- rm -rf /opt/clang/bin/hmaptool /opt/clang/lib/cmake
96+ ccache -d ${LLVM_CCACHE_DIR} -M ${LLVM_CCACHE_MAXSIZE} --show-stats
97+ EOT
98+ RUN <<EOT
99+ set -ex
100+ cmake --install build --strip
101+ rm -rf /opt/clang/bin/hmaptool /opt/clang/lib/cmake
102+ EOT
77103# check all binaries are statically linked
78104RUN xx-verify --static /opt/clang/bin/*
79105# check expected files in distribution
80- RUN --mount=type=bind,target=/tmp/context/expected-files.txt,source=expected-files.txt \
81- find /opt/clang | sort | tee /tmp/files.txt && \
82- diff -u /tmp/context/expected-files.txt /tmp/files.txt && \
83- rm /tmp/files.txt
106+ RUN --mount=type=bind,target=/tmp/context/expected-files.txt,source=expected-files.txt <<EOT
107+ set -ex
108+ find /opt/clang | sort | tee /tmp/files.txt
109+ diff -u /tmp/context/expected-files.txt /tmp/files.txt
110+ rm /tmp/files.txt
111+ EOT
84112# minimal check that binaries are working
85- RUN /opt/clang/bin/ld.lld --version && \
86- for FILE in $(find /opt/clang/bin -type f -not -name 'lld' ); do ${FILE} --version || exit 1; done
113+ RUN <<EOT
114+ set -ex
115+ /opt/clang/bin/ld.lld --version
116+ for FILE in $(find /opt/clang/bin -type f -not -name 'lld' ); do
117+ ${FILE} --version || exit 1
118+ done
119+ EOT
87120
88121FROM scratch
89122COPY --from=builder /opt/clang /opt/clang
0 commit comments