#!/bin/zsh # Build this module's native helper for every macOS architecture it ships — # ../bin/spl-capture-macos-arm64 and ../bin/spl-capture-macos-x86_64 — # from spl-capture.swift beside this script. Run it on any Mac with the # Xcode command line tools; both architectures cross-compile from either. # The binaries are committed: a machine running ProdDash never builds # anything (docs/MODULE-GUIDE.md, "Native helpers"). # # Signed with a Developer ID Application certificate when one is installed # (override with CODESIGN_IDENTITY) — hardened runtime plus the audio-input # entitlement, which a helper that reads a microphone needs under the # hardened runtime — and ad-hoc otherwise, which is fine on your own Macs. # # Windows is not built here: there is no Windows implementation of this # tool yet, so on Windows the module reports measurement off. set -e -u cd "$(dirname "$0")" NAME="spl-capture" DEPLOYMENT_TARGET="13.0" command -v swiftc >/dev/null || { echo "build.sh: swiftc not found — install the Xcode command line tools: xcode-select --install" >&2 exit 1 } IDENTITY="${CODESIGN_IDENTITY:-}" if [[ -z "$IDENTITY" ]]; then IDENTITY=$(security find-identity -v -p codesigning 2>/dev/null \ | awk -F'"' '/Developer ID Application/ {print $2; exit}') fi if [[ -n "$IDENTITY" ]]; then echo "signing as $IDENTITY" SIGN=(--force --sign "$IDENTITY" --options runtime --timestamp) else echo "signing ad-hoc (no Developer ID installed — fine on your own Macs)" SIGN=(--force --sign - --options runtime) fi mkdir -p ../bin for ARCH in arm64 x86_64; do OUT="../bin/$NAME-macos-$ARCH" echo " compiling $OUT" swiftc -O -whole-module-optimization -target "$ARCH-apple-macos$DEPLOYMENT_TARGET" -o "$OUT" "$NAME.swift" codesign "${SIGN[@]}" --entitlements helper.entitlements "$OUT" codesign --verify --strict "$OUT" echo " built $OUT ($(du -h "$OUT" | awk '{print $1}'))" done