カスタムIPを含むプラットフォームビルド時のmakefileエラーを修正する方法

Xilinx SoC
スポンサーリンク

エラー発生環境と状況

本記事の概要

カスタムIPを含むXSAファイルから、Vitis(バージョン2020.2, 2021.1)でプラットフォームプロジェクトを生成・ビルドしたところ、makefileにおけるエラーが発生。エラーの修正方法について紹介する。

エラー発生環境

エラー発生状況

以下の記事では、VivadoでカスタムIPを作成後、Vitisでプラットフォームプロジェクトを作成し、アプリケーションプロジェクトのビルドを行いました。

このとき、「プラットフォームプロジェクトのビルド時」「アプリケーションプロジェクトのビルド時」の2箇所でエラーが発生しました。

以下では、エラー発生時の状況を詳述します。

エラー発生時の状況① プラットフォームプロジェクトのビルド時

カスタムIPを含むプラットフォームプロジェクトをビルドするときに、エラーが発生しました。

XSAファイルを読み込みプロジェクトを立ち上げた直後、Assistantウィンドウのdesign_1_wrapperをビルドすると、以下のエラーが発生しました。

エラー発生時ウィンドウ
エラー発生時コンソール
arm-none-eabi-ar: creating ../../../lib/libxil.a
arm-none-eabi-ar: *.o: Invalid argument
make[2]: *** [Makefile:19: libs] Error 1
make[1]: *** [Makefile:46: ps7_cortexa9_0/libsrc/led_config_v1_0/src/make.libs] Error 2
make: *** [Makefile:18: all] Error 2
make: Leaving directory '../workspace/design_1_wrapper/zynq_fsbl/zynq_fsbl_bsp'

/*略*/

c:/xilinx/vitis/2020.2/gnu/aarch32/nt/gcc-arm-none-eabi/x86_64-oesdk-mingw32/usr/bin/arm-xilinx-eabi/../../libexec/arm-xilinx-eabi/gcc/arm-xilinx-eabi/9.2.0/real-ld.exe: cannot find -lrsa
collect2.exe: error: ld returned 1 exit status
make: *** [Makefile:27: fsbl.elf] Error 1
Building the BSP Library for domain  - standalone_ps7_cortexa9_0 on processor ps7_cortexa9_0
make --no-print-directory seq_libs

/*略*/

arm-none-eabi-ar: creating ../../../lib/libxil.a
arm-none-eabi-ar: *.o: Invalid argument
make[2]: *** [Makefile:19: libs] Error 1
make[1]: *** [Makefile:46: ps7_cortexa9_0/libsrc/led_config_v1_0/src/make.libs] Error 2
make: *** [Makefile:18: all] Error 2
Failed to build  the bsp sources for domain - standalone_ps7_cortexa9_0
Failed to generate the platform.

エラー発生時の状況② アプリケーションプロジェクトのビルド時

後述する対処法①によって①のビルドエラーを回避した。しかし、その後、プラットフォームプロジェクト上で動作するアプリケーションプロジェクトをビルドするときに、別のエラーが発生しました。

エラー発生時ウィンドウ
エラー発生時コンソール
Generating bif file for the system project
generate_system_bif.bat 53820 ../workspace5/design_1_wrapper/export/design_1_wrapper/design_1_wrapper.xpfm standalone_ps7_cortexa9_0 ../workspace5/design5_system/Debug/system.bif
sdcard_gen --xpfm ../workspace5/design_1_wrapper/export/design_1_wrapper/design_1_wrapper.xpfm --sys_config design_1_wrapper --bif ../workspace5/design5_system/Debug/system.bif --bitstream E:/2021-06-06/xilinxPrj/blog/10_axi4_lite/workspace5/design5/_ide/bitstream/design_1_wrapper.bit --elf ../workspace5/design5/Debug/design5.elf,ps7_cortexa9_0
creating BOOT.BIN using ../workspace5/design5/_ide/bitstream/design_1_wrapper.bit
Error intializing SD boot data : Software platform XML error, sdx:qemuArguments value "design_1_wrapper/qemu/qemu_args.txt" path does not exist ../workspace5/design_1_wrapper/export/design_1_wrapper/sw/design_1_wrapper/qemu/qemu_args.txt, platform path ../workspace5/design_1_wrapper/export/design_1_wrapper, sdx:configuration design_1_wrapper, sdx:image standard
make: *** [makefile:39: package] Error 1

エラーの原因と回避方法

原因

原因について調べたところ、どうやら以下の記事で記載されている、makefileにおけるmake環境のバージョンの差異が原因のようです。
再現環境について調査できておりませんが、Windows版Vitis 2020.2のバージョンがあまり良くないようです。今後のVitisのアップデートで修正されることを願っています。

Zybo Z7 Pcam 5C DemoをVivado 2020.02で動作させてみた
とある業務の動作検証として、Zybo Z7 Pcam 5C DemoをVivado 2020.02で実行したのですが、推奨バージョンの違いから何点か詰ま
Error "Compiling PmodGYRO..."
Hi Im using Zybo 7020 Vivado/Vitis 2020 and i have some errors on Vitis when i compile the hw platform. Running Make libs in ps7_cortexa9_0/libsrc/PmodGYRO_v1_0...

エラーを回避してビルドを行う対処法

対処法① プラットフォームプロジェクトのビルド時

上述した記事の内容に従い、makefileを以下のように修正しました。

修正が必要だったmakefileは、Vitis IDEの左のExplorerに含まれる、以下のパスに入っている2つのファイルです。

