# (c) Copyright 2021 Xilinx, Inc. All Rights reserved.
# (c) Copyright 2022 - 2024 Advanced Micro Devices, Inc. All Rights reserved.

name: Build & Test

on: 
  pull_request:
  push:
    branches:
      - feature/fused-ops
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  buildandtest:
    name: Build & Test (no torch-mlir)
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
      with:
        submodules: true

    - name: Setup ccache
      uses: hendrikmuhs/ccache-action@v1
      with:
        key: ${{ matrix.os }}
        variant: sccache

    - name: Set virtual env
      run: |
        python3 -m venv .venv
        source .venv/bin/activate

    # Reuse the requirements from mlir
    # mlir-xten is an extension to mlir and should work under the same environment.
    - name: Install requirements.txt
      run: |
        pip install -r ./llvm-project/mlir/python/requirements.txt

    - name: Install Ninja
      uses: llvm/actions/install-ninja@main

    - name: Build and Test
      shell: bash
      id: build-llvm
      run: |
        cmake -GNinja \
              -Bbuild \
              llvm-project/llvm \
              -DCMAKE_BUILD_TYPE=Release \
              -DCMAKE_C_COMPILER=clang \
              -DCMAKE_CXX_COMPILER=clang++ \
              -DLLVM_USE_LINKER=lld \
              -DLLVM_ENABLE_PROJECTS=mlir \
              -DLLVM_TARGETS_TO_BUILD=host \
              -DLLVM_BUILD_TOOLS=OFF \
              -DLLVM_BUILD_UTILS=OFF \
              -DLLVM_BUILD_RUNTIMES=OFF \
              -DCMAKE_C_COMPILER_LAUNCHER=sccache \
              -DCMAKE_CXX_COMPILER_LAUNCHER=sccache \
              -DLLVM_EXTERNAL_PROJECTS=mlir-xten \
              -DMLIR_XTEN_ENABLE_TORCH=OFF \
              -DLLVM_EXTERNAL_MLIR_XTEN_SOURCE_DIR="$PWD"
        ninja -C build check-xten-all