Skip to content

Makefile 中 archive 目标可能自依赖,触发 Circular dependency dropped 警告 #18

Description

@zcq-zwy

问题的发现

在pa4.1的时候发现编译很慢,wsl下编译大概也花了半分钟,之后发现个警告,在构建 navy-apps 时,libcliboscompiler-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 $@ $^

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions