diff --git a/.github/workflows/build_mlir_cache.yml b/.github/workflows/build_mlir_cache.yml new file mode 100644 index 0000000..7686c71 --- /dev/null +++ b/.github/workflows/build_mlir_cache.yml @@ -0,0 +1,50 @@ +name: Build MLIR Cache + +on: + workflow_call: + inputs: + llvm-commit: + required: true + type: string + +jobs: + build-mlir: + runs-on: ubuntu-latest + + steps: + - name: Cache MLIR build + id: cache-mlir + uses: actions/cache@v4 + with: + path: onnx-mlir/llvm-project/build + key: mlir-${{ runner.os }}-${{ inputs.llvm-commit }} + + - name: Install build dependencies + if: steps.cache-mlir.outputs.cache-hit != 'true' + run: | + sudo apt update + sudo apt install -y cmake ninja-build build-essential + + - name: Clone LLVM + if: steps.cache-mlir.outputs.cache-hit != 'true' + run: | + git clone --filter=blob:none --no-checkout https://github.com/llvm/llvm-project.git onnx-mlir/llvm-project + cd onnx-mlir/llvm-project + git fetch --depth 1 origin ${{ inputs.llvm-commit }} + git checkout FETCH_HEAD + + - name: Build MLIR + if: steps.cache-mlir.outputs.cache-hit != 'true' + run: | + mkdir -p onnx-mlir/llvm-project/build + cd onnx-mlir/llvm-project/build + cmake -G Ninja ../llvm \ + -DLLVM_ENABLE_PROJECTS="mlir;clang" \ + -DLLVM_ENABLE_RUNTIMES="openmp" \ + -DLLVM_TARGETS_TO_BUILD="host" \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DENABLE_LIBOMPTARGET=OFF \ + -DLLVM_ENABLE_LIBEDIT=OFF + cmake --build . diff --git a/.github/workflows/validate_operations.yml b/.github/workflows/validate_operations.yml index 5af79c9..fd7f7d4 100644 --- a/.github/workflows/validate_operations.yml +++ b/.github/workflows/validate_operations.yml @@ -9,7 +9,23 @@ on: pull_request: jobs: + # Expose env vars as outputs so they can be passed to reusable workflows + config: + runs-on: ubuntu-latest + outputs: + llvm-commit: ${{ steps.set-vars.outputs.llvm-commit }} + steps: + - id: set-vars + run: echo "llvm-commit=$LLVM_COMMIT" >> "$GITHUB_OUTPUT" + + build-mlir-cache: + needs: config + uses: ./.github/workflows/build_mlir_cache.yml + with: + llvm-commit: ${{ needs.config.outputs.llvm-commit }} + validate: + needs: build-mlir-cache runs-on: ubuntu-latest steps: @@ -27,7 +43,9 @@ jobs: id: cache-protobuf uses: actions/cache@v4 with: - path: /usr/local + path: | + /usr/local/lib/libproto* + /usr/local/include/google/protobuf key: protobuf-${{ runner.os }}-${{ env.PROTOBUF_COMMIT }} - name: Install protobuf @@ -57,36 +75,12 @@ jobs: - name: Install Python dependencies run: pip install numpy onnx colorama - - name: Cache MLIR build - id: cache-mlir - uses: actions/cache@v4 + - name: Restore MLIR cache + uses: actions/cache/restore@v4 with: path: onnx-mlir/llvm-project/build key: mlir-${{ runner.os }}-${{ env.LLVM_COMMIT }} - - - name: Clone LLVM - if: steps.cache-mlir.outputs.cache-hit != 'true' - run: | - git clone --filter=blob:none --no-checkout https://github.com/llvm/llvm-project.git onnx-mlir/llvm-project - cd onnx-mlir/llvm-project - git fetch --depth 1 origin ${{ env.LLVM_COMMIT }} - git checkout FETCH_HEAD - - - name: Build MLIR - if: steps.cache-mlir.outputs.cache-hit != 'true' - run: | - mkdir -p onnx-mlir/llvm-project/build - cd onnx-mlir/llvm-project/build - cmake -G Ninja ../llvm \ - -DLLVM_ENABLE_PROJECTS="mlir;clang" \ - -DLLVM_ENABLE_RUNTIMES="openmp" \ - -DLLVM_TARGETS_TO_BUILD="host" \ - -DCMAKE_BUILD_TYPE=Release \ - -DLLVM_ENABLE_ASSERTIONS=ON \ - -DLLVM_ENABLE_RTTI=ON \ - -DENABLE_LIBOMPTARGET=OFF \ - -DLLVM_ENABLE_LIBEDIT=OFF - cmake --build . + fail-on-cache-miss: true - name: Build Raptor run: |