|
- name: release-python
- # on: [push, pull_request]
- on:
- push:
- tags:
- - '*'
-
- env:
- DEVELOPER_DIR: /Applications/Xcode_15.2.app/Contents/Developer
- MAC_DEPLOYMENT_TARGET: '11.0'
- ENABLE_BITCODE: OFF
- ENABLE_ARC: OFF
- ENABLE_VISIBILITY: OFF
-
- jobs:
- build_sdist:
- name: Build SDist
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- with:
- submodules: true
-
- - uses: actions/setup-python@v5
- with:
- python-version: '3.x'
-
- - name: Install deps
- run: python -m pip install twine build
-
- - name: Build SDist
- run: python -m build -s
-
- - name: Check metadata
- run: twine check dist/*
-
- - uses: actions/upload-artifact@v4
- with:
- name: sdist
- path: dist/*.tar.gz
-
- build_wheels:
- name: ${{ matrix.arch }} ${{ matrix.build_id }} on ${{ matrix.os }}
- runs-on: ${{ matrix.os }}
- strategy:
- fail-fast: false
- matrix:
- include:
- - { os: ubuntu-24.04, arch: x86_64, build: 'cp*-manylinux*', build_id: cp-manylinux }
- - { os: ubuntu-24.04, arch: x86_64, build: 'cp*-musllinux*', build_id: cp-musllinux }
- - { os: ubuntu-24.04, arch: x86_64, build: 'pp*', build_id: pp }
- - { os: ubuntu-24.04, arch: i686, build: 'cp*-manylinux*', build_id: cp-manylinux }
- - { os: ubuntu-24.04, arch: i686, build: 'cp*-musllinux*', build_id: cp-musllinux }
- - { os: ubuntu-24.04, arch: i686, build: 'pp*', build_id: pp }
- - { os: windows-2019, arch: x86, build: 'cp*', build_id: cp }
- - { os: windows-2019, arch: AMD64, build: 'cp*', build_id: cp }
- - { os: windows-2019, arch: AMD64, build: 'pp*', build_id: pp }
- - { os: windows-2019, arch: ARM64, build: 'cp*', build_id: cp }
- - { os: macos-13, arch: x86_64, build: 'cp*', build_id: cp }
- - { os: macos-13, arch: x86_64, build: 'pp*', build_id: pp }
- - { os: macos-13, arch: arm64, build: 'cp*', build_id: cp }
- - { os: ubuntu-24.04-arm, arch: armv7l, build: 'cp*-manylinux*', build_id: cp-manylinux }
- - { os: ubuntu-24.04-arm, arch: armv7l, build: 'cp*-musllinux*', build_id: cp-musllinux }
- - { os: ubuntu-24.04-arm, arch: aarch64, build: 'cp*-manylinux*', build_id: cp-manylinux }
- - { os: ubuntu-24.04-arm, arch: aarch64, build: 'cp*-musllinux*', build_id: cp-musllinux }
- - { os: ubuntu-24.04-arm, arch: aarch64, build: 'pp*', build_id: pp }
-
- env:
- OPENMP_VERSION: '18.1.2'
- OPENMP_CMAKE_OPTIONS: |
- -DCMAKE_TOOLCHAIN_FILE=../../toolchains/ios.toolchain.cmake \
- -DDEPLOYMENT_TARGET=$MAC_DEPLOYMENT_TARGET \
- -DENABLE_BITCODE=$ENABLE_BITCODE \
- -DENABLE_ARC=$ENABLE_ARC \
- -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \
- -DCMAKE_INSTALL_PREFIX=install \
- -DCMAKE_BUILD_TYPE=Release \
- -DPERL_EXECUTABLE=/usr/local/bin/perl \
- -DLIBOMP_ENABLE_SHARED=OFF \
- -DLIBOMP_OMPT_SUPPORT=OFF \
- -DLIBOMP_USE_HWLOC=OFF \
-
- steps:
- - uses: actions/checkout@v4
- with:
- submodules: true
-
- - uses: actions/setup-python@v5
- with:
- python-version: '3.x'
-
- # build wheels for ubuntu-24.04
- - name: Build wheels for ubuntu
- if: matrix.os == 'ubuntu-24.04'
- uses: pypa/cibuildwheel@v2.23.3
- env:
- CIBW_ARCHS_LINUX: ${{ matrix.arch }}
- CIBW_BUILD: ${{ matrix.build }}
- CIBW_BUILD_VERBOSITY: 1
- CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=4
- with:
- output-dir: wheelhouse
-
- # build wheels for ubuntu-24.04 armv7l
- - name: Build wheels for ubuntu armv7l
- if: matrix.os == 'ubuntu-24.04-arm' && (matrix.arch == 'armv7l')
- uses: pypa/cibuildwheel@v2.23.3
- env:
- CIBW_ARCHS_LINUX: ${{ matrix.arch }}
- CIBW_BUILD: ${{ matrix.build }}
- CIBW_BUILD_VERBOSITY: 1
- CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=4
- CFLAGS="-mfpu=neon" CXXFLAGS="-mfpu=neon"
- with:
- output-dir: wheelhouse
-
- # build wheels for ubuntu-24.04 aarch64
- - name: Build wheels for ubuntu aarch64
- if: matrix.os == 'ubuntu-24.04-arm' && (matrix.arch == 'aarch64')
- uses: pypa/cibuildwheel@v2.23.3
- env:
- CIBW_ARCHS_LINUX: ${{ matrix.arch }}
- CIBW_BUILD: ${{ matrix.build }}
- CIBW_BUILD_VERBOSITY: 1
- CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=4
- with:
- output-dir: wheelhouse
-
- # build wheels for windows-2019
- - name: Build wheels for windows
- if: matrix.os == 'windows-2019' && (matrix.arch == 'AMD64' || matrix.arch == 'x86')
- uses: pypa/cibuildwheel@v2.23.3
- env:
- CIBW_ARCHS_WINDOWS: ${{ matrix.arch }}
- CIBW_BUILD: ${{ matrix.build }}
- CIBW_BUILD_VERBOSITY: 1
- CIBW_ENVIRONMENT_WINDOWS: CMAKE_BUILD_PARALLEL_LEVEL=4
- CIBW_BEFORE_BUILD: pip install delvewheel
- CIBW_REPAIR_WHEEL_COMMAND: delvewheel repair -w {dest_dir} {wheel}
- with:
- output-dir: wheelhouse
-
- - name: Build wheels for windows ARM64
- if: matrix.os == 'windows-2019' && matrix.arch == 'ARM64'
- uses: pypa/cibuildwheel@v2.23.3
- env:
- CIBW_ARCHS_WINDOWS: ${{ matrix.arch }}
- CIBW_BUILD: ${{ matrix.build }}
- CIBW_BUILD_VERBOSITY: 1
- CIBW_ENVIRONMENT_WINDOWS: CMAKE_BUILD_PARALLEL_LEVEL=4
- CIBW_BEFORE_BUILD: pip install delvewheel
- CIBW_REPAIR_WHEEL_COMMAND: delvewheel repair -w {dest_dir} {wheel} --no-dll "msvcp140.dll;vcomp140.dll"
- with:
- output-dir: wheelhouse
-
- # build wheels for macos-13
- - name: cache-openmp for macos
- if: matrix.os == 'macos-13'
- id: cache-openmp
- uses: actions/cache@v4
- with:
- path: openmp-install
- key: openmp-macos-install-20240403
-
- - name: openmp for macos
- if: matrix.os == 'macos-13' && steps.cache-openmp.outputs.cache-hit != 'true'
- run: |
- wget https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.OPENMP_VERSION }}/cmake-${{ env.OPENMP_VERSION }}.src.tar.xz
- tar -xf cmake-${{ env.OPENMP_VERSION }}.src.tar.xz
- wget https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.OPENMP_VERSION }}/openmp-${{ env.OPENMP_VERSION }}.src.tar.xz
- tar -xf openmp-${{ env.OPENMP_VERSION }}.src.tar.xz
- mv cmake-${{ env.OPENMP_VERSION }}.src/Modules/* openmp-${{ env.OPENMP_VERSION }}.src/cmake/
- cd openmp-${{ env.OPENMP_VERSION }}.src
- wget https://github.com/nihui/llvm-project/commit/ef8c35bcf5d9cfdb0764ffde6a63c04ec715bc37.patch
- patch -p2 -i ef8c35bcf5d9cfdb0764ffde6a63c04ec715bc37.patch
- wget https://github.com/nihui/llvm-project/commit/5c12711f9a21f41bea70566bf15a4026804d6b20.patch
- patch -p2 -i 5c12711f9a21f41bea70566bf15a4026804d6b20.patch
-
- - name: openmp-build-x86_64 for macos
- if: matrix.os == 'macos-13' && steps.cache-openmp.outputs.cache-hit != 'true'
- run: |
- cd openmp-${{ env.OPENMP_VERSION }}.src
- mkdir -p build-x86_64 && cd build-x86_64
- cmake ${{ env.OPENMP_CMAKE_OPTIONS }} -DPLATFORM=MAC -DARCHS="x86_64" ..
- cmake --build . -j 4
- cmake --build . --target install
-
- - name: openmp-build-arm64 for macos
- if: matrix.os == 'macos-13' && steps.cache-openmp.outputs.cache-hit != 'true'
- run: |
- cd openmp-${{ env.OPENMP_VERSION }}.src
- mkdir -p build-arm64 && cd build-arm64
- cmake ${{ env.OPENMP_CMAKE_OPTIONS }} -DPLATFORM=MAC_ARM64 -DARCHS="arm64" ..
- cmake --build . -j 4
- cmake --build . --target install
-
- - name: openmp-merge-fat-library for macos
- if: matrix.os == 'macos-13' && steps.cache-openmp.outputs.cache-hit != 'true'
- run: |
- mkdir -p $GITHUB_WORKSPACE/openmp-install
- cp -a openmp-${{ env.OPENMP_VERSION }}.src/build-x86_64/install/include $GITHUB_WORKSPACE/openmp-install
- mkdir -p $GITHUB_WORKSPACE/openmp-install/lib
- lipo -create \
- openmp-${{ env.OPENMP_VERSION }}.src/build-x86_64/install/lib/libomp.a \
- openmp-${{ env.OPENMP_VERSION }}.src/build-arm64/install/lib/libomp.a \
- -o $GITHUB_WORKSPACE/openmp-install/lib/libomp.a
-
- - name: install-openmp for macos
- if: matrix.os == 'macos-13'
- run: |
- sudo cp $GITHUB_WORKSPACE/openmp-install/include/* $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
- sudo cp $GITHUB_WORKSPACE/openmp-install/lib/libomp.a $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib
-
- - name: vulkansdk for macos
- if: matrix.os == 'macos-13'
- run: |
- wget https://sdk.lunarg.com/sdk/download/1.3.290.0/mac/vulkansdk-macos-1.3.290.0.dmg?Human=true -O vulkansdk-macos-1.3.290.0.dmg
- hdiutil attach vulkansdk-macos-1.3.290.0.dmg
- sudo /Volumes/vulkansdk-macos-1.3.290.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.290.0 --accept-licenses --default-answer --confirm-command install
-
- - name: Build wheels for macos x86_64
- if: matrix.os == 'macos-13' && matrix.arch == 'x86_64'
- uses: pypa/cibuildwheel@v2.23.3
- env:
- CIBW_ARCHS_MACOS: ${{ matrix.arch }}
- CIBW_BUILD: ${{ matrix.build }}
- CIBW_BUILD_VERBOSITY: 1
- CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=3
- CMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/toolchains/ios.toolchain.cmake PLATFORM=MAC ARCHS="x86_64"
- DEPLOYMENT_TARGET=$MAC_DEPLOYMENT_TARGET ENABLE_BITCODE=OFF ENABLE_ARC=OFF ENABLE_VISIBILITY=OFF
- OpenMP_C_FLAGS="-Xclang -fopenmp" OpenMP_CXX_FLAGS="-Xclang -fopenmp"
- OpenMP_C_LIB_NAMES="libomp" OpenMP_CXX_LIB_NAMES="libomp"
- OpenMP_libomp_LIBRARY="libomp.a"
- Vulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.290.0/macOS/lib/libMoltenVK.dylib
- MACOSX_DEPLOYMENT_TARGET=$MAC_DEPLOYMENT_TARGET
- with:
- output-dir: wheelhouse
-
- - name: Build wheels for macos arm64
- if: matrix.os == 'macos-13' && matrix.arch == 'arm64'
- uses: pypa/cibuildwheel@v2.23.3
- env:
- CIBW_ARCHS_MACOS: ${{ matrix.arch }}
- CIBW_BUILD: ${{ matrix.build }}
- CIBW_BUILD_VERBOSITY: 1
- CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=3
- CMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/toolchains/ios.toolchain.cmake PLATFORM=MAC_ARM64 ARCHS="arm64"
- DEPLOYMENT_TARGET=$MAC_DEPLOYMENT_TARGET ENABLE_BITCODE=OFF ENABLE_ARC=OFF ENABLE_VISIBILITY=OFF
- OpenMP_C_FLAGS="-Xclang -fopenmp" OpenMP_CXX_FLAGS="-Xclang -fopenmp"
- OpenMP_C_LIB_NAMES="libomp" OpenMP_CXX_LIB_NAMES="libomp"
- OpenMP_libomp_LIBRARY="libomp.a"
- Vulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.290.0/macOS/lib/libMoltenVK.dylib
- MACOSX_DEPLOYMENT_TARGET=$MAC_DEPLOYMENT_TARGET
- with:
- output-dir: wheelhouse
-
- - name: Show files
- run: ls -lh wheelhouse
- shell: bash
-
- - name: Verify clean directory
- run: git diff --exit-code
- shell: bash
-
- - name: Upload wheels
- uses: actions/upload-artifact@v4
- with:
- name: wheels-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.build_id }}
- path: wheelhouse/*.whl
-
- upload_all:
- permissions:
- contents: none
- name: Upload
- needs: [build_wheels, build_sdist]
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/setup-python@v5
- with:
- python-version: '3.x'
-
- - uses: actions/download-artifact@v4
- with:
- path: dist
- merge-multiple: true
-
- - uses: pypa/gh-action-pypi-publish@release/v1
- with:
- user: __token__
- password: ${{ secrets.PYPI_API_TOKEN }}
|