278 lines
8.3 KiB
Makefile
278 lines
8.3 KiB
Makefile
|
|
#
|
|
# Makefile for sunxi bootloader
|
|
# wangwei@allwinnertech.com
|
|
#
|
|
|
|
TOPDIR=$(CURDIR)
|
|
SRCTREE=$(TOPDIR)
|
|
|
|
#Q: quit for compile
|
|
Q = @
|
|
ifeq ("$(origin V)", "command line")
|
|
VERBOSE=$(V)
|
|
endif
|
|
ifndef VERBOSE
|
|
VERBOSE=0
|
|
endif
|
|
|
|
ifeq ($(VERBOSE),1)
|
|
Q=
|
|
CMD_ECHO_SILENT := true
|
|
else
|
|
CMD_ECHO_SILENT := echo
|
|
endif
|
|
|
|
#P: platform: sun50iw3p1/sun8iw15p1 etc.
|
|
PLATFORM=NULL
|
|
ifeq ("$(origin p)", "command line")
|
|
PLATFORM=$(p)
|
|
endif
|
|
|
|
|
|
#M: compile module: nand mmc nor etc.
|
|
MODULE=NULL
|
|
ifeq ("$(origin m)", "command line")
|
|
MODULE=$(m)
|
|
endif
|
|
|
|
#ddr: compile module: dd3/lpddr3/ddr4/lpddr4
|
|
MODULE=NULL
|
|
ifeq ("$(origin ddr)", "command line")
|
|
DRAM_TYPE=$(ddr)
|
|
DRAM_TYPE_NAME=_$(DRAM_TYPE)
|
|
endif
|
|
|
|
#'@':no echo, '-':error ignore, '\#':comment execution command
|
|
CP=@-\#
|
|
ifeq ("$(origin C)", "command line")
|
|
CP=@-cp -v
|
|
endif
|
|
|
|
ifeq ("$(origin b)", "command line")
|
|
BOARD=$(b)
|
|
endif
|
|
|
|
#get arch
|
|
buildconfig = ../../../.buildconfig
|
|
ifeq ($(buildconfig), $(wildcard $(buildconfig)))
|
|
LICHEE_BUSSINESS=$(shell cat $(buildconfig) | grep -w "LICHEE_BUSSINESS" | awk -F= '{printf $$2}')
|
|
LICHEE_CHIP_CONFIG_DIR=$(shell cat $(buildconfig) | grep -w "LICHEE_CHIP_CONFIG_DIR" | awk -F= '{printf $$2}')
|
|
LICHEE_IC=$(shell cat $(buildconfig) | grep -w "LICHEE_IC" | awk -F= '{printf $$2}')
|
|
LICHEE_PLAT_OUT=$(shell cat $(buildconfig) | grep -w "LICHEE_PLAT_OUT" | awk -F= '{printf $$2}')
|
|
LICHEE_BOARD=$(shell cat $(buildconfig) | grep -w "LICHEE_BOARD" | awk -F= '{printf $$2}')
|
|
else
|
|
# --------------- tina config -----------------
|
|
# longan & tina both exist LICHEE_CHIP_CONFIG_DIR
|
|
LICHEE_IC=$(TARGET_PLATFORM)
|
|
LICHEE_BOARD=$(TARGET_PLAN)
|
|
endif
|
|
export LICHEE_BUSSINESS LICHEE_CHIP_CONFIG_DIR LICHEE_IC LICHEE_PLAT_OUT LICHEE_BOARD
|
|
|
|
CPU ?= armv7
|
|
#check input param
|
|
MK_FILE_CHANGE := $(shell if [ x$(p) != x ]; then echo yes; else echo no; fi;)
|
|
#$(info MK_FILE_CHANGE=$(MK_FILE_CHANGE))
|
|
ifeq (x$(MK_FILE_CHANGE),xyes)
|
|
EXT_FILE_EXIST=$(shell if [ -f $(TOPDIR)/board/$(p)/common$(LICHEE_BOARD).mk ]; then echo yes; else echo no; fi;)
|
|
FILE_EXIST=$(shell if [ -f $(TOPDIR)/board/$(p)/common.mk ]; then echo yes; else echo no; fi;)
|
|
ifeq (x$(FILE_EXIST),xno)
|
|
$(info ***);
|
|
$(info ***configure plat or module not exist, Please run some configurator);
|
|
$(info ***e.g. make p=sun50iw3p1; make boot0);
|
|
$(info ***e.g. make p=sun50iw3p1; make sboot);
|
|
$(info ***e.g. make p=sun50iw3p1; make fes);
|
|
$(info ***e.g. copy spl file to spi-pub run then following command);
|
|
$(info ***e.g. make p=sun50iw3p1 C=1; make fes C=1)
|
|
$(info ***e.g. make p=sun8iw15p1 ddr=ddr3|lpddr3|ddr4|lpddr4; make boot0);
|
|
$(info ***e.g. make p=sun8iw15p1 ddr=ddr3|lpddr3|ddr4|lpddr4; make sboot);
|
|
$(info ***e.g. make p=sun8iw15p1 ddr=ddr3|lpddr3|ddr4|lpddr4; make fes);
|
|
$(info ***);
|
|
$(error exit);
|
|
endif
|
|
ifeq (x$(EXT_FILE_EXIST),xyes)
|
|
$(shell cp -f $(TOPDIR)/board/$(p)/common$(LICHEE_BOARD).mk $(TOPDIR)/.module.common.mk)
|
|
else
|
|
$(shell cp -f $(TOPDIR)/board/$(p)/common.mk $(TOPDIR)/.module.common.mk)
|
|
endif
|
|
BOARD_LIST=$(subst -,_,$(subst .,_,$(shell ls $(LICHEE_CHIP_CONFIG_DIR)/configs)))
|
|
TMP=$(subst -,_,$(subst .,_,$(LICHEE_BOARD)))
|
|
TMP_IC=$(subst -,_,$(subst .,_,$(LICHEE_IC)))
|
|
$(shell CNT=0; for TEMP_BOARD in ${BOARD_LIST} ;\
|
|
do CNT=`expr $${CNT} + 1`;\
|
|
echo CFG_$${TEMP_BOARD}=$${CNT} >> $(TOPDIR)/.module.common.mk;\
|
|
if [ "CFG_${TMP}" = "CFG_$${TEMP_BOARD}" ];\
|
|
then echo CFG_LICHEE_BOARD=$${CNT} >> $(TOPDIR)/.module.common.mk;fi;done)
|
|
$(shell sed -i '$$a\CFG_${TMP_IC}=1' $(TOPDIR)/.module.common.mk)
|
|
$(shell sed -i '$$a\DRAM_TYPE_NAME=$(DRAM_TYPE_NAME)' $(TOPDIR)/.module.common.mk)
|
|
endif
|
|
|
|
#include config file
|
|
include $(TOPDIR)/mk/config.mk
|
|
include $(TOPDIR)/mk/checkconf.mk
|
|
sinclude $(TOPDIR)/.module.common.mk
|
|
|
|
|
|
ifeq ($(shell echo ${LICHEE_BOARD} |grep -o fpga ),fpga)
|
|
CFG_FPGA_PLATFORM=y
|
|
export CFG_FPGA_PLATFORM
|
|
endif
|
|
|
|
|
|
CP_BOARD=$(filter $(BOARD), $(SUPPORT_BOARD))
|
|
ifeq (x$(CP_BOARD), x)
|
|
ifneq (x$(LICHEE_IC), x)
|
|
CP_BOARD=$(LICHEE_IC)
|
|
endif
|
|
ifeq (x$(CP_BOARD), x)
|
|
CP_BOARD=$(PLATFORM)
|
|
endif
|
|
endif
|
|
|
|
ifeq (x$(CPU), xriscv64)
|
|
#riscv
|
|
TOOLCHAIN_PATH:=riscv64-linux-x86_64-20200528
|
|
else
|
|
#arm
|
|
TOOLCHAIN_PATH:=gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi
|
|
endif
|
|
toolchain_check=$(shell if [ ! -d ../tools/toolchain/$(TOOLCHAIN_PATH) ]; then echo yes; else echo no; fi;)
|
|
ifeq (x$(toolchain_check), xyes)
|
|
$(info $(CPU)...);
|
|
$(info Prepare riscv toolchain ...);
|
|
$(shell mkdir -p ../tools/toolchain/$(TOOLCHAIN_PATH) || exit 1)
|
|
$(shell tar --strip-components=1 -xf ../tools/toolchain/$(TOOLCHAIN_PATH).tar.xz -C ../tools/toolchain/$(TOOLCHAIN_PATH) || exit 1)
|
|
endif
|
|
|
|
export Q SOC TOPDIR SRCTREE CMD_ECHO_SILENT MODULE PLATFORM DRAM_TYPE_NAME CP CPU CP_BOARD
|
|
|
|
#$(info platform=$(PLATFORM) module=$(MODULE))
|
|
|
|
define build-boot0-module-if-exist
|
|
@if [ x$(NAND_EXIST) = xyes ]; then \
|
|
$(MAKE) -C $(SRCTREE)/nboot nand; fi
|
|
@if [ x$(MMC_EXIST) = xyes ]; then \
|
|
$(MAKE) -C $(SRCTREE)/nboot mmc; fi
|
|
@if [ x$(SPINOR_EXIST) = xyes ]; then \
|
|
$(MAKE) -C $(SRCTREE)/nboot spinor; fi
|
|
endef
|
|
|
|
define update-commit-info
|
|
$(SRCTREE)/tools/generate_hash_header_file.sh > \
|
|
$(SRCTREE)/include/commit_info.h.tmp
|
|
$(call mv-if-changed,$(SRCTREE)/include/commit_info.h.tmp,$(SRCTREE)/include/commit_info.h)
|
|
$(CP) $(TOPDIR)/include/commit_info.h $(TOPDIR)/../spl-pub/board/$(CP_BOARD)
|
|
endef
|
|
|
|
MAKEFLAGS += --no-print-directory
|
|
|
|
NAND_EXIST:=$(shell if [ -f $(TOPDIR)/board/$(PLATFORM)/nand.mk ]; then echo yes; else echo no; fi;)
|
|
MMC_EXIST:=$(shell if [ -f $(TOPDIR)/board/$(PLATFORM)/mmc.mk ]; then echo yes; else echo no; fi;)
|
|
SPINOR_EXIST:=$(shell if [ -f $(TOPDIR)/board/$(PLATFORM)/spinor.mk ]; then echo yes; else echo no; fi;)
|
|
SBOOT_EXIST:=$(shell if [ -f $(TOPDIR)/board/$(PLATFORM)/sboot.mk ]; then echo yes; else echo no; fi;)
|
|
SBOOT_NOR_EXIST:=$(shell if [ -f $(TOPDIR)/board/$(PLATFORM)/sboot_nor.mk ]; then echo yes; else echo no; fi;)
|
|
ifeq (x$(MK_FILE_CHANGE),xyes)
|
|
#makefile is called to config platform, do nothing
|
|
all:
|
|
@echo "platform set to $(PLATFORM)"
|
|
@mkdir -p $(TOPDIR)/../spl-pub/board/$(CP_BOARD)
|
|
$(CP) $(TOPDIR)/board/$(PLATFORM)/*.mk $(TOPDIR)/../spl-pub/board/$(CP_BOARD)
|
|
$(CP) -rf $(TOPDIR)/include/* $(TOPDIR)/../spl-pub/include/
|
|
$(CP) -rf $(TOPDIR)/mk/* $(TOPDIR)/../spl-pub/mk/
|
|
$(CP) -rf $(TOPDIR)/arch/$(ARCH)/cpu/$(CPU)/*.lds $(TOPDIR)/arch/$(ARCH)/cpu/$(CPU)/*_entry.S $(TOPDIR)/../spl-pub/arch/$(ARCH)/cpu/$(CPU)/
|
|
$(CP) -rf $(SRCTREE)/fes/main/fes1_*.c $(TOPDIR)/../spl-pub/fes/main/
|
|
$(CP) -rf $(SRCTREE)/nboot/main/boot0_*.c $(TOPDIR)/../spl-pub/nboot/main/
|
|
$(CP) -rf $(SRCTREE)/sboot/main/sboot_main.c $(SRCTREE)/sboot/main/sboot_head.c $(TOPDIR)/../spl-pub/sboot/main/
|
|
$(CP) -rf $(TOPDIR)/solution $(TOPDIR)/../spl-pub/
|
|
else
|
|
all: mkdepend
|
|
$(MAKE) -C $(SRCTREE)/fes fes
|
|
$(call build-boot0-module-if-exist)
|
|
ifeq (x$(SBOOT_EXIST),xyes)
|
|
$(MAKE) -C $(SRCTREE)/sboot sboot
|
|
endif
|
|
ifeq (x$(SBOOT_NOR_EXIST),xyes)
|
|
$(MAKE) -C $(SRCTREE)/sboot sboot_nor
|
|
endif
|
|
endif
|
|
|
|
ifeq (x$(NAND_EXIST),xyes)
|
|
nand: mkdepend
|
|
$(MAKE) -C $(SRCTREE)/nboot nand
|
|
endif
|
|
ifeq (x$(MMC_EXIST),xyes)
|
|
mmc: mkdepend
|
|
$(MAKE) -C $(SRCTREE)/nboot mmc
|
|
endif
|
|
ifeq (x$(SPINOR_EXIST),xyes)
|
|
spinor: mkdepend
|
|
$(MAKE) -C $(SRCTREE)/nboot spinor
|
|
endif
|
|
|
|
|
|
|
|
fes: mkdepend
|
|
$(MAKE) -C $(SRCTREE)/fes fes
|
|
boot0: mkdepend
|
|
$(call build-boot0-module-if-exist)
|
|
ifeq (x$(SBOOT_EXIST),xyes)
|
|
sboot: mkdepend
|
|
$(MAKE) -C $(SRCTREE)/sboot sboot
|
|
endif
|
|
ifeq (x$(SBOOT_NOR_EXIST),xyes)
|
|
sboot_nor: mkdepend
|
|
$(MAKE) -C $(SRCTREE)/sboot sboot_nor
|
|
endif
|
|
|
|
offline_secure_spinor: mkdepend
|
|
$(MAKE) -C $(SRCTREE)/nboot $@
|
|
offline_secure_nand: mkdepend
|
|
$(MAKE) -C $(SRCTREE)/nboot $@
|
|
offline_secure_mmc: mkdepend
|
|
$(MAKE) -C $(SRCTREE)/nboot $@
|
|
|
|
simulate: mkdepend
|
|
$(MAKE) -C $(SRCTREE)/nboot $@
|
|
|
|
clean:
|
|
@find $(TOPDIR) -type f \
|
|
\( -name 'core' -o -name '*.bak' -o -name '*~' \
|
|
-o -name '*.o' -o -name '*.exe' -o -name '*.axf' \
|
|
-o -name '*.elf' \
|
|
-o -name '*.depend' \
|
|
-o -name '*.bin' \
|
|
-o -name '*.log' \
|
|
-o -name '*.map' \) -print \
|
|
| xargs rm -f
|
|
|
|
@rm -f $(TOPDIR)/nboot/boot0.lds
|
|
@rm -f $(TOPDIR)/fes/fes1.lds
|
|
@rm -f $(TOPDIR)/sboot/sboot.lds
|
|
@rm -f $(TOPDIR)/sboot/sboot_nor.lds
|
|
@rm -f $(TOPDIR)/autoconf.mk
|
|
|
|
distclean: clean
|
|
@rm -f $(TOPDIR)/include/config.h
|
|
@rm -f $(TOPDIR)/.module.common.mk
|
|
@rm -f $(cleanfiles)
|
|
|
|
mkdepend :
|
|
@if [ ! -f $(TOPDIR)/.module.common.mk ]; then \
|
|
rm -rf autoconf.mk; \
|
|
echo "***"; \
|
|
echo "*** Configuration file \".module.common.mk\" not found!"; \
|
|
echo "***"; \
|
|
echo "*** Please run some configurator (e.g. make p=sun50iw3p1)"; \
|
|
echo "***"; \
|
|
exit 1; \
|
|
fi;
|
|
$(call update-commit-info)
|
|
depend:
|
|
|
|
PHONY +=FORCE
|
|
FORCE:
|
|
.PHONY:$(PHONY)
|
|
|
|
|
|
|