ホスト プログラムのビルド

OpenCL™ API 呼び出しを使用して C/C++ で記述されたホスト プログラムは、GNU コンパイラ コレクション (GCC) に基づく C++ コンパイラ (g++) を使用してビルドされます。各ソース ファイルはオブジェクト ファイル (.o) にコンパイルされ、ザイリンクス ランタイム (XRT) 共有ライブラリとリンクされて、ホスト CPU で実行する実行ファイルが作成されます。

ヒント: ここには記載されていませんが、g++ では、多数の GCC オプションがサポートされています。詳細は、GCC オプションのサマリを参照してください。

x86 用のコンパイルおよびリンク

ヒント: ツールを実行する前に、Vitis 環境の設定 に説明されているように、コマンド シェルまたはウィンドウを設定します。
ホスト アプリケーションの各ソース ファイルは、g++ コンパイラを使用してオブジェクト ファイル (.o) にコンパイルされます。
g++ ... -c <source_file1> <source_file2> ... <source_fileN>
生成されたオブジェクト ファイル (.o) がザイリンクス ランタイム共有ライブラリとリンクされ、実行可能なホスト プログラムが作成されます。リンクを実行するには、-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++: リンク時に指定のライブラリを検索します。
注記: Vitis Examples では、xcl2.cpp ソース ファイルおよび -I../libs/xcl2 インクルード文が追加されている例があります。ホスト プログラムおよび g++ コマンドにこれらを追加すると、サンプル コードで使用されるヘルパー ユーティリティにアクセスできますが、通常は不要です。

Arm 用のコンパイルおよびリンク

ヒント: ツールを実行する前に、Vitis 環境の設定 に説明されているように、コマンド シェルまたはウィンドウを設定します。

ホスト プログラム (host.exe) は、次の 2 つの手順で Arm プロセッサ用にクロスコンパイラおよびリンクします。

  1. g++ の GNU Arm クロスコンパイラ バージョンを使用して、host.cpp をオブジェクト ファイル (.o) にコンパイルします。
    $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
  2. オブジェクト ファイルを必要なライブラリとリンクし、実行ファイルを作成します。
    $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
リンク
  • $SYSROOT/usr/lib: ライブラリの場所。
  • xilinxopencl: XRT で必要なライブラリ。
  • pthread: XRT で必要なライブラリ。
  • rt: XRT で必要なライブラリ。
  • stdc++: XRT で必要なライブラリ。
  • gmp: XRT で必要なライブラリ。
  • xrt_core: XRT で必要なライブラリ。