From 90dc5706943ade1ca5c092b8c9c0d618f2f411bf Mon Sep 17 00:00:00 2001 From: StephenCzarnecki Date: Wed, 30 Oct 2024 13:47:35 -0400 Subject: [PATCH] github actions: fixes for trying to build linux wheels using cibuildwheel --- .github/workflows/build_wheels.yml | 151 ++++++++++++++++------------- 1 file changed, 83 insertions(+), 68 deletions(-) diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index 29ab4c2..dbd2a52 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -2,107 +2,126 @@ name: Build wheels on: [push, pull_request] +# Cannot use cibuildwheels because the current images used by cibuildwheels do not support C++17. + jobs: - build_wheels_linux: - name: ${{ matrix.os }}-${{ matrix.architecture }} + build_wheels_windows: + name: ${{ matrix.os }} ${{ matrix.python-version }} ${{ matrix.arch }} wheels runs-on: ${{ matrix.os }} + env: + TEMP: C:\Temp + TMP: C:\Temp + strategy: - fail-fast: false matrix: - os: [ubuntu-latest, macos-latest] - architecture: [x86_64, aarch64] - - steps: + os: [windows-2022] + arch: [x86, x64] + python-version: [3.8, 3.9, "3.10", "3.11", "3.12"] + + steps: + - name: Support longpaths + run: git config --system core.longpaths true + + - name: Check LongPathsEnabled + run: | + (Get-ItemProperty "HKLM:System\CurrentControlSet\Control\FileSystem").LongPathsEnabled + - name: Checkout repository uses: actions/checkout@v4 - - name: Install cibuildwheel - run: | - python -m pip install --upgrade pip - pip install cibuildwheel - - - name: Setup variables for aarch64 - if: matrix.architecture == 'aarch64' - run: | - echo "CIBW_ARCHS_LINUX=aarch64" >> $GITHUB_ENV - echo "CIBW_PLATFORM=linux" >> $GITHUB_ENV - echo "CIBW_EMULATOR=linux/aarch64" >> $GITHUB_ENV + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + architecture: ${{ matrix.arch }} - - name: Build wheels with cibuildwheel - env: - CIBW_ARCHS_LINUX: ${{ matrix.architecture }} - CIBW_SKIP: "cp36-* cp37-*" + - name: Install packages run: | - cibuildwheel --output-dir wheelhouse + pip install wheel + pip install setuptools + pip install build - - name: List wheels - run: | - ls wheelhouse + - name: build + run: python -m build - - name: Upload wheels as artifact + - name: upload wheels uses: actions/upload-artifact@v3 with: - name: python-wheels - path: wheelhouse/*.whl - + path: ./dist/*.whl + build_wheels_mac: - name: ${{ matrix.os }}-${{ matrix.architecture }} + name: ${{ matrix.os }} ${{ matrix.python-version }} wheels runs-on: ${{ matrix.os }} strategy: - fail-fast: false matrix: - os: [macos-latest] - architecture: [x86_64, arm64] + # Trying to use cibuildwheels to build mac wheels fails because the version of XCode is not high enough. + # There is documentation here https://github.com/pypa/cibuildwheel/blob/main/docs/cpp_standards.md on how to + # set it but I could not get it to work while using the standard images provided by github actions does work. + os: [macos-latest, macos-13] + python-version: [3.8, 3.9, "3.10", "3.11", "3.12"] + env: + SYSTEM_VERSION_COMPAT: 0 steps: - name: Checkout repository uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install packages + run: | + pip install wheel + pip install setuptools + pip install build + + - name: build + run: python -m build + + - name: upload wheels + uses: actions/upload-artifact@v3 + with: + path: ./dist/*.whl + + build_wheels_manylinux_x86_64: + name: Build manylinux wheels + runs-on: ubuntu-24.04 + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Install cibuildwheel run: | python -m pip install --upgrade pip pip install cibuildwheel - - - name: Set macOS Deployment Target - run: | - export MACOSX_DEPLOYMENT_TARGET=11.0 - echo "CIBW_PLATFORM=macos" >> $GITHUB_ENV - name: Build wheels with cibuildwheel env: - CIBW_ARCHS_LINUX: ${{ matrix.architecture }} - CIBW_ARCHS_MACOS: ${{ matrix.architecture }} + CIBW_PLATFORM: "linux" CIBW_SKIP: "cp36-* cp37-*" + CIBW_ARCHS_LINUX: "x86_64" run: | cibuildwheel --output-dir wheelhouse - - - name: List wheels - run: | - ls wheelhouse - - - name: Upload wheels as artifact + + - name: upload wheels uses: actions/upload-artifact@v3 with: - name: python-wheels path: wheelhouse/*.whl - build_wheels_windows: - name: ${{ matrix.os }}-${{ matrix.architecture }} - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [windows-latest] - architecture: [x86, AMD64, ARM64] + build_wheels_manylinux_arm64: + name: Build manylinux wheels (arm64) + runs-on: ubuntu-24.04 steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Setup Python for Windows (Only on Windows) - if: matrix.os == 'windows-latest' - uses: actions/setup-python@v4 + # Register QEMU for cross-architecture emulation + - name: Set up QEMU for cross-compilation + uses: docker/setup-qemu-action@v2 with: - python-version: '3.x' + platforms: arm64 - name: Install cibuildwheel run: | @@ -111,17 +130,13 @@ jobs: - name: Build wheels with cibuildwheel env: - CIBW_ARCHS_WINDOWS: ${{ matrix.architecture }} + CIBW_PLATFORM: "linux" CIBW_SKIP: "cp36-* cp37-*" + CIBW_ARCHS_LINUX: "aarch64" run: | cibuildwheel --output-dir wheelhouse - - - name: List wheels - run: | - ls wheelhouse - - - name: Upload wheels as artifact + + - name: upload wheels uses: actions/upload-artifact@v3 with: - name: python-wheels path: wheelhouse/*.whl \ No newline at end of file