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

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

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

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

  1. g++ の GNU Arm クロスコンパイラ バージョンを使用して、host.cpp をオブジェクト ファイル (.o) にコンパイルします。
    注記: aarch64 Zynq® UltraScale+™ (A53) および Versal™ (A72) デバイスに使用されます。aarch32Zynq-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
  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 で必要なライブラリ。

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