After linking the AI Engine graph and PL kernels, the focus moves to the embedded application running in the PS that interacts with the AI Engine graph and kernels. The PS application is written in C/C++, using API calls to control the initialization, running, and closing of the AI Engine graph as described in Run-Time Graph Control API.
You compile the embedded application by following the typical cross-compilation flow for the Arm Cortex-A72 processor. The following are example commands for compiling and linking the PS application:
aarch64-linux-gnu-g++ -std=c++14 -O0 -g -Wall -c \
-I<platform_path>/sysroots/aarch64-xilinx-linux/usr/include/xrt \
--sysroot=<platform_path>/sysroots/aarch64-xilinx-linux/ \
-I./ -I./src -I${XILINX_HLS}/include/ -I${XILINX_VITIS}/aietools/include -o sw/host.o sw/host.cpp
aarch64-linux-gnu-g++ -std=c++14 -O0 -g -Wall -c \
-I<platform_path>/sysroots/aarch64-xilinx-linux/usr/include/xrt \
--sysroot=<platform_path>/sysroots/aarch64-xilinx-linux/ \
-I./ -I./src -I${XILINX_HLS}/include/ -I${XILINX_VITIS}/aietools/include -o sw/aie_control_xrt.o Work/ps/c_rts/aie_control_xrt.cpp
Many of the options in the preceding command are standard and can be found in
a description of the g++
command. The more
important options are listed in the following table:
Command Options |
---|
-std=c++14
|
-I<platform_path>/sysroots/aarch64-xilinx-linux/usr/include/xrt
|
--sysroot=<platform_path>/sysroots/aarch64-xilinx-linux/
|
-I./ -I./src
|
-I${XILINX_HLS}/include/
|
-I${XILINX_VITIS}/aietools/include
|
-o sw/host.o
sw/host.cpp
|
The cross compiler aarch64-linux-gnu-g++
is
used to compile the Linux host code. aie_control_xrt.cpp is copied from the directory Work/ps/c_rts.
aarch64-linux-gnu-g++ -ladf_api_xrt -lgcc -lc -lxilinxopencl -lpthread -lrt -ldl \
-lcrypt -lstdc++ -lxrt_coreutil \
-L<platform_path>/sysroots/aarch64-xilinx-linux/usr/lib \
--sysroot=<platform_path>/sysroots/aarch64-xilinx-linux \
-L${XILINX_VITIS}/aietools/lib/aarch64.o -o sw/host.exe sw/host.o sw/aie_control_xrt.o
Note in the preceding linker script that it links the adf_api_xrt libraries, which is necessary for the ADF API to work with the XRT API.
xrt_coreutil
are required
libraries for XRT, and for both the OpenCL API
and XRT API.
While many of the options can be found in a description of the g++
command, some of the more important options are
listed in the following table.
Option | Description |
---|---|
-ladf_api_xrt
|
Required for the ADF API. For more information, see Host Programming on Linux. This is used to control the AI Engine through XRT. If not
controlling with XRT, use |
-lxilinxopencl
|
Required for theOpenCL API. For more information see Controlling PL Kernels with the OpenCL API. |
-lxrt_coreutil
|
Required for the XRT API. |
-L<platform_path>/sysroots/aarch64-xilinx-linux/usr/lib
|
|
--sysroot=<platform_path>/aarch64-xilinx-linux
|
|
-L${XILINX_VITIS}/aietools/lib/aarch64.o
|
|
-o
sw/host.exe
|