fix: zig working reproducible build

This commit is contained in:
Lance R. Vick 2024-09-23 03:49:22 -07:00
parent 5ff260d30a
commit a97873e219
No known key found for this signature in database
GPG key ID: 8E47A1EC35A1551D
3 changed files with 67 additions and 21 deletions

View file

@ -1,6 +1,6 @@
FROM scratch AS base
ENV VERSION=16.0.6
ENV SRC_HASH=ce5e71081d17ce9e86d7cbcfa28c4b04b9300f8fb7e78422b1feb6bc52c3028e
ENV VERSION=18.1.8
ENV SRC_HASH=0b58557a6d32ceee97c8d533a59b9212d87e0fc4d2833924eb6c611247db2f2a
ENV SRC_FILE=llvm-project-${VERSION}.src.tar.xz
ENV SRC_SITE=https://github.com/llvm/llvm-project/releases/download/llvmorg-${VERSION}/${SRC_FILE}
@ -18,24 +18,33 @@ COPY --from=stagex/python . /
COPY --from=stagex/py-setuptools . /
COPY --from=stagex/openssl . /
COPY --from=stagex/gcc . /
COPY --from=stagex/llvm16 . /
COPY --from=stagex/clang . /
COPY --from=stagex/llvm . /
COPY --from=stagex/zlib . /
# HACK: figure out why gcc package puts these in the wrong path at install time
COPY --from=stagex/gcc /usr/lib64/* /usr/lib/
RUN tar -xf ${SRC_FILE}
WORKDIR /llvm-project-${VERSION}.src
RUN set -eux; \
cmake \
-S lld \
-B build \
-G Ninja \
-Wno-dev \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/ \
-DCMAKE_INSTALL_RPATH=/usr/ \
-DLLVM_ENABLE_ZLIB=FORCE_ON; \
cmake --build build
RUN <<-EOF
set -eux
CFLAGS="-O2 -DNDEBUG -g1" \
CXXFLAGS="-O2 -DNDEBUG -g1" \
CC=clang \
CXX=clang++ \
cmake \
-S lld \
-B build \
-G Ninja \
-Wno-dev \
-DCMAKE_BUILD_TYPE=None \
-DCMAKE_INSTALL_PREFIX=/usr/ \
-DCMAKE_SKIP_INSTALL_RPATH=ON \
-DBUILD_SHARED_LIBS=ON \
-DLLVM_EXTERNAL_LIT=/usr/lib/llvm18/bin/lit \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLD_BUILT_STANDALONE=ON \
-DCMAKE_EXE_LINKER_FLAGS="-Wl,-z,stack-size=2097152"
cmake --build build
EOF
FROM build AS install
RUN --network=none DESTDIR="/rootfs" cmake --install build

View file

@ -20,17 +20,25 @@ COPY --from=stagex/make . /
COPY --from=stagex/musl . /
COPY --from=stagex/openssl . /
COPY --from=stagex/zlib . /
COPY --from=stagex/ninja . /
RUN --network=none tar -xf ${SRC_FILE}
WORKDIR /zig-${VERSION}
ADD *.patch .
RUN --network=none <<-EOF
set -eux
cmake -Bbuild \
patch -p1 < fix-pie-support-detection.patch
cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=/usr \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=None \
-DZIG_STATIC=ON \
-DZIG_TARGET_TRIPLE=native-linux-musl \
-DZIG_TARGET_MCPU=baseline
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DZIG_PIE=ON \
-DZIG_VERSION="${VERSION}" \
-DZIG_SHARED_LLVM=ON \
-DZIG_USE_LLVM_CONFIG=ON \
-DZIG_TARGET_MCPU=baseline \
-DZIG_TARGET_TRIPLE=native-linux.6.1-musl
cmake --build build
EOF

View file

@ -0,0 +1,29 @@
From e2e5ea36f681f0b563b728782c2211fe92374709 Mon Sep 17 00:00:00 2001
From: Jan200101 <sentrycraft123@gmail.com>
Date: Sun, 26 May 2024 15:13:33 +0200
Subject: [PATCH] cmake: correct PIE support detection, add error output for
debugging `check_pie_supported` only uses the `OUTPUT_VARIABLE` to to signify
errors if PIE is actually supported is signaled by
`CMAKE_<lang>_LINK_PIE_SUPPORTED`.
Checking if `OUTPUT_VARIABLE` is empty is not enough either since the check
is bypassed if its results are cached but the output variable is not cached.
---
CMakeLists.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2daff370fb36..4ed5f001470d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -125,8 +125,8 @@ check_pie_supported(
OUTPUT_VARIABLE ZIG_PIE_SUPPORTED_BY_CMAKE
LANGUAGES C CXX
)
-if(ZIG_PIE AND NOT ZIG_PIE_SUPPORTED_BY_CMAKE)
- message(SEND_ERROR "ZIG_PIE was requested but CMake does not support it for \"zigcpp\" target")
+if(ZIG_PIE AND NOT CMAKE_CXX_LINK_PIE_SUPPORTED)
+ message(SEND_ERROR "ZIG_PIE was requested but CMake does not support it for \"zigcpp\" target: ${ZIG_PIE_SUPPORTED_BY_CMAKE}")
endif()