* [PATCH 0/2] ACPI: tools: Fix stale headers in incremental builds
@ 2026-10-05 15:37 Fuad Tabba
2026-10-05 15:37 ` [PATCH 1/2] ACPI: tools: Link include/acpi instead of copying it Fuad Tabba
2026-10-05 15:37 ` [PATCH 2/2] ACPI: tools: Rebuild objects when a header they include changes Fuad Tabba
0 siblings, 2 replies; 3+ messages in thread
From: Fuad Tabba @ 2026-10-05 15:37 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: Len Brown, Maciej Wieczor-Retman, Pawel Chmielewski, linux-acpi,
acpica-devel, linux-kernel, Fuad Tabba
Hi folks,
Two fixes for incremental builds of the ACPI tools, which compile
against old headers after a header changes. The first replaces the
copy of include/acpi with a link, so the tools see the current headers.
The second adds dependency files, so objects that include a changed
header are rebuilt.
I found these while fixing the same kind of bug in the KVM selftests'
sysreg header [1].
Based on Linux 7.3-rc5 (72d3fcf802c45).
Cheers,
/fuad
[1] https://lore.kernel.org/all/20260922071945.693714-1-fuad.tabba@linux.dev/
Fuad Tabba (2):
ACPI: tools: Link include/acpi instead of copying it
ACPI: tools: Rebuild objects when a header they include changes
tools/power/acpi/Makefile.rules | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
--
2.39.5
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/2] ACPI: tools: Link include/acpi instead of copying it
2026-10-05 15:37 [PATCH 0/2] ACPI: tools: Fix stale headers in incremental builds Fuad Tabba
@ 2026-10-05 15:37 ` Fuad Tabba
2026-10-05 15:37 ` [PATCH 2/2] ACPI: tools: Rebuild objects when a header they include changes Fuad Tabba
1 sibling, 0 replies; 3+ messages in thread
From: Fuad Tabba @ 2026-10-05 15:37 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: Len Brown, Maciej Wieczor-Retman, Pawel Chmielewski, linux-acpi,
acpica-devel, linux-kernel, Fuad Tabba
An incremental build of the ACPI tools uses an old copy of the
include/acpi headers after they change. The copy under $(OUTPUT)include
is made by a rule for the directory with no prerequisites, so once it
exists it's never refreshed.
Link $(OUTPUT)include/acpi to include/acpi instead, which keeps the rest
of include/ out of the tools' include path as the copy did. The link is
recreated on every build, so it also replaces a copy left by an earlier
one, and the objects take it as an order-only prerequisite so that
recreating it rebuilds nothing. Rebuilding them when a header changes
is the next patch.
Fixes: d5a4b1a540b8 ("tools/power/acpi: Remove direct kernel source include reference")
Assisted-by: LLM
Signed-off-by: Fuad Tabba <fuad.tabba@linux.dev>
---
tools/power/acpi/Makefile.rules | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/tools/power/acpi/Makefile.rules b/tools/power/acpi/Makefile.rules
index b71aada776889..48d9280a63f72 100644
--- a/tools/power/acpi/Makefile.rules
+++ b/tools/power/acpi/Makefile.rules
@@ -13,13 +13,12 @@ $(OUTPUT)$(TOOL): $(toolobjs) FORCE
$(ECHO) " STRIP " $(subst $(OUTPUT),,$@)
$(QUIET) $(STRIPCMD) $@
-$(KERNEL_INCLUDE):
- $(ECHO) " MKDIR " $(subst $(OUTPUT),,$@)
+$(KERNEL_INCLUDE)/acpi: FORCE
$(QUIET) mkdir -p $(KERNEL_INCLUDE)
- $(ECHO) " CP " $(subst $(OUTPUT),,$@)
- $(QUIET) cp -rf $(srctree)/../../../include/acpi $(KERNEL_INCLUDE)/
+ $(QUIET) rm -rf $@
+ $(QUIET) ln -s $(abspath $(srctree)/../../../include/acpi) $@
-$(objdir)%.o: %.c $(KERNEL_INCLUDE)
+$(objdir)%.o: %.c | $(KERNEL_INCLUDE)/acpi
$(ECHO) " CC " $(subst $(OUTPUT),,$@)
$(QUIET) $(MKDIR) -p $(objdir) 2>/dev/null
$(QUIET) $(CC) -c $(CFLAGS) -o $@ $<
--
2.39.5
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] ACPI: tools: Rebuild objects when a header they include changes
2026-10-05 15:37 [PATCH 0/2] ACPI: tools: Fix stale headers in incremental builds Fuad Tabba
2026-10-05 15:37 ` [PATCH 1/2] ACPI: tools: Link include/acpi instead of copying it Fuad Tabba
@ 2026-10-05 15:37 ` Fuad Tabba
1 sibling, 0 replies; 3+ messages in thread
From: Fuad Tabba @ 2026-10-05 15:37 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: Len Brown, Maciej Wieczor-Retman, Pawel Chmielewski, linux-acpi,
acpica-devel, linux-kernel, Fuad Tabba
An incremental build of the ACPI tools recompiles an object only when
its .c file changes. The objects have no dependencies on the headers
they include, from include/acpi, drivers/acpi/acpica or the tools
themselves, so a header change leaves them built against the old one.
Generate a dependency file beside each object with -MMD, adding -MP so
that a removed header doesn't break the build, include those files, and
remove them on clean.
Assisted-by: LLM
Signed-off-by: Fuad Tabba <fuad.tabba@linux.dev>
---
tools/power/acpi/Makefile.rules | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/tools/power/acpi/Makefile.rules b/tools/power/acpi/Makefile.rules
index 48d9280a63f72..b520a966c1c1b 100644
--- a/tools/power/acpi/Makefile.rules
+++ b/tools/power/acpi/Makefile.rules
@@ -21,13 +21,15 @@ $(KERNEL_INCLUDE)/acpi: FORCE
$(objdir)%.o: %.c | $(KERNEL_INCLUDE)/acpi
$(ECHO) " CC " $(subst $(OUTPUT),,$@)
$(QUIET) $(MKDIR) -p $(objdir) 2>/dev/null
- $(QUIET) $(CC) -c $(CFLAGS) -o $@ $<
+ $(QUIET) $(CC) -c $(CFLAGS) -MMD -MP -o $@ $<
+
+-include $(toolobjs:.o=.d)
all: $(OUTPUT)$(TOOL)
clean:
$(ECHO) " RMOBJ " $(subst $(OUTPUT),,$(objdir))
$(QUIET) find $(objdir) \( -not -type d \)\
- -and \( -name '*~' -o -name '*.[oas]' \)\
+ -and \( -name '*~' -o -name '*.[oasd]' \)\
-type f -print | xargs rm -f
$(ECHO) " RM " $(TOOL)
$(QUIET) rm -f $(OUTPUT)$(TOOL)
--
2.39.5
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-05 15:37 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-05 15:37 [PATCH 0/2] ACPI: tools: Fix stale headers in incremental builds Fuad Tabba
2026-10-05 15:37 ` [PATCH 1/2] ACPI: tools: Link include/acpi instead of copying it Fuad Tabba
2026-10-05 15:37 ` [PATCH 2/2] ACPI: tools: Rebuild objects when a header they include changes Fuad Tabba
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.