[python] start python bindings (#28) #270
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
# See https://llvm.org/LICENSE.txt for license information. | |
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
# Copyright (c) 2024. | |
name: "Build, test, release EUDSL" | |
on: | |
workflow_dispatch: | |
inputs: | |
force_debug_with_tmate: | |
type: boolean | |
description: 'Run the build with tmate session' | |
required: false | |
default: false | |
debug_with_tmate: | |
type: boolean | |
description: 'Run the build with a tmate session ONLY in case of failure' | |
required: false | |
default: false | |
eudslpy_disable_compile_opt: | |
type: boolean | |
description: 'use -O0 to build eudsl-py' | |
required: false | |
default: true | |
pull_request: | |
paths: | |
- ".github/workflows/build_test_release_eudsl.yml" | |
- "projects/eudsl-tblgen" | |
- "projects/eudsl-py" | |
- "third_party/llvm-project" | |
merge_group: | |
push: | |
branches: | |
- main | |
paths: | |
- ".github/workflows/build_test_release_eudsl.yml" | |
- "projects/eudsl-tblgen" | |
- "projects/eudsl-py" | |
- "third_party/llvm-project" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.number || github.sha }} | |
cancel-in-progress: true | |
jobs: | |
build-eudsl: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: "ubuntu_x86_64" | |
runs-on: "ubuntu-22.04" | |
os: "ubuntu" | |
- name: "windows_x86_64" | |
runs-on: "windows-2019" | |
os: "windows" | |
- name: "macos_arm64" | |
runs-on: "macos-14" | |
os: "macos" | |
- name: "macos_x86_64" | |
runs-on: "macos-13" | |
os: "macos" | |
runs-on: ${{ matrix.runs-on }} | |
name: "Build eudsl ${{ matrix.name }}" | |
defaults: | |
run: | |
shell: bash | |
permissions: | |
id-token: write | |
contents: write | |
env: | |
# either the PR number or `branch-N` where N always increments | |
cache-key: eudsl_${{ matrix.name }}_clang_${{ format('{0}-{1}', github.ref_name, github.run_number) }} | |
container: | |
image: ${{ matrix.container }} | |
steps: | |
- name: "Check out repository" | |
uses: actions/[email protected] | |
- name: "Setup base" | |
uses: ./.github/actions/setup_base | |
id: setup_base | |
with: | |
cache-key: ${{ env.cache-key }} | |
restore-key: "eudsl_${{ matrix.name }}_clang" | |
os: ${{ matrix.os }} | |
arch: ${{ matrix.arch }} | |
- name: "Download MLIR and configure build" | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
if [[ "${{ matrix.os }}" == "almalinux" ]] || [[ "${{ matrix.os }}" == "ubuntu" ]]; then | |
export RELEASE_PREFIX="mlir_manylinux_x86_64" | |
else | |
export RELEASE_PREFIX="mlir_${{ matrix.name }}" | |
fi | |
RELEASE_URL=$(gh release view llvm --json assets -q '.assets |= sort_by(.createdAt) | .assets | map(select(.name | contains(env.RELEASE_PREFIX))) | .[-1] | .url') | |
curl -sLO $RELEASE_URL | |
tar xf $RELEASE_PREFIX*.tar.gz | |
if [[ "${{ matrix.os }}" == "ubuntu" ]]; then | |
echo "LLVM_DIR=/host/$PWD/llvm-install/lib/cmake/llvm" >> $GITHUB_ENV | |
echo "MLIR_DIR=/host/$PWD/llvm-install/lib/cmake/mlir" >> $GITHUB_ENV | |
echo "Clang_DIR=/host/$PWD/llvm-install/lib/cmake/clang" >> $GITHUB_ENV | |
echo "CCACHE_DIR=/host/$CCACHE_DIR" >> $GITHUB_ENV | |
else | |
echo "LLVM_DIR=$PWD/llvm-install/lib/cmake/llvm" >> $GITHUB_ENV | |
echo "MLIR_DIR=$PWD/llvm-install/lib/cmake/mlir" >> $GITHUB_ENV | |
echo "Clang_DIR=$PWD/llvm-install/lib/cmake/clang" >> $GITHUB_ENV | |
fi | |
# since linux builds execute in the cibuildwheel almalinux container | |
if [[ "${{ matrix.os }}" == "ubuntu" ]]; then | |
echo CC=clang >> $GITHUB_ENV | |
echo CXX=clang++ >> $GITHUB_ENV | |
fi | |
# these have to match the deployment targets of the LLVM build runners | |
# ld: warning: object file (libLLVMTableGen.a[3](Error.cpp.o)) was built for newer 'macOS' version (13.7) than being linked (10.13) | |
if [[ "${{ matrix.runs-on }}" == "macos-14" ]]; then | |
echo MACOSX_DEPLOYMENT_TARGET=14.0 >> $GITHUB_ENV | |
elif [[ "${{ matrix.runs-on }}" == "macos-13" ]]; then | |
echo MACOSX_DEPLOYMENT_TARGET=13.7 >> $GITHUB_ENV | |
fi | |
pip install cibuildwheel | |
- name: "Build eudsl-tblgen" | |
run: | | |
ccache -z | |
$python3_command -m cibuildwheel "$PWD/projects/eudsl-tblgen" --output-dir wheelhouse | |
ccache -s | |
- name: "Build eudsl-py" | |
if: ${{ ! startsWith(matrix.os, 'windows') }} | |
run: | | |
# prevent OOM on free GHA | |
export DISABLE_COMPILE_OPT="${{ inputs.debug_with_tmate }}" | |
ccache -z | |
$python3_command -m cibuildwheel "$PWD/projects/eudsl-py" --output-dir wheelhouse | |
ccache -s | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: eudsl_${{ matrix.name }}_artifact | |
path: wheelhouse/*.whl | |
if-no-files-found: warn | |
- name: "Setup tmate session" | |
if: ${{ (failure() && inputs.debug_with_tmate) || inputs.force_debug_with_tmate }} | |
uses: mxschmitt/[email protected] | |
with: | |
limit-access-to-actor: true | |
install-dependencies: ${{ startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') || startsWith(matrix.os, 'ubuntu') }} | |
test-eudsl-tblgen: | |
needs: [build-eudsl] | |
strategy: | |
fail-fast: false | |
matrix: | |
runs-on: ["ubuntu-22.04", "macos-14", "macos-13", "windows-2019"] | |
python-version: ["3.9", "3.10", "3.11", "3.12"] | |
include: [ | |
{runs-on: "ubuntu-22.04", name: "ubuntu_x86_64", os: "ubuntu"}, | |
{runs-on: "windows-2019", name: "windows_x86_64", os: "windows"}, | |
{runs-on: "macos-14", name: "macos_arm64", os: "macos"}, | |
{runs-on: "macos-13", name: "macos_x86_64", os: "macos"}, | |
] | |
runs-on: ${{ matrix.runs-on }} | |
name: "Test eudsl ${{ matrix.name }}" | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: "Check out repository" | |
uses: actions/[email protected] | |
with: | |
submodules: false | |
- name: "Install Python" | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "${{ matrix.python-version }}" | |
- uses: actions/download-artifact@v4 | |
with: | |
name: eudsl_${{ matrix.name }}_artifact | |
path: wheelhouse | |
- name: "Install eudsl-tblgen" | |
run: | | |
python -m pip install pytest | |
python -m pip install eudsl-tblgen -f wheelhouse | |
- name: "Test eudsl-tblgen" | |
run: | | |
export TESTS_DIR="$PWD/projects/eudsl-tblgen/tests" | |
if [ ${{ matrix.os }} == 'windows' ]; then | |
python -m pytest -s -rA $TESTS_DIR | |
else | |
python -m pytest -rA --capture=tee-sys $TESTS_DIR | |
fi | |
release-eudsl-tblgen: | |
if: ${{ github.event_name == 'workflow_dispatch' }} | |
needs: [test-eudsl-tblgen] | |
strategy: | |
fail-fast: false | |
matrix: | |
name: [ubuntu_x86_64, windows_x86_64, macos_arm64, macos_x86_64] | |
runs-on: "ubuntu-22.04" | |
name: "Release eudsl-tblgen" | |
permissions: | |
id-token: write | |
contents: write | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: eudsl_tblgen_${{ matrix.name }}_artifact | |
path: wheelhouse | |
- name: Release current commit | |
uses: ncipollo/[email protected] | |
with: | |
artifacts: "wheelhouse/eudsl_tblgen*.whl" | |
token: "${{ secrets.GITHUB_TOKEN }}" | |
tag: "latest" | |
name: "latest" | |
removeArtifacts: false | |
allowUpdates: true | |
replacesArtifacts: true | |
makeLatest: true | |
omitBody: true | |
test-eudsl-py: | |
needs: [build-eudsl] | |
strategy: | |
fail-fast: false | |
matrix: | |
runs-on: ["ubuntu-22.04", "macos-14", "macos-13", | |
# "windows-2019" | |
] | |
python-version: ["3.9", "3.10", "3.11", "3.12"] | |
include: [ | |
{runs-on: "ubuntu-22.04", name: "ubuntu_x86_64", os: "ubuntu"}, | |
# TODO(max): enable on windows by statically linking | |
# {runs-on: "windows-2019", name: "windows_x86_64", os: "windows"}, | |
{runs-on: "macos-14", name: "macos_arm64", os: "macos"}, | |
{runs-on: "macos-13", name: "macos_x86_64", os: "macos"}, | |
] | |
runs-on: ${{ matrix.runs-on }} | |
name: "Test eudsl-py ${{ matrix.name }}" | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: "Check out repository" | |
uses: actions/[email protected] | |
with: | |
submodules: false | |
- name: "Install Python" | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "${{ matrix.python-version }}" | |
- uses: actions/download-artifact@v4 | |
with: | |
name: eudsl_${{ matrix.name }}_artifact | |
path: wheelhouse | |
- name: "Install eudsl-py" | |
run: | | |
python -m pip install pytest | |
python -m pip install eudsl-py -f wheelhouse | |
- name: "Test eudsl-py" | |
run: | | |
export TESTS_DIR="$PWD/projects/eudsl-py/tests" | |
python -m pytest -rA --capture=tee-sys $TESTS_DIR | |
release-eudsl-py: | |
if: ${{ github.event_name == 'workflow_dispatch' }} | |
needs: [test-eudsl-tblgen, test-eudsl-py] | |
runs-on: "ubuntu-22.04" | |
name: "Release eudsl" | |
permissions: | |
id-token: write | |
contents: write | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
path: wheelhouse | |
- name: Release current commit | |
uses: ncipollo/[email protected] | |
with: | |
artifacts: "wheelhouse/eudsl_tblgen*.whl" | |
token: "${{ secrets.GITHUB_TOKEN }}" | |
tag: "latest" | |
name: "latest" | |
removeArtifacts: false | |
allowUpdates: true | |
replacesArtifacts: true | |
makeLatest: true | |
omitBody: true |