kconfig: switch to Kconfig
[oweals/u-boot.git] / scripts / Makefile.autoconf
diff --git a/scripts/Makefile.autoconf b/scripts/Makefile.autoconf
new file mode 100644 (file)
index 0000000..44c3997
--- /dev/null
@@ -0,0 +1,100 @@
+# This helper makefile is used for creating
+#  - symbolic links (arch/$ARCH/include/asm/arch
+#  - include/autoconf.mk, {spl,tpl}/include/autoconf.mk
+#  - include/config.h
+#
+# When our migration to Kconfig is done
+# (= When we move all CONFIGs from header files to Kconfig)
+# this makefile can be deleted.
+
+# obj is "include" or "spl/include" or "tpl/include"
+# for non-SPL, SPL, TPL, respectively
+include $(obj)/config/auto.conf
+
+include scripts/Kbuild.include
+
+# Need to define CC and CPP again here in case the top Makefile did not
+# include config.mk.  Some architectures expect CROSS_COMPILE to be defined
+# in arch/$(ARCH)/config.mk
+CC             = $(CROSS_COMPILE)gcc
+CPP            = $(CC) -E
+
+include config.mk
+
+UBOOTINCLUDE    := \
+               -I$(obj) \
+               -Iinclude \
+               $(if $(KBUILD_SRC), -I$(srctree)/include) \
+               -I$(srctree)/arch/$(ARCH)/include \
+               -include $(srctree)/include/linux/kconfig.h
+
+c_flags := $(KBUILD_CFLAGS) $(KBUILD_CPPFLAGS) $(PLATFORM_CPPFLAGS) \
+                                       $(UBOOTINCLUDE) $(NOSTDINC_FLAGS)
+
+quiet_cmd_autoconf_dep = GEN     $@
+      cmd_autoconf_dep = $(CC) -x c -DDO_DEPS_ONLY -M -MP $(c_flags) \
+       -MQ include/config/auto.conf $(srctree)/include/common.h > $@ || {      \
+               rm $@; false;                                                   \
+       }
+include/autoconf.mk.dep: FORCE
+       $(call cmd,autoconf_dep)
+
+# We are migrating from board headers to Kconfig little by little.
+# In the interim, we use both of
+#  - include/config/auto.conf (generated by Kconfig)
+#  - include/autoconf.mk      (used in the U-Boot conventional configuration)
+# The following rule creates autoconf.mk
+# include/config/auto.conf is grepped in order to avoid duplication of the
+# same CONFIG macros
+quiet_cmd_autoconf = GEN     $@
+      cmd_autoconf = \
+       $(CPP) $(c_flags) -DDO_DEPS_ONLY -dM $(srctree)/include/common.h > $@.tmp && {  \
+               sed -n -f $(srctree)/tools/scripts/define2mk.sed $@.tmp |               \
+               while read line; do                                                     \
+                       if ! grep -q "$${line%=*}=" $(obj)/config/auto.conf; then       \
+                               echo "$$line";                                          \
+                       fi                                                              \
+               done > $@;                                                              \
+               rm $@.tmp;                                                              \
+       } || {                                                                          \
+               rm $@.tmp; false;                                                       \
+       }
+
+$(obj)/autoconf.mk: FORCE
+       $(call cmd,autoconf)
+
+include/autoconf.mk include/autoconf.mk.dep: include/config.h
+
+# include/config.h
+# Prior to Kconfig, it was generated by mkconfig. Now it is created here.
+define filechk_config_h
+       (echo "/* Automatically generated - do not edit */";            \
+       for i in $$(echo $(CONFIG_SYS_EXTRA_OPTIONS) | sed 's/,/ /g'); do \
+               echo \#define CONFIG_$$i                                \
+               | sed '/=/ {s/=/        /;q; } ; { s/$$/        1/; }'; \
+       done;                                                           \
+       echo \#define CONFIG_BOARDDIR board/$(if $(VENDOR),$(VENDOR)/)$(BOARD);\
+       echo \#include \<config_cmd_defaults.h\>;                       \
+       echo \#include \<config_defaults.h\>;                           \
+       echo \#include \<configs/$(CONFIG_SYS_CONFIG_NAME).h\>;         \
+       echo \#include \<asm/config.h\>;                                \
+       echo \#include \<config_fallbacks.h\>;                          \
+       echo \#include \<config_uncmd_spl.h\>; )
+endef
+
+include/config.h: scripts/Makefile.autoconf create_symlink FORCE
+       $(call filechk,config_h)
+
+# symbolic links
+PHONY += create_symlink
+create_symlink:
+ifneq ($(KBUILD_SRC),)
+       $(Q)mkdir -p include/asm
+endif
+       $(Q)ln -fsn $(srctree)/arch/$(ARCH)/include/asm/arch-$(if $(SOC),$(SOC),$(CPU)) \
+               $(if $(KBUILD_SRC),,arch/$(ARCH)/)include/asm/arch
+
+PHONY += FORCE
+FORCE:
+
+.PHONY: $(PHONY)