Arm 用のコンパイルおよびリンク - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 日本語
ヒント: ツールを実行する前に、Vitis 環境の設定 に説明されているように、コマンド シェルまたはウィンドウを設定します。

エンベデッド プロセッサ ベースのプラットフォームの場合、ホスト プログラム (host.exe) は、次の 2 つのプロセスで GNU Arm クロスコンパイラ バージョンの g++ を使用して、Arm プロセッサ用にクロスコンパイルおよびリンクされます。

ヒント: aarch64 Zynq® UltraScale+™ (A53) および Versal® (A72) デバイスに使用されます。aarch32Zynq-7000 SoC (A9) に使用され、ツール チェーンは別の場所にあります。
  1. host.cpp をオブジェクト ファイル (.o) にコンパイルします。
    $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
  2. オブジェクト ファイルを必要なライブラリとリンクし、実行ファイルを作成します。
    $XILINX_VITIS/gnu/aarch64/lin/aarch64-linux/bin/aarch64-linux-gnu-g++ -l \
    -lxrt_coreutil -lpthread -lrt -lstdc++ -lgmp -L$SYSROOT/usr/lib/ \
    --sysroot=$SYSROOT -o host.exe src/host.o 

アプリケーションをエンベデッド プロセス用にコンパイルする場合は、アプリケーションの sysroot を指定する必要があります。sysroot は、基本システム ルート ファイル構造を定義するプラットフォームの一部です。インストール方法は、 エンベデッド プラットフォームのインストール を参照してください。

重要: 上記の例では、$SYSROOT 環境変数にエンベデッド プラットフォームの sysroot の場所が指定されていることが必要です。

エッジ プラットフォーム用にホスト コードをコンパイルする際の主要な要素は、次のとおりです。

コンパイル
  • -I$SYSROOT/usr/include
  • -I$SYSROOT/usr/include/xrt
  • -std=c++14: C++ 言語標準を定義します。XRT ネイティブ C++ API を使用してホスト コードをコンパイルするには、-std=c++14 以降の C++ 標準が必要です。ただし、GCC 4.9.0 より古いバージョンでは、代わりに -std=c++1y を使用してください。
リンク
  • -L$SYSROOT/usr/lib: ライブラリの場所。
  • -lxrt_coreutil: XRT ネイティブ API で使用するために必要なライブラリ。
  • -pthread: マルチスレッド用の XRT ライブラリで必要です。

OpenCL API ホスト コードの構築

Vitis アプリケーションアクセラレーション開発フローでは、OpenCL API を使用してホスト アプリケーションをプログラムすることもできます。g++ を使用した OpenCL アプリケーションの構築では、次のコマンドラインを使用します。
g++ -g -std=c++1y -I$XILINX_XRT/include -L$XILINX_XRT/lib -o host.exe host.cpp \
-lOpenCL -pthread

唯一の違いは、XRT ネイティブ API の xrt_coreutil ライブラリの代わりに OpenCL API 用の OpenCL ライブラリを使用するところです。

注記: Vitis Accel_Examples には、xcl2.cpp ソース ファイルおよび -I../xcl2 インクルード文が追加されている例があります。ホスト プログラムおよび g++ コマンドにこれらを追加すると、サンプル コードで使用されるヘルパー ユーティリティにアクセスできますが、通常は不要です。