Files
termux-packages/packages/zig/build.patch
2023-09-01 03:01:44 +00:00

124 lines
4.7 KiB
Diff

diff --git a/build b/build
index b1917f6b..c1a5844c 100755
--- a/build
+++ b/build
@@ -20,10 +20,19 @@ case $TARGET_OS_CMAKE in
native) TARGET_OS_CMAKE="";;
esac
+# When we know we are not host building zig,
+# we can disable unused targets ahead of time
+case "${TARGET}" in
+aarch64-*) ARCH="AArch64" ;;
+arm-*) ARCH="ARM" ;;
+x86-*) ARCH="X86" ;;
+x86_64-*) ARCH="X86" ;;
+esac
+
# First build the libraries for Zig to link against, as well as native `llvm-tblgen`.
mkdir -p "$ROOTDIR/out/build-llvm-host"
cd "$ROOTDIR/out/build-llvm-host"
-cmake "$ROOTDIR/llvm" \
+cmake -G Ninja "$ROOTDIR/llvm" \
-DCMAKE_INSTALL_PREFIX="$ROOTDIR/out/host" \
-DCMAKE_PREFIX_PATH="$ROOTDIR/out/host" \
-DCMAKE_BUILD_TYPE=Release \
@@ -38,6 +47,7 @@ cmake "$ROOTDIR/llvm" \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_OCAMLDOC=OFF \
-DLLVM_ENABLE_Z3_SOLVER=OFF \
+ -DLLVM_TARGETS_TO_BUILD="$ARCH" \
-DLLVM_TOOL_LLVM_LTO2_BUILD=OFF \
-DLLVM_TOOL_LLVM_LTO_BUILD=OFF \
-DLLVM_TOOL_LTO_BUILD=OFF \
@@ -50,27 +60,29 @@ cmake "$ROOTDIR/llvm" \
-DCLANG_TOOL_ARCMT_TEST_BUILD=OFF \
-DCLANG_TOOL_C_ARCMT_TEST_BUILD=OFF \
-DCLANG_TOOL_LIBCLANG_BUILD=OFF
-cmake --build . --target install
+ninja -j$(nproc) llvm-ar llvm-ranlib llvm-rc llvm-tblgen clang-tblgen
# Now we build Zig, still with system C/C++ compiler, linking against LLVM,
# Clang, LLD we just built from source.
+if ! :; then
mkdir -p "$ROOTDIR/out/build-zig-host"
cd "$ROOTDIR/out/build-zig-host"
-cmake "$ROOTDIR/zig" \
+cmake -G Ninja "$ROOTDIR/zig" \
-DCMAKE_INSTALL_PREFIX="$ROOTDIR/out/host" \
-DCMAKE_PREFIX_PATH="$ROOTDIR/out/host" \
-DCMAKE_BUILD_TYPE=Release \
-DZIG_VERSION="$ZIG_VERSION"
-cmake --build . --target install
+ninja -j$(nproc) install
+fi
# Now we have Zig as a cross compiler.
-ZIG="$ROOTDIR/out/host/bin/zig"
+ZIG=$(command -v zig)
# First cross compile zlib for the target, as we need the LLVM linked into
# the final zig binary to have zlib support enabled.
mkdir -p "$ROOTDIR/out/build-zlib-$TARGET-$MCPU"
cd "$ROOTDIR/out/build-zlib-$TARGET-$MCPU"
-cmake "$ROOTDIR/zlib" \
+cmake -G Ninja "$ROOTDIR/zlib" \
-DCMAKE_INSTALL_PREFIX="$ROOTDIR/out/$TARGET-$MCPU" \
-DCMAKE_PREFIX_PATH="$ROOTDIR/out/$TARGET-$MCPU" \
-DCMAKE_BUILD_TYPE=Release \
@@ -79,10 +91,10 @@ cmake "$ROOTDIR/zlib" \
-DCMAKE_C_COMPILER="$ZIG;cc;-fno-sanitize=all;-s;-target;$TARGET;-mcpu=$MCPU" \
-DCMAKE_CXX_COMPILER="$ZIG;c++;-fno-sanitize=all;-s;-target;$TARGET;-mcpu=$MCPU" \
-DCMAKE_ASM_COMPILER="$ZIG;cc;-fno-sanitize=all;-s;-target;$TARGET;-mcpu=$MCPU" \
- -DCMAKE_RC_COMPILER="$ROOTDIR/out/host/bin/llvm-rc" \
- -DCMAKE_AR="$ROOTDIR/out/host/bin/llvm-ar" \
- -DCMAKE_RANLIB="$ROOTDIR/out/host/bin/llvm-ranlib"
-cmake --build . --target install
+ -DCMAKE_RC_COMPILER="$ROOTDIR/out/build-llvm-host/bin/llvm-rc" \
+ -DCMAKE_AR="$ROOTDIR/out/build-llvm-host/bin/llvm-ar" \
+ -DCMAKE_RANLIB="$ROOTDIR/out/build-llvm-host/bin/llvm-ranlib"
+ninja -j$(nproc) install
# Same deal for zstd.
# The build system for zstd is whack so I just put all the files here.
@@ -132,7 +144,7 @@ $ZIG build-lib \
# Rebuild LLVM with Zig.
mkdir -p "$ROOTDIR/out/build-llvm-$TARGET-$MCPU"
cd "$ROOTDIR/out/build-llvm-$TARGET-$MCPU"
-cmake "$ROOTDIR/llvm" \
+cmake -G Ninja "$ROOTDIR/llvm" \
-DCMAKE_INSTALL_PREFIX="$ROOTDIR/out/$TARGET-$MCPU" \
-DCMAKE_PREFIX_PATH="$ROOTDIR/out/$TARGET-$MCPU" \
-DCMAKE_BUILD_TYPE=Release \
@@ -141,9 +153,9 @@ cmake "$ROOTDIR/llvm" \
-DCMAKE_C_COMPILER="$ZIG;cc;-fno-sanitize=all;-s;-target;$TARGET;-mcpu=$MCPU" \
-DCMAKE_CXX_COMPILER="$ZIG;c++;-fno-sanitize=all;-s;-target;$TARGET;-mcpu=$MCPU" \
-DCMAKE_ASM_COMPILER="$ZIG;cc;-fno-sanitize=all;-s;-target;$TARGET;-mcpu=$MCPU" \
- -DCMAKE_RC_COMPILER="$ROOTDIR/out/host/bin/llvm-rc" \
- -DCMAKE_AR="$ROOTDIR/out/host/bin/llvm-ar" \
- -DCMAKE_RANLIB="$ROOTDIR/out/host/bin/llvm-ranlib" \
+ -DCMAKE_RC_COMPILER="$ROOTDIR/out/build-llvm-host/bin/llvm-rc" \
+ -DCMAKE_AR="$ROOTDIR/out/build-llvm-host/bin/llvm-ar" \
+ -DCMAKE_RANLIB="$ROOTDIR/out/build-llvm-host/bin/llvm-ranlib" \
-DLLVM_ENABLE_BACKTRACES=OFF \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_CRASH_OVERRIDES=OFF \
@@ -158,7 +170,7 @@ cmake "$ROOTDIR/llvm" \
-DLLVM_ENABLE_ZLIB=FORCE_ON \
-DLLVM_ENABLE_ZSTD=FORCE_ON \
-DLLVM_USE_STATIC_ZSTD=ON \
- -DLLVM_TABLEGEN="$ROOTDIR/out/host/bin/llvm-tblgen" \
+ -DLLVM_TABLEGEN="$ROOTDIR/out/build-llvm-host/bin/llvm-tblgen" \
-DLLVM_BUILD_UTILS=OFF \
-DLLVM_BUILD_TOOLS=OFF \
-DLLVM_BUILD_STATIC=ON \
@@ -185,7 +197,7 @@ cmake "$ROOTDIR/llvm" \
-DCLANG_TOOL_LIBCLANG_BUILD=OFF \
-DLIBCLANG_BUILD_STATIC=ON \
-DLLD_BUILD_TOOLS=OFF
-cmake --build . --target install
+ninja -j$(nproc) install
# Finally, we can cross compile Zig itself, with Zig.
cd "$ROOTDIR/zig"