From 5b7415547711e767ecfaf879e62b0a0a0413d90b Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Thu, 31 Jul 2025 12:02:10 -0400 Subject: [PATCH] build(wheels): added wheel generation scripts and social logo --- assets/logo/GridFireSocialPreview.png | Bin 0 -> 74649 bytes assets/logo/GridFireSocialPreview.svg | 108 +++++++++++++++++++++ utils/wheels/build-wheels-linux_aarch64.sh | 37 +++++++ utils/wheels/build-wheels-linux_x86_64.sh | 37 +++++++ utils/wheels/build-wheels-macos_aarch64.sh | 70 +++++++++++++ utils/wheels/installPyEnvVersions.sh | 14 +++ utils/wheels/readme.md | 28 ++++++ 7 files changed, 294 insertions(+) create mode 100644 assets/logo/GridFireSocialPreview.png create mode 100644 assets/logo/GridFireSocialPreview.svg create mode 100755 utils/wheels/build-wheels-linux_aarch64.sh create mode 100755 utils/wheels/build-wheels-linux_x86_64.sh create mode 100755 utils/wheels/build-wheels-macos_aarch64.sh create mode 100755 utils/wheels/installPyEnvVersions.sh create mode 100644 utils/wheels/readme.md diff --git a/assets/logo/GridFireSocialPreview.png b/assets/logo/GridFireSocialPreview.png new file mode 100644 index 0000000000000000000000000000000000000000..f6cfec9a3163ae66511849a84a5971ae732222e2 GIT binary patch literal 74649 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

