| ... | @@ -0,0 +1,132 @@ |
| 1 | #!/bin/sh |
| 2 | |
| 3 | set -x |
| 4 | set -e |
| 5 | |
| 6 | brew install s3cmd ninja gnu-tar |
| 7 | |
| 8 | ZIGDIR="$(pwd)" |
| 9 | ARCH="aarch64" |
| 10 | # {product}-{os}{sdk_version}-{arch}-{llvm_version}-{cmake_build_type} |
| 11 | CACHE_HOST_BASENAME="llvm-macos10.15-x86_64-11.0.1-release" |
| 12 | CACHE_ARM64_BASENAME="llvm-macos11.0-arm64-11.0.1-release" |
| 13 | PREFIX_HOST="$HOME/$CACHE_HOST_BASENAME" |
| 14 | PREFIX_ARM64="$HOME/$CACHE_ARM64_BASENAME" |
| 15 | JOBS="-j2" |
| 16 | |
| 17 | rm -rf $PREFIX |
| 18 | cd $HOME |
| 19 | wget -nv "https://ziglang.org/deps/$CACHE_HOST_BASENAME.tar.xz" |
| 20 | wget -nv "https://ziglang.org/deps/$CACHE_ARM64_BASENAME.tar.xz" |
| 21 | |
| 22 | gtar xf "$CACHE_HOST_BASENAME.tar.xz" |
| 23 | gtar xf "$CACHE_ARM64_BASENAME.tar.xz" |
| 24 | |
| 25 | cd $ZIGDIR |
| 26 | |
| 27 | # Make the `zig version` number consistent. |
| 28 | # This will affect the cmake command below. |
| 29 | git config core.abbrev 9 |
| 30 | git fetch --unshallow || true |
| 31 | git fetch --tags |
| 32 | |
| 33 | # Select xcode: latest version found on vmImage macOS-10.15 . |
| 34 | DEVELOPER_DIR=/Applications/Xcode_12.4.app |
| 35 | |
| 36 | export ZIG_LOCAL_CACHE_DIR="$ZIGDIR/zig-cache" |
| 37 | export ZIG_GLOBAL_CACHE_DIR="$ZIGDIR/zig-cache" |
| 38 | |
| 39 | # Build zig for host and use `Debug` type to make builds a little faster. |
| 40 | |
| 41 | cd $ZIGDIR |
| 42 | mkdir build.host |
| 43 | cd build.host |
| 44 | cmake -G "Ninja" .. \ |
| 45 | -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. |
| 51 | ninja $JOBS |
| 52 | |
| 53 | ZIG_EXE="$ZIGDIR/build.host/zig" |
| 54 | |
| 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 |
| 59 | |
| 60 | cd $ZIGDIR |
| 61 | mkdir build.arm64 |
| 62 | cd build.arm64 |
| 63 | cmake -G "Ninja" .. \ |
| 64 | -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 | |
| 77 | ninja $JOBS install |
| 78 | |
| 79 | # Disable test because binary is foreign arch. |
| 80 | #release/bin/zig build test |
| 81 | |
| 82 | if [ "${BUILD_REASON}" != "PullRequest" ]; then |
| 83 | mv ../LICENSE release/ |
| 84 | |
| 85 | # We do not run test suite but still need langref. |
| 86 | mkdir -p release/docs |
| 87 | $ZIG_EXE run ../doc/docgen.zig -- $ZIG_EXE ../doc/langref.html.in release/docs/langref.html |
| 88 | |
| 89 | # Produce the experimental std lib documentation. |
| 90 | mkdir -p release/docs/std |
| 91 | $ZIG_EXE test ../lib/std/std.zig \ |
| 92 | --override-lib-dir ../lib \ |
| 93 | -femit-docs=release/docs/std \ |
| 94 | -fno-emit-bin |
| 95 | |
| 96 | # Remove the unnecessary bin dir in $prefix/bin/zig |
| 97 | mv release/bin/zig release/ |
| 98 | rmdir release/bin |
| 99 | |
| 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) |
| 106 | DIRNAME="zig-macos-$ARCH-$VERSION" |
| 107 | TARBALL="$DIRNAME.tar.xz" |
| 108 | gtar cJf "$TARBALL" release/ --owner=root --sort=name --transform="s,^release,${DIRNAME}," |
| 109 | ln "$TARBALL" "$BUILD_ARTIFACTSTAGINGDIRECTORY/." |
| 110 | |
| 111 | mv "$DOWNLOADSECUREFILE_SECUREFILEPATH" "$HOME/.s3cfg" |
| 112 | s3cmd put -P --add-header="cache-control: public, max-age=31536000, immutable" "$TARBALL" s3://ziglang.org/builds/ |
| 113 | |
| 114 | SHASUM=$(shasum -a 256 $TARBALL | cut '-d ' -f1) |
| 115 | BYTESIZE=$(wc -c < $TARBALL) |
| 116 | |
| 117 | JSONFILE="macos-$GITBRANCH.json" |
| 118 | touch $JSONFILE |
| 119 | echo "{\"tarball\": \"$TARBALL\"," >>$JSONFILE |
| 120 | echo "\"shasum\": \"$SHASUM\"," >>$JSONFILE |
| 121 | echo "\"size\": \"$BYTESIZE\"}" >>$JSONFILE |
| 122 | |
| 123 | s3cmd put -P --add-header="Cache-Control: max-age=0, must-revalidate" "$JSONFILE" "s3://ziglang.org/builds/$JSONFILE" |
| 124 | s3cmd put -P "$JSONFILE" "s3://ziglang.org/builds/$ARCH-macos-$VERSION.json" |
| 125 | |
| 126 | # `set -x` causes these variables to be mangled. |
| 127 | # See https://developercommunity.visualstudio.com/content/problem/375679/pipeline-variable-incorrectly-inserts-single-quote.html |
| 128 | set +x |
| 129 | echo "##vso[task.setvariable variable=tarball;isOutput=true]$TARBALL" |
| 130 | echo "##vso[task.setvariable variable=shasum;isOutput=true]$SHASUM" |
| 131 | echo "##vso[task.setvariable variable=bytesize;isOutput=true]$BYTESIZE" |
| 132 | fi |