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