copy pasted the old task def for arm #25
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Native ARM Wheels Build (Portable + RocksDB Cached) | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: | |
| - "arm-build" | |
| env: | |
| PYREX_VERSION: "0.1.4" | |
| ROCKSDB_VERSION: "9.11.2" | |
| jobs: | |
| build_wheels_linux_arm: | |
| name: Build Linux ARM (aarch64) - Portable + Cached RocksDB | |
| runs-on: ubuntu-24.04-arm | |
| permissions: | |
| contents: read | |
| env: | |
| CIBW_ARCHS_LINUX: "aarch64" | |
| CIBW_SKIP: "pp*" | |
| CIBW_BUILD: "cp38-* cp39-* cp310-* cp311-* cp312-*" | |
| CIBW_TEST_REQUIRES: "pytest" | |
| CIBW_TEST_COMMAND: "pytest {project}/tests" | |
| # CPU-portable baseline (Option A) | |
| PORTABLE_FLAGS: "-O3 -march=armv8-a -mtune=generic -flto" | |
| # Pin images explicitly so caches don't silently mismatch when defaults change. | |
| CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux_2_28" | |
| CIBW_MUSLLINUX_AARCH64_IMAGE: "musllinux_1_2" | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python (host) | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.x" | |
| - name: Install cibuildwheel | |
| run: python -m pip install -U pip cibuildwheel | |
| - name: Cache RocksDB builds | |
| uses: actions/cache@v4 | |
| with: | |
| path: .cibw-rocksdb-cache | |
| key: >- | |
| rocksdb-${{ runner.os }}-linux-arch=${{ env.CIBW_ARCHS_LINUX }}-v=${{ env.ROCKSDB_VERSION }} | |
| -manylinux=${{ env.CIBW_MANYLINUX_AARCH64_IMAGE }}-musllinux=${{ env.CIBW_MUSLLINUX_AARCH64_IMAGE }} | |
| -flags=${{ env.PORTABLE_FLAGS }} | |
| restore-keys: | | |
| rocksdb-${{ runner.os }}-linux-arch=${{ env.CIBW_ARCHS_LINUX }}-v=${{ env.ROCKSDB_VERSION }}-manylinux=${{ env.CIBW_MANYLINUX_AARCH64_IMAGE }}-musllinux=${{ env.CIBW_MUSLLINUX_AARCH64_IMAGE }}- | |
| rocksdb-${{ runner.os }}-linux-arch=${{ env.CIBW_ARCHS_LINUX }}-v=${{ env.ROCKSDB_VERSION }}- | |
| - name: Build wheels | |
| env: | |
| CIBW_CONTAINER_ENGINE: >- | |
| docker; | |
| create-args: --network=host | |
| -v ${{ github.workspace }}/.cibw-rocksdb-cache:/cibw-cache | |
| CIBW_ENVIRONMENT: > | |
| PYREX_VERSION='${{ env.PYREX_VERSION }}' | |
| ROCKSDB_VERSION='${{ env.ROCKSDB_VERSION }}' | |
| PORTABLE_FLAGS='${{ env.PORTABLE_FLAGS }}' | |
| CIBW_MANYLINUX_AARCH64_IMAGE='${{ env.CIBW_MANYLINUX_AARCH64_IMAGE }}' | |
| CIBW_MUSLLINUX_AARCH64_IMAGE='${{ env.CIBW_MUSLLINUX_AARCH64_IMAGE }}' | |
| MAX_JOBS="$(nproc)" | |
| CMAKE_BUILD_PARALLEL_LEVEL="$(nproc)" | |
| CFLAGS="${{ env.PORTABLE_FLAGS }}" | |
| CXXFLAGS="${{ env.PORTABLE_FLAGS }}" | |
| LDFLAGS="-flto" | |
| CC=clang | |
| CXX=clang++ | |
| CMAKE_PREFIX_PATH="/opt/rocksdb" | |
| CPPFLAGS="-I/opt/rocksdb/include $CPPFLAGS" | |
| LDFLAGS="-L/opt/rocksdb/lib $LDFLAGS" | |
| LD_LIBRARY_PATH="/opt/rocksdb/lib:$LD_LIBRARY_PATH" | |
| PKG_CONFIG_PATH="/opt/rocksdb/lib/pkgconfig:$PKG_CONFIG_PATH" | |
| CIBW_BEFORE_ALL_LINUX: | | |
| set -euxo pipefail | |
| ARCH="aarch64" | |
| PREFIX="/opt/rocksdb" | |
| FLAGS="${PORTABLE_FLAGS}" | |
| # Separate caches for glibc (manylinux) vs musl (musllinux) | |
| if [ -f /etc/alpine-release ]; then | |
| LIBC="musl" | |
| IMAGE_TAG="${CIBW_MUSLLINUX_AARCH64_IMAGE:-musllinux_unknown}" | |
| else | |
| LIBC="glibc" | |
| IMAGE_TAG="${CIBW_MANYLINUX_AARCH64_IMAGE:-manylinux_unknown}" | |
| fi | |
| SAFE_FLAGS="$(echo "${FLAGS}" | tr ' /' '__')" | |
| CACHE_TARBALL="/cibw-cache/rocksdb-v${ROCKSDB_VERSION}-${ARCH}-${LIBC}-${IMAGE_TAG}-flags-${SAFE_FLAGS}.tar.gz" | |
| if [ -f "${CACHE_TARBALL}" ]; then | |
| echo "✅ Restoring cached RocksDB from ${CACHE_TARBALL}" | |
| mkdir -p "${PREFIX}" | |
| tar -xzf "${CACHE_TARBALL}" -C / | |
| ldconfig || true | |
| exit 0 | |
| fi | |
| echo "ℹ️ No cache found for (${ARCH}, ${LIBC}, ${IMAGE_TAG}). Building RocksDB and caching..." | |
| # Install deps | |
| if [ "${LIBC}" = "musl" ]; then | |
| apk add --no-cache \ | |
| bash build-base clang clang-dev cmake git ninja \ | |
| gflags-dev snappy-dev lz4-dev zlib-dev bzip2-dev zstd-dev \ | |
| liburing-dev linux-headers wget tar | |
| elif command -v apt-get >/dev/null 2>&1; then | |
| apt-get update | |
| DEBIAN_FRONTEND=noninteractive apt-get install -y \ | |
| clang cmake build-essential ninja-build wget tar \ | |
| libgflags-dev libsnappy-dev liblz4-dev zlib1g-dev \ | |
| libbz2-dev libzstd-dev liburing-dev | |
| else | |
| (command -v dnf >/dev/null 2>&1 && dnf install -y \ | |
| clang gcc-c++ make cmake ninja-build wget tar \ | |
| gflags-devel snappy-devel lz4-devel zlib-devel bzip2-devel \ | |
| libzstd-devel liburing-devel) || \ | |
| (yum install -y epel-release && yum install -y \ | |
| clang gcc-c++ make cmake ninja-build wget tar \ | |
| gflags-devel snappy-devel lz4-devel zlib-devel bzip2-devel \ | |
| libzstd-devel liburing-devel) | |
| fi | |
| WORKDIR="$(mktemp -d)" | |
| cd "${WORKDIR}" | |
| wget -q "https://github.com/facebook/rocksdb/archive/refs/tags/v${ROCKSDB_VERSION}.tar.gz" | |
| tar -xzf "v${ROCKSDB_VERSION}.tar.gz" | |
| cd "rocksdb-${ROCKSDB_VERSION}" | |
| export CC=clang | |
| export CXX=clang++ | |
| cmake . -G Ninja \ | |
| -DCMAKE_C_COMPILER=clang \ | |
| -DCMAKE_CXX_COMPILER=clang++ \ | |
| -DPORTABLE=1 \ | |
| -DWITH_SNAPPY=1 \ | |
| -DWITH_LZ4=1 \ | |
| -DWITH_ZLIB=1 \ | |
| -DWITH_ZSTD=1 \ | |
| -DWITH_TOOLS=OFF \ | |
| -DWITH_TESTS=OFF \ | |
| -DWITH_BENCHMARK_TOOLS=OFF \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ | |
| -DCMAKE_C_FLAGS="${FLAGS}" \ | |
| -DCMAKE_CXX_FLAGS="${FLAGS} -Wno-error=unused-command-line-argument -Wno-error=nontrivial-memcall" \ | |
| -DCMAKE_EXE_LINKER_FLAGS="-flto" \ | |
| -DCMAKE_SHARED_LINKER_FLAGS="-flto" | |
| ninja -j"$(nproc)" | |
| ninja install | |
| ldconfig || true | |
| echo "📦 Saving RocksDB cache to ${CACHE_TARBALL}" | |
| tar -czf "${CACHE_TARBALL}" -C / "opt/rocksdb" | |
| run: cibuildwheel --output-dir wheelhouse | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-linux-aarch64 | |
| path: ./wheelhouse/*.whl |