kbuild: generate u-boot.cfg as a byproduct of include/autoconf.mk
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Mon, 26 Sep 2016 04:05:01 +0000 (13:05 +0900)
committerTom Rini <trini@konsulko.com>
Fri, 7 Oct 2016 14:26:34 +0000 (14:26 +0000)
Our build system still parses ad-hoc CONFIG options in header files
and generates include/autoconf.mk so that Makefiles can reference
them.  This gimmick was introduced in the pre-Kconfig days and will
be kept until Kconfig migration is completed.

The include/autoconf.mk is generated like follows:

  [1] Preprocess include/common.h with -DDO_DEPS_ONLY and
      retrieve macros into include/autoconf.mk.tmp
  [2] Reformat include/autoconf.mk.dep into include/autoconf.mk
      with tools/scripts/define2mk.sed script
  [3] Remove include/autoconf.mk.tmp

Here, include/autoconf.mk.tmp is similar to u-boot.cfg, which is
also generated by preprocessing include/config.h with -DDO_DEPS_ONLY.
In other words, there is much overlap among include/autoconf.mk and
u-boot.cfg build rules.

So, the idea is to split the build rule of include/autoconf.mk
into two stages.  The first preprocesses headers into u-boot.cfg.
The second parses the u-boot.cfg into include/autoconf.mk.  The
build rules of u-boot.cfg in Makefile and spl/Makefile will be gone.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Makefile
scripts/Makefile.autoconf
scripts/Makefile.spl

index 7a731d2759b0da1ebfb1a58b0a5bee670fc5c5c1..b8dc31da54b82b605420c2bd1c10a84950cd50f6 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -741,8 +741,7 @@ DO_STATIC_RELA =
 endif
 
 # Always append ALL so that arch config.mk's can add custom ones
-ALL-y += u-boot.srec u-boot.bin u-boot.sym System.map u-boot.cfg \
-       binary_size_check
+ALL-y += u-boot.srec u-boot.bin u-boot.sym System.map binary_size_check
 
 ALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.bin
 ifeq ($(CONFIG_SPL_FSL_PBL),y)
@@ -942,20 +941,6 @@ u-boot.sha1:       u-boot.bin
 u-boot.dis:    u-boot
                $(OBJDUMP) -d $< > $@
 
-# If .u-boot.cfg.d is still present, then either:
-# a) The previous build used a Makefile that used if_changed rather than
-#    if_changed_dep when building u-boot.cfg, and hence any later builds will
-#    be unaware of the dependencies for u-boot.cfg. In this case, we must
-#    delete u-boot.cfg to force it and .u-boot.cfg.cmd to be rebuilt the
-#    correct way.
-# b) The previous build failed or was interrupted while building u-boot.cfg,
-#    so deleting u-boot.cfg isn't going to cause any additional work.
-ifneq ($(wildcard $(obj)/.u-boot.cfg.d),)
-  unused := $(shell rm -f $(obj)/u-boot.cfg)
-endif
-u-boot.cfg:    include/config.h FORCE
-       $(call if_changed_dep,cpp_cfg)
-
 ifdef CONFIG_TPL
 SPL_PAYLOAD := tpl/u-boot-with-tpl.bin
 else
index ba674f849eaa18ca6dcf2188af0594b508ef7a63..2f85eb9599148145cf9b3d38b3acbb0d0b2bbe85 100644 (file)
@@ -58,29 +58,44 @@ include/autoconf.mk.dep: include/config.h FORCE
 # same CONFIG macros
 quiet_cmd_autoconf = GEN     $@
       cmd_autoconf = \
