Re: [U-Boot] [PATCH v2 03/15] kbuild: move asm-offsets.h rules to ./Kbuild
On Mon, Feb 24, 2014 at 06:36:07AM +0100, Wolfgang Denk wrote: Dear Masahiro, In message 1393207943-3725-4-git-send-email-yamad...@jp.panasonic.com you wrote: +define cmd_generic-offsets + (set -e; \ +echo #ifndef __GENERIC_ASM_OFFSETS_H__; \ +echo #define __GENERIC_ASM_OFFSETS_H__; \ +echo /*; \ +echo * DO NOT MODIFY.; \ +echo *; \ +echo * This file was generated by Kbuild; \ +echo *; \ +echo */; \ +echo ; \ +sed -ne $(sed-y) $; \ +echo ; \ +echo #endif ) $@ +endef Can we use here documents in cases like this, so the number of shell command executions could be greatly reduced? Does something like this work? define cmd_generic-offsets\ cat _END_ $@\ #ifndef __GENERIC_ASM_OFFSETS_H__ \ #define __GENERIC_ASM_OFFSETS_H__ \ /*\ * DO NOT MODIFY \ *\ * This file was generated by Kbuild \ */ \ $$(sed -ne $(sed-y) $) \ #endif\ We can use printf(1) to split this up into 3 parts, but it honestly reads worse: diff --git a/Kbuild b/Kbuild index 1d89761..b8d747f 100644 --- a/Kbuild +++ b/Kbuild @@ -15,15 +15,14 @@ targets := $(generic-offsets-file) lib/asm-offsets.s quiet_cmd_generic-offsets = GEN $@ define cmd_generic-offsets (set -e; \ -echo #ifndef __GENERIC_ASM_OFFSETS_H__; \ -echo #define __GENERIC_ASM_OFFSETS_H__; \ -echo /*; \ -echo * DO NOT MODIFY.; \ -echo *; \ -echo * This file was generated by Kbuild; \ -echo *; \ -echo */; \ -echo ; \ +printf #ifndef __GENERIC_ASM_OFFSETS_H__\n\ +#define __GENERIC_ASM_OFFSETS_H__\n\ +/*\n\ + * DO NOT MODIFY.\n\ + *\n\ + * This file was generated by Kbuild\n\ + *\n\ + */\n\n; \ sed -ne $(sed-y) $; \ echo ; \ echo #endif ) $@ (And it doesn't quite look right in the file, but that's just a matter of massaging things. It also didn't seem to matter to overall build time since it's a one-off generation, not a many-off generation. I'm OK with this as-is. -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2 03/15] kbuild: move asm-offsets.h rules to ./Kbuild
Hello Wolfgang, Can we use here documents in cases like this, so the number of shell command executions could be greatly reduced? Does something like this work? define cmd_generic-offsets\ cat _END_ $@\ #ifndef __GENERIC_ASM_OFFSETS_H__ \ #define __GENERIC_ASM_OFFSETS_H__ \ /*\ * DO NOT MODIFY \ *\ * This file was generated by Kbuild \ */ \ $$(sed -ne $(sed-y) $) \ #endif\ _END_ ? No. I tried your code but it did not work. Kbuild created an empty file include/generated/generic-asm-offsets.h. I tried to debug but finally I gave up. Here document ( cat END ... END) syntax is really nightmare in Makefile. I've never seen that syntax in Makefile. For example, if you see the top Makefile of Linux Kernel, it always uses echo command. Best Regards Masahiro Yamada ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2 03/15] kbuild: move asm-offsets.h rules to ./Kbuild
Generate include/generated/generic-asm-offsets.h and include/generated/asm-offsets.h in ./Kbuild. This commit also changes the include guard. Before this commit, __ASM_OFFSETS_H__ was used for both of them. So we could not include generic-asm-offsets.h and asm-offsets.h at the same time. This commit renames the include guard of the former to __GENERIC_ASM_OFFSETS_H__. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com --- Changes in v2: None Kbuild | 87 ++ Makefile | 36 + tools/scripts/make-asm-offsets | 27 - 3 files changed, 89 insertions(+), 61 deletions(-) create mode 100644 Kbuild delete mode 100755 tools/scripts/make-asm-offsets diff --git a/Kbuild b/Kbuild new file mode 100644 index 000..1d89761 --- /dev/null +++ b/Kbuild @@ -0,0 +1,87 @@ +# +# Kbuild for top-level directory of U-Boot +# This file takes care of the following: +# 1) Generate generic-asm-offsets.h +# 2) Generate asm-offsets.h + +# +# 1) Generate generic-asm-offsets.h + +generic-offsets-file := include/generated/generic-asm-offsets.h + +always := $(generic-offsets-file) +targets := $(generic-offsets-file) lib/asm-offsets.s + +quiet_cmd_generic-offsets = GEN $@ +define cmd_generic-offsets + (set -e; \ +echo #ifndef __GENERIC_ASM_OFFSETS_H__; \ +echo #define __GENERIC_ASM_OFFSETS_H__; \ +echo /*; \ +echo * DO NOT MODIFY.; \ +echo *; \ +echo * This file was generated by Kbuild; \ +echo *; \ +echo */; \ +echo ; \ +sed -ne $(sed-y) $; \ +echo ; \ +echo #endif ) $@ +endef + +# We use internal kbuild rules to avoid the is up to date message from make +lib/asm-offsets.s: lib/asm-offsets.c FORCE + $(Q)mkdir -p $(dir $@) + $(call if_changed_dep,cc_s_c) + +$(obj)/$(generic-offsets-file): lib/asm-offsets.s Kbuild + $(Q)mkdir -p $(dir $@) + $(call cmd,generic-offsets) + +# +# 2) Generate asm-offsets.h +# + +ifneq ($(wildcard $(srctree)/$(CPUDIR)/$(SOC)/asm-offsets.c),) +offsets-file := include/generated/asm-offsets.h +endif + +always += $(offsets-file) +targets += $(offsets-file) +targets += $(CPUDIR)/$(SOC)/asm-offsets.s + + +# Default sed regexp - multiline due to syntax constraints +define sed-y + /^-/{s:-#\(.*\):/* \1 */:; \ + s:^-\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \ + s:^-\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \ + s:-::; p;} +endef + +CFLAGS_asm-offsets.o := -DDO_DEPS_ONLY + +quiet_cmd_offsets = GEN $@ +define cmd_offsets + (set -e; \ +echo #ifndef __ASM_OFFSETS_H__; \ +echo #define __ASM_OFFSETS_H__; \ +echo /*; \ +echo * DO NOT MODIFY.; \ +echo *; \ +echo * This file was generated by Kbuild; \ +echo *; \ +echo */; \ +echo ; \ +sed -ne $(sed-y) $; \ +echo ; \ +echo #endif ) $@ +endef + +# We use internal kbuild rules to avoid the is up to date message from make +$(CPUDIR)/$(SOC)/asm-offsets.s: $(CPUDIR)/$(SOC)/asm-offsets.c FORCE + $(Q)mkdir -p $(dir $@) + $(call if_changed_dep,cc_s_c) + +$(obj)/$(offsets-file): $(CPUDIR)/$(SOC)/asm-offsets.s + $(call cmd,offsets) diff --git a/Makefile b/Makefile index aef936d..14dff8f 100644 --- a/Makefile +++ b/Makefile @@ -988,9 +988,8 @@ prepare1: prepare2 $(version_h) $(timestamp_h) archprepare: prepare1 scripts_basic -prepare0: archprepare FORCE include/generated/generic-asm-offsets.h \ - include/generated/asm-offsets.h - @: +prepare0: archprepare FORCE + $(Q)$(MAKE) $(build)=. # All the preparing.. prepare: prepare0 @@ -1115,37 +1114,6 @@ checkdtc: false; \ fi -quiet_cmd_offsets = GEN $@ - cmd_offsets = $(srctree)/tools/scripts/make-asm-offsets $ $@ - -include/generated/generic-asm-offsets.h: lib/asm-offsets.s - $(call cmd,offsets) - -quiet_cmd_asm-offsets.s = CC $@ - cmd_asm-offsets.s = mkdir -p lib; \ - $(CC) -DDO_DEPS_ONLY \ - $(c_flags) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \ - -o $@ $ -c -S - -lib/asm-offsets.s: $(srctree)/lib/asm-offsets.c include/config.h - $(call cmd,asm-offsets.s) - -include/generated/asm-offsets.h: $(CPUDIR)/$(SOC)/asm-offsets.s - $(call cmd,offsets) - -quiet_cmd_soc_asm-offsets.s = CC $@ - cmd_soc_asm-offsets.s = mkdir -p $(CPUDIR)/$(SOC); \ - if [ -f $(srctree)/$(CPUDIR)/$(SOC)/asm-offsets.c ];then \ - $(CC) -DDO_DEPS_ONLY \ - $(c_flags) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \ - -o $@ $(srctree)/$(CPUDIR)/$(SOC)/asm-offsets.c -c -S; \ - else \ - touch $@; \ - fi - -$(CPUDIR)/$(SOC)/asm-offsets.s:include/config.h - $(call cmd,soc_asm-offsets.s) -
Re: [U-Boot] [PATCH v2 03/15] kbuild: move asm-offsets.h rules to ./Kbuild
Dear Masahiro, In message 1393207943-3725-4-git-send-email-yamad...@jp.panasonic.com you wrote: +define cmd_generic-offsets + (set -e; \ + echo #ifndef __GENERIC_ASM_OFFSETS_H__; \ + echo #define __GENERIC_ASM_OFFSETS_H__; \ + echo /*; \ + echo * DO NOT MODIFY.; \ + echo *; \ + echo * This file was generated by Kbuild; \ + echo *; \ + echo */; \ + echo ; \ + sed -ne $(sed-y) $; \ + echo ; \ + echo #endif ) $@ +endef Can we use here documents in cases like this, so the number of shell command executions could be greatly reduced? Does something like this work? define cmd_generic-offsets \ cat _END_ $@\ #ifndef __GENERIC_ASM_OFFSETS_H__ \ #define __GENERIC_ASM_OFFSETS_H__ \ /* \ * DO NOT MODIFY\ * \ * This file was generated by Kbuild\ */ \ $$(sed -ne $(sed-y) $) \ #endif \ _END_ ? [I'm not sure how to mark the continuation lines here...] Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de If all the Chinese simultaneously jumped into the Pacific off a 10 foot platform erected 10 feet off their coast, it would cause a tidal wave that would destroy everything in this country west of Nebraska. ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot