カスタム makefile には、テンプレート makefile と同様の関数が用意されている必要があります。VSC でコンパイルする基本的な手順は、次に示すように、ほかの Vitis ツール フローと似ています。
v++ --compile my_acc.cpp -o my_acc.o
v++ --link my_acc.o -o hw.xclbin # also outputs hw.o
g++ -c main.cpp -o main.o
g++ -l host.exe main.o my_acc.o hw.o -lvpp_acc -lxrt_core -lpthread
これらのコマンドの注意点は、次のとおりです。
-
v++
のコンパイル コマンドでは、カーネル名を指定する-k
オプションは使用しません。これは、Vitis ツールが VSC システムをコンパイルできるように、VPP_ACC
クラスから派生したクラスがソース コードで定義されているためです。 -
v++ --compile
コマンドでは、.xo ファイルではなく、.o ファイルが生成されます。これらのファイルは、Vitis コンパイラおよび g++ でハードウェアおよびホスト システムの構築に使用されます。 -
v++ --link
コマンドは、入力として .o ファイルを使用し、ハードウェア アクセラレータ用の .xclbin と、ホスト アプリケーションで必要とされ、g++
で使用される VSC ハードウェア ソフトウェア インターフェイス用のコンパイル済みオブジェクトを含む hw.o の両方を生成します。 - このコマンドには、それぞれのツールおよびモードに固有のオプション (
--platform
または--target
など) も必要です。
または、共有 (ダイナミックにロード可能な) ライブラリを作成すると、アクセラレータをサードパーティ アプリケーションに簡単に統合することもできます。次の libmy_acc.so
がその例です。
v++ -c my_acc.cpp -o my_acc.o
v++ -l my_acc.o kernel.xo -o hw.xclbin # also produces hw.o
g++ -c -fPIC app.cpp -o app.o
## Command to create the shared library:
g++ -shared -fPIC -o libmy_acc.so app.o my_acc.o \
-Wl,--whole-archive ${XILINX_VITIS}/system_compiler/lib/x86/libvpp_acc.a \
-Wl,--no-whole-archive
## The link command using the shared library
g++ -l host.exe main.o -lmy_acc -lxrt_hw -lpthread