-       $(CPP) $(c_flags) $2 -DDO_DEPS_ONLY -dM $(srctree)/include/common.h > $@.tmp && { \
-               sed -n -f $(srctree)/tools/scripts/define2mk.sed $@.tmp |               \
+               sed -n -f $(srctree)/tools/scripts/define2mk.sed $< |                   \
                while read line; do                                                     \
                        if [ -n "${KCONFIG_IGNORE_DUPLICATES}" ] ||                     \
                           ! grep -q "$${line%=*}=" include/config/auto.conf; then      \
                                echo "$$line";                                          \
                        fi                                                              \
-               done > $@;                                                              \
-               rm $@.tmp;                                                              \
-       } || {                                                                          \
-               rm $@.tmp; false;                                                       \
+               done > $@
+
+quiet_cmd_u_boot_cfg = CFG     $@
+      cmd_u_boot_cfg = \
+       $(CPP) $(c_flags) $2 -DDO_DEPS_ONLY -dM $(srctree)/include/common.h > $@.tmp && { \
+               grep 'define CONFIG_' $@.tmp > $@;                      \
+               rm $@.tmp;                                              \
+       } || {                                                          \
+               rm $@.tmp; false;                                       \
        }
 
-include/autoconf.mk: include/config.h FORCE
+u-boot.cfg: include/config.h FORCE
+       $(call cmd,u_boot_cfg)
+
+spl/u-boot.cfg: include/config.h FORCE
+       $(Q)mkdir -p $(dir $@)
+       $(call cmd,u_boot_cfg,-DCONFIG_SPL_BUILD)
+
+tpl/u-boot.cfg: include/config.h FORCE
+       $(Q)mkdir -p $(dir $@)
+       $(call cmd,u_boot_cfg,-DCONFIG_SPL_BUILD -DCONFIG_TPL_BUILD)
+
+include/autoconf.mk: u-boot.cfg
        $(call cmd,autoconf)
 
-spl/include/autoconf.mk: include/config.h FORCE
+spl/include/autoconf.mk: spl/u-boot.cfg
        $(Q)mkdir -p $(dir $@)
-       $(call cmd,autoconf,-DCONFIG_SPL_BUILD)
+       $(call cmd,autoconf)
 
-tpl/include/autoconf.mk: include/config.h FORCE
+tpl/include/autoconf.mk: tpl/u-boot.cfg
        $(Q)mkdir -p $(dir $@)
-       $(call cmd,autoconf,-DCONFIG_SPL_BUILD -DCONFIG_TPL_BUILD)
+       $(call cmd,autoconf)
 
 # include/config.h
 # Prior to Kconfig, it was generated by mkconfig. Now it is created here.
index 4febc6b401aaa657df730a8e6627c6eb733697da..e8cf9f3865618adb0124a6150cd27a798e373d52 100644 (file)
@@ -156,7 +156,7 @@ spl/boot.bin: $(obj)/u-boot-spl.bin FORCE
        $(call if_changed,mkimage)
 endif
 
-ALL-y  += $(obj)/$(SPL_BIN).bin $(obj)/$(SPL_BIN).cfg
+ALL-y  += $(obj)/$(SPL_BIN).bin
 
 ifdef CONFIG_SAMSUNG
 ALL-y  += $(obj)/$(BOARD)-spl.bin
@@ -216,24 +216,6 @@ quiet_cmd_fdtgrep = FDTGREP $@
 $(obj)/$(SPL_BIN).dtb: dts/dt.dtb $(objtree)/tools/fdtgrep FORCE
        $(call if_changed,fdtgrep)
 
-quiet_cmd_cpp_cfg = CFG     $@
-cmd_cpp_cfg = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) -ansi \
-       -DDO_DEPS_ONLY -D__ASSEMBLY__ -x assembler-with-cpp -P -dM -E -o $@ $<
-
-# If .u-boot.cfg.d is still present, then either:
-# a) The previous build used a Makefile that used if_changed rather than
-#    if_changed_dep when building u-boot.cfg, and hence any later builds will
-#    be unaware of the dependencies for u-boot.cfg. In this case, we must
-#    delete u-boot.cfg to force it and .u-boot.cfg.cmd to be rebuilt the
-#    correct way.
-# b) The previous build failed or was interrupted while building u-boot.cfg,
-#    so deleting u-boot.cfg isn't going to cause any additional work.
-ifneq ($(wildcard $(obj)/.$(SPL_BIN).d),)
-  unused := $(shell rm -f $(obj)/$(SPL_BIN).cfg)
-endif
-$(obj)/$(SPL_BIN).cfg: include/config.h FORCE
-       $(call if_changed_dep,cpp_cfg)
-
 pythonpath = PYTHONPATH=tools
 
 quiet_cmd_dtocc = DTOC C  $@