To build the PS application for the bare-metal flow, use the
platform generated in the prior step. You need the PS application (main.cpp), and the bare-metal AI Engine control file (aie_control.cpp), which is created by the aiecompiler
command and can be found in the ./Work/ps/c_rts folder.
Compile the main.cpp file using the following command:
aarch64-none-elf-gcc -I.. -I. -I../src \
-I./vck190_baremetal/export/vck190_baremetal/sw/vck190_baremetal/standalone_domain/bspinclude/include \
-g -c -std=c++17 -o main.o main.cpp
Note: You must include the BSP include files for the generated custom base-platform
platform, located at: ./vck190_baremetal/export/vck190_baremetal/sw/vck190_baremetal/standalone_domain/bspinclude/include
where, vck190_baremetal
is the
user-defined platform name.
Compile the aie_control.cpp file using the following command:
aarch64-none-elf-gcc -I.. -I. -I../src \
-I./vck190_baremetal/export/vck190_baremetal/sw/vck190_baremetal/standalone_domain/bspinclude/include \
-g -c -std=c++17 -o aie_control.o ../Work/ps/c_rts/aie_control.cpp
Link the PS application using the two compiled object files:
aarch64-none-elf-gcc main.o aie_control.o -g -mcpu=cortex-a72 -Wl,-T -Wl,./lscript.ld \
-L./vck190_baremetal/export/vck190_baremetal/sw/vck190_baremetal/standalone_domain/bsplib/lib \
-ladf_api -Wl,--start-group,-lxil,-lgcc,-lc,-lstdc++,--end-group -o main.elf
Note: You also need the BSP libxil.a located at
./vck190_baremetal/export/vck190_baremetal/standalone_domain/bsplib/lib
during linking. This assumes the AI Engine is
enabled during the platform management controller (PMC) boot.
Note: The linker script
lscript.ld
can be obtained from the Vitis IDE, as
described in Creating a Bare-Metal System found in
Vitis Unified Software Platform Documentation: Application
Acceleration Development (UG1393). Additional details
can be found in https://docs.xilinx.com/r/en-US/Vitis-Tutorials-AI-Engine-Development/A-to-Z-Bare-metal-Flow.Note: If the graph or kernel code is designed
for multiple architectures and it must use the
__AIE_ARCH__
macro
to guard parts of the code specifc to an architecture.You must define the macro in
the host compilation. For example, add -D__AIE_ARCH=10
for host compilation for AI Engine devices, and
-D__AIE_ARCH=20
for AI Engine-ML
devices.Important: The steps to integrate
the host code with the AI Engine graph
application and the PL kernels into the hardware platform requires running the
v++ --package
command. Details on building and running the
Versal system using the Vitis tool flow is described in Building and Running the System
Vitis Unified Software Platform Documentation: Application
Acceleration Development (UG1393).