Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[python] start python bindings #28

Merged
merged 25 commits into from
Jan 1, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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"},
makslevental marked this conversation as resolved.
Show resolved Hide resolved
{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
Loading