预处理器注意事项 - 2023.2 简体中文

AI 引擎工具和流程用户指南 (UG1076)

Document ID
UG1076
Release Date
2023-12-04
Version
2023.2 简体中文

x86sim 为目标运行 AI 引擎编译器时,编译器会忽略 --Xchess 选项。这表示,x86sim 流程不支持内核专用的编译选项。

请参阅以下示例以便更好地理解此注意事项。对 C 语言代码执行编译时修改的常用方法是使用预处理器指令,如 #ifndef。要控制这些预处理器指令,最好通过命令行编译器选项来传递 #defines。以下代码块示例基于预处理器指令执行两项不同的操作。

void example_kernel()
{
  #ifdef SIM
    printf("Simulation Mode\n");
  #else
    printf("Default Mode\n");
  #endif
}

要在编译时使用 AI 引擎编译器以硬件为目标 (hw) 来定义 SIM 宏,您可执行以下操作。

aiecompiler -target=hw -Xchess="example_kernel:-DSIM"

由于当编译目标设为 x86sim 时,会忽略 -Xchess 实参,因此对于 x86 仿真器不定义 SIM,并且内核输出为“Default Mode”(默认模式)。

如果需要为 x86 仿真器指定预处理器选项,可使用 aiecompiler -target=x86sim --Xpreproc 替代 -Xchess。值得注意的是,以此方式传递的任何选项会应用于所有源代码和所有目标流程。

表 1. AI 引擎编译器命令行选项
选项 描述
--Xchess=<string>

该选项可用于将内核专用选项传递给 CHESS 编译器,此编译器用于为每个 AI 引擎编译代码。

选项字符串指定为 <kernel-function>:<optionid>=<value>。在映射指定内核函数的 AI 引擎上编译生成的源文件期间包含该选项字符串。
--Xpreproc=<string>

该选项可用于将常规选项传递到 PREPROCESSOR 阶段,用于执行所有源代码的编译 (AIE/PS/PL/x86sim)。例如:

--Xpreproc=-D<var>=<value>