diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 3059a2c..f4f9350 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -32,18 +32,45 @@ jobs: - name: install clang-format run: apt-get update && apt-get install -y clang-format - - name: Cache Rust + - name: Free Disk Space + run: | + df -h + docker system prune -af || true + rm -rf /usr/share/dotnet + rm -rf /opt/ghc + rm -rf /usr/local/share/boost + rm -rf "$AGENT_TOOLSDIRECTORY" + df -h + + - name: Cache Rust Dependencies Only uses: actions/cache@v4 with: path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ env.RUST_TOOLCHAIN }}-${{ hashFiles('**/Cargo.lock') }} + ~/.cargo/registry/index + ~/.cargo/registry/cache + ~/.cargo/git/db + target/release/deps + target/debug/deps + key: ${{ runner.os }}-cargo-deps-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-deps- + - name: Install Rust uses: actions-rust-lang/setup-rust-toolchain@v1 + - name: Update MLIR dialect paths + run: ./scripts/update-dialect-paths.sh + - name: Build run: cargo build --verbose + - name: Run tests run: cargo test --verbose + + - name: Clean up build artifacts + if: always() + run: | + cargo clean --release || true + rm -rf target/debug/incremental + rm -rf target/debug/build + df -h diff --git a/README.md b/README.md index 0bc909f..ea5bf02 100644 --- a/README.md +++ b/README.md @@ -143,15 +143,34 @@ Required: - `clang-format`: Must be found in the system path. - `rustc` and `cargo` - `git` +- **For MLIR backend**: MLIR installation with TableGen (included in the AscendNPU-IR submodule) Clone the repository and compile: ```bash -git clone git@github.com:descend-lang/descend.git +git clone git@github.com:descend-lang/descend.git --recurse-submodules cargo build cargo test ``` +### Building on Different Machines + +The MLIR backend uses custom dialect definitions that require absolute paths for TableGen include directories. If you encounter build errors about missing include files when building on a different machine or in a different directory: + +1. **Automatic Fix**: Run the provided script to update paths: + + ```bash + ./scripts/update-dialect-paths.sh + ``` + +2. **Manual Fix**: Edit `src/codegen/mlir/dialects.rs` and update all `include_directories` paths to: + + ``` + /AscendNPU-IR/bishengir/include + ``` + +**Why is this needed?** The `melior::dialect!` macro that generates Rust bindings from TableGen files only accepts string literals for include directories and cannot use Rust's `env!()` or `concat!()` macros for dynamic path resolution. The CI pipeline automatically runs the update script to ensure correct paths in different environments. + ## Usage The Descend compiler can be run using cargo. To see all available options: diff --git a/scripts/update-dialect-paths.sh b/scripts/update-dialect-paths.sh new file mode 100755 index 0000000..abd8f59 --- /dev/null +++ b/scripts/update-dialect-paths.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# Script to update MLIR dialect include paths for the current environment +# This is needed because melior::dialect! macro only accepts string literals +# and cannot use env!() or concat!() for path resolution. + +set -e + +# Get the project root directory (where this script is called from) +PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +INCLUDE_PATH="${PROJECT_ROOT}/AscendNPU-IR/bishengir/include" +DIALECTS_FILE="${PROJECT_ROOT}/src/codegen/mlir/dialects.rs" + +echo "Updating dialect paths in: $DIALECTS_FILE" +echo "Include path will be set to: $INCLUDE_PATH" + +# Use sed to replace the include_directories paths +# The pattern matches: include_directories: ["ANY_PATH"], +# and replaces it with the correct path +sed -i.bak "s|include_directories: \[\"[^\"]*\"\]|include_directories: [\"${INCLUDE_PATH}\"]|g" "$DIALECTS_FILE" + +echo "✓ Paths updated successfully!" +echo " Backup saved to: ${DIALECTS_FILE}.bak" +echo "" +echo "You can now build the project with: cargo build" + diff --git a/src/codegen/mlir/dialects.rs b/src/codegen/mlir/dialects.rs index fa2b293..f5c2abd 100644 --- a/src/codegen/mlir/dialects.rs +++ b/src/codegen/mlir/dialects.rs @@ -1,5 +1,12 @@ // Custom MLIR Dialects // The melior::dialect! macro generates Rust bindings for TableGen ODS files +// +// NOTE: The melior::dialect! macro requires absolute paths for include_directories +// and does NOT support env!() or concat!() macro expansion. If you encounter build errors +// about missing include files, update all include_directories paths below to match your +// project location: /AscendNPU-IR/bishengir/include +// +// You can use the helper script: ./scripts/update-dialect-paths.sh melior::dialect! { name: "annotation", @@ -10,29 +17,25 @@ melior::dialect! { include_directories: ["/root/descend/AscendNPU-IR/bishengir/include"], } -// melior::dialect! { -// name: "hacc", -// files: [ -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/HACC/IR/HACCAttrs.td", -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/HACC/IR/HACCBase.td", -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/HACC/IR/HACCInterfaces.td", -// ], -// include_directories: ["/root/descend/AscendNPU-IR/bishengir/include"], -// } +melior::dialect! { + name: "hacc", + files: [ + "AscendNPU-IR/bishengir/include/bishengir/Dialect/HACC/IR/HACCBase.td", + ], + include_directories: ["/root/descend/AscendNPU-IR/bishengir/include"], +} -// melior::dialect! { -// name: "hfusion", -// files: [ -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/HFusion/IR/HFusionAttrs.td", -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/HFusion/IR/HFusionBase.td", -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/HFusion/IR/HFusionDoc.td", -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/HFusion/IR/HFusionEnums.td", -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/HFusion/IR/HFusionOps.td", -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/HFusion/IR/HFusionStructuredOps.td", -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/HFusion/IR/HFusionTraits.td", -// ], -// include_directories: ["/root/descend/AscendNPU-IR/bishengir/include"], -// } +melior::dialect! { + name: "hfusion", + files: [ + "AscendNPU-IR/bishengir/include/bishengir/Dialect/HFusion/IR/HFusionAttrs.td", + "AscendNPU-IR/bishengir/include/bishengir/Dialect/HFusion/IR/HFusionBase.td", + "AscendNPU-IR/bishengir/include/bishengir/Dialect/HFusion/IR/HFusionEnums.td", + "AscendNPU-IR/bishengir/include/bishengir/Dialect/HFusion/IR/HFusionOps.td", + "AscendNPU-IR/bishengir/include/bishengir/Dialect/HFusion/IR/HFusionTraits.td", + ], + include_directories: ["/root/descend/AscendNPU-IR/bishengir/include"], +} melior::dialect! { name: "hivm", @@ -51,23 +54,23 @@ melior::dialect! { include_directories: ["/root/descend/AscendNPU-IR/bishengir/include"], } -// melior::dialect! { -// name: "mathext", -// files: [ -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/MathExt/IR/MathExtBase.td", -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/MathExt/IR/MathExtOps.td", -// ], -// include_directories: ["/root/descend/AscendNPU-IR/bishengir/include"], -// } +melior::dialect! { + name: "mathExt", + files: [ + "AscendNPU-IR/bishengir/include/bishengir/Dialect/MathExt/IR/MathExtBase.td", + "AscendNPU-IR/bishengir/include/bishengir/Dialect/MathExt/IR/MathExtOps.td", + ], + include_directories: ["/root/descend/AscendNPU-IR/bishengir/include"], +} -// melior::dialect! { -// name: "memrefext", -// files: [ -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/MemRefExt/IR/MemRefExtBase.td", -// "AscendNPU-IR/bishengir/include/bishengir/Dialect/MemRefExt/IR/MemRefExtOps.td", -// ], -// include_directories: ["/root/descend/AscendNPU-IR/bishengir/include"], -// } +melior::dialect! { + name: "memref_ext", + files: [ + "AscendNPU-IR/bishengir/include/bishengir/Dialect/MemRefExt/IR/MemRefExtBase.td", + "AscendNPU-IR/bishengir/include/bishengir/Dialect/MemRefExt/IR/MemRefExtOps.td", + ], + include_directories: ["/root/descend/AscendNPU-IR/bishengir/include"], +} melior::dialect! { name: "symbol",