When include/linux/export-internal.h is updated, .vmlinux.export.o must be rebuilt, but it does not happen because its rule is hidden behind scripts/link-vmlinux.sh. Move it out of the shell script, so that Make can see the dependency between vmlinux and .vmlinux.export.o. Move the vmlinux rule to scripts/Makefile.vmlinux.
Showing the changes to scripts/Makefile.vmlinux (1 of 3 files). Show all
Unified · Split
| @@ -1,18 +1,37 @@ | ||
| 1 | 1 | # SPDX-License-Identifier: GPL-2.0-only |
| 2 | 2 | |
| 3 | +PHONY := __default | |
| 4 | +__default: vmlinux | |
| 5 | + | |
| 3 | 6 | include include/config/auto.conf |
| 4 | 7 | include $(srctree)/scripts/Kbuild.include |
| 5 | 8 | |
| 6 | 9 | # for c_flags |
| 7 | 10 | include $(srctree)/scripts/Makefile.lib |
| 8 | 11 | |
| 12 | +targets := | |
| 13 | + | |
| 9 | 14 | quiet_cmd_cc_o_c = CC $@ |
| 10 | 15 | cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< |
| 11 | 16 | |
| 12 | 17 | %.o: %.c FORCE |
| 13 | 18 | $(call if_changed_dep,cc_o_c) |
| 14 | 19 | |
| 15 | −targets := $(MAKECMDGOALS) | |
| 20 | +ifdef CONFIG_MODULES | |
| 21 | +targets += .vmlinux.export.o | |
| 22 | +vmlinux: .vmlinux.export.o | |
| 23 | +endif | |
| 24 | + | |
| 25 | +ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) | |
| 26 | + | |
| 27 | +# Final link of vmlinux with optional arch pass after final link | |
| 28 | +cmd_link_vmlinux = \ | |
| 29 | + $< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)"; \ | |
| 30 | + $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) | |
| 31 | + | |
| 32 | +targets += vmlinux | |
| 33 | +vmlinux: scripts/link-vmlinux.sh vmlinux.o $(KBUILD_LDS) FORCE | |
| 34 | + +$(call if_changed_dep,link_vmlinux) | |
| 16 | 35 | |
| 17 | 36 | # Add FORCE to the prequisites of a target to force it to be always rebuilt. |
| 18 | 37 | # --------------------------------------------------------------------------- |