* [PATCH 0/4] build: minimize rebuilds
@ 2017-12-26 18:32 Sam Ravnborg
2017-12-26 18:35 ` [PATCH 1/4] build: fix that defaultenv is always rebuilt Sam Ravnborg
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Sam Ravnborg @ 2017-12-26 18:32 UTC (permalink / raw)
To: Barebox List
Following patchset minimizes re-builds.
With the setup I use at the moment where I run
build tests on 100+ arm related boards I see that the
build time is reduced to half - for an otherwise
clean build with no changes.
In other words - the wall clock time for a
simple "try to build all boards" where nothing
has changed goes from ~2:35 minutes to 1:21 minutes
The patches has been tested in my local setup - and
no missing rebuilds was seen.
Sam Ravnborg (4):
build: fix that defaultenv is always rebuilt
build: fix that passwd.h is always built
build: fix that the bbenv file is always rebuilt
build: fix that LZO file is always rebuilt
common/Makefile | 28 +++++++++++++++-------------
defaultenv/Makefile | 4 ++--
scripts/Kbuild.include | 12 +++++++-----
scripts/Makefile.lib | 2 +-
4 files changed, 25 insertions(+), 21 deletions(-)
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/4] build: fix that defaultenv is always rebuilt
2017-12-26 18:32 [PATCH 0/4] build: minimize rebuilds Sam Ravnborg
@ 2017-12-26 18:35 ` Sam Ravnborg
2017-12-26 18:36 ` [PATCH 2/4] build: fix that passwd.h is always built Sam Ravnborg
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Sam Ravnborg @ 2017-12-26 18:35 UTC (permalink / raw)
To: Barebox List
From fcffd0176b3394cc664d9bf5b31b053253323bfb Mon Sep 17 00:00:00 2001
From: Sam Ravnborg <sam@ravnborg.org>
Date: Tue, 26 Dec 2017 16:47:16 +0100
Subject: [PATCH 1/4] build: fix that defaultenv is always rebuilt
Using following pattern:
target: prerequisite FORCE
$(call cmd,foo)
is almost always wrong. Due to FORCE target will be rebuilt
using cmd_foo no mater the timestamps.
The following pattern:
target: prerequisite FORCE
$(call if_changed,foo)
Will call cmd_foo only if:
- target is not updated
- or command to built target has changed
But to make this work target must be added to the
list af targets built.
This can be done by assigning target to extra-y or targets.
Use the latter pattern for defaultenv to avoid rebuilding
the environmentt for each build.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
defaultenv/Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/defaultenv/Makefile b/defaultenv/Makefile
index 33e0eceef..f313b04e8 100644
--- a/defaultenv/Makefile
+++ b/defaultenv/Makefile
@@ -14,7 +14,7 @@ quiet_cmd_env_default = ENV $@
cmd_env_default = ($(srctree)/scripts/genenv $(srctree) $(objtree) $@ $(CONFIG_DEFAULT_ENVIRONMENT_PATH))
$(obj)/barebox_default_env: FORCE
- $(call cmd,env_default)
+ $(call if_changed,env_default)
quiet_cmd_env_h = ENVH $@
cmd_env_h = cat $< | (cd $(obj) && $(objtree)/scripts/bin2c "__aligned(4) default_environment") > $@; \
@@ -27,4 +27,4 @@ quiet_cmd_env_zero = ENVZ $@
cmd_env_zero = ($(objtree)/scripts/bareboxenv -z $(CONFIG_DEFAULT_ENVIRONMENT_PATH) $@)
$(obj)/barebox_zero_env: FORCE
- $(call cmd,env_zero)
+ $(call if_changed,env_zero)
--
2.12.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/4] build: fix that passwd.h is always built
2017-12-26 18:32 [PATCH 0/4] build: minimize rebuilds Sam Ravnborg
2017-12-26 18:35 ` [PATCH 1/4] build: fix that defaultenv is always rebuilt Sam Ravnborg
@ 2017-12-26 18:36 ` Sam Ravnborg
2017-12-26 18:36 ` [PATCH 3/4] build: fix that the bbenv file is always rebuilt Sam Ravnborg
2017-12-26 18:36 ` [PATCH 4/4] build: fix that LZO " Sam Ravnborg
3 siblings, 0 replies; 8+ messages in thread
From: Sam Ravnborg @ 2017-12-26 18:36 UTC (permalink / raw)
To: Barebox List
From 48fe20e2bf2249b2f89d96c9787e0b489c015054 Mon Sep 17 00:00:00 2001
From: Sam Ravnborg <sam@ravnborg.org>
Date: Tue, 26 Dec 2017 18:02:17 +0100
Subject: [PATCH 2/4] build: fix that passwd.h is always built
Use the kbuild provided support for generated
files to avoid that passwd.h is always generated
thus triggering further re-builds
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
common/Makefile | 28 +++++++++++++++-------------
1 file changed, 15 insertions(+), 13 deletions(-)
diff --git a/common/Makefile b/common/Makefile
index 8cd0ab300..5351ef0f7 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -63,27 +63,29 @@ obj-$(CONFIG_BAREBOX_UPDATE_IMX_NAND_FCB) += imx-bbu-nand-fcb.o
obj-$(CONFIG_CONSOLE_RATP) += ratp.o
obj-$(CONFIG_BOOT) += boot.o
-quiet_cmd_pwd_h = PWDH $@
ifdef CONFIG_PASSWORD
-ifneq ($(CONFIG_PASSWORD_DEFAULT),"")
-PASSWD_FILE := $(shell cd $(srctree); find $(CONFIG_PASSWORD_DEFAULT) -type f)
-cmd_pwd_h = echo -n "static const char default_passwd[] = \"" > $@; \
- cat $< | tr -d '\n' >> $@; \
- echo "\";" >> $@
-include/generated/passwd.h: $(PASSWD_FILE)
- $(call if_changed,pwd_h)
+ifeq ($(CONFIG_PASSWORD_DEFAULT),"")
+define filechk_passwd
+ echo "static const char default_passwd[] = \"\";"
+endef
else
-cmd_pwd_h = echo "static const char default_passwd[] = \"\";" > $@
-
-include/generated/passwd.h: FORCE
- $(call if_changed,pwd_h)
+define filechk_passwd
+( \
+echo -n "static const char default_passwd[] = \""; \
+cat $(shell find $(srctree) -name $(CONFIG_PASSWORD_DEFAULT) -type f) | tr -d '\n';\
+echo "\";" \
+)
+endef
endif
+include/generated/passwd.h: $(srctree)/$(src)/Makefile FORCE
+ $(call filechk,passwd)
+
targets += include/generated/passwd.h
$(obj)/password.o: include/generated/passwd.h
-endif
+endif # CONFIG_PASSWORD
# dependencies on generated files need to be listed explicitly
$(obj)/version.o: include/generated/compile.h
--
2.12.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/4] build: fix that the bbenv file is always rebuilt
2017-12-26 18:32 [PATCH 0/4] build: minimize rebuilds Sam Ravnborg
2017-12-26 18:35 ` [PATCH 1/4] build: fix that defaultenv is always rebuilt Sam Ravnborg
2017-12-26 18:36 ` [PATCH 2/4] build: fix that passwd.h is always built Sam Ravnborg
@ 2017-12-26 18:36 ` Sam Ravnborg
2017-12-26 18:36 ` [PATCH 4/4] build: fix that LZO " Sam Ravnborg
3 siblings, 0 replies; 8+ messages in thread
From: Sam Ravnborg @ 2017-12-26 18:36 UTC (permalink / raw)
To: Barebox List
From ac9ca6505d5b887c351117d9c033c8a76cc77125 Mon Sep 17 00:00:00 2001
From: Sam Ravnborg <sam@ravnborg.org>
Date: Tue, 26 Dec 2017 18:05:14 +0100
Subject: [PATCH 3/4] build: fix that the bbenv file is always rebuilt
Use if_changed in rule for bbenv file.
This avoids re-builds.
The target is already assigned to extra-y - so the
kbuild logic will work as expected.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
scripts/Makefile.lib | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index b084bacab..d202a7299 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -292,7 +292,7 @@ quiet_cmd_env = ENV $@
cmd_env=$(srctree)/scripts/genenv $(srctree) $(objtree) $@ $<
%.bbenv$(DEFAULT_COMPRESSION_SUFFIX): % FORCE
- $(call cmd,env)
+ $(call if_changed,env)
# Bzip2
# ---------------------------------------------------------------------------
--
2.12.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 4/4] build: fix that LZO file is always rebuilt
2017-12-26 18:32 [PATCH 0/4] build: minimize rebuilds Sam Ravnborg
` (2 preceding siblings ...)
2017-12-26 18:36 ` [PATCH 3/4] build: fix that the bbenv file is always rebuilt Sam Ravnborg
@ 2017-12-26 18:36 ` Sam Ravnborg
2018-01-05 10:49 ` Sascha Hauer
3 siblings, 1 reply; 8+ messages in thread
From: Sam Ravnborg @ 2017-12-26 18:36 UTC (permalink / raw)
To: Barebox List
From e398a00f84db33ea5ae7f6ee12c54511ef7a94fc Mon Sep 17 00:00:00 2001
From: Sam Ravnborg <sam@ravnborg.org>
Date: Tue, 26 Dec 2017 18:09:35 +0100
Subject: [PATCH 4/4] build: fix that LZO file is always rebuilt
Port the make-cmd from linux kernel.
with the updated version $$ is porperly escaped, thus
the LZO rule works as intended.
And we avoid rebuilds when not required
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
scripts/Kbuild.include | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index 310dcdc94..fb3fa88fb 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -205,11 +205,13 @@ else
arg-check = $(if $(strip $(cmd_$@)),,1)
endif
-# >'< substitution is for echo to work,
-# >$< substitution to preserve $ when reloading .cmd file
-# note: when using inline perl scripts [perl -e '...$$t=1;...']
-# in $(cmd_xxx) double $$ your perl vars
-make-cmd = $(subst \\,\\\\,$(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1))))))
+# Replace >$< with >$$< to preserve $ when reloading the .cmd file
+# (needed for make)
+# Replace >#< with >\#< to avoid starting a comment in the .cmd file
+# (needed for make)
+# Replace >'< with >'\''< to be able to enclose the whole string in '...'
+# (needed for the shell)
+make-cmd = $(call escsq,$(subst \#,\\\#,$(subst $$,$$$$,$(cmd_$(1)))))
# Find any prerequisites that is newer than target or that does not exist.
# PHONY targets skipped in both cases.
--
2.12.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 4/4] build: fix that LZO file is always rebuilt
2017-12-26 18:36 ` [PATCH 4/4] build: fix that LZO " Sam Ravnborg
@ 2018-01-05 10:49 ` Sascha Hauer
2018-01-05 14:57 ` Sascha Hauer
0 siblings, 1 reply; 8+ messages in thread
From: Sascha Hauer @ 2018-01-05 10:49 UTC (permalink / raw)
To: Sam Ravnborg; +Cc: Barebox List
Hi Sam,
On Tue, Dec 26, 2017 at 07:36:53PM +0100, Sam Ravnborg wrote:
> From e398a00f84db33ea5ae7f6ee12c54511ef7a94fc Mon Sep 17 00:00:00 2001
> From: Sam Ravnborg <sam@ravnborg.org>
> Date: Tue, 26 Dec 2017 18:09:35 +0100
> Subject: [PATCH 4/4] build: fix that LZO file is always rebuilt
>
> Port the make-cmd from linux kernel.
> with the updated version $$ is porperly escaped, thus
> the LZO rule works as intended.
> And we avoid rebuilds when not required
>
> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> ---
> scripts/Kbuild.include | 12 +++++++-----
> 1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
> index 310dcdc94..fb3fa88fb 100644
> --- a/scripts/Kbuild.include
> +++ b/scripts/Kbuild.include
> @@ -205,11 +205,13 @@ else
> arg-check = $(if $(strip $(cmd_$@)),,1)
> endif
>
> -# >'< substitution is for echo to work,
> -# >$< substitution to preserve $ when reloading .cmd file
> -# note: when using inline perl scripts [perl -e '...$$t=1;...']
> -# in $(cmd_xxx) double $$ your perl vars
> -make-cmd = $(subst \\,\\\\,$(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1))))))
> +# Replace >$< with >$$< to preserve $ when reloading the .cmd file
> +# (needed for make)
> +# Replace >#< with >\#< to avoid starting a comment in the .cmd file
> +# (needed for make)
> +# Replace >'< with >'\''< to be able to enclose the whole string in '...'
> +# (needed for the shell)
> +make-cmd = $(call escsq,$(subst \#,\\\#,$(subst $$,$$$$,$(cmd_$(1)))))
>
This doesn't work for me. Without this patch I do not see any rebuilds
of lzo files, but with this patch I do.
Seems you are using another shell, dash vs. bash? Porting the second
hunk of the kernel commit 164f0d2efaaef83 fixes it for me.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 4/4] build: fix that LZO file is always rebuilt
2018-01-05 10:49 ` Sascha Hauer
@ 2018-01-05 14:57 ` Sascha Hauer
2018-01-06 7:34 ` Sam Ravnborg
0 siblings, 1 reply; 8+ messages in thread
From: Sascha Hauer @ 2018-01-05 14:57 UTC (permalink / raw)
To: Sam Ravnborg; +Cc: Barebox List
On Fri, Jan 05, 2018 at 11:49:46AM +0100, Sascha Hauer wrote:
> Hi Sam,
>
> On Tue, Dec 26, 2017 at 07:36:53PM +0100, Sam Ravnborg wrote:
> > From e398a00f84db33ea5ae7f6ee12c54511ef7a94fc Mon Sep 17 00:00:00 2001
> > From: Sam Ravnborg <sam@ravnborg.org>
> > Date: Tue, 26 Dec 2017 18:09:35 +0100
> > Subject: [PATCH 4/4] build: fix that LZO file is always rebuilt
> >
> > Port the make-cmd from linux kernel.
> > with the updated version $$ is porperly escaped, thus
> > the LZO rule works as intended.
> > And we avoid rebuilds when not required
> >
> > Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> > ---
> > scripts/Kbuild.include | 12 +++++++-----
> > 1 file changed, 7 insertions(+), 5 deletions(-)
> >
> > diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
> > index 310dcdc94..fb3fa88fb 100644
> > --- a/scripts/Kbuild.include
> > +++ b/scripts/Kbuild.include
> > @@ -205,11 +205,13 @@ else
> > arg-check = $(if $(strip $(cmd_$@)),,1)
> > endif
> >
> > -# >'< substitution is for echo to work,
> > -# >$< substitution to preserve $ when reloading .cmd file
> > -# note: when using inline perl scripts [perl -e '...$$t=1;...']
> > -# in $(cmd_xxx) double $$ your perl vars
> > -make-cmd = $(subst \\,\\\\,$(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1))))))
> > +# Replace >$< with >$$< to preserve $ when reloading the .cmd file
> > +# (needed for make)
> > +# Replace >#< with >\#< to avoid starting a comment in the .cmd file
> > +# (needed for make)
> > +# Replace >'< with >'\''< to be able to enclose the whole string in '...'
> > +# (needed for the shell)
> > +make-cmd = $(call escsq,$(subst \#,\\\#,$(subst $$,$$$$,$(cmd_$(1)))))
> >
>
> This doesn't work for me. Without this patch I do not see any rebuilds
> of lzo files, but with this patch I do.
>
> Seems you are using another shell, dash vs. bash? Porting the second
> hunk of the kernel commit 164f0d2efaaef83 fixes it for me.
Ok, applied with the missing hunk from 164f0d2efaaef83:
@@ -220,7 +222,7 @@ any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^)
if_changed = $(if $(strip $(any-prereq) $(arg-check)), \
@set -e; \
$(echo-cmd) $(cmd_$(1)); \
- echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)
+ printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)
Please let me know if I have overlooked something.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 4/4] build: fix that LZO file is always rebuilt
2018-01-05 14:57 ` Sascha Hauer
@ 2018-01-06 7:34 ` Sam Ravnborg
0 siblings, 0 replies; 8+ messages in thread
From: Sam Ravnborg @ 2018-01-06 7:34 UTC (permalink / raw)
To: Sascha Hauer; +Cc: Barebox List
Hi Sascha.
> > > +# (needed for the shell)
> > > +make-cmd = $(call escsq,$(subst \#,\\\#,$(subst $$,$$$$,$(cmd_$(1)))))
> > >
> >
> > This doesn't work for me. Without this patch I do not see any rebuilds
> > of lzo files, but with this patch I do.
> >
> > Seems you are using another shell, dash vs. bash? Porting the second
> > hunk of the kernel commit 164f0d2efaaef83 fixes it for me.
$ sh --version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
This is a CentOS based system.
>
> Ok, applied with the missing hunk from 164f0d2efaaef83:
>
> @@ -220,7 +222,7 @@ any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^)
> if_changed = $(if $(strip $(any-prereq) $(arg-check)), \
> @set -e; \
> $(echo-cmd) $(cmd_$(1)); \
> - echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)
> + printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)
>
The above snip have no impact on my system - which is why I left it out.
To try to do minimal changes only.
I should have mentioned this - as well as the specific reference to the
kernel commit.
but in other words - tested with the above change. OK.
Sam
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2018-01-06 7:35 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-26 18:32 [PATCH 0/4] build: minimize rebuilds Sam Ravnborg
2017-12-26 18:35 ` [PATCH 1/4] build: fix that defaultenv is always rebuilt Sam Ravnborg
2017-12-26 18:36 ` [PATCH 2/4] build: fix that passwd.h is always built Sam Ravnborg
2017-12-26 18:36 ` [PATCH 3/4] build: fix that the bbenv file is always rebuilt Sam Ravnborg
2017-12-26 18:36 ` [PATCH 4/4] build: fix that LZO " Sam Ravnborg
2018-01-05 10:49 ` Sascha Hauer
2018-01-05 14:57 ` Sascha Hauer
2018-01-06 7:34 ` Sam Ravnborg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox