Published on

Custom IP Vitis Compile Error 기록

Authors
  • avatar
    Name
    JaeHyeok CHOI
    Twitter
    none

Failed to build the bsp sources for domain - standalone_domain 에러

커스텀 IP를 만들어서 Vitis App을 만들려던 와중 컴파일 에러가 떴다.

"Compiling ax_pwm..."

cc1.exe: fatal error: *.c: Invalid argument
compilation terminated.
make[2]: *** [Makefile:18: libs] Error 1
make[1]: *** [Makefile:46: ps7_cortexa9_0/libsrc/ax_pwm_v1_0/src/make.libs] Error 2
make: *** [Makefile:18: all] Error 2
Failed to build  the bsp sources for domain - standalone_domain
Failed to generate the platform.
Reason: Failed to build the  zynq_fsbl application.
    invoked from within
"::tcf::eval -progress {apply {{msg} {puts $msg}}} {tcf_send_command tcfchan#0 xsdb eval s es {{platform active pwm_ip; platform generate }}}"
    (procedure "::tcf::send_command" line 4)
    invoked from within
"tcf send_command $::xsdb::curchan xsdb eval s es [list "platform active $PLATFORM_NAME; platform generate $target"]"
    invoked from within
"if { $iswindows == 1 } {    

    set XSDB_PORT [lindex $argv 0]
    set PLATFORM_NAME [lindex $argv 1]
    set arglen [llength $argv]
    set lastind..."
    (file "C:/Xilinx/Vitis/2022.1\scripts\vitis\util\buildplatform.tcl" line 11)

에러 내용은 bsp 소스를 빌드하는 것에 실패했다는 것.

경로를 추적해보니, 내가 Custom 해준 pwm ip가 문제였다.

문제를 검색해본 결과 AMD에서 해결안을 내준 것이 있었다.

링크

이 이슈는 주로 커스텀으로 만들어준 경우 Makefile의 경로가 문제될 수 있다는 것.

원본 Makefile

INCLUDEFILES=*.h
LIBSOURCES=*.c
OUTS = *.o

libs:
echo "Compiling myip"
$(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES)
$(ARCHIVER) -r ${RELEASEDIR}/${LIB} $(OUTS)
make clean

include:
${CP} $(INCLUDEFILES) $(INCLUDEDIR)

clean:
rm -rf ${OUTS}

수정

INCLUDEFILES=*.h
LIBSOURCES=*.c
OUTS = *.o
OBJECTS = $(addsuffix .o, $(basename $(wildcard *.c)))
ASSEMBLY_OBJECTS = $(addsuffix .o, $(basename $(wildcard *.S)))

libs:
echo "Compiling myip"
$(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES)
$(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OBJECTS} ${ASSEMBLY_OBJECTS}
make clean

include:
${CP} $(INCLUDEFILES) $(INCLUDEDIR)

clean:
rm -rf ${OBJECTS} ${ASSEMBLY_OBJECTS}

하지만 이 해결책도 똑같은 원인만 내뱉을 뿐이었다.

그 중 cc1.exe: fata error: *.c invalid argument 에러에 대한 검색을 해보니 한 블로그에서 답을 얻을 수 있었다.

출처

원인

Vitis에서 Custom IP를 사용할 경우, 빌드시에 이와 같은 오류가 빈번하게 발생한다고 한다. 특히, 다음의 환경에서다: Windows 10, Vivado 2022.02, Vitis 2022.2.0 (64-bit)

오류 내용

cc1.exe: fatal error: *.c: Invalid argument
compilation terminated.
make[2]: *** [Makefile:18: libs] Error 1
make[1]: *** [Makefile:46: ps7_cortexa9_0/libsrc/axi4_v1_0/src/make.libs] Error 2
make: *** [Makefile:18: all] Error 2

또한, 이렇게 되면 헤더파일들을 include 할 수 없다는 오류도 발생하게 된다.

해결책

주된 원인은 Makefile의 invalid argument 때문이다. Makefile의 argument가 잘못되어서 경로고 뭐고 전부 다 뒤틀린 것.

이렇게 되어 있는 Makefile을,

...
INCLUDEFILES=*.h
LIBSOURCES=*.c
...

아래와 같이 수정해 준다.

...
INCLUDEFILES=$(wildcard *.h)
LIBSOURCES=$(wildcard *.c *.cpp)
...

그러면 기적적으로 컴파일이 된다!