Skip to content

Commit 619f061

Browse files
committed
Find AIE architectures in Peano
1 parent c017ae7 commit 619f061

File tree

5 files changed

+116
-54
lines changed

5 files changed

+116
-54
lines changed

programming_examples/lit.cfg.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,22 @@
4848
# Not using run_on_board anymore, need more specific per-platform commands
4949
config.substitutions.append(("%run_on_board", "echo"))
5050

51+
# Detect Peano backend first to get supported architectures
52+
peano_tools_dir = os.path.join(config.peano_install_dir, "bin")
53+
peano_config = LitConfigHelper.detect_peano(
54+
peano_tools_dir, config.peano_install_dir, llvm_config
55+
)
56+
57+
# Add Peano-detected components to vitis_components if not already present
58+
peano_components_str = peano_config.substitutions.get("%peano_components%", "[]")
59+
try:
60+
peano_components = eval(peano_components_str)
61+
for comp in peano_components:
62+
if comp not in config.vitis_components:
63+
config.vitis_components.append(comp)
64+
except Exception:
65+
pass
66+
5167
# Add Vitis components as features
5268
LitConfigHelper.add_vitis_components_features(config, config.vitis_components)
5369

@@ -107,18 +123,12 @@
107123
# Prepend path to XRT installation, which contains a more recent `aiebu-asm` than the Vitis installation.
108124
LitConfigHelper.prepend_path(llvm_config, config.xrt_bin_dir)
109125

110-
peano_tools_dir = os.path.join(config.peano_install_dir, "bin")
111126
LitConfigHelper.prepend_path(llvm_config, config.llvm_tools_dir)
112127
LitConfigHelper.prepend_path(llvm_config, peano_tools_dir)
113128
config.substitutions.append(("%LLVM_TOOLS_DIR", config.llvm_tools_dir))
114129

115130
tool_dirs = [config.aie_tools_dir, config.llvm_tools_dir]
116131

117-
# Detect Peano backend
118-
peano_config = LitConfigHelper.detect_peano(
119-
peano_tools_dir, config.peano_install_dir, llvm_config
120-
)
121-
122132
# Detect Chess compiler
123133
chess_config = LitConfigHelper.detect_chess(
124134
config.vitis_root, config.enable_chess_tests, llvm_config

programming_guide/lit.cfg.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,22 @@
3535
llvm_config, config, config.aie_obj_root, config.vitis_aietools_dir
3636
)
3737

38+
# Detect Peano backend first to get supported architectures
39+
peano_tools_dir = os.path.join(config.peano_install_dir, "bin")
40+
peano_config = LitConfigHelper.detect_peano(
41+
peano_tools_dir, config.peano_install_dir, llvm_config
42+
)
43+
44+
# Add Peano-detected components to vitis_components if not already present
45+
peano_components_str = peano_config.substitutions.get("%peano_components%", "[]")
46+
try:
47+
peano_components = eval(peano_components_str)
48+
for comp in peano_components:
49+
if comp not in config.vitis_components:
50+
config.vitis_components.append(comp)
51+
except Exception:
52+
pass
53+
3854
# Add Vitis components as features
3955
LitConfigHelper.add_vitis_components_features(config, config.vitis_components)
4056

@@ -66,18 +82,12 @@
6682
# Prepend path to XRT installation, which contains a more recent `aiebu-asm` than the Vitis installation.
6783
LitConfigHelper.prepend_path(llvm_config, config.xrt_bin_dir)
6884

69-
peano_tools_dir = os.path.join(config.peano_install_dir, "bin")
7085
LitConfigHelper.prepend_path(llvm_config, config.llvm_tools_dir)
7186
LitConfigHelper.prepend_path(llvm_config, peano_tools_dir)
7287
config.substitutions.append(("%LLVM_TOOLS_DIR", config.llvm_tools_dir))
7388

7489
tool_dirs = [config.aie_tools_dir, config.llvm_tools_dir]
7590

