From a808a2b35f66658e6c49dc98b55a33fa1079fe72 Mon Sep 17 00:00:00 2001 From: Josh Poimboeuf Date: Sun, 2 Mar 2025 17:01:42 -0800 Subject: [PATCH] tools build: Fix fixdep dependencies The tools version of fixdep has broken dependencies. It doesn't get rebuilt if the host compiler or headers change. Build fixdep with the tools kbuild infrastructure, so fixdep runs on itself. Due to the recursive dependency, its dependency file is incomplete the very first time it gets built. In that case build it a second time to achieve fixdep inception. Reported-by: Arthur Marsh Signed-off-by: Josh Poimboeuf --- tools/build/Build | 2 ++ tools/build/Makefile | 23 +++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 tools/build/Build diff --git a/tools/build/Build b/tools/build/Build new file mode 100644 index 0000000000000..1c7e598e9f593 --- /dev/null +++ b/tools/build/Build @@ -0,0 +1,2 @@ +hostprogs := fixdep +fixdep-y := fixdep.o diff --git a/tools/build/Makefile b/tools/build/Makefile index 63ef218787616..a5b3c29b8d70c 100644 --- a/tools/build/Makefile +++ b/tools/build/Makefile @@ -37,5 +37,24 @@ ifneq ($(wildcard $(TMP_O)),) $(Q)$(MAKE) -C feature OUTPUT=$(TMP_O) clean >/dev/null endif -$(OUTPUT)fixdep: $(srctree)/tools/build/fixdep.c - $(QUIET_CC)$(HOSTCC) $(KBUILD_HOSTCFLAGS) $(KBUILD_HOSTLDFLAGS) -o $@ $< +include $(srctree)/tools/build/Makefile.include + +FIXDEP := $(OUTPUT)fixdep +FIXDEP_IN := $(OUTPUT)fixdep-in.o + +# To track fixdep's dependencies properly, fixdep needs to run on itself. +# Build it twice the first time. +$(FIXDEP_IN): FORCE + $(Q)if [ ! -f $(FIXDEP) ]; then \ + $(MAKE) $(build)=fixdep HOSTCFLAGS="$(KBUILD_HOSTCFLAGS)"; \ + rm -f $(FIXDEP).o; \ + fi + $(Q)$(MAKE) $(build)=fixdep HOSTCFLAGS="$(KBUILD_HOSTCFLAGS)" + + +$(FIXDEP): $(FIXDEP_IN) + $(QUIET_LINK)$(HOSTCC) $(FIXDEP_IN) $(KBUILD_HOSTLDFLAGS) -o $@ + +FORCE: + +.PHONY: FORCE -- 2.47.3