Skip to content

copy pasted the old task def for arm #25

copy pasted the old task def for arm

copy pasted the old task def for arm #25

Workflow file for this run

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