Skip to content

Commit

Permalink
[python] start python bindings (#28)
Browse files Browse the repository at this point in the history
  • Loading branch information
makslevental authored Jan 1, 2025
1 parent e821caf commit 6a9b0ef
Show file tree
Hide file tree
Showing 55 changed files with 6,605 additions and 24 deletions.
29 changes: 29 additions & 0 deletions .clang-tidy
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
Checks: '-*,clang-diagnostic-*,llvm-*,misc-*,-misc-const-correctness,-misc-unused-parameters,-misc-non-private-member-variables-in-classes,-misc-no-recursion,-misc-use-anonymous-namespace,readability-identifier-naming,-misc-include-cleaner'
CheckOptions:
- key: readability-identifier-naming.ClassCase
value: CamelCase
- key: readability-identifier-naming.EnumCase
value: CamelCase
- key: readability-identifier-naming.FunctionCase
value: camelBack
- key: readability-identifier-naming.MemberCase
value: CamelCase
- key: readability-identifier-naming.ParameterCase
value: CamelCase
- key: readability-identifier-naming.UnionCase
value: CamelCase
- key: readability-identifier-naming.VariableCase
value: CamelCase
- key: readability-identifier-naming.IgnoreMainLikeFunctions
value: 1
- key: readability-redundant-member-init.IgnoreBaseInCopyConstructors
value: 1
- key: modernize-use-default-member-init.UseAssignment
value: 1
# MLIR
- key: readability-identifier-naming.MemberCase
value: camelBack
- key: readability-identifier-naming.ParameterCase
value: camelBack
- key: readability-identifier-naming.VariableCase
value: camelBack
5 changes: 5 additions & 0 deletions .github/actions/setup_base/action.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# 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: "Setup base"
description: ''

Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/build_llvm.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# 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 LLVM and MLIR"

on:
Expand Down Expand Up @@ -107,6 +112,7 @@ jobs:
- name: "Build LLVM and MLIR"
id: build
run: |
export LLVM_SOURCE_DIR="$PWD/third_party/llvm-project"
export LLVM_BUILD_DIR="$PWD/llvm-build"
# double nested so that upload artifacts uploads a folder
Expand Down
162 changes: 144 additions & 18 deletions .github/workflows/build_test_release_eudsl.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# 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:
Expand All @@ -13,10 +18,16 @@ on:
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:
Expand All @@ -25,14 +36,15 @@ on:
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-tblgen:
build-eudsl:

strategy:
fail-fast: false
Expand All @@ -53,7 +65,7 @@ jobs:

runs-on: ${{ matrix.runs-on }}

name: "Build eudsl-tblgen ${{ matrix.name }}"
name: "Build eudsl ${{ matrix.name }}"

defaults:
run:
Expand Down Expand Up @@ -83,7 +95,7 @@ jobs:
os: ${{ matrix.os }}
arch: ${{ matrix.arch }}

- name: "Download MLIR"
- name: "Download MLIR and configure build"
env:
GH_TOKEN: ${{ github.token }}
run: |
Expand All @@ -93,31 +105,58 @@ jobs:
else
export RELEASE_PREFIX="mlir_${{ matrix.name }}"
fi
RELEASE_URL=$(gh release view latest --json assets -q '.assets |= sort_by(.createdAt) | .assets | map(select(.name | contains(env.RELEASE_PREFIX))) | .[-1] | .url')
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
echo "LLVM_DIR=$PWD/llvm-install/lib/cmake/llvm" >> $GITHUB_ENV
- name: "Build eudsl-tblgen"
id: build
run: |
pip install cibuildwheel
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
export LLVM_DIR="/host/$LLVM_DIR"
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
export MACOSX_DEPLOYMENT_TARGET=14.0
echo MACOSX_DEPLOYMENT_TARGET=14.0 >> $GITHUB_ENV
elif [[ "${{ matrix.runs-on }}" == "macos-13" ]]; then
export MACOSX_DEPLOYMENT_TARGET=13.7
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_tblgen_${{ matrix.name }}_artifact
name: eudsl_${{ matrix.name }}_artifact
path: wheelhouse/*.whl
if-no-files-found: warn

Expand All @@ -130,7 +169,7 @@ jobs:

test-eudsl-tblgen:

needs: [build-eudsl-tblgen]
needs: [build-eudsl]

strategy:
fail-fast: false
Expand All @@ -146,7 +185,7 @@ jobs:

runs-on: ${{ matrix.runs-on }}

name: "Test eudsl-tblgen ${{ matrix.name }}"
name: "Test eudsl ${{ matrix.name }}"

defaults:
run:
Expand All @@ -165,16 +204,18 @@ jobs:

- uses: actions/download-artifact@v4
with:
name: eudsl_tblgen_${{ matrix.name }}_artifact
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
Expand All @@ -191,7 +232,7 @@ jobs:
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"

Expand All @@ -218,3 +259,88 @@ jobs:
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
5 changes: 5 additions & 0 deletions .github/workflows/bump_llvm.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# 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: Auto bump LLVM
on:
workflow_dispatch:
Expand Down
16 changes: 16 additions & 0 deletions build_tools/build_llvm.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
#!/usr/bin/env bash

# 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.

TD="$(cd $(dirname $0) && pwd)"
REPO_ROOT="$(cd $TD/.. && pwd)"

Expand Down Expand Up @@ -45,6 +50,17 @@ cmake_options=(
-DCMAKE_INSTALL_PREFIX="${LLVM_INSTALL_DIR}"
)

if [ -x "$(command -v ccache)" ]; then
echo 'using ccache' >&2
export CCACHE_SLOPPINESS=include_file_ctime,include_file_mtime,time_macros
export CCACHE_CPP2=true
export CCACHE_UMASK=002
cmake_options+=(
-DCMAKE_C_COMPILER_LAUNCHER=ccache
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
)
fi

# last so that C/CXX flags get set first
cmake_options+=(-C "$TD/cmake/llvm_cache.cmake")

Expand Down
5 changes: 5 additions & 0 deletions build_tools/build_llvm_wasi.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
#!/usr/bin/env bash

# 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.

TD="$(cd $(dirname $0) && pwd)"
REPO_ROOT="$(cd $TD/.. && pwd)"

Expand Down
11 changes: 9 additions & 2 deletions build_tools/cmake/llvm_cache.cmake
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
#
# 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.
#

include(CMakePrintHelpers)

set(LLVM_ENABLE_PROJECTS "llvm;mlir;clang" CACHE STRING "")
Expand All @@ -9,13 +16,13 @@ set(LLVM_BUILD_UTILS ON CACHE BOOL "")
set(LLVM_INCLUDE_TOOLS ON CACHE BOOL "")
set(LLVM_INSTALL_UTILS ON CACHE BOOL "")

# All the tools will use libllvm shared library
set(LLVM_BUILD_LLVM_DYLIB ON CACHE BOOL "")
# All the tools will use libllvm shared library
# (but doesn't work on windows)
if (NOT WIN32)
set(LLVM_LINK_LLVM_DYLIB ON CACHE BOOL "")
set(MLIR_LINK_MLIR_DYLIB ON CACHE BOOL "")
endif()
set(MLIR_LINK_MLIR_DYLIB OFF CACHE BOOL "")

# useful things
set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "")
Expand Down
Loading

0 comments on commit 6a9b0ef

Please sign in to comment.