Skip to content

Commit 7ddff34

Browse files
erwei-xilinxclaude
andcommitted
Bump mlir-air to dfa6d08, drop mlir-aie-hash.txt
The new mlir-air wheel exposes a [aie] extra that pins the matching mlir_aie commit (Requires-Dist: mlir_aie==<pinned>; extra == "aie") and requires llvm-aie. Installing mlir-air[aie]==<ver> now resolves the whole MLIR-AIE/AIR/LLVM-AIE stack with a guaranteed-compatible mlir-aie, so we no longer need to maintain a separate mlir-aie-hash.txt that has to be kept in sync by hand. - utils/mlir-air-hash.txt: bump to dfa6d08 / 2026050805 (latest) - utils/mlir-aie-hash.txt: deleted (resolved transitively via air's [aie] extra) - utils/env_setup.sh, utils/env_setup.ps1: collapse two installs into one mlir_air[aie]==<ver> install. The .ps1 also previously read mlir-aie-hash-windows.txt / llvm-aie-hash-windows.txt / mlir-air-hash-windows.txt, none of which exist in utils/. - setup.py: get_install_requires() now returns ['mlir-air[aie]==<ver>']. - .github/workflows/build.yml: single install step using the extra. - README.md / CLAUDE.md: documentation updated. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 83a14b5 commit 7ddff34

7 files changed

Lines changed: 52 additions & 102 deletions

File tree

.github/workflows/build.yml

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,12 @@ jobs:
3939
pip install --upgrade pip
4040
pip install lit cmake joblib pybind11 nanobind
4141
42-
- name: Install MLIR-AIE with specified hash
42+
- name: Install MLIR-AIR (with mlir-aie + llvm-aie via [aie] extra)
4343
shell: bash
4444
run: |
45-
MLIR_AIE_COMMIT_HASH_FILE=utils/mlir-aie-hash.txt
46-
# Install mlir-aie
47-
MLIR_AIE_COMMIT_HASH=$(awk -v kw="Commit:" '$0 ~ kw {for (i=1; i<NF; i++) if ($i == kw) print $(i+1)}' "$MLIR_AIE_COMMIT_HASH_FILE")
48-
SHORT_MLIR_AIE_COMMIT_HASH="${MLIR_AIE_COMMIT_HASH:0:7}"
49-
echo "Using mlir-aie hash: $SHORT_MLIR_AIE_COMMIT_HASH"
50-
MLIR_AIE_VERSION=$(awk -v kw="Version:" '$0 ~ kw {for (i=1; i<NF; i++) if ($i == kw) print $(i+1)}' "$MLIR_AIE_COMMIT_HASH_FILE")
51-
echo "Version: $MLIR_AIE_VERSION"
52-
TIMESTAMP=$(awk -v kw="Timestamp:" '$0 ~ kw {for (i=1; i<NF; i++) if ($i == kw) print $(i+1)}' "$MLIR_AIE_COMMIT_HASH_FILE")
53-
echo "Timestamp: $TIMESTAMP"
54-
python3 -m pip install mlir_aie==$MLIR_AIE_VERSION.$TIMESTAMP+$SHORT_MLIR_AIE_COMMIT_HASH.no.rtti -f https://github.com/Xilinx/mlir-aie/releases/expanded_assets/latest-wheels-no-rtti/
55-
# Install mlir-air
45+
# The mlir-air wheel pins the matching mlir-aie commit and requires
46+
# llvm-aie via the [aie] extra, so a single pip install pulls the whole
47+
# stack with a guaranteed-compatible mlir-aie.
5648
MLIR_AIR_HASH_FILE=utils/mlir-air-hash.txt
5749
MLIR_AIR_COMMIT_HASH=$(awk -v kw="Commit:" '$0 ~ kw {for (i=1; i<NF; i++) if ($i == kw) print $(i+1)}' "$MLIR_AIR_HASH_FILE")
5850
SHORT_MLIR_AIR_COMMIT_HASH="${MLIR_AIR_COMMIT_HASH:0:7}"
@@ -61,10 +53,12 @@ jobs:
6153
echo "mlir-air version: $MLIR_AIR_VERSION"
6254
MLIR_AIR_TIMESTAMP=$(awk -v kw="Timestamp:" '$0 ~ kw {for (i=1; i<NF; i++) if ($i == kw) print $(i+1)}' "$MLIR_AIR_HASH_FILE")
6355
echo "mlir-air timestamp: $MLIR_AIR_TIMESTAMP"
64-
python3 -m pip install mlir_air==$MLIR_AIR_VERSION.$MLIR_AIR_TIMESTAMP+$SHORT_MLIR_AIR_COMMIT_HASH.no.rtti -f https://github.com/Xilinx/mlir-air/releases/expanded_assets/latest-air-wheels-no-rtti
65-
# Install llvm-aie (latest nightly)
66-
python3 -m pip install --upgrade --force-reinstall llvm-aie -f https://github.com/Xilinx/llvm-aie/releases/expanded_assets/nightly
56+
python3 -m pip install "mlir_air[aie]==$MLIR_AIR_VERSION.$MLIR_AIR_TIMESTAMP+$SHORT_MLIR_AIR_COMMIT_HASH.no.rtti" \
57+
-f https://github.com/Xilinx/mlir-air/releases/expanded_assets/latest-air-wheels-no-rtti \
58+
-f https://github.com/Xilinx/mlir-aie/releases/expanded_assets/latest-wheels-no-rtti \
59+
-f https://github.com/Xilinx/llvm-aie/releases/expanded_assets/nightly
6760
python3 -m pip show llvm-aie
61+
python3 -m pip show mlir_aie
6862
# Set environmental variable "MLIR_AIE_INSTALL_DIR"
6963
MLIR_AIE_INSTALL_DIR_STR="$(python3 -m pip show mlir_aie | grep ^Location: | awk '{print $2}')/mlir_aie"
7064
echo "MLIR_AIE_INSTALL_DIR=$MLIR_AIE_INSTALL_DIR_STR" >> $GITHUB_ENV

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ This will automatically install all required dependencies:
8989
- llvm-aie
9090
- mlir-air
9191

92-
The versions of mlir-aie and mlir-air are managed in `utils/mlir-aie-hash.txt` and `utils/mlir-air-hash.txt`. llvm-aie uses the latest nightly release.
92+
The mlir-air version is pinned in `utils/mlir-air-hash.txt`. The matching mlir-aie commit is pinned by the mlir-air wheel's `[aie]` extra, so it's resolved transitively. llvm-aie uses the latest nightly release.
9393

9494
#### Option 3: Build from Source (Using Cmake)
9595

setup.py

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -307,20 +307,15 @@ def _make_version_spec(pkg_name, version, timestamp, short_commit, suffix=""):
307307

308308

309309
def get_install_requires():
310-
"""Build install_requires list from hash files."""
311-
mlir_aie_hash_file = BASE_DIR / "utils" / "mlir-aie-hash.txt"
312-
mlir_air_hash_file = BASE_DIR / "utils" / "mlir-air-hash.txt"
310+
"""Build install_requires list from hash files.
313311
314-
# Parse mlir-aie version
315-
mlir_aie_version = parse_hash_file(mlir_aie_hash_file, "Version")
316-
mlir_aie_timestamp = parse_hash_file(mlir_aie_hash_file, "Timestamp")
317-
mlir_aie_commit = parse_hash_file(mlir_aie_hash_file, "Commit")
318-
mlir_aie_short_commit = mlir_aie_commit[:7]
319-
mlir_aie_full_version = (
320-
f"{mlir_aie_version}.{mlir_aie_timestamp}+{mlir_aie_short_commit}.no.rtti"
321-
)
312+
Only mlir-air is pinned here. The mlir-air wheel exposes an [aie] extra
313+
that pins the matching mlir-aie commit and requires llvm-aie, so we get a
314+
guaranteed-compatible mlir-aie transitively without having to pin it
315+
ourselves.
316+
"""
317+
mlir_air_hash_file = BASE_DIR / "utils" / "mlir-air-hash.txt"
322318

323-
# Parse mlir-air version
324319
mlir_air_version = parse_hash_file(mlir_air_hash_file, "Version")
325320
mlir_air_timestamp = parse_hash_file(mlir_air_hash_file, "Timestamp")
326321
mlir_air_commit = parse_hash_file(mlir_air_hash_file, "Commit")
@@ -330,9 +325,7 @@ def get_install_requires():
330325
)
331326