修正が必要なファイル
  • design_1_wrapper
    • ps7_cortexa9_0
      • standalone_ps7_cortexa9_0
        • bsp
          • [ps7_cortexa9_0>libsrc>led_config_v1_0>Makefile]
    • zynq_fsbl
      • zynq_fsbl_bsp
        • [ps7_cortexa9_0>libsrc>led_config_v1_0>Makefile]

bspフォルダとzynq_fsbl_bspフォルダ内にある、カスタムIPのMakefileを修正しました。
カスタムIPが多いときは手におえませんが、今回は2つだけですので、地道に修正を行いました。

修正方法は、以下のようにMakefileにおける[OUTSの定義文]を変更しました。

#OUTS = *.o
OUTS = $(addsuffix .o, $(basename $(wildcard *.c)))

Makefileを修正すれば、以下のようにプラットフォームプロジェクトのビルドが通るようになります。

対処法② アプリケーションプロジェクトのビルド時

以下のDigilentのフォーラムでは、”you have just to re-export hardware after making the changes in the makefile and rebuild.(makefile変更後にハードウェアを再度エクスポートし、再ビルドしないといけない)”との報告があります。

Error "Compiling PmodGYRO..."
Hi Im using Zybo 7020 Vivado/Vitis 2020 and i have some errors on Vitis when i compile the hw platform. Running Make libs in ps7_cortexa9_0/libsrc/PmodGYRO_v1_0...

そこで、以下のようにしてXSAファイルのアップデートを行いました。
プラットフォームプロジェクトを右クリックし、[Update Hardware Specification]を選択します。

新しいウィンドウが立ち上がります。ここで、workspaceを作成するときに読み込んだものと同じXSAファイルを選択します。

OKをクリックし暫く待つと、プラットフォームプロジェクトがアップデートされたことを示すウィンドウが立ち上がるので、確認したら[OK]をクリックします。

このアップデートを行うと、無事にアプリケーションプロジェクトの方もビルドが通るようになります。

ひがし
ひがし

本記事では、カスタムIPを含むプラットフォームプロジェクトで発生したmakefileのエラーの回避方法を解説しました。
少し手間がかかる方法なのでよりよい方法が見つかったり、最新のVitisのアップデートでエラーが回避されていた場合は、改めて追記します。

最後までご覧いただきありがとうございました。

2021/7/17の追記

Vitis2021.1アップデートによる不具合解消状況

結論は、Vitis2021.1のアップデートでは、上述した「カスタムIPにおけるMakefileの不具合」は、まだ解消されていないようです
また、エラー発生状況①でのエラーコードが異なりました。
対処法①も、前回やった方法ではうまく行かず、Twitterで教えていただいた別の方法でうまくいきました。

本サイトでは、Vitis2021.1での状況と対処法をそれぞれ追記しておきます。

Vitis2021.1でのMakefileエラー発生状況

カスタムIPをVivado ML 2021.1で作成。ブロックデザインは、以下の記事シリーズで記載したものと同じ構成を再現。

エラー発生状況①

カスタムIPを含むプラットフォームプロジェクトをビルドするときにエラーが発生。

エラー発生時ウィンドウ
エラー発生時コンソール(エラー部分を抜粋)
arm-xilinx-eabi-gcc.exe: error: *.c: Invalid argument
arm-xilinx-eabi-gcc.exe: fatal error: no input files
compilation terminated.
make[3]: *** [Makefile:18: libs] Error 1
make[2]: *** [Makefile:46: ps7_cortexa9_0/libsrc/myip_v1_0/src/make.libs] Error 2
make[1]: *** [Makefile:18: all] Error 2
make[1]: Leaving directory '.../workspace/design_1_wrapper/zynq_fsbl/zynq_fsbl_bsp'

make: *** [Makefile:30: zynq_fsbl_bsp/ps7_cortexa9_0/lib/libxil.a] Error 2
Building the BSP Library for domain  - standalone_ps7_cortexa9_0 on processor ps7_cortexa9_0
make --no-print-directory seq_libs

/*略*/

arm-xilinx-eabi-gcc.exe: error: *.c: Invalid argument
arm-xilinx-eabi-gcc.exe: fatal error: no input files
compilation terminated.
make[2]: *** [Makefile:18: libs] Error 1
make[1]: *** [Makefile:46: ps7_cortexa9_0/libsrc/myip_v1_0/src/make.libs] Error 2
make: *** [Makefile:18: all] Error 2
Failed to build  the bsp sources for domain - standalone_ps7_cortexa9_0
Failed to generate the platform.

/*略*/

Vitis2021.1でのエラーの回避方法

対処法① プラットフォームプロジェクトのビルド時

makefileを以下のように修正しました。

修正が必要だったmakefileは、Vitis IDEの左のExplorerに含まれる、以下のパスに入っている2つのファイルです。

修正が必要なファイル
  • design_1_wrapper
    • ps7_cortexa9_0
      • standalone_ps7_cortexa9_0
        • bsp
          • [ps7_cortexa9_0>libsrc>led_config_v1_0>Makefile]
    • zynq_fsbl
      • zynq_fsbl_bsp
        • [ps7_cortexa9_0>libsrc>led_config_v1_0>Makefile]

修正方法は、カスタムIPのMakefileを、カスタムIPではないXilinx提供のIP(例えば、GPIO)のlibsrcフォルダの中にあるMakefileで差し替えます

Makefileを修正すれば、プラットフォームプロジェクトのビルドが通るようになります。

スポンサーリンク


コメント