ホスト プログラムのビルド
XRT ネイティブ API または OpenCL™ API 呼び出しを使用して C/C++ で記述されたホスト プログラムは、GNU コンパイラ コレクション (GCC) に基づく C++ コンパイラ (g++) を使用してビルドされます。各ソース ファイルはオブジェクト ファイル (.o) にコンパイルされ、ザイリンクス ランタイム (XRT) 共有ライブラリとリンクされて、ホスト CPU で実行する実行ファイルが作成されます。
x86 用のコンパイルおよびリンク
g++ コンパイラを使用してオブジェクト ファイル (.o) にコンパイルされます。g++ ... -c <source_file1> <source_file2> ... <source_fileN>-l オプションを使用します。g++ ... -l <object_file1.o> ... <object_fileN.o>x86 用のコンパイルおよびリンクは、標準 g++ フローに従います。唯一の要件は、XRT ヘッダー ファイルを含め、XRT 共有ライブラリをリンクすることです。
ソース コードをコンパイルするには、次の g++ オプションが必要です。
-I$XILINX_XRT/include/: XRT インクルード ディレクトリ。-I$XILINX_VIVADO/include: Vivado ツールのインクルード ディレクトリ。-std=c++11: C++ 言語標準を定義します。
実行ファイルをリンクする際、次の g++ オプションが必要です。
-L$XILINX_XRT/lib/: XRT ライブラリを検索します。-lOpenCL: リンク時に指定のライブラリを検索します。-lpthread: リンク時に指定のライブラリを検索します。-lrt: リンク時に指定のライブラリを検索します。-lstdc++: リンク時に指定のライブラリを検索します。
-I../libs/xcl2 インクルード文が追加されている例があります。ホスト プログラムおよび g++ コマンドにこれらを追加すると、サンプル コードで使用されるヘルパー ユーティリティにアクセスできますが、通常は不要です。XRT ネイティブ API の構築
XRT には、XRT サイトの https://xilinx.github.io/XRT/2020.2/html/xrt_native_apis.html で説明されるように、C 、C++、および Python 用のネイティブ XRT API が含まれます。ネイティブ XRT API を使用するには、ホスト アプリケーションが xrt_coreutil ライブラリにリンクしている必要があります。コマンド ラインでは、次のコンパイルとリンクをまとめた例で示すように、いくつかの異なる設定が使用されます。
g++ -g -std=c++14 -I$XILINX_XRT/include -L$XILINX_XRT/lib -lxrt_coreutil -lpthread \
-o host.exe host.cpp
-std=c++14 を使用する必要があります。Arm 用のコンパイルおよびリンク
ホスト プログラム (host.exe) は、次の 2 つの手順で Arm プロセッサ用にクロスコンパイラおよびリンクします。
g++の GNU Arm クロスコンパイラ バージョンを使用して、host.cpp をオブジェクト ファイル (.o) にコンパイルします。注記:aarch64は Zynq® UltraScale+™ (A53) および Versal™ (A72) デバイスに使用されます。aarch32は Zynq-7000 SoC (A9) に使用され、ツール チェーンは別の場所にあります。$XILINX_VITIS/gnu/aarch64/lin/aarch64-linux/bin/aarch64-linux-gnu-g++ \ -D__USE_XOPEN2K8 -I$SYSROOT/usr/include/xrt -I$XILINX_VIVADO/include \ -I$SYSROOT/usr/include -c -fmessage-length=0 -std=c++14 \ --sysroot=$SYSROOT -o src/host.o ../src/host.cpp- オブジェクト ファイルを必要なライブラリとリンクし、実行ファイルを作成します。
$XILINX_VITIS/gnu/aarch64/lin/aarch64-linux/bin/aarch64-linux-gnu-g++ \ -o host.exe src/host.o -lxilinxopencl -lpthread -lrt -lstdc++ -lgmp -lxrt_core \ -L$SYSROOT/usr/lib/ --sysroot=$SYSROOT
アプリケーションをエンベデッド プロセス用にコンパイルする場合は、アプリケーションの sysroot を指定する必要があります。sysroot は、基本システム ルート ファイル構造を定義するプラットフォームの一部です。インストール方法は、エンベデッド プラットフォームのインストール を参照してください。
$SYSROOT 環境変数にエンベデッド プラットフォームの sysroot の場所が指定されていることが必要です。エッジ プラットフォーム用にホスト コードをコンパイルする際の主要な要素は、次のとおりです。
- コンパイル
-
- 必要なクロスコンパイラは、Vitis インストール ディレクトリに含まれる
aarch64-linux-gnu-g++です。 - 必要なインクルード パスは、次のとおりです。
- $SYSROOT/usr/include
- $SYSROOT/usr/include/xrt
- $XILINX_VIVADO/include
- 必要なクロスコンパイラは、Vitis インストール ディレクトリに含まれる
- リンク
-
- $SYSROOT/usr/lib: ライブラリの場所。
- xilinxopencl: XRT で必要なライブラリ。
- pthread: XRT で必要なライブラリ。
- rt: XRT で必要なライブラリ。
- stdc++: XRT で必要なライブラリ。
- gmp: XRT で必要なライブラリ。
- xrt_core: XRT で必要なライブラリ。
XRT ネイティブ API の構築
XRT には、XRT サイトの https://xilinx.github.io/XRT/2020.2/html/xrt_native_apis.html で説明されるように、C 、C++、および Python 用のネイティブ XRT API が含まれます。ネイティブ XRT API を使用するには、ホスト アプリケーションが xlinxopencl ライブラリではなく xrt_coreutil ライブラリにリンクしている必要があります。コマンド ラインでは、次のコンパイルとリンクの例に示すように、いくつかの異なる設定が使用されます。
$XILINX_VITIS/gnu/aarch64/lin/aarch64-linux/bin/aarch64-linux-gnu-g++ -c \
-D__USE_XOPEN2K8 -I$SYSROOT/usr/include/xrt -I$XILINX_VIVADO/include \
-I$SYSROOT/usr/include -fmessage-length=0 -std=c++14 --sysroot=$SYSROOT \
-o src/host.o ../src/host.cpp
$XILINX_VITIS/gnu/aarch64/lin/aarch64-linux/bin/aarch64-linux-gnu-g++ -l \
-lxrt_coreutil -lpthread -lrt -lstdc++ -lgmp -lxrt_core -L$SYSROOT/usr/lib/ \
--sysroot=$SYSROOT -o host.exe src/host.o