authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-05-10 18:41:29-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2021-05-10 18:41:29-04:00
log2e4a48ef295fee2180079a01c59b47e47a414efb
tree8de57a99f4a56865c2ec4e0267b87aff2335aaff
parent24dfa61236aba6d1c613f929ef06e67f7ce5ddcf
parentb7a6a251a0a86d5ffa4780bc01515854f7032ccd
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #8736 from ziglang/macos-zig-bootstrap

Use zig-bootstrap to build macOS binaries

2 files changed, 69 insertions(+), 70 deletions(-)

ci/azure/macos_arm64_script+60-60
......@@ -3,24 +3,31 @@
33set -x
44set -e
55
6brew update && brew install s3cmd ninja gnu-tar
6brew update && brew install s3cmd
77
88ZIGDIR="$(pwd)"
9
10HOST_ARCH="x86_64"
11HOST_TARGET="$HOST_ARCH-macos-gnu"
12HOST_MCPU="baseline"
13HOST_CACHE_BASENAME="zig+llvm+lld+clang-$HOST_TARGET-0.8.0-dev.2168+2d1196773"
14HOST_PREFIX="$HOME/$HOST_CACHE_BASENAME"
15
916ARCH="aarch64"
10# {product}-{os}{sdk_version}-{arch}-{llvm_version}-{cmake_build_type}
11CACHE_HOST_BASENAME="ci-llvm-macos10.15-x86_64-12.0.0.1-release"
12CACHE_ARM64_BASENAME="ci-llvm-macos11.0-arm64-12.0.0.1-release"
13PREFIX_HOST="$HOME/$CACHE_HOST_BASENAME"
14PREFIX_ARM64="$HOME/$CACHE_ARM64_BASENAME"
17TARGET="$ARCH-macos-gnu"
18MCPU="cyclone"
19CACHE_BASENAME="zig+llvm+lld+clang-$TARGET-0.8.0-dev.2168+2d1196773"
20PREFIX="$HOME/$CACHE_BASENAME"
21
1522JOBS="-j2"
1623
17rm -rf $PREFIX
24rm -rf $HOST_PREFIX $PREFIX
1825cd $HOME
19wget -nv "https://ziglang.org/deps/$CACHE_HOST_BASENAME.tar.xz"
20wget -nv "https://ziglang.org/deps/$CACHE_ARM64_BASENAME.tar.xz"
2126
22gtar xf "$CACHE_HOST_BASENAME.tar.xz"
23gtar xf "$CACHE_ARM64_BASENAME.tar.xz"
27wget -nv "https://ziglang.org/deps/$HOST_CACHE_BASENAME.tar.xz"
28wget -nv "https://ziglang.org/deps/$CACHE_BASENAME.tar.xz"
29tar xf "$HOST_CACHE_BASENAME.tar.xz"
30tar xf "$CACHE_BASENAME.tar.xz"
2431
2532cd $ZIGDIR
2633
......@@ -30,83 +37,75 @@ git config core.abbrev 9
3037git fetch --unshallow || true
3138git fetch --tags
3239
33# Select xcode: latest version found on vmImage macOS-10.15 .
34DEVELOPER_DIR=/Applications/Xcode_12.4.app
40# Build host zig compiler in debug so that we can get the
41# current version when packaging
3542
36export ZIG_LOCAL_CACHE_DIR="$ZIGDIR/zig-cache"
37export ZIG_GLOBAL_CACHE_DIR="$ZIGDIR/zig-cache"
43ZIG="$HOST_PREFIX/bin/zig"
3844
39# Build zig for host and use `Debug` type to make builds a little faster.
45export CC="$ZIG cc -target $HOST_TARGET -mcpu=$HOST_MCPU"
46export CXX="$ZIG c++ -target $HOST_TARGET -mcpu=$HOST_MCPU"
4047
41cd $ZIGDIR
4248mkdir build.host
4349cd build.host
44cmake -G "Ninja" .. \
50cmake .. \
4551 -DCMAKE_INSTALL_PREFIX="$(pwd)/release" \
46 -DCMAKE_PREFIX_PATH="$PREFIX_HOST" \
47 -DCMAKE_BUILD_TYPE="Debug" \
48 -DZIG_STATIC="OFF"
49
50# Build but do not install.
51ninja $JOBS
52 -DCMAKE_PREFIX_PATH="$HOST_PREFIX" \
53 -DCMAKE_BUILD_TYPE=Debug \
54 -DZIG_TARGET_TRIPLE="$HOST_TARGET" \
55 -DZIG_TARGET_MCPU="$HOST_MCPU" \
56 -DZIG_STATIC=ON
5257
53ZIG_EXE="$ZIGDIR/build.host/zig"
58make $JOBS install
5459
55# Build zig for arm64 target.
56# - use `Release` type for published tarballs
57# - ad-hoc codesign with linker
58# - note: apple quarantine of downloads (eg. via safari) still apply
60unset CC
61unset CXX
5962
63# Build zig compiler cross-compiled for arm64
6064cd $ZIGDIR
61mkdir build.arm64
62cd build.arm64
63cmake -G "Ninja" .. \
65
66ZIG="$ZIGDIR/build.host/release/bin/zig"
67
68export CC="$ZIG cc -target $TARGET -mcpu=$MCPU"
69export CXX="$ZIG c++ -target $TARGET -mcpu=$MCPU"
70
71mkdir build
72cd build
73cmake .. \
6474 -DCMAKE_INSTALL_PREFIX="$(pwd)/release" \
65 -DCMAKE_PREFIX_PATH="$PREFIX_ARM64" \
66 -DCMAKE_BUILD_TYPE="Release" \
67 -DCMAKE_CROSSCOMPILING="True" \
68 -DCMAKE_SYSTEM_NAME="Darwin" \
69 -DCMAKE_C_FLAGS="-arch arm64" \
70 -DCMAKE_CXX_FLAGS="-arch arm64" \
71 -DCMAKE_EXE_LINKER_FLAGS="-lz -Xlinker -adhoc_codesign" \
72 -DZIG_USE_LLVM_CONFIG="OFF" \
73 -DZIG_EXECUTABLE="$ZIG_EXE" \
74 -DZIG_TARGET_TRIPLE="${ARCH}-macos" \
75 -DZIG_STATIC="OFF"
76
77ninja $JOBS install
78
79# Disable test because binary is foreign arch.
80#release/bin/zig build test
75 -DCMAKE_PREFIX_PATH="$PREFIX" \
76 -DCMAKE_BUILD_TYPE=Release \
77 -DZIG_TARGET_TRIPLE="$TARGET" \
78 -DZIG_TARGET_MCPU="$MCPU" \
79 -DZIG_EXECUTABLE="$ZIG" \
80 -DZIG_STATIC=ON
81
82make $JOBS install
83
84unset CC
85unset CXX
8186
8287if [ "${BUILD_REASON}" != "PullRequest" ]; then
8388 mv ../LICENSE release/
8489
8590 # We do not run test suite but still need langref.
8691 mkdir -p release/docs
87 $ZIG_EXE run ../doc/docgen.zig -- $ZIG_EXE ../doc/langref.html.in release/docs/langref.html
92 $ZIG run ../doc/docgen.zig -- $ZIG ../doc/langref.html.in release/docs/langref.html
8893
8994 # Produce the experimental std lib documentation.
9095 mkdir -p release/docs/std
91 $ZIG_EXE test ../lib/std/std.zig \
96 $ZIG test ../lib/std/std.zig \
9297 --override-lib-dir ../lib \
9398 -femit-docs=release/docs/std \
9499 -fno-emit-bin
95100
96 # Remove the unnecessary bin dir in $prefix/bin/zig
97101 mv release/bin/zig release/
98102 rmdir release/bin
99103
100 # Remove the unnecessary zig dir in $prefix/lib/zig/std/std.zig
101 mv release/lib/zig release/lib2
102 rmdir release/lib
103 mv release/lib2 release/lib
104
105 VERSION=$($ZIG_EXE version)
104 VERSION=$(../build.host/release/bin/zig version)
106105 DIRNAME="zig-macos-$ARCH-$VERSION"
107106 TARBALL="$DIRNAME.tar.xz"
108 gtar cJf "$TARBALL" release/ --owner=root --sort=name --transform="s,^release,${DIRNAME},"
109 ln "$TARBALL" "$BUILD_ARTIFACTSTAGINGDIRECTORY/."
107 mv release "$DIRNAME"
108 tar cfJ "$TARBALL" "$DIRNAME"
110109
111110 mv "$DOWNLOADSECUREFILE_SECUREFILEPATH" "$HOME/.s3cfg"
112111 s3cmd put -P --add-header="cache-control: public, max-age=31536000, immutable" "$TARBALL" s3://ziglang.org/builds/
......@@ -114,12 +113,13 @@ if [ "${BUILD_REASON}" != "PullRequest" ]; then
114113 SHASUM=$(shasum -a 256 $TARBALL | cut '-d ' -f1)
115114 BYTESIZE=$(wc -c < $TARBALL)
116115
117 JSONFILE="tarball.json"
116 JSONFILE="macos-$GITBRANCH.json"
118117 touch $JSONFILE
119118 echo "{\"tarball\": \"$TARBALL\"," >>$JSONFILE
120119 echo "\"shasum\": \"$SHASUM\"," >>$JSONFILE
121120 echo "\"size\": \"$BYTESIZE\"}" >>$JSONFILE
122121
122 s3cmd put -P --add-header="Cache-Control: max-age=0, must-revalidate" "$JSONFILE" "s3://ziglang.org/builds/$JSONFILE"
123123 s3cmd put -P "$JSONFILE" "s3://ziglang.org/builds/$ARCH-macos-$VERSION.json"
124124
125125 # `set -x` causes these variables to be mangled.
ci/azure/macos_script+9-10
......@@ -7,21 +7,21 @@ brew update && brew install s3cmd
77
88ZIGDIR="$(pwd)"
99ARCH="x86_64"
10CACHE_BASENAME="zig+llvm+lld+clang-$ARCH-macos-gnu-0.8.0-dev.1939+5a3ea9bec"
10TARGET="$ARCH-macos-gnu"
11MCPU="baseline"
12CACHE_BASENAME="zig+llvm+lld+clang-$TARGET-0.8.0-dev.2168+2d1196773"
1113PREFIX="$HOME/$CACHE_BASENAME"
1214JOBS="-j2"
1315
1416rm -rf $PREFIX
1517cd $HOME
18
1619wget -nv "https://ziglang.org/deps/$CACHE_BASENAME.tar.xz"
1720tar xf "$CACHE_BASENAME.tar.xz"
1821
1922ZIG="$PREFIX/bin/zig"
20NATIVE_LIBC_TXT="$HOME/native_libc.txt"
21$ZIG libc >"$NATIVE_LIBC_TXT"
22export ZIG_LIBC="$NATIVE_LIBC_TXT"
23export CC="$ZIG cc"
24export CXX="$ZIG c++"
23export CC="$ZIG cc -target $TARGET -mcpu=$MCPU"
24export CXX="$ZIG c++ -target $TARGET -mcpu=$MCPU"
2525
2626cd $ZIGDIR
2727
......@@ -37,22 +37,21 @@ cmake .. \
3737 -DCMAKE_INSTALL_PREFIX="$(pwd)/release" \
3838 -DCMAKE_PREFIX_PATH="$PREFIX" \
3939 -DCMAKE_BUILD_TYPE=Release \
40 -DZIG_TARGET_TRIPLE="$ARCH-native-gnu" \
41 -DZIG_TARGET_MCPU="baseline" \
40 -DZIG_TARGET_TRIPLE="$TARGET" \
41 -DZIG_TARGET_MCPU="$MCPU" \
4242 -DZIG_STATIC=ON
4343
4444# Now cmake will use zig as the C/C++ compiler. We reset the environment variables
4545# so that installation and testing do not get affected by them.
4646unset CC
4747unset CXX
48unset ZIG_LIBC
4948
5049make $JOBS install
5150
5251# Here we rebuild zig but this time using the Zig binary we just now produced to
5352# build zig1.o rather than relying on the one built with stage0. See
5453# https://github.com/ziglang/zig/issues/6830 for more details.
55cmake .. -DZIG_EXECUTABLE="$(pwd)/release/bin/zig" -DZIG_TARGET_MCPU="x86_64_v2"
54cmake .. -DZIG_EXECUTABLE="$(pwd)/release/bin/zig"
5655make $JOBS install
5756
5857for step in test-toolchain test-std docs; do