Skip to content

Commit ad4c251

Browse files
committed
clean-up
1 parent 0d584fe commit ad4c251

File tree

2 files changed

+66
-35
lines changed

2 files changed

+66
-35
lines changed

Dockerfile

Lines changed: 62 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,29 @@ RUN mkdir /work
1111
WORKDIR /work
1212
RUN apk add --no-cache ccache cmake clang curl gpg gpg-agent lld llvm ninja-is-really-ninja python3 xz
1313
RUN 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
2325
COPY 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

4857
FROM bootstrap AS builder
4958
ARG TARGETPLATFORM
5059
RUN xx-info env
5160
RUN xx-apk add --no-cache gcc libstdc++-dev musl-dev zlib-dev zlib-static zstd-dev zstd-static
5261
RUN xx-clang --print-cmake-defines
5362
ENV 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
78104
RUN 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

88121
FROM scratch
89122
COPY --from=builder /opt/clang /opt/clang

staged-build.cmake

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
if (NOT DEFINED LLVM_HOST_TRIPLE)
22
# 1st stage native-build
33
set(TOOLCHAIN_PREFIX "/usr/bin")
4-
5-
set(CMAKE_INSTALL_PREFIX "/opt/llvm-bootstrap" CACHE PATH "")
6-
74
set(LLVM_ENABLE_PROJECTS "clang;lld" CACHE STRING "")
85
else()
96
# 2nd stage cross-build
10-
set(TOOLCHAIN_PREFIX "/work/bootstrap/bin")
7+
if (NOT DEFINED LLVM_NATIVE_TOOL_DIR)
8+
message(FATAL_ERROR "LLVM_NATIVE_TOOL_DIR shall be defined")
9+
endif()
1110

12-
set(CMAKE_INSTALL_PREFIX "/opt/clang" CACHE PATH "")
11+
set(TOOLCHAIN_PREFIX "${LLVM_NATIVE_TOOL_DIR}")
1312

1413
# cross build
1514
set(CMAKE_SYSTEM_NAME "Linux" CACHE STRING "")
@@ -23,7 +22,6 @@ else()
2322
set(PKG_CONFIG_EXECUTABLE "/usr/bin/${LLVM_HOST_TRIPLE}-pkg-config" CACHE INTERNAL "")
2423

2524
set(LLVM_ENABLE_PROJECTS "clang;lld" CACHE STRING "")
26-
set(LLVM_NATIVE_TOOL_DIR "${TOOLCHAIN_PREFIX}" CACHE PATH "")
2725

2826
# static build
2927
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static" CACHE STRING "")

0 commit comments

Comments
 (0)