XRT でアクセラレーション・カーネルのホスト・アプリケーションを書いてみよう3”の続き。

FPGAカーネル超入門 (2)”を参照して、OpenCL コードの代わりに低レベルの XRT コードを使用して、ホスト・アプリケーションを作成してみようということで、前回は、”FPGAカーネル超入門 (2)”の”4. XRTコアライブラリによるプログラミング”を Vitis 2021.1 でやっていたらビルドでエラーが発生した。今回は、エラーを解消することができてビルドが成功した。

前回のエラーは

error: invalid conversion from 'int' to 'xclVerbosityLevel'

だった。
XRT/src/runtime_src/core/include/xrt.h の xclVerbosityLevel の定義を見ると、0 は XCL_QUIET だったので、これを代入し、ビルドを行った。
するとエラーがたくさん出てしまった。
4df32c10.png


これは xclOpen などが無いと言われているようだ。

/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: src/vadd_xrt.o: in function `main':
/media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:64: undefined reference to `xclOpen'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:91: undefined reference to `xclLoadXclBin'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:105: undefined reference to `xclOpenContext'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:113: undefined reference to `xclAllocBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:119: undefined reference to `xclAllocBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:125: undefined reference to `xclAllocBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:132: undefined reference to `xclGetBOProperties'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:139: undefined reference to `xclGetBOProperties'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:146: undefined reference to `xclGetBOProperties'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:153: undefined reference to `xclMapBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:159: undefined reference to `xclMapBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:165: undefined reference to `xclMapBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:180: undefined reference to `xclSyncBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:185: undefined reference to `xclSyncBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:193: undefined reference to `xclAllocBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:200: undefined reference to `xclMapBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:221: undefined reference to `xclExecBuf'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:227: undefined reference to `xclExecWait'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:240: undefined reference to `xclSyncBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:257: undefined reference to `xclUnmapBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:260: undefined reference to `xclUnmapBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:263: undefined reference to `xclUnmapBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:266: undefined reference to `xclUnmapBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:269: undefined reference to `xclFreeBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:272: undefined reference to `xclFreeBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:275: undefined reference to `xclFreeBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:278: undefined reference to `xclFreeBO'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:282: undefined reference to `xclCloseContext'
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2021.1/gnu/aarch64/lin/aarch64-linux/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-ld.real: /media/masaaki/Ubuntu_Disk/KRIA_KV260/2021.1/kv260_custom_platform/kv260_custom_pkg/vadd_xrt/Hardware/../src/vadd_xrt.c:286: undefined reference to `xclClose'
makefile:55: recipe for target 'vadd_xrt' failed
collect2.real: error: ld returned 1 exit status
make: *** [vadd_xrt] Error 1

05:13:05 Build Finished (took 1s.121ms)


原因としては、ライブラリが参照されていないようだ。
Vitis のライブラリ・パスとライブラリの参照を追加する。
どのライブラリを使用するか?だが、”oda-g/FPGA/xilinx/vadd/src/host/Makefile”に書いてあった。
xrt_corexrt_coreutil のようだ。
さて Vitis にライブラリを追加する。
Assistant ウインドウで vadd_xrt_system -> vadd_xrt -> Hardware を右クリックし、右クリックメニューから Settings... を選択する。
72c893cc.png


Build Configuration Settings ダイアログが表示される。
Edit Toolchain Linker Settings... のリンクをクリックする。
4417ef4b.png


ライブラリ・パスを追加する。
Library search path (-L) の Add... ボタンをクリックする。
ライブラリ・パスの追加の必要はないようだ。
d5b1422d.png


Add directory path ダイアログの Directory に /opt/xilinx/xrt/lib を追加する。
895cafea.png


ライブラリを追加する。
Libraries (-l) の Add... ボタンをクリックする。
98dfafaf.png


Enter Value ダイアログが表示される。
Libraries (-l) に xrt_core を入力する。
(注)下のダイアログの入力文字列が違っているが、xrt_core が正しい。
bc08d6c6.png


xrt_coreutil も同様に入力する。
9462a706.png


これでビルドを行ったところ、ビルドが成功した。
a3eebdfc.png