问题的发现
在pa4.1的时候发现编译很慢,wsl下编译大概也花了半分钟,之后发现个警告,在构建 navy-apps 时,libc、libos、compiler-rt 等库会出现类似下面的 warning:
make[2]: Circular /root/ics2024/navy-apps/libs/compiler-rt/build/compiler-rt-riscv32.a <- /root/
ics2024/navy-apps/libs/compiler-rt/build/compiler-rt-riscv32.a dependency dropped.
make[2]: Circular /root/ics2024/navy-apps/libs/libos/build/libos-riscv32.a <- /root/ics2024/navy-
apps/libs/libos/build/libos-riscv32.a dependency dropped.
make[2]: Circular /root/ics2024/navy-apps/libs/libc/build/libc-riscv32.a <- /root/ics2024/navy-apps/
libs/libc/build/libc-riscv32.a dependency dropped.
构建通常仍然可以成功完成
复现方式
cd navy-apps
make clean-all
make ISA=riscv32 ramdisk VME=1 -j4
初步定位
问题大概率来自 navy-apps/Makefile 中 archive 的这一段:
$(ARCHIVE): $(LINKAGE)
@echo + AR "->" $(shell realpath $@ --relative-to .)
@$(AR) rcs --thin $@ $^
在库子目录中复用顶层 Makefile 时,$(LINKAGE) 已经包含当前正在生成的 $(ARCHIVE) 本身,从而形成:libos-riscv32.a: ... libos-riscv32.a ... 于是 make 会报出 Circular dependency dropped。
用下面这个修改可以消除这些 warning,且不影响正常构建结果:
$(ARCHIVE): $(filter-out $(ARCHIVE),$(LINKAGE))
@echo + AR "->" $(shell realpath $@ --relative-to .)
@$(AR) rcs --thin $@ $^
问题的发现
在pa4.1的时候发现编译很慢,wsl下编译大概也花了半分钟,之后发现个警告,在构建
navy-apps时,libc、libos、compiler-rt等库会出现类似下面的 warning:构建通常仍然可以成功完成
复现方式
初步定位
问题大概率来自 navy-apps/Makefile 中 archive 的这一段:
在库子目录中复用顶层 Makefile 时,$(LINKAGE) 已经包含当前正在生成的 $(ARCHIVE) 本身,从而形成:
libos-riscv32.a: ... libos-riscv32.a ...于是 make 会报出 Circular dependency dropped。用下面这个修改可以消除这些 warning,且不影响正常构建结果: