[coreboot-gerrit] Change in coreboot[master]: Makefile.inc: Ensure update of build.h

Patrick Georgi (Code Review) gerrit at coreboot.org
Mon Aug 20 17:56:33 CEST 2018


Patrick Georgi has submitted this change and it was merged. ( https://review.coreboot.org/28197 )

Change subject: Makefile.inc: Ensure update of build.h
......................................................................

Makefile.inc: Ensure update of build.h

There were so many pitfalls that I wrote my own version of this even-
tually. This version is inspired by the procedure of Alex Thiessen[1].
Instead of generating a `build.h` on demand, we always generate a tem-
porary version that, if it differs from the current one, is added as
a dependency.

As we use .SECONDEXPANSION on the prerequisites, special care is taken
that we won't generate the file twice. As it would be too late to add
the dependency if we'd run `genbuild_h.sh` inside a recipe, we have
to run it through the `$(shell)` function. But that brings us to the
next issue: The make variables used by `genbuild_h.sh` are not expor-
ted to this shell like they would be in a recipe. So we export them
manually. We could also make these variables explicit parameters of
`genbuild_h.sh` instead.

An alternative to always creating the temporary `build.h` would be
to add a phony target as dependency instead, and finally calling
`genbuild_h.sh` again in case we need an update. But, um, we create
so many files anyway...

[1] https://review.coreboot.org/25685

Change-Id: I311cf610eabae873c70f2985fc7a09acec8061f0
Signed-off-by: Nico Huber <nico.h at gmx.de>
Reviewed-on: https://review.coreboot.org/28197
Tested-by: build bot (Jenkins) <no-reply at coreboot.org>
Reviewed-by: Patrick Rudolph <siro at das-labor.org>
---
M Makefile.inc
1 file changed, 17 insertions(+), 4 deletions(-)

Approvals:
  build bot (Jenkins): Verified
  Patrick Rudolph: Looks good to me, approved



diff --git a/Makefile.inc b/Makefile.inc
index 7ce2360..3840505 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -464,11 +464,24 @@
 
 #######################################################################
 # generate build support files
-$(obj)/build.h: .xcompile
+
+build_h := $(obj)/build.h
+
+# We have to manually export variables that `genbuild_h.sh` uses
+# when we call it through the `$(shell)` function. This is fragile
+# but as variables newly added to `genbuild_h.sh` would just not
+# work, we'd notice that instantly at least.
+build_h_exports := BUILD_TIMELESS KERNELVERSION COREBOOT_EXTRA_VERSION
+
+# Report new `build.ht` as dependency if `build.h` differs.
+build_h_check := \
+	export $(foreach exp,$(build_h_exports),$(exp)="$($(exp))"); \
+	util/genbuild_h/genbuild_h.sh >$(build_h)t 2>/dev/null; \
+	cmp -s $(build_h)t $(build_h) >/dev/null 2>&1 || echo $(build_h)t
+
+$(build_h): $$(shell $$(build_h_check))
 	@printf "    GEN        build.h\n"
-	rm -f $(obj)/build.h
-	util/genbuild_h/genbuild_h.sh > $(obj)/build.ht
-	mv $(obj)/build.ht $(obj)/build.h
+	mv $< $@
 
 build-dirs:
 	mkdir -p $(objcbfs) $(objgenerated)

-- 
To view, visit https://review.coreboot.org/28197
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I311cf610eabae873c70f2985fc7a09acec8061f0
Gerrit-Change-Number: 28197
Gerrit-PatchSet: 2
Gerrit-Owner: Nico Huber <nico.h at gmx.de>
Gerrit-Reviewer: Alex Thiessen <pandokos+coreboot at gmail.com>
Gerrit-Reviewer: Martin Roth <martinroth at google.com>
Gerrit-Reviewer: Patrick Georgi <pgeorgi at google.com>
Gerrit-Reviewer: Patrick Rudolph <siro at das-labor.org>
Gerrit-Reviewer: Raul Rangel <rrangel at chromium.org>
Gerrit-Reviewer: build bot (Jenkins) <no-reply at coreboot.org>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180820/c185054a/attachment.html>


More information about the coreboot-gerrit mailing list