diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a0ff406dec0c1343ff241d3d2669c090eb85a928..34e029cdd522114f64912e7fc039429cf6886ac8 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -38,7 +38,7 @@ jobs: uses: actions/checkout@v3 - name: Build and Test run: sh ci/aarch64-linux-release.sh - x86_64-macos: + x86_64-macos-debug: runs-on: "macos-11" env: ARCH: "x86_64" @@ -46,7 +46,16 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Build and Test - run: ci/x86_64-macos.sh + run: ci/x86_64-macos-debug.sh + x86_64-macos-release: + runs-on: "macos-11" + env: + ARCH: "x86_64" + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Build and Test + run: ci/x86_64-macos-release.sh aarch64-macos: runs-on: [self-hosted, macOS, aarch64] env: diff --git a/ci/x86_64-macos-debug.sh b/ci/x86_64-macos-debug.sh new file mode 100755 index 0000000000000000000000000000000000000000..c24ff5d29581559e3d4a2fd0493abd54fc089f17 --- /dev/null +++ b/ci/x86_64-macos-debug.sh @@ -0,0 +1,58 @@ +#!/bin/sh + +set -x +set -e + +ZIGDIR="$(pwd)" +TARGET="$ARCH-macos-none" +MCPU="baseline" +CACHE_BASENAME="zig+llvm+lld+clang-$TARGET-0.11.0-dev.1416+8484df5bd" +PREFIX="$HOME/$CACHE_BASENAME" +JOBS="-j3" + +rm -rf $PREFIX +cd $HOME + +curl -L -O "https://ziglang.org/deps/$CACHE_BASENAME.tar.xz" +tar xf "$CACHE_BASENAME.tar.xz" + +ZIG="$PREFIX/bin/zig" + +cd $ZIGDIR + +# Make the `zig version` number consistent. +# This will affect the cmake command below. +git config core.abbrev 9 +git fetch --unshallow || true +git fetch --tags + +rm -rf build +mkdir build +cd build + +# Override the cache directories because they won't actually help other CI runs +# which will be testing alternate versions of zig, and ultimately would just +# fill up space on the hard drive for no reason. +export ZIG_GLOBAL_CACHE_DIR="$(pwd)/zig-global-cache" +export ZIG_LOCAL_CACHE_DIR="$(pwd)/zig-local-cache" + +cmake .. \ + -DCMAKE_PREFIX_PATH="$PREFIX" \ + -DCMAKE_BUILD_TYPE=Debug \ + -DCMAKE_C_COMPILER="$ZIG;cc;-target;$TARGET;-mcpu=$MCPU" \ + -DCMAKE_CXX_COMPILER="$ZIG;c++;-target;$TARGET;-mcpu=$MCPU" \ + -DZIG_TARGET_TRIPLE="$TARGET" \ + -DZIG_TARGET_MCPU="$MCPU" \ + -DZIG_STATIC=ON + +make $JOBS install + +stage3/bin/zig build test docs \ + --zig-lib-dir "$(pwd)/../lib" \ + -Denable-macos-sdk \ + -Dstatic-llvm \ + -Dskip-non-native \ + --search-prefix "$PREFIX" + +# Produce the experimental std lib documentation. +stage3/bin/zig test ../lib/std/std.zig -femit-docs -fno-emit-bin --zig-lib-dir ../lib diff --git a/ci/x86_64-macos-release.sh b/ci/x86_64-macos-release.sh new file mode 100755 index 0000000000000000000000000000000000000000..a4dedb4446f16f4a5c66c2133e1471557c892ede --- /dev/null +++ b/ci/x86_64-macos-release.sh @@ -0,0 +1,74 @@ +#!/bin/sh + +set -x +set -e + +ZIGDIR="$(pwd)" +TARGET="$ARCH-macos-none" +MCPU="baseline" +CACHE_BASENAME="zig+llvm+lld+clang-$TARGET-0.11.0-dev.1416+8484df5bd" +PREFIX="$HOME/$CACHE_BASENAME" +JOBS="-j3" + +rm -rf $PREFIX +cd $HOME + +curl -L -O "https://ziglang.org/deps/$CACHE_BASENAME.tar.xz" +tar xf "$CACHE_BASENAME.tar.xz" + +ZIG="$PREFIX/bin/zig" + +cd $ZIGDIR + +# Make the `zig version` number consistent. +# This will affect the cmake command below. +git config core.abbrev 9 +git fetch --unshallow || true +git fetch --tags + +rm -rf build +mkdir build +cd build + +# Override the cache directories because they won't actually help other CI runs +# which will be testing alternate versions of zig, and ultimately would just +# fill up space on the hard drive for no reason. +export ZIG_GLOBAL_CACHE_DIR="$(pwd)/zig-global-cache" +export ZIG_LOCAL_CACHE_DIR="$(pwd)/zig-local-cache" + +cmake .. \ + -DCMAKE_PREFIX_PATH="$PREFIX" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_COMPILER="$ZIG;cc;-target;$TARGET;-mcpu=$MCPU" \ + -DCMAKE_CXX_COMPILER="$ZIG;c++;-target;$TARGET;-mcpu=$MCPU" \ + -DZIG_TARGET_TRIPLE="$TARGET" \ + -DZIG_TARGET_MCPU="$MCPU" \ + -DZIG_STATIC=ON + +make $JOBS install + +stage3/bin/zig build test docs \ + --zig-lib-dir "$(pwd)/../lib" \ + -Denable-macos-sdk \ + -Dstatic-llvm \ + -Dskip-non-native \ + --search-prefix "$PREFIX" + +# Produce the experimental std lib documentation. +stage3/bin/zig test ../lib/std/std.zig -femit-docs -fno-emit-bin --zig-lib-dir ../lib + +# Ensure that stage3 and stage4 are byte-for-byte identical. +stage3/bin/zig build \ + --prefix stage4 \ + -Denable-llvm \ + -Dno-lib \ + -Drelease \ + -Dstrip \ + -Dtarget=$TARGET \ + -Duse-zig-libcxx \ + -Dversion-string="$(stage3/bin/zig version)" + +# diff returns an error code if the files differ. +echo "If the following command fails, it means nondeterminism has been" +echo "introduced, making stage3 and stage4 no longer byte-for-byte identical." +diff stage3/bin/zig stage4/bin/zig diff --git a/ci/x86_64-macos.sh b/ci/x86_64-macos.sh deleted file mode 100755 index 4ea62bf1e0a64ff4f8f55b38d68524bbb59b4bb0..0000000000000000000000000000000000000000 --- a/ci/x86_64-macos.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/sh - -set -x -set -e - -# Script assumes the presence of the following: -# s3cmd - -ZIGDIR="$(pwd)" -TARGET="$ARCH-macos-none" -MCPU="baseline" -CACHE_BASENAME="zig+llvm+lld+clang-$TARGET-0.11.0-dev.534+b0b1cc356" -PREFIX="$HOME/$CACHE_BASENAME" -JOBS="-j3" - -rm -rf $PREFIX -cd $HOME - -curl -L -O "https://ziglang.org/deps/$CACHE_BASENAME.tar.xz" -tar xf "$CACHE_BASENAME.tar.xz" - -ZIG="$PREFIX/bin/zig" - -cd $ZIGDIR - -# Make the `zig version` number consistent. -# This will affect the cmake command below. -git config core.abbrev 9 -git fetch --unshallow || true -git fetch --tags - -rm -rf build -mkdir build -cd build - -# Override the cache directories because they won't actually help other CI runs -# which will be testing alternate versions of zig, and ultimately would just -# fill up space on the hard drive for no reason. -export ZIG_GLOBAL_CACHE_DIR="$(pwd)/zig-global-cache" -export ZIG_LOCAL_CACHE_DIR="$(pwd)/zig-local-cache" - -cmake .. \ - -DCMAKE_INSTALL_PREFIX="stage3-release" \ - -DCMAKE_PREFIX_PATH="$PREFIX" \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_COMPILER="$ZIG;cc;-target;$TARGET;-mcpu=$MCPU" \ - -DCMAKE_CXX_COMPILER="$ZIG;c++;-target;$TARGET;-mcpu=$MCPU" \ - -DZIG_TARGET_TRIPLE="$TARGET" \ - -DZIG_TARGET_MCPU="$MCPU" \ - -DZIG_STATIC=ON - -make $JOBS install - -stage3-release/bin/zig build test docs \ - --zig-lib-dir "$(pwd)/../lib" \ - -Denable-macos-sdk \ - -Dstatic-llvm \ - -Dskip-non-native \ - --search-prefix "$PREFIX" - -# Produce the experimental std lib documentation. -stage3-release/bin/zig test ../lib/std/std.zig -femit-docs -fno-emit-bin --zig-lib-dir ../lib - -# Ensure that stage3 and stage4 are byte-for-byte identical. -stage3-release/bin/zig build \ - --prefix stage4-release \ - -Denable-llvm \ - -Dno-lib \ - -Drelease \ - -Dstrip \ - -Dtarget=$TARGET \ - -Duse-zig-libcxx \ - -Dversion-string="$(stage3-release/bin/zig version)" - -# diff returns an error code if the files differ. -echo "If the following command fails, it means nondeterminism has been" -echo "introduced, making stage3 and stage4 no longer byte-for-byte identical." -diff stage3-release/bin/zig stage4-release/bin/zig diff --git a/src/Compilation.zig b/src/Compilation.zig index b0af925e29365dbe162bafb010f5aed9a15e017f..60dcc55b7bbd685348849620188be561f7e7e487 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -4319,11 +4319,18 @@ pub fn addCCArgs( } }, .macos => { + try argv.ensureUnusedCapacity(2); // Pass the proper -m-version-min argument for darwin. const ver = target.os.version_range.semver.min; - try argv.append(try std.fmt.allocPrint(arena, "-mmacos-version-min={d}.{d}.{d}", .{ + argv.appendAssumeCapacity(try std.fmt.allocPrint(arena, "-mmacos-version-min={d}.{d}.{d}", .{ ver.major, ver.minor, ver.patch, })); + // This avoids a warning that sometimes occurs when + // providing both a -target argument that contains a + // version as well as the -mmacosx-version-min argument. + // Zig provides the correct value in both places, so it + // doesn't matter which one gets overridden. + argv.appendAssumeCapacity("-Wno-overriding-t-option"); }, .ios, .tvos, .watchos => switch (target.cpu.arch) { // Pass the proper -m-version-min argument for darwin.