diff mbox

[U-Boot,v2,03/15] kbuild: move asm-offsets.h rules to ./Kbuild

Message ID 1393207943-3725-4-git-send-email-yamada.m@jp.panasonic.com
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Masahiro Yamada Feb. 24, 2014, 2:12 a.m. UTC
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 <yamada.m@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

Comments

Wolfgang Denk Feb. 24, 2014, 5:36 a.m. UTC | #1
Dear Masahiro,

In message <1393207943-3725-4-git-send-email-yamada.m@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
Masahiro Yamada Feb. 24, 2014, 12:05 p.m. UTC | #2
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
diff mbox

Patch

diff --git a/Kbuild b/Kbuild
new file mode 100644
index 0000000..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)
-
 #########################################################################
 
 # ARM relocations should all be R_ARM_RELATIVE (32-bit) or
diff --git a/tools/scripts/make-asm-offsets b/tools/scripts/make-asm-offsets
deleted file mode 100755
index 4c33756..0000000
--- a/tools/scripts/make-asm-offsets
+++ /dev/null
@@ -1,27 +0,0 @@ 
-#!/bin/sh
-
-# Adapted from Linux kernel's "Kbuild":
-# commit 1cdf25d704f7951d02a04064c97db547d6021872
-# Author: Christoph Lameter <clameter@sgi.com>
-
-mkdir -p $(dirname $2)
-
-# Default sed regexp - multiline due to syntax constraints
-SED_CMD="/^->/{s:->#\(.*\):/* \1 */:; \
-	s:^->\([^ ]*\) [\$#]*\([-0-9]*\) \(.*\):#define \1 (\2) /* \3 */:; \
-	s:^->\([^ ]*\) [\$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
-	s:->::; p;}"
-
-(set -e
- echo "#ifndef __ASM_OFFSETS_H__"
- echo "#define __ASM_OFFSETS_H__"
- echo "/*"
- echo " * DO NOT MODIFY."
- echo " *"
- echo " * This file was generated by $(basename $0)"
- echo " *"
- echo " */"
- echo ""
- sed -ne "${SED_CMD}" $1 
- echo ""
- echo "#endif" ) > $2