llvm17

Source

FROM scratch AS build
COPY --from=stagex/bootstrap-stage3 . /

ARG VERSION
ARG CPORTS_VERSION
ARG TARGETARCH
COPY <<-'EOF' /etc/profile
	set -eux
	[[ "$TARGETARCH" == "amd64" ]] \
		&& ARCH="x86_64" \
		&& LLVM_TARGET_ARCH="X86"
	[[ "$TARGETARCH" == "arm64" ]] \
		&& ARCH="aarch64" \
		&& LLVM_TARGET_ARCH="AArch64"
	export ARCH
	export MAKEFLAGS="-j$(nproc)"
	export BUILD=${ARCH}-unknown-linux-musl
	export TARGET=${ARCH}-unknown-linux-musl
EOF
SHELL ["/bin/sh","-l","-c"]
ENV CFLAGS="-fPIC"
ENV CXXFLAGS="$CFLAGS"

ADD fetch/llvm17-${VERSION}.tar.xz /
ADD fetch/cports-${CPORTS_VERSION}.tar.gz .
WORKDIR /llvm-project-${VERSION}.src
ADD patches/*.patch .
RUN --network=none <<-EOF
	cp /cports-${CPORTS_VERSION}/main/llvm/patches/*.patch .
	patch -p1 < 0001-llvm-always-set-a-larger-stack-size-explicitly.patch
	patch -p1 < 0002-llvm-musl-workarounds.patch
	patch -p1 < 0003-llvm-fix-some-MF_EXEC-related-test-failures-on-aarch.patch
	patch -p1 < 0004-llvm-disable-dependency-on-libexecinfo-everywhere.patch
	patch -p1 < 0005-compiler-rt-ppc-sanitizer-fixes.patch
	patch -p1 < 0006-compiler-rt-default-to-libc-for-sanitizers.patch
	patch -p1 < 0007-compiler-rt-build-crt-in-runtimes-build.patch
	patch -p1 < 0008-compiler-rt-lsan-basic-musl-fixes-on-various-archs.patch
	patch -p1 < 0009-compiler-rt-HACK-hwasan-build-on-x86_64.patch
	patch -p1 < 0010-compiler-rt-libcxx-abi-libunwind-HACK-force-fno-lto.patch
	patch -p1 < 0011-compiler-rt-HACK-always-compile-in-gcc_personality_v.patch
	patch -p1 < 0012-libc-libc-abi-libunwind-disable-multiarch-locations.patch
	patch -p1 < 0013-libc-musl-locale-workarounds.patch
	patch -p1 < 0014-clang-disable-multiarch-layout-on-musl.patch
	patch -p1 < 0015-clang-drop-incorrect-warning-about-vector-equality-r.patch
	patch -p1 < 0016-clang-add-fortify-include-paths-for-musl-triplets-en.patch
	patch -p1 < 0017-clang-use-as-needed-by-default.patch
	patch -p1 < 0018-clang-switch-on-default-now-relro.patch
	patch -p1 < 0020-clang-implicitly-link-to-libatomic-on-linux-targets.patch
	patch -p1 < 0021-clang-use-strong-stack-protector-by-default.patch
	patch -p1 < 0022-clang-fix-unwind-chain-inclusion.patch
	patch -p1 < 0023-Add-accessors-for-MCSubtargetInfo-CPU-and-Feature-ta.patch
	patch -p1 < 0024-clang-link-libcxxabi-on-linux-when-using-libc.patch
	patch -p1 < 0025-Get-rid-of-spurious-trailing-space-in-__clang_versio.patch
	patch -p1 < more-musl-hacks.patch
	find compiler-rt -iname CMakeLists.txt -exec sed -i '1s/^/set(COMPILER_RT_BUILD_SANITIZERS OFF)\n/' {} \;
	find compiler-rt -iname CMakeLists.txt -exec sed -i '1s/^/set(COMPILER_RT_BUILD_GWP_ASAN OFF)\n/' {} \;
	find compiler-rt -iname CMakeLists.txt -exec sed -i '1s/^/set(COMPILER_RT_HAS_GWP_ASAN FALSE)\n/' {} \;
	find compiler-rt -iname *.cmake -exec sed -i '1s/^/set(COMPILER_RT_BUILD_SANITIZERS OFF)\n/' {} \;
	find compiler-rt -iname *.cmake -exec sed -i '1s/^/set(COMPILER_RT_BUILD_MEMPROF OFF)\n/' {} \;
	find compiler-rt -iname *.cmake -exec sed -i '1s/^/set(COMPILER_RT_HAS_MEMPROF FALSE)\n/' {} \;
	find compiler-rt -iname *.cmake -exec sed -i '1s/^/set(COMPILER_RT_BUILD_GWP_ASAN OFF)\n/' {} \;
	find compiler-rt -iname *.cmake -exec sed -i '1s/^/set(COMPILER_RT_HAS_GWP_ASAN FALSE)\n/' {} \;
	cmake \
		-B build \
		-S llvm \
		-Wno-dev \
		-DCMAKE_BUILD_TYPE=Release \
		-DENABLE_LINKER_BUILD_ID=YES \
		-DCMAKE_INSTALL_PREFIX=/usr/ \
		-DCMAKE_INSTALL_RPATH=/usr/lib \
		-DLLVM_TARGET_ARCH="$LLVM_TARGET_ARCH" \
		-DLLVM_TARGETS_TO_BUILD="$LLVM_TARGET_ARCH" \
		-DLLVM_HOST_TRIPLE="$TARGET" \
		-DLLVM_RUNTIME_TARGETS="$TARGET" \
		-DLLVM_BUILTIN_TARGETS="$TARGET" \
		-DLLVM_ENABLE_PROJECTS="clang;lld" \
		-DLLVM_ENABLE_RUNTIMES="compiler-rt;libunwind;libcxx;libcxxabi" \
		-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON \
		-DLLVM_ENABLE_LIBXML2=OFF \
		-DLLVM_ENABLE_LIBEDIT=OFF \
		-DLLVM_ENABLE_LIBPFM=OFF \
		-DLLVM_ENABLE_LIBCXX=ON \
		-DLLVM_BUILD_LLVM_DYLIB=ON \
		-DLLVM_LINK_LLVM_DYLIB=ON \
		-DLLVM_ENABLE_RTTI=OFF \
		-DLLVM_INSTALL_UTILS=ON \
		-DLLVM_INSTALL_BINUTILS_SYMLINKS=ON \
    -DCLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang \
		-DCLANG_ENABLE_BOOTSTRAP=ON \
		-DCLANG_DEFAULT_RTLIB=compiler-rt \
		-DCLANG_DEFAULT_UNWINDLIB=libunwind \
		-DCLANG_DEFAULT_CXX_STDLIB=libc++ \
		-DLIBCXX_HAS_MUSL_LIBC=ON \
		-DLIBCXX_CXX_ABI=libcxxabi \
		-DLIBCXX_USE_COMPILER_RT=ON \
		-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=OFF \
		-DLIBCXX_HAS_MUSL_LIBC=ON \
		-DLIBCXX_HARDENING_MODE=fast \
		-DLIBCXX_ENABLE_LOCALIZATION=OFF \
		-DLIBCXX_ENABLE_FILESYSTEM=OFF \
		-DLIBCXXABI_ENABLE_STATIC_UNWINDER=OFF \
		-DLIBCXXABI_USE_LLVM_UNWINDER=ON \
    -DLIBCXXABI_USE_COMPILER_RT=ON \
		-DLIBUNWIND_USE_COMPILER_RT=ON \
		-DCOMPILER_RT_DEFAULT_TARGET_TRIPLE="$TARGET" \
		-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
		-DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON \
		-DCOMPILER_RT_BUILD_GWP_ASAN=OFF \
		-DCOMPILER_RT_HAS_GWP_ASAN=FALSE \
		-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
		-DCOMPILER_RT_BUILD_XRAY=OFF \
		-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
		-DCOMPILER_RT_BUILD_PROFILE=OFF \
		-DCOMPILER_RT_BUILD_MEMPROF=OFF \
		-DCOMPILER_RT_BUILD_CTX_PROFILE=OFF \
		-DCOMPILER_RT_TEST_COMPILER=OFF \
		-DCOMPILER_RT_TEST_CXX_COMPILER=OFF
	cmake --build build -v --parallel $(nproc)
	cmake --install build
	export LIBCC="/usr/lib/clang/17/lib/${TARGET}/libclang_rt.builtins.a"
	export LDFLAGS="-fuse-ld=/usr/bin/ld.lld"
	rm -rf build
	cmake \
		-B build \
		-S llvm \
		-Wno-dev \
		-DCMAKE_BUILD_TYPE=Release \
		-DCMAKE_INSTALL_PREFIX=/usr/lib/llvm17 \
		-DCMAKE_INSTALL_RPATH=/usr/lib/llvm17/lib \
		-DCMAKE_C_COMPILER=/usr/bin/clang \
		-DCMAKE_CXX_COMPILER=/usr/bin/clang++ \
		-DCMAKE_AR=/usr/bin/llvm-ar \
		-DCMAKE_NM=/usr/bin/llvm-nm \
		-DCMAKE_RANLIB=/usr/bin/llvm-ranlib \
    -DCLANG_TABLEGEN=/usr/bin/clang-tblgen \
    -DLLVM_HEADERS_TABLEGEN=/usr/bin/llvm-tblgen \
    -DLLVM_NATIVE_TOOL_DIR=/usr/bin/ \
		-DLLVM_CONFIG_PATH=/usr/bin/llvm-config \
		-DENABLE_LINKER_BUILD_ID=YES \
		-DLLVM_TARGET_ARCH="${LLVM_TARGET_ARCH}" \
		-DLLVM_TARGETS_TO_BUILD="${LLVM_TARGET_ARCH}" \
		-DLLVM_HOST_TRIPLE="${TARGET}" \
		-DLLVM_DEFAULT_TARGET_TRIPLE="${TARGET}" \
		-DLLVM_HOST_TRIPLE="${TARGET}" \
		-DLLVM_RUNTIME_TARGETS="${TARGET}" \
		-DLLVM_BUILTIN_TARGETS="${TARGET}" \
		-DLLVM_ENABLE_PROJECTS="clang;lld;lldb" \
		-DLLVM_ENABLE_RUNTIMES="compiler-rt;libunwind;libcxx;libcxxabi" \
		-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=YES \
		-DLLVM_ENABLE_ZLIB=YES \
		-DLLVM_ENABLE_LLD=YES \
		-DLLVM_ENABLE_LIBXML2=NO \
		-DLLVM_ENABLE_LIBCXX=YES \
		-DLLVM_BUILD_LLVM_DYLIB=YES \
		-DLLVM_LINK_LLVM_DYLIB=YES \
		-DLLVM_ENABLE_RTTI=YES \
		-DLLVM_INSTALL_UTILS=YES \
		-DLLVM_INSTALL_BINUTILS_SYMLINKS=YES \
    -DCLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang \
		-DCLANG_ENABLE_BOOTSTRAP=YES \
		-DCLANG_DEFAULT_RTLIB=compiler-rt \
		-DCLANG_DEFAULT_UNWINDLIB=libunwind \
		-DCLANG_DEFAULT_CXX_STDLIB=libc++ \
		-DLIBCXX_CXX_ABI=libcxxabi \
		-DLIBCXX_USE_COMPILER_RT=YES \
		-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=NO \
		-DLIBCXX_HAS_MUSL_LIBC=YES \
		-DLIBCXX_HARDENING_MODE=fast \
		-DLIBCXX_ENABLE_LOCALIZATION=NO \
		-DLIBCXX_ENABLE_FILESYSTEM=NO \
		-DLIBCXXABI_ENABLE_STATIC_UNWINDER=NO \
		-DLIBCXXABI_USE_LLVM_UNWINDER=YES \
    -DLIBCXXABI_USE_COMPILER_RT=YES \
		-DLIBUNWIND_USE_COMPILER_RT=YES \
		-DMLIR_INSTALL_AGGREGATE_OBJECTS=OFF \
		-DCOMPILER_RT_DEFAULT_TARGET_TRIPLE="${TARGET}" \
		-DCOMPILER_RT_DEFAULT_TARGET_ONLY=YES \
		-DCOMPILER_RT_USE_BUILTINS_LIBRARY=YES \
		-DCOMPILER_RT_HAS_GWP_ASAN=FALSE \
		-DCOMPILER_RT_BUILD_GWP_ASAN=NO \
		-DCOMPILER_RT_TEST_COMPILER=NO \
		-DCOMPILER_RT_TEST_CXX_COMPILER=NO
	cmake --build build -v --parallel $(nproc)
	DESTDIR="/rootfs" cmake --install build
	cmake \
		-B build \
		-S llvm \
		-Wno-dev \
		-DCMAKE_ASM_COMPILER_TARGET="${TARGET}" \
    -DCMAKE_C_COMPILER_TARGET="${TARGET}" \
    -DCMAKE_CXX_COMPILER_TARGET="${TARGET}" \
		-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY \
		-DCMAKE_BUILD_TYPE=Release \
		-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON \
		-DCOMPILER_RT_BUILTINS_HIDE_SYMBOLS=OFF \
		-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
		-DCOMPILER_RT_BUILD_BUILTINS=ON \
		-DCOMPILER_RT_BUILD_CRT=OFF \
		-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
		-DCOMPILER_RT_BUILD_MEMPROF=OFF \
		-DCOMPILER_RT_BUILD_PROFILE=OFF \
		-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
		-DCOMPILER_RT_BUILD_XRAY=OFF \
		-DCOMPILER_RT_BUILD_ORC=OFF \
		-DCOMPILER_RT_BUILD_CTX_PROFILE=OFF \
		-DCOMPILER_RT_DEFAULT_TARGET_ONLY=YES
	/usr/bin/clang++ \
		-nodefaultlibs \
		-shared \
		-Wl,-soname,libgcc_s.so.1 \
		-Wl,--no-undefined \
		-Wl,--whole-archive \
		build/lib/clang/17/lib/${TARGET}/libclang_rt.builtins.a \
		-Wl,--no-as-needed \
		-lc \
		-lunwind \
		-o build/libgcc_s.so.1
	cp build/libgcc_s.so.1 /rootfs/usr/lib/llvm17/lib/
EOF

FROM stagex/core-filesystem AS package-llvm17
COPY --from=build /rootfs/ /
Copied to clipboard!