Skip to contentSkip to conversation

core/printvars: allow dumping a set of variables

PATCH New Yann E. MORIN 3 participants 4 messages Nov 4, 2015 Kbuild

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 core/printvars: allow dumping a set of variables

Dumping our 176164 variables can take quite some time (~12s here). What takes the most time is sorting the variables (~9s), followed by the parsing of our Makefiles (~3s), with the actual printing in the noise.

However, sometimes only one or a few variables are needed. For example, one may want to retrieve the Linux build dir from a post-build hook (to get the Linux' actual .config after our fixups and check for various features).

Add the possibility to only dump the variables listed in $(VAR) which must be passed as a make argument, like so:

    $ make -s printvars VARS="LINUX_DIR TOPDIR O"
    LINUX_DIR=/home/ymorin/dev/buildroot/O/build/linux-4.3 ($(BUILD_DIR)/$(LINUX_BASE_NAME))
    O=/home/ymorin/dev/buildroot/O/. (/home/ymorin/dev/buildroot/O/.)
    TOPDIR=/home/ymorin/dev/buildroot/buildroot (/home/ymorin/dev/buildroot/buildroot)

This is much faster (the time is just about the time it takes to parse our Makefiles, 3s here) and easier to parse.

---
 Makefile | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
Makefile +2 -1
index 6d34ee2..7b152c7 100644
@@ -832,9 +832,10 @@ ifeq ($(NEED_WRAPPER),y)
 endif
 
 # printvars prints all the variables currently defined in our Makefiles
+# or only the variables specified in $(VARS)
 printvars:
 	@$(foreach V, \
-		$(sort $(.VARIABLES)), \
+		$(sort $(if $(VARS),$(VARS),$(.VARIABLES))), \
 		$(if $(filter-out environment% default automatic, \
 				$(origin $V)), \
 		$(info $V=$($V) ($(value $V)))))
Signature · 1 line
1.9.1
#1 lore raw

PATCH 1/1 core/printvars: allow dumping a set of variables

Dear Yann E. MORIN,

Quoted 17 lines · Yann E. MORIN

Dumping our 176164 variables can take quite some time (~12s here). What takes the most time is sorting the variables (~9s), followed by the parsing of our Makefiles (~3s), with the actual printing in the noise.

However, sometimes only one or a few variables are needed. For example, one may want to retrieve the Linux build dir from a post-build hook (to get the Linux' actual .config after our fixups and check for various features).

Add the possibility to only dump the variables listed in $(VAR) which must be passed as a make argument, like so:

    $ make -s printvars VARS="LINUX_DIR TOPDIR O"
    LINUX_DIR=/home/ymorin/dev/buildroot/O/build/linux-4.3 ($(BUILD_DIR)/$(LINUX_BASE_NAME))
    O=/home/ymorin/dev/buildroot/O/. (/home/ymorin/dev/buildroot/O/.)
    TOPDIR=/home/ymorin/dev/buildroot/buildroot (/home/ymorin/dev/buildroot/buildroot)
Quoted 4 lines

This is much faster (the time is just about the time it takes to parse our Makefiles, 3s here) and easier to parse.

I haven't thought about the implementation, but it possible to support wildcards, like LIBFOO_* or LIBFOO_% ?

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

PATCH 1/1 core/printvars: allow dumping a set of variables

Thomas, All,

On 2015-11-04 21:45 +0100, Thomas Petazzoni spake thusly:

Quoted 18 lines · Yann E. MORIN
Quoted 17 lines

Dumping our 176164 variables can take quite some time (~12s here). What takes the most time is sorting the variables (~9s), followed by the parsing of our Makefiles (~3s), with the actual printing in the noise.

However, sometimes only one or a few variables are needed. For example, one may want to retrieve the Linux build dir from a post-build hook (to get the Linux' actual .config after our fixups and check for various features).

Add the possibility to only dump the variables listed in $(VAR) which must be passed as a make argument, like so:

    $ make -s printvars VARS="LINUX_DIR TOPDIR O"
    LINUX_DIR=/home/ymorin/dev/buildroot/O/build/linux-4.3 ($(BUILD_DIR)/$(LINUX_BASE_NAME))
    O=/home/ymorin/dev/buildroot/O/. (/home/ymorin/dev/buildroot/O/.)
    TOPDIR=/home/ymorin/dev/buildroot/buildroot (/home/ymorin/dev/buildroot/buildroot)
Quoted 7 lines
Quoted 4 lines

This is much faster (the time is just about the time it takes to parse our Makefiles, 3s here) and easier to parse.

I haven't thought about the implementation, but it possible to support wildcards, like LIBFOO_* or LIBFOO_% ?

I'll look at it...

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#3 lore raw

PATCH 1/1 core/printvars: allow dumping a set of variables

In reply to Yann E. MORIN
Quoted 17 lines · Yann E. MORIN

Dumping our 176164 variables can take quite some time (~12s here). What takes the most time is sorting the variables (~9s), followed by the parsing of our Makefiles (~3s), with the actual printing in the noise.

However, sometimes only one or a few variables are needed. For example, one may want to retrieve the Linux build dir from a post-build hook (to get the Linux' actual .config after our fixups and check for various features).

Add the possibility to only dump the variables listed in $(VAR) which must be passed as a make argument, like so:

    $ make -s printvars VARS="LINUX_DIR TOPDIR O"
    LINUX_DIR=/home/ymorin/dev/buildroot/O/build/linux-4.3 ($(BUILD_DIR)/$(LINUX_BASE_NAME))
    O=/home/ymorin/dev/buildroot/O/. (/home/ymorin/dev/buildroot/O/.)
    TOPDIR=/home/ymorin/dev/buildroot/buildroot (/home/ymorin/dev/buildroot/buildroot)
Quoted 4 lines

This is much faster (the time is just about the time it takes to parse our Makefiles, 3s here) and easier to parse.

I was going to say you forgot to update the documentation, but there isn't any...

Regards,
Arnout

Quoted 21 lines
---
 Makefile | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
Makefile +2 -1
index 6d34ee2..7b152c7 100644
@@ -832,9 +832,10 @@ ifeq ($(NEED_WRAPPER),y)
 endif
 
 # printvars prints all the variables currently defined in our Makefiles
+# or only the variables specified in $(VARS)
 printvars:
 	@$(foreach V, \
-		$(sort $(.VARIABLES)), \
+		$(sort $(if $(VARS),$(VARS),$(.VARIABLES))), \
 		$(if $(filter-out environment% default automatic, \
 				$(origin $V)), \
 		$(info $V=$($V) ($(value $V)))))
Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF