summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRasmus Villemoes <linux@rasmusvillemoes.dk>2021-03-05 11:02:12 +0100
committerMasahiro Yamada <masahiroy@kernel.org>2021-04-25 05:12:32 +0900
commit0b956e204132ce3fe4221a062638bf83a30e6200 (patch)
treed9da74a93307567eb8390c1a72a2e040974c7ea3
parent5cc1247204616528b427e276c97c5bc4c9612347 (diff)
downloadlwn-0b956e204132ce3fe4221a062638bf83a30e6200.tar.gz
lwn-0b956e204132ce3fe4221a062638bf83a30e6200.zip
kbuild: apply fixdep logic to link-vmlinux.sh
The patch adding CONFIG_VMLINUX_MAP revealed a small defect in the build system: link-vmlinux.sh takes decisions based on CONFIG_* options, but changing one of those does not always lead to vmlinux being linked again. For most of the CONFIG_* knobs referenced previously, this has probably been hidden by those knobs also affecting some object file, hence indirectly also vmlinux. But CONFIG_VMLINUX_MAP is only handled inside link-vmlinux.sh, and changing CONFIG_VMLINUX_MAP=n to CONFIG_VMLINUX_MAP=y does not cause the build system to re-link (and hence have vmlinux.map emitted). Since that map file is mostly a debugging aid, this is merely a nuisance which is easily worked around by just deleting vmlinux and building again. But one could imagine other (possibly future) CONFIG options that actually do affect the vmlinux binary but which are not captured through some object file dependency. To fix this, make link-vmlinux.sh emit a .vmlinux.d file in the same format as the dependency files generated by gcc, and apply the fixdep logic to that. I've tested that this correctly works with both in-tree and out-of-tree builds. Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
-rw-r--r--Makefile2
-rwxr-xr-xscripts/link-vmlinux.sh4
2 files changed, 5 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 80c82155ebb6..03e3ee982f14 100644
--- a/Makefile
+++ b/Makefile
@@ -1213,7 +1213,7 @@ cmd_link-vmlinux = \
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
- +$(call if_changed,link-vmlinux)
+ +$(call if_changed_dep,link-vmlinux)
targets := vmlinux
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index 855fd4e6f03e..e9516bdfcc6f 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -312,6 +312,7 @@ cleanup()
rm -f vmlinux
rm -f vmlinux.map
rm -f vmlinux.o
+ rm -f .vmlinux.d
}
on_exit()
@@ -449,3 +450,6 @@ if [ -n "${CONFIG_KALLSYMS}" ]; then
exit 1
fi
fi
+
+# For fixdep
+echo "vmlinux: $0" > .vmlinux.d