name: release-python # on: [push, pull_request] on: push: tags: - '*' env: DEVELOPER_DIR: /Applications/Xcode_13.4.1.app/Contents/Developer MAC_DEPLOYMENT_TARGET: '10.9' MAC_ARM64_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-20.04, arch: x86_64, build: 'cp*-manylinux*', build_id: cp-manylinux } - { os: ubuntu-20.04, arch: x86_64, build: 'cp*-musllinux*', build_id: cp-musllinux } - { os: ubuntu-20.04, arch: x86_64, build: 'pp*', build_id: pp } - { os: ubuntu-20.04, arch: i686, build: 'cp*-manylinux*', build_id: cp-manylinux } - { os: ubuntu-20.04, arch: i686, build: 'cp*-musllinux*', build_id: cp-musllinux } - { os: ubuntu-20.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-latest, arch: x86_64, build: 'cp*', build_id: cp } - { os: macos-latest, arch: x86_64, build: 'pp*', build_id: pp } - { os: macos-latest, arch: arm64, build: 'cp*', build_id: cp } steps: - uses: actions/checkout@v4 with: submodules: true - uses: actions/setup-python@v5 with: python-version: '3.x' # build wheels for ubuntu-20.04 - name: Build wheels for ubuntu if: matrix.os == 'ubuntu-20.04' uses: pypa/cibuildwheel@v2.16.2 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.16.2 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.16.2 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-latest - name: cache-openmp for macos if: matrix.os == 'macos-latest' id: cache-openmp uses: actions/cache@v4 with: path: openmp-install key: openmp-macos-install-20230504 - name: openmp for macos if: matrix.os == 'macos-latest' && steps.cache-openmp.outputs.cache-hit != 'true' run: | wget https://github.com/llvm/llvm-project/releases/download/llvmorg-11.0.0/openmp-11.0.0.src.tar.xz tar -xf openmp-11.0.0.src.tar.xz cd openmp-11.0.0.src sed -i'' -e '/.size __kmp_unnamed_critical_addr/d' runtime/src/z_Linux_asm.S sed -i'' -e 's/__kmp_unnamed_critical_addr/___kmp_unnamed_critical_addr/g' runtime/src/z_Linux_asm.S - name: openmp-build-x86_64 for macos if: matrix.os == 'macos-latest' && steps.cache-openmp.outputs.cache-hit != 'true' run: | cd openmp-11.0.0.src mkdir -p build-x86_64 && cd build-x86_64 cmake -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/toolchains/ios.toolchain.cmake -DPLATFORM=MAC -DARCHS="x86_64" \ -DDEPLOYMENT_TARGET=$MAC_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \ -DPERL_EXECUTABLE=/usr/local/bin/perl \ -DLIBOMP_ENABLE_SHARED=OFF -DLIBOMP_OMPT_SUPPORT=OFF -DLIBOMP_USE_HWLOC=OFF .. cmake --build . -j 3 cmake --build . --target install - name: openmp-build-arm64 for macos if: matrix.os == 'macos-latest' && steps.cache-openmp.outputs.cache-hit != 'true' run: | cd openmp-11.0.0.src mkdir -p build-arm64 && cd build-arm64 cmake -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/toolchains/ios.toolchain.cmake -DPLATFORM=MAC_ARM64 -DARCHS="arm64" \ -DDEPLOYMENT_TARGET=$MAC_ARM64_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \ -DPERL_EXECUTABLE=/usr/local/bin/perl \ -DLIBOMP_ENABLE_SHARED=OFF -DLIBOMP_OMPT_SUPPORT=OFF -DLIBOMP_USE_HWLOC=OFF .. cmake --build . -j 3 cmake --build . --target install - name: openmp-merge-fat-library for macos if: matrix.os == 'macos-latest' && steps.cache-openmp.outputs.cache-hit != 'true' run: | mkdir -p $GITHUB_WORKSPACE/openmp-install cp -a openmp-11.0.0.src/build-x86_64/install/include $GITHUB_WORKSPACE/openmp-install mkdir -p $GITHUB_WORKSPACE/openmp-install/lib lipo -create \ openmp-11.0.0.src/build-x86_64/install/lib/libomp.a \ openmp-11.0.0.src/build-arm64/install/lib/libomp.a \ -o $GITHUB_WORKSPACE/openmp-install/lib/libomp.a - name: install-openmp for macos if: matrix.os == 'macos-latest' 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-latest' run: | wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg hdiutil attach vulkansdk-macos-1.3.236.0.dmg sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install - name: Build wheels for macos x86_64 if: matrix.os == 'macos-latest' && matrix.arch == 'x86_64' uses: pypa/cibuildwheel@v2.16.2 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="10.9" 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="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" Vulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib with: output-dir: wheelhouse - name: Build wheels for macos arm64 if: matrix.os == 'macos-latest' && matrix.arch == 'arm64' uses: pypa/cibuildwheel@v2.16.2 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="11.0" 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="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" Vulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib 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 build_wheels_qemu_cp: name: ${{ matrix.arch }} ${{ matrix.build_cp }} ${{ matrix.build_sub }} runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: arch: [aarch64, ppc64le, s390x] build_cp: [cp36, cp37, cp38, cp39, cp310, cp311, cp312] build_sub: [manylinux, musllinux] steps: - uses: actions/checkout@v4 with: submodules: true - uses: actions/setup-python@v5 with: python-version: '3.x' - name: Set up QEMU uses: docker/setup-qemu-action@v3 with: platforms: all - name: Build wheels for manylinux with qemu uses: pypa/cibuildwheel@v2.16.2 env: CIBW_ARCHS_LINUX: ${{ matrix.arch }} CIBW_BUILD: ${{ matrix.build_cp }}-${{ matrix.build_sub }}* CIBW_BUILD_VERBOSITY: 1 CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=4 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_qemu_cp-${{ matrix.arch }}-${{ matrix.build_cp }}-${{ matrix.build_sub }} path: wheelhouse/*.whl build_wheels_qemu_pp: name: ${{ matrix.arch }} ${{ matrix.build_pp }} runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: arch: [aarch64] build_pp: [pp37, pp38, pp39, pp310] steps: - uses: actions/checkout@v4 with: submodules: true - uses: actions/setup-python@v5 with: python-version: '3.x' - name: Set up QEMU uses: docker/setup-qemu-action@v3 with: platforms: all - name: Build wheels for manylinux with qemu uses: pypa/cibuildwheel@v2.16.2 env: CIBW_ARCHS_LINUX: ${{ matrix.arch }} CIBW_BUILD: ${{ matrix.build_pp }}-* CIBW_BUILD_VERBOSITY: 1 CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=4 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_qemu_pp-${{ matrix.arch }}-${{ matrix.build_pp }} path: wheelhouse/*.whl upload_all: permissions: contents: none name: Upload needs: [build_wheels, build_wheels_qemu_cp, build_wheels_qemu_pp, 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 }}