#!/bin/bash set -e # Confirm that the script is being run on a macOS aarch64 host ARCHITECTURE=$(uname -m) OS_NAME=$(uname -s) if [[ "$OS_NAME" != "Darwin" || "$ARCHITECTURE" != "arm64" ]]; then echo "This release script must be run on a macOS aarch64 host." exit 1 fi PROJECT_NAME="stroid" MACOS_MIN_VERSION="15.0" OUTPUT_DIR="releases" # Confirm that Meson and Ninja are installed if ! command -v meson &> /dev/null || ! command -v ninja &> /dev/null; then echo "Meson and Ninja are required to build the project." echo "Please install them via pip:" echo " pip install meson ninja" exit 1 fi # Confirm that the current macOS version meets the minimum requirement CURRENT_MACOS_VERSION=$(sw_vers -productVersion) if [[ "$(printf '%s\n%s\n' "$MACOS_MIN_VERSION" "$CURRENT_MACOS_VERSION" | sort -V | head -n1)" != "$MACOS_MIN_VERSION" ]]; then echo "Current macOS version ($CURRENT_MACOS_VERSION) does not meet the minimum requirement ($MACOS_MIN_VERSION)." exit 1 fi X86_IMAGE="quay.io/pypa/manylinux_2_28_x86_64" ARM_IMAGE="quay.io/pypa/manylinux_2_28_aarch64" mkdir -p "$OUTPUT_DIR" echo "Starting release build for $PROJECT_NAME..." echo "Building for macOS (ARM64, Target >= $MACOS_MIN_VERSION)..." rm -rf build-mac export MACOSX_DEPLOYMENT_TARGET=$MACOS_MIN_VERSION meson setup build-mac \ --buildtype release \ -Dcpp_args="-mmacosx-version-min=$MACOS_MIN_VERSION" \ -Dcpp_link_args="-mmacosx-version-min=$MACOS_MIN_VERSION" meson compile -C build-mac cp build-mac/tools/stroid "$OUTPUT_DIR/stroid-macos-arm64" echo "Building for Linux (x86_64) via Manylinux 2.28..." docker run --rm --platform linux/amd64 \ -v "$(pwd)":/src -w /src \ $X86_IMAGE /bin/bash -c " /opt/python/cp311-cp311/bin/pip install meson ninja export PATH=/opt/python/cp311-cp311/bin:\$PATH rm -rf build-linux-x86 meson setup build-linux-x86 --buildtype release -Dbuild_tests=false meson compile -C build-linux-x86 cp build-linux-x86/tools/stroid /src/$OUTPUT_DIR/stroid-linux-x86_64 " echo "Building for Linux (ARM64) via Manylinux 2.28..." docker run --rm --platform linux/arm64 \ -v "$(pwd)":/src -w /src \ $ARM_IMAGE /bin/bash -c " /opt/python/cp311-cp311/bin/pip install meson ninja export PATH=/opt/python/cp311-cp311/bin:\$PATH rm -rf build-linux-arm meson setup build-linux-arm --buildtype release -Dbuild_tests=false meson compile -C build-linux-arm cp build-linux-arm/tools/stroid /src/$OUTPUT_DIR/stroid-linux-arm64 " echo "---" echo "All binaries generated in /$OUTPUT_DIR" ls -lh "$OUTPUT_DIR"