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"