332327
return [
333-
f"mlir-aie=={mlir_aie_full_version}",
334-
"llvm-aie",
335-
f"mlir-air=={mlir_air_full_version}",
328+
f"mlir-air[aie]=={mlir_air_full_version}",
336329
]
337330

338331

utils/env_setup.ps1

Lines changed: 17 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -21,49 +21,13 @@ Write-Host "Installing triton-windows..."
2121
python -m pip install triton-windows
2222

2323
# =============================================================================
24-
# Install mlir-aie
24+
# Install mlir-air with [aie] extra
2525
# =============================================================================
26+
# The mlir-air wheel pins the matching mlir-aie commit and requires llvm-aie,
27+
# so a single pip install resolves the whole MLIR-AIE/AIR/LLVM-AIE stack with
28+
# a guaranteed-compatible mlir-aie.
2629

27-
if (-not $env:MLIR_AIE_INSTALL_DIR) {
28-
$HashFile = Join-Path $ScriptDir "mlir-aie-hash-windows.txt"
29-
$MLIR_AIE_COMMIT = (Select-String -Path $HashFile -Pattern "^Commit:" | ForEach-Object { ($_ -split ":\s+")[1] }).Trim()
30-
$SHORT_COMMIT = $MLIR_AIE_COMMIT.Substring(0, 7)
31-
$MLIR_AIE_VERSION = (Select-String -Path $HashFile -Pattern "^Version:" | ForEach-Object { ($_ -split ":\s+")[1] }).Trim()
32-
$TIMESTAMP = (Select-String -Path $HashFile -Pattern "^Timestamp:" | ForEach-Object { ($_ -split ":\s+")[1] }).Trim()
33-
34-
Write-Host "Using mlir-aie hash: $SHORT_COMMIT"
35-
Write-Host "Version: $MLIR_AIE_VERSION"
36-
Write-Host "Timestamp: $TIMESTAMP"
37-
38-
python -m pip install "mlir_aie==$MLIR_AIE_VERSION.$TIMESTAMP+$SHORT_COMMIT.no.rtti" -f https://github.com/Xilinx/mlir-aie/releases/expanded_assets/latest-wheels-no-rtti
39-
40-
$MLIR_AIE_INSTALL_DIR = (python -c "import importlib.util; spec = importlib.util.find_spec('mlir_aie'); print(spec.submodule_search_locations[0])")
41-
$env:MLIR_AIE_INSTALL_DIR = $MLIR_AIE_INSTALL_DIR
42-
}
43-
44-
$env:PATH = "$env:MLIR_AIE_INSTALL_DIR\bin;$env:PATH"
45-
$env:PYTHONPATH = "$env:MLIR_AIE_INSTALL_DIR\python;$env:PYTHONPATH"
46-
47-
# =============================================================================
48-
# Install llvm-aie
49-
# =============================================================================
50-
51-
$HashFile = Join-Path $ScriptDir "llvm-aie-hash-windows.txt"
52-
$LLVM_AIE_COMMIT = (Select-String -Path $HashFile -Pattern "^Commit:" | ForEach-Object { ($_ -split ":\s+")[1] }).Trim()
53-
$LLVM_AIE_VERSION = (Select-String -Path $HashFile -Pattern "^Version:" | ForEach-Object { ($_ -split ":\s+")[1] }).Trim()
54-
$LLVM_AIE_TIMESTAMP = (Select-String -Path $HashFile -Pattern "^Timestamp:" | ForEach-Object { ($_ -split ":\s+")[1] }).Trim()
55-
56-
Write-Host "Using llvm-aie hash: $LLVM_AIE_COMMIT"
57-
Write-Host "llvm-aie version: $LLVM_AIE_VERSION"
58-
Write-Host "llvm-aie timestamp: $LLVM_AIE_TIMESTAMP"
59-
60-
python -m pip install "llvm_aie==$LLVM_AIE_VERSION.$LLVM_AIE_TIMESTAMP+$LLVM_AIE_COMMIT" -f https://github.com/Xilinx/llvm-aie/releases/expanded_assets/nightly
61-
62-
# =============================================================================
63-
# Install mlir-air
64-
# =============================================================================
65-
66-
$HashFile = Join-Path $ScriptDir "mlir-air-hash-windows.txt"
30+
$HashFile = Join-Path $ScriptDir "mlir-air-hash.txt"
6731
$MLIR_AIR_COMMIT = (Select-String -Path $HashFile -Pattern "^Commit:" | ForEach-Object { ($_ -split ":\s+")[1] }).Trim()
6832
$SHORT_AIR_COMMIT = $MLIR_AIR_COMMIT.Substring(0, 7)
6933
$MLIR_AIR_VERSION = (Select-String -Path $HashFile -Pattern "^Version:" | ForEach-Object { ($_ -split ":\s+")[1] }).Trim()
@@ -73,7 +37,18 @@ Write-Host "Using mlir-air hash: $SHORT_AIR_COMMIT"
7337
Write-Host "mlir-air version: $MLIR_AIR_VERSION"
7438
Write-Host "mlir-air timestamp: $MLIR_AIR_TIMESTAMP"
7539

