Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
37 changes: 32 additions & 5 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 [email protected]:descend-lang/descend.git
git clone [email protected]: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:

```
<YOUR_PROJECT_ROOT>/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:
Expand Down
25 changes: 25 additions & 0 deletions scripts/update-dialect-paths.sh
Original file line number Diff line number Diff line change
@@ -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"

79 changes: 41 additions & 38 deletions src/codegen/mlir/dialects.rs
Original file line number Diff line number Diff line change
@@ -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: <YOUR_PROJECT_ROOT>/AscendNPU-IR/bishengir/include
//
// You can use the helper script: ./scripts/update-dialect-paths.sh

melior::dialect! {
name: "annotation",
Expand All @@ -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",
Expand All @@ -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",
Expand Down