xref: /OK3568_Linux_fs/u-boot/scripts/Makefile.autoconf (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# This helper makefile is used for creating
2*4882a593Smuzhiyun#  - symbolic links (arch/$ARCH/include/asm/arch
3*4882a593Smuzhiyun#  - include/autoconf.mk, {spl,tpl}/include/autoconf.mk
4*4882a593Smuzhiyun#  - include/config.h
5*4882a593Smuzhiyun#
6*4882a593Smuzhiyun# When our migration to Kconfig is done
7*4882a593Smuzhiyun# (= When we move all CONFIGs from header files to Kconfig)
8*4882a593Smuzhiyun# this makefile can be deleted.
9*4882a593Smuzhiyun#
10*4882a593Smuzhiyun# SPDX-License-Identifier:	GPL-2.0
11*4882a593Smuzhiyun#
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun__all: include/autoconf.mk include/autoconf.mk.dep
14*4882a593Smuzhiyun
15*4882a593Smuzhiyunifeq ($(shell grep -q '^CONFIG_SPL=y' include/config/auto.conf 2>/dev/null && echo y),y)
16*4882a593Smuzhiyun__all: spl/include/autoconf.mk
17*4882a593Smuzhiyunendif
18*4882a593Smuzhiyun
19*4882a593Smuzhiyunifeq ($(shell grep -q '^CONFIG_TPL=y' include/config/auto.conf 2>/dev/null && echo y),y)
20*4882a593Smuzhiyun__all: tpl/include/autoconf.mk
21*4882a593Smuzhiyunendif
22*4882a593Smuzhiyun
23*4882a593Smuzhiyuninclude include/config/auto.conf
24*4882a593Smuzhiyun
25*4882a593Smuzhiyuninclude scripts/Kbuild.include
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun# Need to define CC and CPP again here in case the top Makefile did not
28*4882a593Smuzhiyun# include config.mk.  Some architectures expect CROSS_COMPILE to be defined
29*4882a593Smuzhiyun# in arch/$(ARCH)/config.mk
30*4882a593SmuzhiyunCC		= $(CROSS_COMPILE)gcc
31*4882a593SmuzhiyunCPP		= $(CC) -E
32*4882a593Smuzhiyun
33*4882a593Smuzhiyuninclude config.mk
34*4882a593Smuzhiyun
35*4882a593SmuzhiyunUBOOTINCLUDE    := \
36*4882a593Smuzhiyun		-Iinclude \
37*4882a593Smuzhiyun		$(if $(KBUILD_SRC), -I$(srctree)/include) \
38*4882a593Smuzhiyun		-I$(srctree)/arch/$(ARCH)/include \
39*4882a593Smuzhiyun		-include $(srctree)/include/linux/kconfig.h
40*4882a593Smuzhiyun
41*4882a593Smuzhiyunc_flags := $(KBUILD_CFLAGS) $(KBUILD_CPPFLAGS) $(PLATFORM_CPPFLAGS) \
42*4882a593Smuzhiyun					$(UBOOTINCLUDE) $(NOSTDINC_FLAGS)
43*4882a593Smuzhiyun
44*4882a593Smuzhiyunquiet_cmd_autoconf_dep = GEN     $@
45*4882a593Smuzhiyun      cmd_autoconf_dep = $(CC) -x c -DDO_DEPS_ONLY -M -MP $(c_flags) \
46*4882a593Smuzhiyun	-MQ include/config/auto.conf $(srctree)/include/common.h > $@ || {	\
47*4882a593Smuzhiyun		rm $@; false;							\
48*4882a593Smuzhiyun	}
49*4882a593Smuzhiyuninclude/autoconf.mk.dep: include/config.h FORCE
50*4882a593Smuzhiyun	$(call cmd,autoconf_dep)
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun# We are migrating from board headers to Kconfig little by little.
53*4882a593Smuzhiyun# In the interim, we use both of
54*4882a593Smuzhiyun#  - include/config/auto.conf (generated by Kconfig)
55*4882a593Smuzhiyun#  - include/autoconf.mk      (used in the U-Boot conventional configuration)
56*4882a593Smuzhiyun# The following rule creates autoconf.mk
57*4882a593Smuzhiyun# include/config/auto.conf is grepped in order to avoid duplication of the
58*4882a593Smuzhiyun# same CONFIG macros
59*4882a593Smuzhiyunquiet_cmd_autoconf = GEN     $@
60*4882a593Smuzhiyun      cmd_autoconf = \
61*4882a593Smuzhiyun		sed -n -f $(srctree)/tools/scripts/define2mk.sed $< |			\
62*4882a593Smuzhiyun		while read line; do							\
63*4882a593Smuzhiyun			if [ -n "${KCONFIG_IGNORE_DUPLICATES}" ] ||			\
64*4882a593Smuzhiyun			   ! grep -q "$${line%=*}=" include/config/auto.conf; then	\
65*4882a593Smuzhiyun				echo "$$line";						\
66*4882a593Smuzhiyun			fi								\
67*4882a593Smuzhiyun		done > $@
68*4882a593Smuzhiyun
69*4882a593Smuzhiyunquiet_cmd_u_boot_cfg = CFG     $@
70*4882a593Smuzhiyun      cmd_u_boot_cfg = \
71*4882a593Smuzhiyun	$(CPP) $(c_flags) $2 -DDO_DEPS_ONLY -dM $(srctree)/include/common.h > $@.tmp && { \
72*4882a593Smuzhiyun		grep 'define CONFIG_' $@.tmp > $@;			\
73*4882a593Smuzhiyun		rm $@.tmp;						\
74*4882a593Smuzhiyun	} || {								\
75*4882a593Smuzhiyun		rm $@.tmp; false;					\
76*4882a593Smuzhiyun	}
77*4882a593Smuzhiyun
78*4882a593Smuzhiyunu-boot.cfg: include/config.h FORCE
79*4882a593Smuzhiyun	$(call cmd,u_boot_cfg)
80*4882a593Smuzhiyun
81*4882a593Smuzhiyunspl/u-boot.cfg: include/config.h FORCE
82*4882a593Smuzhiyun	$(Q)mkdir -p $(dir $@)
83*4882a593Smuzhiyun	$(call cmd,u_boot_cfg,-DCONFIG_SPL_BUILD)
84*4882a593Smuzhiyun
85*4882a593Smuzhiyuntpl/u-boot.cfg: include/config.h FORCE
86*4882a593Smuzhiyun	$(Q)mkdir -p $(dir $@)
87*4882a593Smuzhiyun	$(call cmd,u_boot_cfg,-DCONFIG_SPL_BUILD -DCONFIG_TPL_BUILD)
88*4882a593Smuzhiyun
89*4882a593Smuzhiyuninclude/autoconf.mk: u-boot.cfg
90*4882a593Smuzhiyun	$(call cmd,autoconf)
91*4882a593Smuzhiyun
92*4882a593Smuzhiyunspl/include/autoconf.mk: spl/u-boot.cfg
93*4882a593Smuzhiyun	$(Q)mkdir -p $(dir $@)
94*4882a593Smuzhiyun	$(call cmd,autoconf)
95*4882a593Smuzhiyun
96*4882a593Smuzhiyuntpl/include/autoconf.mk: tpl/u-boot.cfg
97*4882a593Smuzhiyun	$(Q)mkdir -p $(dir $@)
98*4882a593Smuzhiyun	$(call cmd,autoconf)
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun# include/config.h
101*4882a593Smuzhiyun# Prior to Kconfig, it was generated by mkconfig. Now it is created here.
102*4882a593Smuzhiyundefine filechk_config_h
103*4882a593Smuzhiyun	(echo "/* Automatically generated - do not edit */";		\
104*4882a593Smuzhiyun	for i in $$(echo $(CONFIG_SYS_EXTRA_OPTIONS) | sed 's/,/ /g'); do \
105*4882a593Smuzhiyun		echo \#define CONFIG_$$i				\
106*4882a593Smuzhiyun		| sed '/=/ {s/=/	/;q; } ; { s/$$/	1/; }'; \
107*4882a593Smuzhiyun	done;								\
108*4882a593Smuzhiyun	echo \#define CONFIG_BOARDDIR board/$(if $(VENDOR),$(VENDOR)/)$(BOARD);\
109*4882a593Smuzhiyun	echo \#include \<config_defaults.h\>;				\
110*4882a593Smuzhiyun	echo \#include \<config_uncmd_spl.h\>;				\
111*4882a593Smuzhiyun	echo \#include \<configs/$(CONFIG_SYS_CONFIG_NAME).h\>;		\
112*4882a593Smuzhiyun	echo \#include \<asm/config.h\>;				\
113*4882a593Smuzhiyun	echo \#include \<linux/kconfig.h\>;				\
114*4882a593Smuzhiyun	echo \#include \<config_fallbacks.h\>;)
115*4882a593Smuzhiyunendef
116*4882a593Smuzhiyun
117*4882a593Smuzhiyuninclude/config.h: scripts/Makefile.autoconf create_symlink FORCE
118*4882a593Smuzhiyun	$(call filechk,config_h)
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun# symbolic links
121*4882a593Smuzhiyun# If arch/$(ARCH)/mach-$(SOC)/include/mach exists,
122*4882a593Smuzhiyun# make a symbolic link to that directory.
123*4882a593Smuzhiyun# Otherwise, create a symbolic link to arch/$(ARCH)/include/asm/arch-$(SOC).
124*4882a593SmuzhiyunPHONY += create_symlink
125*4882a593Smuzhiyuncreate_symlink:
126*4882a593Smuzhiyunifdef CONFIG_CREATE_ARCH_SYMLINK
127*4882a593Smuzhiyunifneq ($(KBUILD_SRC),)
128*4882a593Smuzhiyun	$(Q)mkdir -p include/asm
129*4882a593Smuzhiyun	$(Q)if [ -d $(KBUILD_SRC)/arch/$(ARCH)/mach-$(SOC)/include/mach ]; then	\
130*4882a593Smuzhiyun		dest=arch/$(ARCH)/mach-$(SOC)/include/mach;			\
131*4882a593Smuzhiyun	else									\
132*4882a593Smuzhiyun		dest=arch/$(ARCH)/include/asm/arch-$(if $(SOC),$(SOC),$(CPU));	\
133*4882a593Smuzhiyun	fi;									\
134*4882a593Smuzhiyun	ln -fsn $(KBUILD_SRC)/$$dest include/asm/arch
135*4882a593Smuzhiyunelse
136*4882a593Smuzhiyun	$(Q)if [ -d arch/$(ARCH)/mach-$(SOC)/include/mach ]; then	\
137*4882a593Smuzhiyun		dest=../../mach-$(SOC)/include/mach;			\
138*4882a593Smuzhiyun	else								\
139*4882a593Smuzhiyun		dest=arch-$(if $(SOC),$(SOC),$(CPU));			\
140*4882a593Smuzhiyun	fi;								\
141*4882a593Smuzhiyun	ln -fsn $$dest arch/$(ARCH)/include/asm/arch
142*4882a593Smuzhiyunendif
143*4882a593Smuzhiyunendif
144*4882a593Smuzhiyun
145*4882a593SmuzhiyunPHONY += FORCE
146*4882a593SmuzhiyunFORCE:
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun.PHONY: $(PHONY)
149