Skip to content

Only add bin/ to DLL paths when exists #843

Only add bin/ to DLL paths when exists

Only add bin/ to DLL paths when exists #843

Workflow file for this run

# Relevant GHA docs links:
# https://docs.github.com/en/actions/using-jobs/running-jobs-in-a-container
# https://docs.github.com/en/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions#upgrading-a-workflow-that-accesses-ghcrio
name: Build PyPI package
on:
push:
branches: [ main, build/pip-packaging ]
release:
types: [ created ]
env:
# TODO: detect this from repo somehow: https://github.com/halide/Halide/issues/8406
LLVM_VERSION: 18.1.8
FLATBUFFERS_VERSION: 23.5.26
WABT_VERSION: 1.0.36
concurrency:
group: '${{ github.workflow }}-${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
permissions:
contents: read # to fetch code (actions/checkout)
packages: read # to fetch packages (docker)
jobs:
build-wheels:
name: Build Halide wheels for ${{ matrix.platform_tag }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
platform_tag: manylinux_x86_64
- os: windows-latest
platform_tag: win_amd64
- os: macos-13
platform_tag: macosx_x86_64
- os: macos-14
platform_tag: macosx_arm64
env:
MACOSX_DEPLOYMENT_TARGET: 11
steps:
- name: Login to GitHub Container Registry
if: matrix.os == 'ubuntu-latest'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
# See: https://github.com/pypa/setuptools-scm/issues/455
- name: Suppress git version tag
if: github.event_name == 'push' && github.ref_name == 'main'
run: |
echo 'local_scheme = "no-local-version"' >> pyproject.toml
git update-index --assume-unchanged pyproject.toml
- uses: ilammy/msvc-dev-cmd@v1
- uses: lukka/[email protected]
- uses: actions/setup-python@v5
with:
python-version: 3.8
if: runner.os == 'macOS' && runner.arch == 'ARM64'
########################################################################
# flatbuffers
########################################################################
- name: Cache flatbuffers build folder
if: matrix.os != 'ubuntu-latest'
id: cache-flatbuffers
uses: actions/cache@v4
with:
path: opt/flatbuffers
key: flatbuffers-${{ env.FLATBUFFERS_VERSION }}-${{ matrix.platform_tag }}
- uses: actions/checkout@v4
if: matrix.os != 'ubuntu-latest' && steps.cache-flatbuffers.outputs.cache-hit != 'true'
with:
path: flatbuffers-src
repository: google/flatbuffers
ref: v${{ env.FLATBUFFERS_VERSION }}
- name: Configure flatbuffers
if: matrix.os != 'ubuntu-latest' && steps.cache-flatbuffers.outputs.cache-hit != 'true'
run: >
cmake -G Ninja -S flatbuffers-src -B flatbuffers-build
"-DCMAKE_BUILD_TYPE=Release"
"-DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/opt/flatbuffers"
"-DFLATBUFFERS_BUILD_TESTS=NO"
- name: Install flatbuffers
if: matrix.os != 'ubuntu-latest' && steps.cache-flatbuffers.outputs.cache-hit != 'true'
run: |
cmake --build flatbuffers-build --target install
cmake -E rm -rf flatbuffers-src flatbuffers-build
########################################################################
# wabt
########################################################################
- name: Cache wabt build folder
if: matrix.os != 'ubuntu-latest' && matrix.os != 'windows-latest'
id: cache-wabt
uses: actions/cache@v4
with:
path: opt/wabt
key: wabt-${{ env.WABT_VERSION }}-${{ matrix.platform_tag }}
- uses: actions/checkout@v4
if: >
matrix.os != 'ubuntu-latest' && matrix.os != 'windows-latest'
&& steps.cache-wabt.outputs.cache-hit != 'true'
with:
submodules: 'true'
path: wabt-src
repository: WebAssembly/wabt
ref: ${{ env.WABT_VERSION }}
- name: Configure wabt
if: >
matrix.os != 'ubuntu-latest' && matrix.os != 'windows-latest'
&& steps.cache-wabt.outputs.cache-hit != 'true'
run: >
cmake -G Ninja -S wabt-src -B wabt-build
"-DCMAKE_BUILD_TYPE=Release"
"-DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/opt/wabt"
"-DWITH_EXCEPTIONS=ON"
"-DBUILD_TESTS=OFF"
"-DBUILD_TOOLS=OFF"
"-DBUILD_LIBWASM=OFF"
"-DUSE_INTERNAL_SHA256=ON"
- name: Install wabt
if: >
matrix.os != 'ubuntu-latest' && matrix.os != 'windows-latest'
&& steps.cache-wabt.outputs.cache-hit != 'true'
run: |
cmake --build wabt-build --target install
cmake -E rm -rf wabt-src wabt-build
########################################################################
# LLVM
########################################################################
- name: Cache LLVM build folder
if: matrix.os != 'ubuntu-latest'
id: cache-llvm
uses: actions/cache@v4
with:
path: opt/llvm
key: llvm-${{ env.LLVM_VERSION }}-${{ matrix.platform_tag }}
- uses: actions/checkout@v4
if: matrix.os != 'ubuntu-latest' && steps.cache-llvm.outputs.cache-hit != 'true'
with:
path: llvm-src
repository: llvm/llvm-project
ref: llvmorg-${{ env.LLVM_VERSION }}
- name: Configure LLVM
if: matrix.os != 'ubuntu-latest' && steps.cache-llvm.outputs.cache-hit != 'true'
run: >
cmake -G Ninja -S llvm-src/llvm -B llvm-build
"-DCMAKE_BUILD_TYPE=Release"
"-DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/opt/llvm"
"-DLLVM_ENABLE_ASSERTIONS=ON"
"-DLLVM_ENABLE_BINDINGS=OFF"
"-DLLVM_ENABLE_CURL=OFF"
"-DLLVM_ENABLE_DIA_SDK=OFF"
"-DLLVM_ENABLE_EH=ON"
"-DLLVM_ENABLE_HTTPLIB=OFF"
"-DLLVM_ENABLE_IDE=OFF"
"-DLLVM_ENABLE_LIBEDIT=OFF"
"-DLLVM_ENABLE_LIBXML2=OFF"
"-DLLVM_ENABLE_OCAMLDOC=OFF"
"-DLLVM_ENABLE_PROJECTS=clang;lld"
"-DLLVM_ENABLE_RTTI=ON"
"-DLLVM_ENABLE_RUNTIMES=compiler-rt"
"-DLLVM_ENABLE_TERMINFO=OFF"
"-DLLVM_ENABLE_WARNINGS=OFF"
"-DLLVM_ENABLE_ZLIB=OFF"
"-DLLVM_ENABLE_ZSTD=OFF"
"-DLLVM_INCLUDE_BENCHMARKS=OFF"
"-DLLVM_INCLUDE_EXAMPLES=OFF"
"-DLLVM_INCLUDE_TESTS=OFF"
"-DLLVM_TARGETS_TO_BUILD=WebAssembly;X86;AArch64;ARM;Hexagon;NVPTX;PowerPC;RISCV"
- name: Install LLVM
if: matrix.os != 'ubuntu-latest' && steps.cache-llvm.outputs.cache-hit != 'true'
run: |
cmake --build llvm-build --target install
cmake -E rm -rf llvm-src llvm-build
########################################################################
# Wheels
########################################################################
#- uses: mxschmitt/action-tmate@v3
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_BUILD: "cp3*-${{ matrix.platform_tag }}"
CIBW_SKIP: "cp3{5,6,7}*"
CIBW_ENVIRONMENT_MACOS: >
CMAKE_PREFIX_PATH='${{ github.workspace }}/opt'
Python_ROOT_DIR=''
CIBW_ENVIRONMENT_WINDOWS: >
CMAKE_GENERATOR=Ninja
CMAKE_PREFIX_PATH='${{ github.workspace }}\opt'
CIBW_MANYLINUX_X86_64_IMAGE: "ghcr.io/halide/manylinux_2_28_x86_64-llvm:${{ env.LLVM_VERSION }}"
CIBW_TEST_COMMAND: >
cmake -G Ninja -S {project}/python_bindings/apps -B build -DCMAKE_BUILD_TYPE=Release &&
cmake --build build &&
ctest --test-dir build --output-on-failure
# Windows puts the Python interpreter in /Scripts, rather than /bin, which CMake doesn't understand.
CIBW_TEST_COMMAND_WINDOWS: >
cmake -G Ninja -S {project}/python_bindings/apps -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=%VIRTUAL_ENV% &&
cmake --build build &&
ctest --test-dir build --output-on-failure
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.platform_tag }}
path: ./wheelhouse/*.whl
publish:
name: Publish on PyPI
needs: build-wheels
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
pattern: wheels-*
merge-multiple: true
path: dist
- uses: pypa/gh-action-pypi-publish@release/v1
if: github.event_name == 'push' && github.ref_name == 'main'
with:
repository_url: https://test.pypi.org/legacy/
- uses: pypa/gh-action-pypi-publish@release/v1
if: github.event_name == 'release' && github.event.action == 'published'