76-
python -m pip install "mlir_air==$MLIR_AIR_VERSION.$MLIR_AIR_TIMESTAMP+$SHORT_AIR_COMMIT.no.rtti" -f https://github.com/Xilinx/mlir-air/releases/expanded_assets/latest-air-wheels-no-rtti
40+
python -m pip install "mlir_air[aie]==$MLIR_AIR_VERSION.$MLIR_AIR_TIMESTAMP+$SHORT_AIR_COMMIT.no.rtti" `
41+
-f https://github.com/Xilinx/mlir-air/releases/expanded_assets/latest-air-wheels-no-rtti `
42+
-f https://github.com/Xilinx/mlir-aie/releases/expanded_assets/latest-wheels-no-rtti `
43+
-f https://github.com/Xilinx/llvm-aie/releases/expanded_assets/nightly
44+
45+
if (-not $env:MLIR_AIE_INSTALL_DIR) {
46+
$MLIR_AIE_INSTALL_DIR = (python -c "import importlib.util; spec = importlib.util.find_spec('mlir_aie'); print(spec.submodule_search_locations[0])")
47+
$env:MLIR_AIE_INSTALL_DIR = $MLIR_AIE_INSTALL_DIR
48+
}
49+
50+
$env:PATH = "$env:MLIR_AIE_INSTALL_DIR\bin;$env:PATH"
51+
$env:PYTHONPATH = "$env:MLIR_AIE_INSTALL_DIR\python;$env:PYTHONPATH"
7752