76-
# Detect Peano backend
77-
peano_config = LitConfigHelper.detect_peano(
78-
peano_tools_dir, config.peano_install_dir, llvm_config
79-
)
80-
8191
# Detect Chess compiler
8292
chess_config = LitConfigHelper.detect_chess(
8393
config.vitis_root, config.enable_chess_tests, llvm_config

python/aie_lit_utils/lit_config_helpers.py

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -257,16 +257,19 @@ def detect_xrt(
257257
run_on_npu = f"{aie_src_root}/utils/run_on_npu.sh"
258258

259259
# Map model to NPU generation and filter by available components
260+
# Convert vitis_components to uppercase for case-insensitive comparison
261+
vitis_components_upper = [c.upper() for c in vitis_components]
262+
260263
if model in LitConfigHelper.NPU_MODELS["npu1"]:
261-
if "aie2" in vitis_components:
264+
if "AIE2" in vitis_components_upper:
262265
run_on_npu1 = run_on_npu
263266
config.features.extend(["ryzen_ai", "ryzen_ai_npu1"])
264267
config.substitutions["%run_on_npu1%"] = run_on_npu1
265268
print(f"Running tests on NPU1 with command line: {run_on_npu1}")
266269
else:
267270
print("NPU1 detected but aietools for aie2 not available")
268271
elif model in LitConfigHelper.NPU_MODELS["npu2"]:
269-
if "aie2p" in vitis_components:
272+
if "AIE2P" in vitis_components_upper:
270273
run_on_npu2 = run_on_npu
271274
config.features.extend(["ryzen_ai", "ryzen_ai_npu2"])
272275
config.substitutions["%run_on_npu2%"] = run_on_npu2
@@ -352,15 +355,17 @@ def detect_peano(
352355
peano_tools_dir: str, peano_install_dir: str, llvm_config
353356
) -> HardwareConfig:
354357
"""
355-
Detect Peano backend availability.
358+
Detect Peano backend availability and supported AIE architectures.
356359
357360
Args:
358361
peano_tools_dir: Path to Peano tools directory
359362
peano_install_dir: Path to Peano installation root
360363
llvm_config: LLVM lit config object for environment setup
361364
362365
Returns:
363-
HardwareConfig with Peano detection results
366+
HardwareConfig with Peano detection results including supported AIE architectures.
367+
The supported architectures are stored in config.substitutions["%peano_components%"]
368+
as a list that can be added to vitis_components.
364369
"""
365370
config = HardwareConfig()
366371

@@ -373,15 +378,43 @@ def detect_peano(
373378
timeout=5,
374379
)
375380

376-
if re.search(
377-
"Xilinx AI Engine", result.stdout.decode("utf-8", errors="ignore")
378-
):
381+
version_output = result.stdout.decode("utf-8", errors="ignore")
382+
if re.search("Xilinx AI Engine", version_output):
379383
config.found = True
380384
config.features.append("peano")
381385
config.substitutions["%PEANO_INSTALL_DIR"] = peano_install_dir
382386
# Also set environment variable for tests that need it
383387
llvm_config.with_environment("PEANO_INSTALL_DIR", peano_install_dir)
384388
print(f"Peano found: {llc_path}")
389+
390+
# Detect supported AIE architectures by checking include directories
391+
# llvm-aie installed via pip will have include dirs like:
392+
# - aie2-none-unknown-elf/
393+
# - aie2p-none-unknown-elf/
394+
supported_components = []
395+
peano_include_dir = os.path.join(peano_install_dir, "include")
396+
397+
if os.path.isdir(peano_include_dir):
398+
# Check for AIE2 support
399+
aie2_include = os.path.join(peano_include_dir, "aie2-none-unknown-elf")
400+
if os.path.isdir(aie2_include):
401+
supported_components.append("AIE2")
402+
config.features.append("peano_aie2")
403+
print(" Peano supports AIE2")
404+
405+
# Check for AIE2P support
406+
aie2p_include = os.path.join(peano_include_dir, "aie2p-none-unknown-elf")
407+
if os.path.isdir(aie2p_include):
408+
supported_components.append("AIE2P")
409+
config.features.append("peano_aie2p")
410+
print(" Peano supports AIE2P")
411+
412+
# Store supported components as a Python list string for lit config
413+
if supported_components:
414+
config.substitutions["%peano_components%"] = str(supported_components)
415+
else:
416+
config.substitutions["%peano_components%"] = "[]"
417+
385418
return config
386419
except subprocess.TimeoutExpired:
387420
print(f"Peano detection timed out at {peano_tools_dir}")
@@ -391,6 +424,7 @@ def detect_peano(
391424
print(f"Peano detection failed: {e}")
392425

393426
print(f"Peano not found, but expected at {peano_tools_dir}")
427+
config.substitutions["%peano_components%"] = "[]"
394428
return config
395429

396430
@staticmethod

runtime_lib/CMakeLists.txt

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -89,35 +89,33 @@ foreach(target ${AIE_RUNTIME_TARGETS})
8989
message(STATUS "LibXAIE_${target}_DIR not specified and Vitis not found. LibXAIE not built.")
9090
endif()
9191

92-
# test_lib
93-
if (DEFINED VITIS_ROOT OR DEFINED LibXAIE_${target}_DIR)
94-
message(STATUS "setting up test_lib")
95-
ExternalProject_Add(test_lib_${target}
96-
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/test_libTmp/${target}
97-
SOURCE_DIR ${PROJECT_SOURCE_DIR}/test_lib
98-
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${target}/test_lib/lib
99-
CMAKE_CACHE_ARGS
100-
-DCMAKE_MODULE_PATH:STRING=${CMAKE_MODULE_PATH}
101-
CMAKE_ARGS
102-
-DCMAKE_TOOLCHAIN_FILE=${${target}_TOOLCHAIN_FILE}
103-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
104-
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
105-
-DAIE_RUNTIME_TARGET=${target}
106-
-DLibXAIE_INC_DIR=${XILINX_XAIE_INCLUDE_DIR}
107-
-DXRT_ROOT=${XRT_ROOT}
108-
-Dhsa-runtime64_DIR=${hsa-runtime64_DIR}
109-
-Dhsakmt_DIR=${hsakmt_DIR}
110-
DEPENDS ${testLibDependsOnXaiengine}
111-
BUILD_ALWAYS true
112-
STEP_TARGETS clean build install test
113-
USES_TERMINAL_CONFIGURE true
114-
USES_TERMINAL_BUILD true
115-
USES_TERMINAL_TEST true
116-
USES_TERMINAL_INSTALL true
117-
TEST_BEFORE_INSTALL true
118-
TEST_EXCLUDE_FROM_MAIN true
119-
)
120-
endif()
92+
# test_lib - always build it, even without AIETools (for peano-only builds)
93+
message(STATUS "setting up test_lib for ${target}")
94+
ExternalProject_Add(test_lib_${target}
95+
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/test_libTmp/${target}
96+
SOURCE_DIR ${PROJECT_SOURCE_DIR}/test_lib
97+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${target}/test_lib/lib
98+
CMAKE_CACHE_ARGS
99+
-DCMAKE_MODULE_PATH:STRING=${CMAKE_MODULE_PATH}
100+
CMAKE_ARGS
101+
-DCMAKE_TOOLCHAIN_FILE=${${target}_TOOLCHAIN_FILE}
102+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
103+
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
104+
-DAIE_RUNTIME_TARGET=${target}
105+
-DLibXAIE_INC_DIR=${XILINX_XAIE_INCLUDE_DIR}
106+
-DXRT_ROOT=${XRT_ROOT}
107+
-Dhsa-runtime64_DIR=${hsa-runtime64_DIR}
108+
-Dhsakmt_DIR=${hsakmt_DIR}
109+
DEPENDS ${testLibDependsOnXaiengine}
110+
BUILD_ALWAYS true
111+
STEP_TARGETS clean build install test
112+
USES_TERMINAL_CONFIGURE true
113+
USES_TERMINAL_BUILD true
114+
USES_TERMINAL_TEST true
115+
USES_TERMINAL_INSTALL true
116+
TEST_BEFORE_INSTALL true
117+
TEST_EXCLUDE_FROM_MAIN true
118+
)
121119
endforeach()
122120

123121
include("xaiengine/aiert.cmake")

test/lit.cfg.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,22 @@
5959
config.hsa_dir, config.aieHostTarget, config.enable_board_tests
6060
)
6161

62+
# Detect Peano backend first to get supported architectures
63+
peano_tools_dir = os.path.join(config.peano_install_dir, "bin")
64+
peano_config = LitConfigHelper.detect_peano(
65+
peano_tools_dir, config.peano_install_dir, llvm_config
66+
)
67+
68+
# Add Peano-detected components to vitis_components if not already present
69+
peano_components_str = peano_config.substitutions.get("%peano_components%", "[]")
70+
try:
71+
peano_components = eval(peano_components_str)
72+
for comp in peano_components:
73+
if comp not in config.vitis_components:
74+
config.vitis_components.append(comp)
75+
except Exception:
76+
pass
77+
6278
# Add Vitis components as features
6379
LitConfigHelper.add_vitis_components_features(config, config.vitis_components)
6480

@@ -99,19 +115,13 @@
99115
# Prepend path to XRT installation, which contains a more recent `aiebu-asm` than the Vitis installation.
100116
LitConfigHelper.prepend_path(llvm_config, config.xrt_bin_dir)
101117

102-
peano_tools_dir = os.path.join(config.peano_install_dir, "bin")
103118
LitConfigHelper.prepend_path(llvm_config, config.llvm_tools_dir)
104119
LitConfigHelper.prepend_path(llvm_config, peano_tools_dir)
105120
LitConfigHelper.prepend_path(llvm_config, config.aie_tools_dir)
106121
config.substitutions.append(("%LLVM_TOOLS_DIR", config.llvm_tools_dir))
107122

108123
tool_dirs = [config.aie_tools_dir, config.llvm_tools_dir]
109124

110-
# Detect Peano backend
111-
peano_config = LitConfigHelper.detect_peano(
112-
peano_tools_dir, config.peano_install_dir, llvm_config
113-
)
114-
115125
# Detect Chess compiler
116126
chess_config = LitConfigHelper.detect_chess(
117127
config.vitis_root, config.enable_chess_tests, llvm_config

0 commit comments

Comments
 (0)