MLIR Plugin #34
This file contains hidden or 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
name: MLIR Plugin CI | |
on: | |
push: | |
branches: | |
- main | |
paths: | |
- "plugins/**" | |
pull_request: | |
paths: | |
- "plugins/**" | |
- ".github/workflows/ci_mlir_plugin.yml" | |
merge_group: | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
cpp-test-mlir-catalyst-plugin: | |
name: 🧩 Test MLIR Catalyst Plugin with LLVM@${{ matrix.llvm-version }} on ${{ matrix.runs-on }} | |
runs-on: ${{ matrix.runs-on }} | |
strategy: | |
matrix: | |
runs-on: [ubuntu-24.04, macos-14] | |
llvm-version: [19, 20, 21] | |
exclude: | |
- runs-on: macos-14 | |
llvm-version: 21 | |
fail-fast: false | |
env: | |
CMAKE_BUILD_PARALLEL_LEVEL: 4 | |
CTEST_PARALLEL_LEVEL: 4 | |
FORCE_COLOR: 3 | |
steps: | |
# Check out the repository | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
# install a specific version of the LLVM toolchain | |
- name: Install llvm and mlir | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt-get update | |
wget https://apt.llvm.org/llvm.sh -O ${{ runner.temp }}/llvm_install.sh | |
chmod +x ${{ runner.temp }}/llvm_install.sh | |
if sudo ${{ runner.temp }}/llvm_install.sh ${{ matrix.llvm-version }}; then | |
sudo apt-get install -y libmlir-${{ matrix.llvm-version }}-dev \ | |
mlir-${{ matrix.llvm-version }}-tools \ | |
clang-${{ matrix.llvm-version}} \ | |
|| exit 1 | |
else | |
echo "Installation from script failed." | |
exit 1 | |
fi | |
echo "CC=gcc-14" >> $GITHUB_ENV | |
echo "CXX=g++-14" >> $GITHUB_ENV | |
echo "MLIR_DIR=/usr/lib/llvm-${{ matrix.llvm-version }}/lib/cmake/mlir" >> $GITHUB_ENV | |
echo "LLVM_DIR=/usr/lib/llvm-${{ matrix.llvm-version }}/lib/cmake/llvm" >> $GITHUB_ENV | |
# Install llvm and ninja | |
- name: Install llvm@${{ matrix.llvm-version }} and Ninja via Homebrew | |
if: runner.os == 'macOS' | |
run: brew install llvm@${{ matrix.llvm-version }} ninja | |
# Set compiler and environment variables | |
- name: Set compiler and CMake environment variables | |
if: runner.os == 'macOS' | |
run: | | |
if [ "$(uname -m)" = "x86_64" ]; then | |
LLVM_PREFIX="/usr/local/opt/llvm@${{ matrix.llvm-version }}" | |
else | |
LLVM_PREFIX="/opt/homebrew/opt/llvm@${{ matrix.llvm-version }}" | |
fi | |
echo "CC=$LLVM_PREFIX/bin/clang" >> $GITHUB_ENV | |
echo "CXX=$LLVM_PREFIX/bin/clang++" >> $GITHUB_ENV | |
echo "LLVM_DIR=$LLVM_PREFIX/lib/cmake/llvm" >> $GITHUB_ENV | |
echo "MLIR_DIR=$LLVM_PREFIX/lib/cmake/mlir" >> $GITHUB_ENV | |
# set up ccache for faster C++ builds | |
- name: Setup ccache | |
uses: Chocobo1/setup-ccache-action@v1 | |
with: | |
prepend_symlinks_to_path: false | |
override_cache_key: mlir-plugin-${{ matrix.runs-on }}-llvm-${{ matrix.llvm-version }} | |
# set up mold as linker for faster C++ builds | |
# - name: Set up mold as linker | |
# uses: rui314/setup-mold@v1 | |
# Set up uv for faster Python package management | |
- name: Install the latest version of uv | |
uses: astral-sh/setup-uv@v6 | |
with: | |
python-version: 3.13 | |
activate-environment: true | |
# Build the plugin package | |
- name: Build mqt-core-catalyst-plugin | |
working-directory: plugins/catalyst | |
run: uv sync --verbose --active | |
# Print shared library dependencies for the plugin | |
- name: Print shared library dependencies for mqt-core-catalyst-plugin | |
run: | | |
if [ "$(uname)" = "Linux" ]; then | |
ldd .venv/lib/python3.13/site-packages/mqt/core/plugins/catalyst/mqt-core-catalyst-plugin.so || true | |
elif [ "$(uname)" = "Darwin" ]; then | |
otool -l .venv/lib/python3.13/site-packages/mqt/core/plugins/catalyst/mqt-core-catalyst-plugin.dylib || true | |
fi | |
# Print shared library dependencies for Catalyst | |
- name: Print shared library dependencies for Catalyst | |
run: | | |
if [ "$(uname)" = "Linux" ]; then | |
ldd $(which catalyst) || true | |
elif [ "$(uname)" = "Darwin" ]; then | |
otool -l $(which catalyst) || true | |
fi | |
# Run the plugin tests | |
- name: Run pytest for mqt-core-catalyst-plugin | |
working-directory: plugins/catalyst | |
run: python -m pytest -s --verbose | |
cpp-test-mlir-catalyst-plugin-source: | |
name: 🧩 Test MLIR Catalyst Plugin on ${{ matrix.runs-on }} from Source | |
runs-on: ${{ matrix.runs-on }} | |
strategy: | |
matrix: | |
runs-on: [ubuntu-24.04, macos-14] | |
fail-fast: false | |
env: | |
CMAKE_BUILD_PARALLEL_LEVEL: 4 | |
CTEST_PARALLEL_LEVEL: 4 | |
FORCE_COLOR: 3 | |
steps: | |
# Check out the repository | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
# set up gcc as compiler | |
- name: Set up GCC as compiler | |
if: runner.os == 'Linux' | |
run: | | |
echo "C_COMPILER=gcc-14" >> $GITHUB_ENV | |
echo "CXX_COMPILER=g++-14" >> $GITHUB_ENV | |
echo "CC=gcc-14" >> $GITHUB_ENV | |
echo "CXX=g++-14" >> $GITHUB_ENV | |
echo "ENABLE_LLD=OFF" >> $GITHUB_ENV | |
# set up ccache for faster C++ builds | |
- name: Setup ccache | |
uses: Chocobo1/setup-ccache-action@v1 | |
with: | |
prepend_symlinks_to_path: false | |
override_cache_key: mlir-plugin-${{ matrix.runs-on }}-source | |
# set up mold as linker for faster C++ builds | |
# - name: Set up mold as linker | |
# uses: rui314/setup-mold@v1 | |
# Set up uv for faster Python package management | |
- name: Install the latest version of uv | |
uses: astral-sh/setup-uv@v6 | |
with: | |
python-version: 3.13 | |
activate-environment: true | |
# Check out the Catalyst repository | |
- name: Checkout catalyst | |
uses: actions/checkout@v4 | |
with: | |
repository: PennyLaneAI/catalyst | |
path: catalyst | |
submodules: "recursive" | |
fetch-depth: 1 | |
# Install Catalyst | |
- name: Install Catalyst | |
working-directory: catalyst | |
run: | | |
uv pip install -r requirements.txt | |
make mlir | |
- name: Set LLVM and MLIR paths | |
working-directory: catalyst | |
run: | | |
echo "MLIR_DIR=$(pwd)/mlir/llvm-project/build/lib/cmake/mlir" >> $GITHUB_ENV | |
echo "LLVM_DIR=$(pwd)/mlir/llvm-project/build/lib/cmake/llvm" >> $GITHUB_ENV | |
# Build the plugin package | |
- name: Build mqt-core-catalyst-plugin | |
working-directory: plugins/catalyst | |
run: uv sync --verbose --active | |
# Print shared library dependencies for the plugin | |
- name: Print shared library dependencies for mqt-core-catalyst-plugin | |
run: | | |
if [ "$(uname)" = "Linux" ]; then | |
ldd .venv/lib/python3.13/site-packages/mqt/core/plugins/catalyst/mqt-core-catalyst-plugin.so || true | |
elif [ "$(uname)" = "Darwin" ]; then | |
otool -l .venv/lib/python3.13/site-packages/mqt/core/plugins/catalyst/mqt-core-catalyst-plugin.dylib || true | |
fi | |
# Print shared library dependencies for Catalyst | |
- name: Print shared library dependencies for Catalyst | |
run: | | |
if [ "$(uname)" = "Linux" ]; then | |
ldd $(which catalyst) || true | |
elif [ "$(uname)" = "Darwin" ]; then | |
otool -l $(which catalyst) || true | |
fi | |
# Run the plugin tests | |
- name: Run pytest for mqt-core-catalyst-plugin | |
working-directory: plugins/catalyst | |
run: python -m pytest -s --verbose | |
cpp-test-mlir-catalyst-plugin-exact-mlir: | |
name: 🧩 Test MLIR Catalyst Plugin on ${{ matrix.runs-on }} from exact MLIR source | |
runs-on: ${{ matrix.runs-on }} | |
strategy: | |
matrix: | |
runs-on: [ubuntu-24.04, macos-14] | |
fail-fast: false | |
env: | |
CMAKE_BUILD_PARALLEL_LEVEL: 4 | |
CTEST_PARALLEL_LEVEL: 4 | |
FORCE_COLOR: 3 | |
steps: | |
# Check out the repository | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
# set up gcc as compiler | |
- name: Set up GCC as compiler | |
if: runner.os == 'Linux' | |
run: | | |
echo "C_COMPILER=gcc-14" >> $GITHUB_ENV | |
echo "CXX_COMPILER=g++-14" >> $GITHUB_ENV | |
echo "CC=gcc-14" >> $GITHUB_ENV | |
echo "CXX=g++-14" >> $GITHUB_ENV | |
# set up ccache for faster C++ builds | |
- name: Setup ccache | |
uses: Chocobo1/setup-ccache-action@v1 | |
with: | |
prepend_symlinks_to_path: false | |
override_cache_key: mlir-plugin-${{ matrix.runs-on }}-exact-mlir | |
# set up mold as linker for faster C++ builds | |
# - name: Set up mold as linker | |
# uses: rui314/setup-mold@v1 | |
# Set up uv for faster Python package management | |
- name: Install the latest version of uv | |
uses: astral-sh/setup-uv@v6 | |
with: | |
python-version: 3.13 | |
activate-environment: true | |
# Check out the LLVM commit Catalyst is based on | |
- name: Checkout llvm | |
uses: actions/checkout@v4 | |
with: | |
repository: llvm/llvm-project | |
ref: 179d30f8c3fddd3c85056fd2b8e877a4a8513158 | |
path: llvm-project | |
# Install LLVM | |
- name: Install LLVM | |
working-directory: llvm-project | |
run: | | |
cmake \ | |
-S llvm \ | |
-B build_llvm \ | |
-G Ninja \ | |
-DLLVM_ENABLE_PROJECTS=mlir \ | |
-DLLVM_BUILD_EXAMPLES=OFF \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DLLVM_BUILD_TESTS=OFF \ | |
-DLLVM_INCLUDE_TESTS=OFF \ | |
-DLLVM_INCLUDE_EXAMPLES=OFF \ | |
-DLLVM_ENABLE_ASSERTIONS=ON \ | |
-DLLVM_ENABLE_ZLIB=FORCE_ON \ | |
-DLLVM_ENABLE_ZSTD=OFF \ | |
-DCMAKE_CXX_VISIBILITY_PRESET=default | |
cmake --build build_llvm --config Release | |
echo "MLIR_DIR=$(pwd)/build_llvm/lib/cmake/mlir" >> $GITHUB_ENV | |
echo "LLVM_DIR=$(pwd)/build_llvm/lib/cmake/llvm" >> $GITHUB_ENV | |
# Build the plugin package | |
- name: Build mqt-core-catalyst-plugin | |
working-directory: plugins/catalyst | |
run: uv sync --verbose --active | |
# Print shared library dependencies for the plugin | |
- name: Print shared library dependencies for mqt-core-catalyst-plugin | |
run: | | |
if [ "$(uname)" = "Linux" ]; then | |
ldd .venv/lib/python3.13/site-packages/mqt/core/plugins/catalyst/mqt-core-catalyst-plugin.so || true | |
elif [ "$(uname)" = "Darwin" ]; then | |
otool -l .venv/lib/python3.13/site-packages/mqt/core/plugins/catalyst/mqt-core-catalyst-plugin.dylib || true | |
fi | |
# Print shared library dependencies for Catalyst | |
- name: Print shared library dependencies for Catalyst | |
run: | | |
if [ "$(uname)" = "Linux" ]; then | |
ldd $(which catalyst) || true | |
elif [ "$(uname)" = "Darwin" ]; then | |
otool -l $(which catalyst) || true | |
fi | |
# Run the plugin tests | |
- name: Run pytest for mqt-core-catalyst-plugin | |
working-directory: plugins/catalyst | |
run: python -m pytest -s --verbose |