1e2211743Swdenk# 2eca3aeb3SWolfgang Denk# (C) Copyright 2000-2013 3e2211743Swdenk# Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4e2211743Swdenk# 5eca3aeb3SWolfgang Denk# SPDX-License-Identifier: GPL-2.0+ 6e2211743Swdenk# 7e2211743Swdenk######################################################################### 8e2211743Swdenk 9f9328639SMarian Balakowiczifeq ($(CURDIR),$(SRCTREE)) 10f9328639SMarian Balakowiczdir := 11f9328639SMarian Balakowiczelse 12f9328639SMarian Balakowiczdir := $(subst $(SRCTREE)/,,$(CURDIR)) 13f9328639SMarian Balakowiczendif 14f9328639SMarian Balakowicz 15c8f9c302SDaniel Schwierzeckifneq ($(OBJTREE),$(SRCTREE)) 16c8f9c302SDaniel Schwierzeck# Create object files for SPL in a separate directory 17c8f9c302SDaniel Schwierzeckifeq ($(CONFIG_SPL_BUILD),y) 183aa29de0SYing Zhangifeq ($(CONFIG_TPL_BUILD),y) 193aa29de0SYing Zhangobj := $(if $(dir),$(TPLTREE)/$(dir)/,$(TPLTREE)/) 203aa29de0SYing Zhangelse 21c8f9c302SDaniel Schwierzeckobj := $(if $(dir),$(SPLTREE)/$(dir)/,$(SPLTREE)/) 223aa29de0SYing Zhangendif 23c8f9c302SDaniel Schwierzeckelse 24f9328639SMarian Balakowiczobj := $(if $(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/) 25c8f9c302SDaniel Schwierzeckendif 26f9328639SMarian Balakowiczsrc := $(if $(dir),$(SRCTREE)/$(dir)/,$(SRCTREE)/) 27f9328639SMarian Balakowicz 28f9328639SMarian Balakowicz$(shell mkdir -p $(obj)) 29f9328639SMarian Balakowiczelse 30c8f9c302SDaniel Schwierzeck# Create object files for SPL in a separate directory 31c8f9c302SDaniel Schwierzeckifeq ($(CONFIG_SPL_BUILD),y) 323aa29de0SYing Zhangifeq ($(CONFIG_TPL_BUILD),y) 333aa29de0SYing Zhangobj := $(if $(dir),$(TPLTREE)/$(dir)/,$(TPLTREE)/) 343aa29de0SYing Zhangelse 35c8f9c302SDaniel Schwierzeckobj := $(if $(dir),$(SPLTREE)/$(dir)/,$(SPLTREE)/) 36c8f9c302SDaniel Schwierzeck 373aa29de0SYing Zhangendif 38c8f9c302SDaniel Schwierzeck$(shell mkdir -p $(obj)) 39c8f9c302SDaniel Schwierzeckelse 40f9328639SMarian Balakowiczobj := 41c8f9c302SDaniel Schwierzeckendif 42f9328639SMarian Balakowiczsrc := 43f9328639SMarian Balakowiczendif 44f9328639SMarian Balakowicz 45592c5cabSwdenk# clean the slate ... 46592c5cabSwdenkPLATFORM_RELFLAGS = 47592c5cabSwdenkPLATFORM_CPPFLAGS = 48592c5cabSwdenkPLATFORM_LDFLAGS = 49592c5cabSwdenk 50e2211743Swdenk######################################################################### 51c4e5f52aSWolfgang Denk 52c4e5f52aSWolfgang Denk# Load generated board configuration 533aa29de0SYing Zhangifeq ($(CONFIG_TPL_BUILD),y) 543aa29de0SYing Zhang# Include TPL autoconf 553aa29de0SYing Zhangsinclude $(OBJTREE)/include/tpl-autoconf.mk 563aa29de0SYing Zhangelse 5739bc12ddSJoel Fernandesifeq ($(CONFIG_SPL_BUILD),y) 5839bc12ddSJoel Fernandes# Include SPL autoconf 5939bc12ddSJoel Fernandessinclude $(OBJTREE)/include/spl-autoconf.mk 6039bc12ddSJoel Fernandeselse 6139bc12ddSJoel Fernandes# Include normal autoconf 62c4e5f52aSWolfgang Denksinclude $(OBJTREE)/include/autoconf.mk 6339bc12ddSJoel Fernandesendif 643aa29de0SYing Zhangendif 655e987ddfSJoakim Tjernlundsinclude $(OBJTREE)/include/config.mk 66c4e5f52aSWolfgang Denk 6703b7004dSPeter Tyser# Some architecture config.mk files need to know what CPUDIR is set to, 6803b7004dSPeter Tyser# so calculate CPUDIR before including ARCH/SOC/CPU config.mk files. 698d1f2682SPeter Tyser# Check if arch/$ARCH/cpu/$CPU exists, otherwise assume arch/$ARCH/cpu contains 708d1f2682SPeter Tyser# CPU-specific code. 718d1f2682SPeter TyserCPUDIR=arch/$(ARCH)/cpu/$(CPU) 728d1f2682SPeter Tyserifneq ($(SRCTREE)/$(CPUDIR),$(wildcard $(SRCTREE)/$(CPUDIR))) 738d1f2682SPeter TyserCPUDIR=arch/$(ARCH)/cpu 748d1f2682SPeter Tyserendif 7503b7004dSPeter Tyser 76ea0364f1SPeter Tysersinclude $(TOPDIR)/arch/$(ARCH)/config.mk # include architecture dependend rules 7703b7004dSPeter Tysersinclude $(TOPDIR)/$(CPUDIR)/config.mk # include CPU specific rules 7803b7004dSPeter Tyser 79c4e5f52aSWolfgang Denkifdef SOC 8003b7004dSPeter Tysersinclude $(TOPDIR)/$(CPUDIR)/$(SOC)/config.mk # include SoC specific rules 81c4e5f52aSWolfgang Denkendif 82c4e5f52aSWolfgang Denkifdef VENDOR 83c4e5f52aSWolfgang DenkBOARDDIR = $(VENDOR)/$(BOARD) 84c4e5f52aSWolfgang Denkelse 85c4e5f52aSWolfgang DenkBOARDDIR = $(BOARD) 86c4e5f52aSWolfgang Denkendif 87c4e5f52aSWolfgang Denkifdef BOARD 88c4e5f52aSWolfgang Denksinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk # include board specific rules 89c4e5f52aSWolfgang Denkendif 90c4e5f52aSWolfgang Denk 91c4e5f52aSWolfgang Denk######################################################################### 92c4e5f52aSWolfgang Denk 93e2211743SwdenkRELFLAGS= $(PLATFORM_RELFLAGS) 9483b7e2a7SScott Wood 956dd652faSwdenkOBJCFLAGS += --gap-fill=0xff 96e2211743Swdenk 972b3c9d3dSMasahiro YamadaCPPFLAGS = $(KBUILD_CPPFLAGS) $(RELFLAGS) 98c8f9c302SDaniel Schwierzeck 99c8f9c302SDaniel Schwierzeck# Enable garbage collection of un-used sections for SPL 100c8f9c302SDaniel Schwierzeckifeq ($(CONFIG_SPL_BUILD),y) 101c8f9c302SDaniel SchwierzeckCPPFLAGS += -ffunction-sections -fdata-sections 102c8f9c302SDaniel SchwierzeckLDFLAGS_FINAL += --gc-sections 103c8f9c302SDaniel Schwierzeckendif 104c8f9c302SDaniel Schwierzeck 10514d0a02aSWolfgang Denkifneq ($(CONFIG_SYS_TEXT_BASE),) 10614d0a02aSWolfgang DenkCPPFLAGS += -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE) 107161b2af4SMike Frysingerendif 108f9328639SMarian Balakowicz 109c8f9c302SDaniel Schwierzeckifeq ($(CONFIG_SPL_BUILD),y) 110c8f9c302SDaniel SchwierzeckCPPFLAGS += -DCONFIG_SPL_BUILD 1113aa29de0SYing Zhangifeq ($(CONFIG_TPL_BUILD),y) 1123aa29de0SYing ZhangCPPFLAGS += -DCONFIG_TPL_BUILD 1133aa29de0SYing Zhangendif 114c8f9c302SDaniel Schwierzeckendif 115c8f9c302SDaniel Schwierzeck 1165c1a7ea6SSimon Glass# Does this architecture support generic board init? 1175c1a7ea6SSimon Glassifeq ($(__HAVE_ARCH_GENERIC_BOARD),) 1185c1a7ea6SSimon Glassifneq ($(CONFIG_SYS_GENERIC_BOARD),) 119fada9e20SSimon GlassCHECK_GENERIC_BOARD = $(error Your architecture does not support generic board. \ 120fada9e20SSimon GlassPlease undefined CONFIG_SYS_GENERIC_BOARD in your board config file) 1215c1a7ea6SSimon Glassendif 1225c1a7ea6SSimon Glassendif 1235c1a7ea6SSimon Glass 124*fea1ca8eSMasahiro YamadaCPPFLAGS += $(UBOOTINCLUDE) 125*fea1ca8eSMasahiro YamadaCPPFLAGS += $(NOSTDINC_FLAGS) -pipe $(PLATFORM_CPPFLAGS) 126e2211743Swdenk 1272b3c9d3dSMasahiro YamadaCFLAGS := $(KBUILD_CFLAGS) $(CPPFLAGS) 1284a30f1e8STom Rini 1295c2aeac5SSimon GlassBCURDIR = $(subst $(SRCTREE)/,,$(CURDIR:$(obj)%=%)) 1305c2aeac5SSimon Glass 1315c2aeac5SSimon Glassifeq ($(findstring examples/,$(BCURDIR)),) 1325c2aeac5SSimon Glassifeq ($(CONFIG_SPL_BUILD),) 1335c2aeac5SSimon Glassifdef FTRACE 1345c2aeac5SSimon GlassCFLAGS += -finstrument-functions -DFTRACE 1355c2aeac5SSimon Glassendif 1365c2aeac5SSimon Glassendif 1375c2aeac5SSimon Glassendif 1385c2aeac5SSimon Glass 1392b3c9d3dSMasahiro YamadaAFLAGS := $(KBUILD_AFLAGS) $(CPPFLAGS) 140e2211743Swdenk 1418aba9dceSNobuhiro IwamatsuLDFLAGS += $(PLATFORM_LDFLAGS) 1426dc1ecebSHaiying WangLDFLAGS_FINAL += -Bstatic 1438aba9dceSNobuhiro Iwamatsu 1446dc1ecebSHaiying WangLDFLAGS_u-boot += -T $(obj)u-boot.lds $(LDFLAGS_FINAL) 14514d0a02aSWolfgang Denkifneq ($(CONFIG_SYS_TEXT_BASE),) 1468aba9dceSNobuhiro IwamatsuLDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE) 147161b2af4SMike Frysingerendif 148e2211743Swdenk 1493aa29de0SYing ZhangLDFLAGS_$(SPL_BIN) += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL) 150c8f9c302SDaniel Schwierzeckifneq ($(CONFIG_SPL_TEXT_BASE),) 1513aa29de0SYing ZhangLDFLAGS_$(SPL_BIN) += -Ttext $(CONFIG_SPL_TEXT_BASE) 152c8f9c302SDaniel Schwierzeckendif 153c8f9c302SDaniel Schwierzeck 154e2211743Swdenk######################################################################### 155e2211743Swdenk 15614d0a02aSWolfgang Denkexport CONFIG_SYS_TEXT_BASE PLATFORM_CPPFLAGS PLATFORM_RELFLAGS CPPFLAGS CFLAGS AFLAGS 157