7853
# =============================================================================
7954
# Install triton-xdna (copies backend into triton-windows)

utils/env_setup.sh

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,9 @@
55

66
SCRIPT_PATH="$(realpath "${BASH_SOURCE[0]}")"
77

8-
if [[ $MLIR_AIE_INSTALL_DIR == "" ]]; then
9-
SCRIPT_PATH="$(realpath "${BASH_SOURCE[0]}")"
10-
MLIR_AIE_COMMIT_HASH_FILE="$(dirname ${SCRIPT_PATH})/mlir-aie-hash.txt"
11-
# Install mlir-aie
12-
MLIR_AIE_COMMIT_HASH=$(awk -v kw="Commit:" '$0 ~ kw {for (i=1; i<NF; i++) if ($i == kw) print $(i+1)}' "$MLIR_AIE_COMMIT_HASH_FILE")
13-
SHORT_MLIR_AIE_COMMIT_HASH="${MLIR_AIE_COMMIT_HASH:0:7}"
14-
echo "Using mlir-aie hash: $SHORT_MLIR_AIE_COMMIT_HASH"
15-
MLIR_AIE_VERSION=$(awk -v kw="Version:" '$0 ~ kw {for (i=1; i<NF; i++) if ($i == kw) print $(i+1)}' "$MLIR_AIE_COMMIT_HASH_FILE")
16-
echo "Version: $MLIR_AIE_VERSION"
17-
TIMESTAMP=$(awk -v kw="Timestamp:" '$0 ~ kw {for (i=1; i<NF; i++) if ($i == kw) print $(i+1)}' "$MLIR_AIE_COMMIT_HASH_FILE")
18-
echo "Timestamp: $TIMESTAMP"
19-
python3 -m pip install mlir_aie==$MLIR_AIE_VERSION.$TIMESTAMP+$SHORT_MLIR_AIE_COMMIT_HASH.no.rtti -f https://github.com/Xilinx/mlir-aie/releases/expanded_assets/latest-wheels-no-rtti
20-
export MLIR_AIE_INSTALL_DIR="$(python3 -m pip show mlir_aie | grep ^Location: | awk '{print $2}')/mlir_aie"
21-
fi
22-
23-
export PATH=${MLIR_AIE_INSTALL_DIR}/bin:${PATH}
24-
export PYTHONPATH=${MLIR_AIE_INSTALL_DIR}/python:${PYTHONPATH}
25-
export LD_LIBRARY_PATH=${MLIR_AIE_INSTALL_DIR}/lib:${LD_LIBRARY_PATH}
26-
27-
# Install llvm-aie (latest nightly)
28-
python3 -m pip install --upgrade llvm-aie -f https://github.com/Xilinx/llvm-aie/releases/expanded_assets/nightly
29-
30-
# Install mlir-air
8+
# Install mlir-air with the [aie] extra. The mlir-air wheel pins the matching
9+
# mlir-aie commit and requires llvm-aie, so a single pip install resolves the
10+
# whole MLIR-AIE/AIR/LLVM-AIE stack with a guaranteed-compatible mlir-aie.
3111
MLIR_AIR_HASH_FILE="$(dirname ${SCRIPT_PATH})/mlir-air-hash.txt"
3212
MLIR_AIR_COMMIT_HASH=$(awk -v kw="Commit:" '$0 ~ kw {for (i=1; i<NF; i++) if ($i == kw) print $(i+1)}' "$MLIR_AIR_HASH_FILE")
3313
SHORT_MLIR_AIR_COMMIT_HASH="${MLIR_AIR_COMMIT_HASH:0:7}"
@@ -36,4 +16,15 @@ MLIR_AIR_VERSION=$(awk -v kw="Version:" '$0 ~ kw {for (i=1; i<NF; i++) if ($i ==
3616
echo "mlir-air version: $MLIR_AIR_VERSION"
3717
MLIR_AIR_TIMESTAMP=$(awk -v kw="Timestamp:" '$0 ~ kw {for (i=1; i<NF; i++) if ($i == kw) print $(i+1)}' "$MLIR_AIR_HASH_FILE")
3818
echo "mlir-air timestamp: $MLIR_AIR_TIMESTAMP"
39-
python3 -m pip install mlir_air==$MLIR_AIR_VERSION.$MLIR_AIR_TIMESTAMP+$SHORT_MLIR_AIR_COMMIT_HASH.no.rtti -f https://github.com/Xilinx/mlir-air/releases/expanded_assets/latest-air-wheels-no-rtti
19+
python3 -m pip install "mlir_air[aie]==$MLIR_AIR_VERSION.$MLIR_AIR_TIMESTAMP+$SHORT_MLIR_AIR_COMMIT_HASH.no.rtti" \
20+
-f https://github.com/Xilinx/mlir-air/releases/expanded_assets/latest-air-wheels-no-rtti \
21+
-f https://github.com/Xilinx/mlir-aie/releases/expanded_assets/latest-wheels-no-rtti \
22+
-f https://github.com/Xilinx/llvm-aie/releases/expanded_assets/nightly
23+
24+
if [[ $MLIR_AIE_INSTALL_DIR == "" ]]; then
25+
export MLIR_AIE_INSTALL_DIR="$(python3 -m pip show mlir_aie | grep ^Location: | awk '{print $2}')/mlir_aie"
26+
fi
27+
28+
export PATH=${MLIR_AIE_INSTALL_DIR}/bin:${PATH}
29+
export PYTHONPATH=${MLIR_AIE_INSTALL_DIR}/python:${PYTHONPATH}
30+
export LD_LIBRARY_PATH=${MLIR_AIE_INSTALL_DIR}/lib:${LD_LIBRARY_PATH}

utils/mlir-aie-hash.txt

Lines changed: 0 additions & 3 deletions
This file was deleted.

utils/mlir-air-hash.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
Commit: c8ec089
2-
Timestamp: 2026042305
1+
Commit: dfa6d08
2+
Timestamp: 2026050805
33
Version: 0.0.1

0 commit comments

Comments
 (0)