>gCrM;%U~6Rigc)2$%s*#SME>5qS= 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 A3jhEB literal 0 HcmV?d00001 diff --git a/assets/logo/GridFireSocialPreview.svg b/assets/logo/GridFireSocialPreview.svg new file mode 100644 index 00000000..2f57da78 --- /dev/null +++ b/assets/logo/GridFireSocialPreview.svg @@ -0,0 +1,108 @@ + + + +FIREGridFire is a part of 4D-STAR anda SERiF project diff --git a/utils/wheels/build-wheels-linux_aarch64.sh b/utils/wheels/build-wheels-linux_aarch64.sh new file mode 100755 index 00000000..74235635 --- /dev/null +++ b/utils/wheels/build-wheels-linux_aarch64.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [[ $# -ne 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +REPO_URL="$1" +WORK_DIR="$(pwd)" +WHEEL_DIR="${WORK_DIR}/wheels_linux_aarch64" + +echo "➤ Creating wheel output directory at ${WHEEL_DIR}" +mkdir -p "${WHEEL_DIR}" + +TMPDIR="$(mktemp -d)" +echo "➤ Cloning ${REPO_URL} → ${TMPDIR}/project" +git clone "${REPO_URL}" "${TMPDIR}/project" + +for IMAGE in \ + tboudreaux/manylinux_2_28_aarch64_boost_1_88_0:latest +do + docker run --rm \ + -v "${WHEEL_DIR}":/io/wheels \ + -v "${TMPDIR}/project":/io/project \ + "${IMAGE}" \ + /bin/bash -eux -c ' + cd /io/project + for PY in /opt/python/*/bin/python; do + "$PY" -m pip install --upgrade pip setuptools wheel meson meson-python + CC=clang CXX=clang++ "$PY" -m pip wheel . --config-settings=setup-args=-Dunity=on -w /io/wheels -vv + auditwheel repair /io/wheels/*.whl -w /io/wheels + done + + echo "✅ Linux wheels ready in /io/wheels" + ' +done \ No newline at end of file diff --git a/utils/wheels/build-wheels-linux_x86_64.sh b/utils/wheels/build-wheels-linux_x86_64.sh new file mode 100755 index 00000000..6dc3d8b0 --- /dev/null +++ b/utils/wheels/build-wheels-linux_x86_64.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [[ $# -ne 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +REPO_URL="$1" +WORK_DIR="$(pwd)" +WHEEL_DIR="${WORK_DIR}/wheels_linux_x86_64" + +echo "➤ Creating wheel output directory at ${WHEEL_DIR}" +mkdir -p "${WHEEL_DIR}" + +TMPDIR="$(mktemp -d)" +echo "➤ Cloning ${REPO_URL} → ${TMPDIR}/project" +git clone "${REPO_URL}" "${TMPDIR}/project" + +for IMAGE in \ + tboudreaux/manylinux_2_28_x86_64_boost_1_88_0:latest +do + docker run --rm \ + -v "${WHEEL_DIR}":/io/wheels \ + -v "${TMPDIR}/project":/io/project \ + "${IMAGE}" \ + /bin/bash -eux -c ' + cd /io/project + for PY in /opt/python/*/bin/python; do + "$PY" -m pip install --upgrade pip setuptools wheel meson meson-python + CC=clang CXX=clang++ "$PY" -m pip wheel . --config-settings=setup-args=-Dunity=on -w /io/wheels -vv + auditwheel repair /io/wheels/*.whl -w /io/wheels + done + + echo "✅ Linux wheels ready in /io/wheels" + ' +done \ No newline at end of file diff --git a/utils/wheels/build-wheels-macos_aarch64.sh b/utils/wheels/build-wheels-macos_aarch64.sh new file mode 100755 index 00000000..df1a7323 --- /dev/null +++ b/utils/wheels/build-wheels-macos_aarch64.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [[ $(uname -m) != "arm64" ]]; then + echo "Error: This script is intended to run on an Apple Silicon (arm64) Mac." + exit 1 +fi + +if [[ $# -ne 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +# --- Initial Setup --- +REPO_URL="$1" +WORK_DIR="$(pwd)" +WHEEL_DIR="${WORK_DIR}/wheels_macos_aarch64_tmp" +FINAL_WHEEL_DIR="${WORK_DIR}/wheels_macos_aarch64" + +echo "➤ Creating wheel output directories" +mkdir -p "${WHEEL_DIR}" +mkdir -p "${FINAL_WHEEL_DIR}" + +TMPDIR="$(mktemp -d)" +echo "➤ Cloning ${REPO_URL} → ${TMPDIR}/project" +git clone --depth 1 "${REPO_URL}" "${TMPDIR}/project" +cd "${TMPDIR}/project" + +# --- macOS Build Configuration --- +export MACOSX_DEPLOYMENT_TARGET=12.0 + +PYTHON_VERSIONS=("3.8.20" "3.9.23" "3.10.18" "3.11.13" "3.12.11" "3.13.5" "3.13.5t" "3.14.0rc1" "3.14.0rc1t" 'pypy3.10-7.3.19' "pypy3.11-7.3.20") + +if ! command -v pyenv &> /dev/null; then + echo "Error: pyenv not found. Please install it to manage Python versions." + exit 1 +fi +eval "$(pyenv init -)" + +for PY_VERSION in "${PYTHON_VERSIONS[@]}"; do + ( + set -e + + if ! pyenv versions --bare --filter="${PY_VERSION}." &>/dev/null; then + echo "⚠️ Python version matching '${PY_VERSION}.*' not found by pyenv. Skipping." + continue + fi + + pyenv shell "${PY_VERSION}" + + PY="$(pyenv which python)" + echo "➤ Building for $($PY --version) on macOS arm64 (target: ${MACOSX_DEPLOYMENT_TARGET})" + + "$PY" -m pip install --upgrade pip setuptools wheel meson meson-python delocate + + CC=clang CXX=clang++ "$PY" -m pip wheel . \ + --config-settings=setup-args=-Dunity=on \ + -w "${WHEEL_DIR}" -vv + + echo "➤ Repairing wheel(s) with delocate" + delocate-wheel -w "${FINAL_WHEEL_DIR}" "${WHEEL_DIR}"/*.whl + + rm "${WHEEL_DIR}"/*.whl + + ) +done + +rm -rf "${TMPDIR}" +rm -rf "${WHEEL_DIR}" + diff --git a/utils/wheels/installPyEnvVersions.sh b/utils/wheels/installPyEnvVersions.sh new file mode 100755 index 00000000..bdbe5ae4 --- /dev/null +++ b/utils/wheels/installPyEnvVersions.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +pyenv install 3.8.20 +pyenv install 3.9.23 +pyenv install 3.10.18 +pyenv install 3.11.13 +pyenv install 3.12.11 +pyenv install 3.13.5 +pyenv install 3.13.5t +pyenv install 3.14.0rc1 +pyenv install 3.14.0rc1t +pyenv install pypy3.10-7.3.19 +pyenv install pypy3.11-7.3.20 + diff --git a/utils/wheels/readme.md b/utils/wheels/readme.md new file mode 100644 index 00000000..b0c3d112 --- /dev/null +++ b/utils/wheels/readme.md @@ -0,0 +1,28 @@ +# Wheel Generation +This directory contains scripts to generate precompiled python wheels for GridFire + +# Notes +- MacOS wheels can only be generated on macos +- aarch64 wheels can only be generated on aarch64 machines +- x86_64 wheels can only be generated on x86_64 machines +- linux wheels can be generated on any linux machine, but the target architecture must match the machine architecture +- Running each script will take **a very long time** (could be upwards of half of a day depending on your system) and will require roughly 2GB of disk space +- When generating MacOS wheels, you must have all the correct versions of python installed with `pyenv`. Run the script `utils/wheels/installPyEnvVersions.sh` to install the correct versions of python. + +# Usage +Once you know you are on the correct machine, run the script for your desired architecture and operating system. For example, to generate a macos x86_64 wheel, run: + +```bash +./build-wheels-macos-aarch64.sh https://github.com/4D-STAR/GridFire +``` + +Once you have all the wheels generated (which will likely require multiple systems), copy all the wheels into a single +directory (lets assume its called `wheels` and in the root of the directory) and then run (from the root of the repository): + +```bash +python -m pip install --upgrade build +python -m build --sdist --outdir wheels +twine upload wheels/* +``` + +Thie will also take a while (it needs to upload all the wheels to PyPI) but will result in all the wheels being uploaded to PyPI. \ No newline at end of file