# Copyright Statement: # # This software/firmware and related documentation ("MediaTek Software") are # protected under relevant copyright laws. The information contained herein # is confidential and proprietary to MediaTek Inc. and/or its licensors. # Without the prior written permission of MediaTek inc. and/or its licensors, # any reproduction, modification, use or disclosure of MediaTek Software, # and information contained herein, in whole or in part, shall be strictly prohibited. # # MediaTek Inc. (C) 2011. All rights reserved. # # BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES # THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") # RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON # AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT. # NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE # SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR # SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH # THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES # THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES # CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK # SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR # STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND # CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE, # AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE, # OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO # MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. # # The following software/firmware and/or related documentation ("MediaTek Software") # have been modified by MediaTek Inc. All revisions are subject to any receiver's # applicable license agreements with MediaTek Inc. # Compatible with Ubuntu 12.04 SHELL := /bin/bash .DELETE_ON_ERROR: all: HOST_OS ?= $(shell uname | tr '[A-Z]' '[a-z]') ############################################################## # Including Neccesary Files # ifndef PRELOADER_OUT PRELOADER_OUT := . endif ifndef MTK_PROJECT $(error MTK_PROJECT is not defined) else export MTK_PROJECT endif ############################################################## # Secure Library Building Control # export CREATE_SEC_LIB := FALSE export STANDALONE_SEC_DEVINFO := TRUE export CREATE_DEVINFO_LIB := FALSE ############################################################## # Variable Initialization # export D_ROOT := $(CURDIR) export MTK_ROOT_OUT := $(CURDIR) export PWD := $(CURDIR) ALL ?= show_title show_internal_feature show_feature ALL_PREGEN_FILE := export MTK_ROOT_CUSTOM := $(D_ROOT)/custom PROJECT_CONFIGS := $(MTK_ROOT_CUSTOM)/$(MTK_PROJECT)/$(MTK_PROJECT).mk include $(PROJECT_CONFIGS) ifndef TARGET $(error TARGET is not defined) else export TARGET endif export MTK_PATH_CUSTOM := $(MTK_ROOT_CUSTOM)/$(TARGET) ifndef MTK_PLATFORM $(error MTK_PLATFORM is not defined) else export MTK_PLATFORM PLATFORM := $(shell echo $(MTK_PLATFORM) | tr A-Z a-z) endif export MTK_PATH_PLATFORM := $(D_ROOT)/platform/$(PLATFORM) export MTK_PATH_COMMON := $(D_ROOT)/platform/common export MTK_PATH_PAL := $(D_ROOT)/platform/pal export INCLUDE_FILE_COMMON := -I$(MTK_PATH_COMMON)/inc \ -I$(MTK_PATH_COMMON)/geniezone/inc \ -I$(MTK_PATH_PAL)/inc \ -I$(PRELOADER_OUT)/inc \ -I$(MTK_PATH_PLATFORM)/src/init/inc \ -I$(MTK_PATH_PLATFORM)/src/core/inc \ -I$(MTK_PATH_PLATFORM)/src/drivers/inc \ -I$(MTK_PATH_PLATFORM)/src/security/inc \ -I$(MTK_PATH_PLATFORM)/src/security/trustzone/inc \ -I$(MTK_ROOT_CUSTOM)/$(PLATFORM)/drdi # # Image Auth # CUSTOM_PATH := $(MTK_PATH_CUSTOM)/security IMAGE_AUTH_CFG_FILE := ${PRELOADER_OUT}/inc/KEY_IMAGE_AUTH.h #IMAGE_AUTH_CONFIG_PATH := ${CUSTOM_PATH}/image_auth IMAGE_AUTH_CONFIG_PATH := ${CUSTOM_PATH}/image_auth IMAGE_AUTH_KEY := ${IMAGE_AUTH_CONFIG_PATH}/IMG_AUTH_KEY.ini IMAGE_AUTH_CFG := ${IMAGE_AUTH_CONFIG_PATH}/IMG_AUTH_CFG.ini IMAGE_AUTH_KEY_EXIST := $(if $(wildcard $(IMAGE_AUTH_KEY)),TRUE,FALSE) ifeq ("$(IMAGE_AUTH_KEY_EXIST)","TRUE") ALL += img_auth_info ALL_PREGEN_FILE += $(IMAGE_AUTH_CFG_FILE) endif CHIP_CONFIG_PATH := $(CUSTOM_PATH)/chip_config GFH_PATH := $(CHIP_CONFIG_PATH)/s/gfh CONFIG_PATH := $(CHIP_CONFIG_PATH)/s/cfg KEY_PATH := $(CHIP_CONFIG_PATH)/s/key ifneq ($(wildcard $(CONFIG_PATH)/PADDING_TYPE.ini),) PADDING_TYPE := $(shell cat $(CONFIG_PATH)/PADDING_TYPE.ini) endif # # preloader extension # PRELOADER_EXT_BIN := $(MTK_ROOT_CUSTOM)/$(PLATFORM)/preloader/preloader_ext.bin PRELOADER_EXT_BIN_EXIST := $(if $(wildcard $(PRELOADER_EXT_BIN)),TRUE,FALSE) # # Tool # EFUSE_PY_FILE := tools/efuse/efuse_bingen_v2.py EFUSE_PY_DEF := tools/efuse/$(MTK_PLATFORM)/efuse_definition.xml EFUSE_INPUT_FILE := $(D_ROOT)/../../../../../../vendor/mediatek/proprietary/custom/$(TARGET)/security/efuse/input.xml EFUSE_IMAGE_NAME := efuse_$(MTK_PROJECT).img TOOL_PATH ?= $(D_ROOT)/../../../../../../device/mediatek/build/build/tools ifeq ($(HOST_OS),darwin) SIGN_TOOL := tools/signtool/SignTool_PL.darwin CIPHER_TOOL := tools/ciphertool/CipherTool.darwin else SIGN_TOOL := tools/signtool/SignTool_PL CIPHER_TOOL := tools/ciphertool/CipherTool endif ifdef PL_MODE PL_IMAGE_NAME := preloader_$(MTK_PROJECT)_$(PL_MODE) else PL_IMAGE_NAME := preloader_$(MTK_PROJECT) endif SEC_LIB := $(MTK_PATH_PLATFORM)/lib/libsec.a SEC_PLAT_LIB := $(MTK_PATH_PLATFORM)/lib/libsecplat.a CRYPTO_LIB := $(MTK_PATH_PLATFORM)/lib/libcrypto.a DEVINFO_LIB := $(MTK_PATH_PLATFORM)/lib/libdevinfo.a DEVINFO_DEBUG_LIB := $(MTK_PATH_PLATFORM)/lib/libdevinfo_debug.a HW_CRYPTO_LIB := $(MTK_PATH_PLATFORM)/src/HwCryptoLib.a PICACHU_LIB := $(MTK_PATH_PLATFORM)/src/PicachuLib.a ALL += build_info project_info ALL_PREGEN_FILE += $(PRELOADER_OUT)/inc/preloader.h $(PRELOADER_OUT)/inc/proj_cfg.h COMMON_DIR_MK := $(D_ROOT)/build/common-dir.mak COMMON_FILE_MK := $(D_ROOT)/build/common.mak export COMMON_DIR_MK COMMON_FILE_MK SUBDIRS := $(MTK_PATH_PLATFORM)/src/ $(MTK_PATH_CUSTOM)/ $(MTK_PATH_COMMON)/ $(MTK_PATH_PAL)/ ifeq ($(CREATE_SEC_LIB),TRUE) ALL += $(SEC_LIB) $(CRYPTO_LIB) $(SEC_PLAT_LIB) ifeq ($(STANDALONE_SEC_DEVINFO),TRUE) ALL += $(DEVINFO_LIB) $(DEVINFO_DEBUG_LIB) endif endif ifeq ($(CREATE_DEVINFO_LIB),TRUE) ALL += $(DEVINFO_LIB) $(DEVINFO_DEBUG_LIB) endif ALL += preloader_bin ALL += dump_build_info include build/debug.in build/setting.in include $(MTK_PATH_PLATFORM)/makefile.mak export EMIGEN_OUT := $(PRELOADER_OUT) export DRVGEN_OUT := $(PRELOADER_OUT) export PTGEN_OUT := $(PRELOADER_OUT) include tools/emigen/emigen.mk include tools/drvgen/drvgen.mk -include tools/ptgen/$(MTK_PLATFORM)/ptgen.mk ALL_PREGEN_FILE += $(EMIGEN_FILE_LIST) ALL_PREGEN_FILE += $(DRVGEN_FILE_LIST) ALL_PREGEN_FILE += $(PTGEN_FILE_LIST) export ALL_DEPENDENCY_FILE := $(foreach m,$(MAKEFILE_LIST),$(if $(filter /% ~%,$(m)),$(m),$(D_ROOT)/$(m))) .PHONY: clean .PHONY: $(ALL) all: $(ALL) ######### # recursive # # $(1): subdir # $(2): target flag # $(3): dependency define build-topdirs $(2): $(3) FORCE @mkdir -p $$(dir $$@) $$(MAKE) -C $(1) --no-print-directory endef .PHONY: FORCE FORCE: SUBDIRS_FLAGS := $(foreach d,$(SUBDIRS),\ $(eval r := $(patsubst $(D_ROOT)/%,%,$(patsubst %/,%,$(if $(filter /%,$(d)),,$(CURDIR)/)$(d))))\ $(eval t := $(PRELOADER_OUT)/obj/$(subst /,_,$(r)).flag)\ $(eval $(call build-topdirs,$(d),$(t),$(ALL_PREGEN_FILE)))\ $(eval SUBDIRS_FLAGS += $(t))\ ) ############################################################## # ELF Generation # CFG_PRELOADER_EXT_COMMON_BUILD := 0 ifeq ($(CFG_PRELOADER_EXTENSION), 1) ifeq ($(CREATE_SEC_LIB),FALSE) CFG_PRELOADER_EXT_COMMON_BUILD := 1 endif endif ifeq ($(CFG_PRELOADER_EXT_COMMON_BUILD), 1) SECLIB2OBJ_TOOL := tools/efuse/seclib2obj_convertor.py SECLIB_OBJ_LIST_FILE := $(PRELOADER_OUT)/seclib_obj_list.txt DEVINFO_OBJ_DIR := $(PRELOADER_OUT)/obj/libdevinfo_obj else SECLIB2OBJ_TOOL := SECLIB_OBJ_LIST_FILE := DEVINFO_OBJ_DIR := endif ifeq ($(CFG_PRELOADER_DRAM_USE), 1) PL_IMG_SECOND_PARTION_SECTION :=.pl_dram.text .pl_dram.data .pl_dram.rodata .pl_dram.start OBJONCHIP_FLAG := $(addprefix -R , $(PL_IMG_SECOND_PARTION_SECTION)) OBJSECOND_FLAG := $(addprefix -j , $(PL_IMG_SECOND_PARTION_SECTION)) PL_DRAM_IMAGE_NAME := $(PL_IMAGE_NAME)_dram PL_DRAM_HDRBIN_PATH := $(D_BIN)/hd_$(PL_DRAM_IMAGE_NAME).bin LDSCRIPT := $(D_BIN)/$(MTK_PROJECT)_gen.ld else OBJONCHIP_FLAG := OBJSECOND_FLAG := PL_DRAM_IMAGE_NAME := PL_DRAM_HDRBIN_PATH := endif ifdef CFG_TEE_DRAM_SIZE PL_DRAM_RESERVE_SIZE := $(CFG_TEE_DRAM_SIZE) else PL_DRAM_RESERVE_SIZE := 0 endif ifdef CFG_PRELOADER_DRAM_USE ifeq ($(CFG_PRELOADER_DRAM_USE), 1) $(LDSCRIPT): $(LDSCRIPT_DRAM) $(LDSCRIPT): $(ALL_DEPENDENCY_FILE) @echo generating $@ $(MKDIR) sed "s/%CFG_DRAM_SIZE%/$(CFG_DRAM_SIZE)/;s/%EXT_PRELOAER_DRAMSIZE%/$(EXT_PRELOAER_DRAMSIZE)/;s/%PL_DRAM_RESERVE_SIZE%/$(PL_DRAM_RESERVE_SIZE)/" < $< > $@ endif endif ifeq ($(CFG_PRELOADER_EXTENSION), 1) MKIMAGE := tools/mkimage/mkimage LOADER_EXT_NAME := loader_ext LOADER_EXT_ETC_HEADER_CFG := loader_ext_etc_hdr.cfg LOADER_EXT_DRAM_HEADER_CFG := loader_ext_dram_hdr.cfg endif #($(CFG_PRELOADER_EXTENSION), 1) ifneq ($(wildcard $(CONFIG_PATH)/PBP_PY_SUPPORT),) PBP_TOOL := tools/pbp/pbp.py BIN_TO_TXT_TOOL := tools/pbp/bin2txt.py CHIP_KEY := $(KEY_PATH)/pl_key.ini else ifeq ($(HOST_OS),darwin) PBP_TOOL := tools/pbp/PBP.darwin else PBP_TOOL := tools/pbp/PBP endif CHIP_CONFIG := $(CONFIG_PATH)/CHIP_CONFIG.ini CHIP_KEY := $(KEY_PATH)/CHIP_TEST_KEY.ini endif preloader_bin: $(D_BIN)/$(PL_IMAGE_NAME).bin $(PRELOADER_OUT)/report-codesize.csv $(PRELOADER_OUT)/codesize_profiling.csv ifeq ($(MTK_EFUSE_WRITER_SUPPORT),yes) preloader_bin: $(D_BIN)/efuse.img endif $(D_BIN)/keyhash.bin: $(PBP_TOOL) $(KEY_PATH)/root_prvk.pem ifneq (,$(findstring legacy,$(PADDING_TYPE))) PYTHONDONTWRITEBYTECODE=True python $(PBP_TOOL) -j $(KEY_PATH)/root_prvk.pem -func keyhash_legacy -o $@ else PYTHONDONTWRITEBYTECODE=True python $(PBP_TOOL) -j $(KEY_PATH)/root_prvk.pem -func keyhash_pss -o $@ endif $(D_BIN)/keyhash.txt: $(D_BIN)/keyhash.bin $(BIN_TO_TXT_TOOL) $(PBP_TOOL) $(CHIP_KEY) ifneq ($(wildcard $(CONFIG_PATH)/PBP_PY_SUPPORT),) python $(BIN_TO_TXT_TOOL) $< $@ else $(PBP_TOOL) -func keyhash -i $(CHIP_KEY) -o $@ endif $(D_BIN)/$(EFUSE_IMAGE_NAME): $(D_BIN)/keyhash.txt $(EFUSE_PY_FILE) $(EFUSE_INPUT_FILE) $(EFUSE_PY_DEF) rm -rf $(PRELOADER_OUT)/efuse_bingen.log python $(EFUSE_PY_FILE) -f $(EFUSE_INPUT_FILE) -d $(EFUSE_PY_DEF) -k $< -o $@ -l $(PRELOADER_OUT)/efuse_bingen.log rm -rf $(D_BIN)/keyhash.txt $(D_BIN)/efuse.img: $(D_BIN)/$(EFUSE_IMAGE_NAME) ifeq ($(MTK_EFUSE_WRITER_SUPPORT),yes) rm -rf $@ cp -f $< $@ endif $(D_BIN)/$(PL_IMAGE_NAME).elf: $(SUBDIRS_FLAGS) $(LDSCRIPT) $(D_BIN)/$(PL_IMAGE_NAME).elf: $(wildcard $(PICACHU_LIB)) $(SEC_LIB) $(CRYPTO_LIB) $(SEC_PLAT_LIB) $(wildcard $(HW_CRYPTO_LIB)) $(wildcard $(DEVINFO_LIB)) $(wildcard $(DEVINFO_DEBUG_LIB)) $(D_BIN)/$(PL_IMAGE_NAME).elf: $(ALL_DEPENDENCY_FILE) @mkdir -p $(dir $@) ifeq ($(CFG_PRELOADER_EXT_COMMON_BUILD), 1) rm -rf $(DEVINFO_OBJ_DIR) mkdir -p $(DEVINFO_OBJ_DIR) $(AR) -t $(DEVINFO_LIB) | grep "\.o" > $(SECLIB_OBJ_LIST_FILE) python $(SECLIB2OBJ_TOOL) -b $(SECLIB_OBJ_LIST_FILE) -r $(D_ROOT) -p $(DEVINFO_OBJ_DIR) -s $(DEVINFO_LIB) -t $(PRELOADER_OUT) rm -rf $(SECLIB_OBJ_LIST_FILE) $(LD) --gc-sections -Bstatic -T$(LDSCRIPT) \ `cat $(PRELOADER_OUT)/obj/*.flag | tr ' ' '\n' | grep "\.o$$" | LC_COLLATE=C sort` \ $(wildcard $(PICACHU_LIB)) \ --start-group \ $(SEC_LIB) \ $(CRYPTO_LIB) \ $(SEC_PLAT_LIB) \ $(DEVINFO_OBJ_DIR)/*.o \ $(wildcard $(DEVINFO_DEBUG_LIB)) \ $(wildcard $(HW_CRYPTO_LIB)) \ --end-group \ -Map $(PRELOADER_OUT)/system.map -o $(D_BIN)/$(PL_IMAGE_NAME).elf rm -rf $(DEVINFO_OBJ_DIR) else $(LD) --gc-sections -Bstatic -T$(LDSCRIPT) \ `cat $(PRELOADER_OUT)/obj/*.flag | tr ' ' '\n' | grep "\.o$$" | LC_COLLATE=C sort` \ $(wildcard $(PICACHU_LIB)) \ --start-group \ $(SEC_LIB) \ $(CRYPTO_LIB) \ $(SEC_PLAT_LIB) \ $(wildcard $(DEVINFO_LIB)) \ $(wildcard $(DEVINFO_DEBUG_LIB)) \ $(wildcard $(HW_CRYPTO_LIB)) \ --end-group \ -Map $(PRELOADER_OUT)/system.map -o $(D_BIN)/$(PL_IMAGE_NAME).elf endif $(D_BIN)/preloader.elf: $(D_BIN)/$(PL_IMAGE_NAME).elf $(OBJCOPY) -R .dram $(D_BIN)/$(PL_IMAGE_NAME).elf -O elf32-littlearm $(D_BIN)/preloader.elf ifeq ($(CFG_PRELOADER_DRAM_USE), 1) preloader_bin: $(D_BIN)/$(PL_DRAM_IMAGE_NAME).bin $(D_BIN)/$(PL_DRAM_IMAGE_NAME).bin: $(D_BIN)/$(PL_IMAGE_NAME).elf $(hide) $(OBJCOPY) $(OBJCFLAGS) $(OBJSECOND_FLAG) $(D_BIN)/$(PL_IMAGE_NAME).elf -O binary $(D_BIN)/$(PL_DRAM_IMAGE_NAME).bin endif $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: $(D_BIN)/$(PL_IMAGE_NAME).elf ifeq ($(PRELOADER_EXT_BIN_EXIST),TRUE) $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: $(PRELOADER_EXT_BIN) endif $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: $(PRELOADER_OUT)/MTK_Loader_Info.tag $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: zero_padding.sh $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: $(PRELOADER_OUT)/report-objsize.txt $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: $(PRELOADER_OUT)/report-codesize.txt $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: $(PRELOADER_OUT)/function.map ifeq ($(CFG_PRELOADER_DRAM_USE), 1) $(hide) $(OBJCOPY) $(OBJCFLAGS) $(OBJONCHIP_FLAG) $(D_BIN)/$(PL_IMAGE_NAME).elf -O binary $@ else ifeq ($(CFG_PRELOADER_EXTENSION), 1) # loader_ext_etc $(hide) $(OBJCOPY) $(OBJCFLAGS) -j .loader_ext_etc $(D_BIN)/$(PL_IMAGE_NAME).elf -O binary $(D_BIN)/$(PL_IMAGE_NAME)_ETC_NO_HDR.bin $(hide) $(MKIMAGE) $(D_BIN)/$(PL_IMAGE_NAME)_ETC_NO_HDR.bin $(MTK_PATH_PLATFORM)/$(LOADER_EXT_ETC_HEADER_CFG) > $(D_BIN)/$(PL_IMAGE_NAME)_ETC.bin # loader_ext_dram $(hide) $(OBJCOPY) $(OBJCFLAGS) -j .loader_ext_dram $(D_BIN)/$(PL_IMAGE_NAME).elf -O binary $(D_BIN)/$(PL_IMAGE_NAME)_DRAM_NO_HDR.bin $(hide) $(MKIMAGE) $(D_BIN)/$(PL_IMAGE_NAME)_DRAM_NO_HDR.bin $(MTK_PATH_PLATFORM)/$(LOADER_EXT_DRAM_HEADER_CFG) > $(D_BIN)/$(PL_IMAGE_NAME)_DRAM.bin # loader_ext.img = loader_ext_dram + loader_ext_etc cp $(D_BIN)/$(PL_IMAGE_NAME)_DRAM.bin $(D_BIN)/$(LOADER_EXT_NAME).img cat $(D_BIN)/$(PL_IMAGE_NAME)_ETC.bin >> $(D_BIN)/$(LOADER_EXT_NAME).img $(hide) $(OBJCOPY) $(OBJCFLAGS) -R .loader_ext_etc -R .loader_ext_dram $(D_BIN)/$(PL_IMAGE_NAME).elf -O binary $@ else # original flow $(hide) $(OBJCOPY) $(OBJCFLAGS) $(D_BIN)/$(PL_IMAGE_NAME).elf -O binary $@ endif #($(CFG_PRELOADER_EXTENSION), 1) endif ifeq ("$(PRELOADER_EXT_BIN_EXIST)","TRUE") cat $(PRELOADER_EXT_BIN) >> $@ endif ./zero_padding.sh $@ 4 ./alignment_check.sh $(PRELOADER_OUT)/MTK_Loader_Info.tag 4 cat $(PRELOADER_OUT)/MTK_Loader_Info.tag >> $@ $(PRELOADER_OUT)/report-codesize.txt: $(D_BIN)/$(PL_IMAGE_NAME).elf $(CROSS_COMPILE)readelf -s $(D_BIN)/$(PL_IMAGE_NAME).elf | awk -F':' '/Num/ {print $$2}' > $@ $(CROSS_COMPILE)readelf -s $(D_BIN)/$(PL_IMAGE_NAME).elf | awk -F':' '{if ($$1>0) print $$2}' | awk -F' ' '{if ($$2>0) print $$0}' | sort -k1 >> $@ $(PRELOADER_OUT)/report-codesize.csv: $(PRELOADER_OUT)/report-codesize.txt cat $(PRELOADER_OUT)/report-codesize.txt | sed 's/[ ]+/,/g' > $@ $(PRELOADER_OUT)/report-objsize.txt: $(D_BIN)/$(PL_IMAGE_NAME).elf $(CROSS_COMPILE)size `ls $(PRELOADER_OUT)/obj/*.o` > $@ $(PRELOADER_OUT)/codesize_profiling.csv: $(D_BIN)/$(PL_IMAGE_NAME).elf $(PRELOADER_OUT)/codesize_profiling.csv: codesize_profiling.sh ./codesize_profiling.sh $(PRELOADER_OUT)/system.map $@ ############################################################## # Security Library Generation # ifeq ($(CREATE_SEC_LIB),TRUE) $(SEC_LIB): $(SUBDIRS_FLAGS) rm -rf $@ @echo AR $(PRELOADER_OUT)/out/*.o $(AR) -r $@ $(PRELOADER_OUT)/out/*.o @echo ================================================================= @echo Security Library Common @echo '$@' built at @echo time : $(shell date) @echo ================================================================= $(CRYPTO_LIB): $(SUBDIRS_FLAGS) rm -rf $@ @echo AR $(PRELOADER_OUT)/out_crypto/*.o $(AR) -r $@ $(PRELOADER_OUT)/out_crypto/*.o @echo ================================================================= @echo Crypto Library @echo '$@' built at @echo time : $(shell date) @echo ================================================================= $(SEC_PLAT_LIB): $(SUBDIRS_FLAGS) rm -rf $@ @echo AR $(PRELOADER_OUT)/out_plat/*.o $(AR) -r $@ $(PRELOADER_OUT)/out_plat/*.o @echo ================================================================= @echo Security Library Platform @echo '$@' built at @echo time : $(shell date) @echo ================================================================= endif ifeq ($(CREATE_DEVINFO_LIB), TRUE) $(DEVINFO_LIB): $(SUBDIRS_FLAGS) rm -rf $@ @echo AR $(PRELOADER_OUT)/out_devinfo/*.o -$(AR) -r $@ $(PRELOADER_OUT)/out_devinfo/*.o @echo ================================================================= @echo Devinfo Security Library @echo '$@' built at @echo time : $(shell date) @echo ================================================================= $(DEVINFO_DEBUG_LIB): $(SUBDIRS_FLAGS) rm -rf $@ @echo AR $(PRELOADER_OUT)/out_devinfo_debug/*.o -$(AR) -r $@ $(PRELOADER_OUT)/out_devinfo_debug/*.o @echo ================================================================= @echo Devinfo Security Library Debug Version @echo '$@' built at @echo time : $(shell date) @echo ================================================================= endif ############################################################## # File for Debugging # $(PRELOADER_OUT)/function.map: $(D_BIN)/$(PL_IMAGE_NAME).elf $(NM) $< | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > $@ ############################################################## # Dump Configurations # show_title: @echo ================================================================= @echo Building Configuration: @echo Project = $(MTK_PROJECT) @echo Platform = $(MTK_PLATFORM) @echo Buildspec = buildspec.mak @echo Create SecLib = $(CREATE_SEC_LIB) @echo Image Auth key exist = $(IMAGE_AUTH_KEY_EXIST) @echo Preloader EXT exist = $(PRELOADER_EXT_BIN_EXIST) @echo SECRO AC support = $(MTK_SEC_SECRO_AC_SUPPORT) @echo ================================================================= show_internal_feature: @echo ================================================================= @echo Internal Feature: @echo HW_INIT_ONLY = $(HW_INIT_ONLY) @echo CFG_MDJTAG_SWITCH= $(CFG_MDJTAG_SWITCH) @echo CFG_MDMETA_DETECT= $(CFG_MDMETA_DETECT) @echo CFG_HW_WATCHDOG= $(CFG_HW_WATCHDOG) @echo CFG_APWDT= $(CFG_APWDT) @echo CFG_APWDT_DISABLE= $(CFG_APWDT_DISABLE) @echo CFG_MDWDT_DISABLE= $(CFG_MDWDT_DISABLE) @echo CFG_SYS_STACK_SZ= $(CFG_SYS_STACK_SZ) @echo CFG_MMC_ADDR_TRANS= $(CFG_MMC_ADDR_TRANS) @echo CFG_BOOT_ARGUMENT= $(CFG_BOOT_ARGUMENT) @echo CFG_RAM_CONSOLE= $(CFG_RAM_CONSOLE) @echo ================================================================= @echo MTK_PATH_PLATFORM= $(MTK_PATH_PLATFORM) @echo MTK_PATH_CUSTOM= $(MTK_PATH_CUSTOM) @echo MTK_ROOT_CUSTOM= $(MTK_ROOT_CUSTOM) @echo CUSTOM_PATH= $(CUSTOM_PATH) @echo ================================================================= show_feature: @if [ -e "$(MTK_PATH_CUSTOM)/cust_bldr.mak" ]; then \ echo =========================================== ; \ echo Platform Feature: ; \ echo 'CFG_FPGA_PLATFORM'= $(CFG_FPGA_PLATFORM) ; \ echo 'CFG_EVB_PLATFORM'= $(CFG_EVB_PLATFORM) ; \ echo 'CFG_BATTERY_DETECT'= $(CFG_BATTERY_DETECT) ; \ echo 'CFG_PMT_SUPPORT'= $(CFG_PMT_SUPPORT) ; \ echo =========================================== ; \ echo Communication Feature: ; \ echo 'CFG_UART_TOOL_HANDSHAKE'= $(CFG_UART_TOOL_HANDSHAKE) ; \ echo 'CFG_USB_TOOL_HANDSHAKE'= $(CFG_USB_TOOL_HANDSHAKE) ; \ echo 'CFG_USB_DOWNLOAD'= $(CFG_USB_DOWNLOAD) ; \ echo 'CFG_LOG_BAUDRATE'= $(CFG_LOG_BAUDRATE) ; \ echo 'CFG_META_BAUDRATE'= $(CFG_META_BAUDRATE) ; \ echo 'CFG_UART_LOG'= $(CFG_UART_LOG) ; \ echo 'CFG_UART_META'= $(CFG_UART_META) ; \ echo 'CFG_EMERGENCY_DL_SUPPORT'= $(CFG_EMERGENCY_DL_SUPPORT) ; \ echo 'CFG_EMERGENCY_DL_TIMEOUT_MS'= $(CFG_EMERGENCY_DL_TIMEOUT_MS) ; \ echo 'MTK_UART_USB_SWITCH'= $(MTK_UART_USB_SWITCH) ; \ echo =========================================== ; \ echo Image Loading: ; \ echo 'CFG_LOAD_UBOOT'= $(CFG_LOAD_UBOOT) ; \ echo 'CFG_LOAD_AP_ROM'= $(CFG_LOAD_AP_ROM) ; \ echo 'CFG_LOAD_MD_ROM'= $(CFG_LOAD_MD_ROM) ; \ echo 'CFG_LOAD_MD_RAMDISK'= $(CFG_LOAD_MD_RAMDISK) ; \ echo 'CFG_LOAD_CONN_SYS'= $(CFG_LOAD_CONN_SYS) ; \ echo 'CFG_UBOOT_MEMADDR'= $(CFG_UBOOT_MEMADDR) ; \ echo 'CFG_AP_ROM_MEMADDR'= $(CFG_AP_ROM_MEMADDR) ; \ echo 'CFG_MD1_ROM_MEMADDR'= $(CFG_MD1_ROM_MEMADDR) ; \ echo 'CFG_MD1_RAMDISK_MEMADDR'= $(CFG_MD1_RAMDISK_MEMADDR) ; \ echo 'CFG_MD2_ROM_MEMADDR'= $(CFG_MD2_ROM_MEMADDR) ; \ echo 'CFG_MD2_RAMDISK_MEMADDR'= $(CFG_MD2_RAMDISK_MEMADDR) ; \ echo 'CFG_CONN_SYS_MEMADDR'= $(CFG_CONN_SYS_MEMADDR) ; \ echo 'ONEKEY_REBOOT_NORMAL_MODE_PL'= $(ONEKEY_REBOOT_NORMAL_MODE_PL) ; \ echo 'KPD_USE_EXTEND_TYPE'= $(KPD_USE_EXTEND_TYPE) ; \ echo 'KPD_PMIC_LPRST_TD'= $(KPD_PMIC_LPRST_TD) ; \ echo 'MTK_PMIC_RST_KEY'= $(MTK_PMIC_RST_KEY) ; \ echo 'CFG_ATF_SUPPORT'= $(CFG_ATF_SUPPORT) ; \ echo 'CFG_ATF_LOG_SUPPORT'= $(CFG_ATF_LOG_SUPPORT) ; \ echo 'CFG_TEE_SUPPORT'= $(CFG_TEE_SUPPORT) ; \ echo 'CFG_TEE_VIRTUAL_RPMB_SUPPORT'= $(CFG_TEE_VIRTUAL_RPMB_SUPPORT) ; \ echo 'CFG_RPMB_SET_KEY'= $(CFG_RPMB_SET_KEY) ; \ echo 'CFG_TRUSTONIC_TEE_SUPPORT'= $(CFG_TRUSTONIC_TEE_SUPPORT) ; \ echo 'CFG_MICROTRUST_TEE_SUPPORT'= $(CFG_MICROTRUST_TEE_SUPPORT) ; \ echo 'CFG_MICROTRUST_TEE_LITE_SUPPORT'= $(CFG_MICROTRUST_TEE_LITE_SUPPORT) ; \ echo 'CFG_TRUSTKERNEL_TEE_SUPPORT'= $(CFG_TRUSTKERNEL_TEE_SUPPORT) ; \ echo 'CFG_TEE_SECURE_MEM_PROTECTED'= $(CFG_TEE_SECURE_MEM_PROTECTED) ; \ echo 'CFG_TEE_SECURE_MEM_TAG_FORMAT'= $(CFG_TEE_SECURE_MEM_TAG_FORMAT) ; \ echo 'CFG_TEE_SECURE_MEM_SHARED'= $(CFG_TEE_SECURE_MEM_SHARED) ; \ echo 'CFG_TEE_TRUSTED_APP_HEAP_SIZE'= $(CFG_TEE_TRUSTED_APP_HEAP_SIZE) ; \ echo 'CFG_RPMB_KEY_PROGRAMED_IN_KERNEL'= $(CFG_RPMB_KEY_PROGRAMED_IN_KERNEL) ; \ echo 'MTK_EFUSE_WRITER_SUPPORT'= $(MTK_EFUSE_WRITER_SUPPORT) ; \ echo 'CFG_GOOGLE_TRUSTY_SUPPORT'= $(CFG_GOOGLE_TRUSTY_SUPPORT) ; \ echo 'CFG_GZ_SUPPORT'= $(CFG_GZ_SUPPORT) ; \ echo 'CFG_GZ_NEED_DESCRAMBLE'= $(CFG_GZ_NEED_DESCRAMBLE) ; \ echo 'CFG_GZ_REMAP'= $(CFG_GZ_REMAP) ; \ echo 'CFG_NEBULA_VM_SUPPORT'= $(CFG_NEBULA_VM_SUPPORT) ; \ echo 'CFG_NEBULA_LOAD_IN_PART2'= $(CFG_NEBULA_LOAD_IN_PART2) ; \ echo 'CFG_GZ_PWRAP_ENABLE'= $(CFG_GZ_PWRAP_ENABLE) ; \ fi ############################################################## # Adding Build Time # build_info: $(PRELOADER_OUT)/inc/preloader.h $(PRELOADER_OUT)/inc/preloader.h: $(ALL_DEPENDENCY_FILE) @mkdir -p $(dir $@) @echo // Auto generated. Build Time Information > $@ @echo '#'define BUILD_TIME '"'$(shell date +%Y%m%d-%H%M%S)'"' >> $@ ############################################################## # Adding Project Configuration # project_info: $(PRELOADER_OUT)/inc/proj_cfg.h $(PRELOADER_OUT)/inc/proj_cfg.h: $(MTK_PATH_PLATFORM)/default.mak $(MTK_PATH_CUSTOM)/cust_bldr.mak $(PROJECT_CONFIGS) $(PRELOADER_OUT)/inc/proj_cfg.h: $(ALL_DEPENDENCY_FILE) @mkdir -p $(dir $@) @echo // Auto generated. Import ProjectConfig.mk > $@ @echo '#'define CUSTOM_SUSBDL_CFG $(MTK_SEC_USBDL) >> $@ @echo '#'define CUSTOM_SBOOT_CFG $(MTK_SEC_BOOT) >> $@ @echo '#'define MTK_SEC_MODEM_AUTH $(MTK_SEC_MODEM_AUTH) >> $@ ifdef MTK_SEC_SECRO_AC_SUPPORT @echo '#'define MTK_SEC_SECRO_AC_SUPPORT $(MTK_SEC_SECRO_AC_SUPPORT) >> $@ endif ############################################################## # Generate Key Info File # img_auth_info: $(IMAGE_AUTH_CFG_FILE) $(IMAGE_AUTH_CFG_FILE): $(SIGN_TOOL) $(IMAGE_AUTH_KEY) $(IMAGE_AUTH_CFG) $(IMAGE_AUTH_CFG_FILE): $(ALL_DEPENDENCY_FILE) @mkdir -p $(dir $@) @touch $@ @chmod 777 $@ $(SIGN_TOOL) $(IMAGE_AUTH_KEY) $(IMAGE_AUTH_CFG) $@ IMG ############################################################## # Clean # clean: @rm -rf $(PRELOADER_OUT)/obj @rm -rf $(PRELOADER_OUT)/inc @rm -rf $(PRELOADER_OUT)/bin @rm -rf $(PRELOADER_OUT)/out_crypto @rm -rf $(PRELOADER_OUT)/out_plat @rm -rf $(PRELOADER_OUT)/out_devinfo @rm -rf $(PRELOADER_OUT)/out_devinfo_debug @rm -rf $(PRELOADER_OUT)/out_hw_crypto_lib # # Encode Key # ifeq ($(HOST_OS),darwin) KEY_ENCODE_TOOL := tools/ke/KeyEncode.darwin else KEY_ENCODE_TOOL := tools/ke/KeyEncode endif #key_encode $(D_BIN)/KEY_ENCODED_PL: $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin | $(KEY_ENCODE_TOOL) $(KEY_ENCODE_TOOL) $< $@ @echo "$(KEY_ENCODE_TOOL) pass !!!!" ifdef SEC_ROM_INFO_V2 $(D_BIN)/$(PL_IMAGE_NAME)_NO_GFH.bin: $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin @echo "[ Load Chip Config. ]" @echo "============================================" @echo " : MTK_SEC_CHIP_SUPPORT - $(MTK_SEC_CHIP_SUPPORT)" cp -f $< $@ else $(D_BIN)/$(PL_IMAGE_NAME)_NO_GFH.bin: $(D_BIN)/KEY_ENCODED_PL @echo "[ Load Chip Config. ]" @echo "============================================" @echo " : MTK_SEC_CHIP_SUPPORT - $(MTK_SEC_CHIP_SUPPORT)" cp -f $< $@ endif ifneq ($(wildcard $(CONFIG_PATH)/PBP_PY_SUPPORT),) include bl_sign_v21.mak else ifneq ($(wildcard $(GFH_PATH)/GFH_CONFIG.ini),) include bl_sign_v11.mak else include bl_sign_v10.mak endif endif dump_build_info: $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin $(D_BIN)/$(PL_IMAGE_NAME).elf @echo "============================================" @echo "${MTK_PROJECT} preloader load" @echo "$(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin built at" @echo "time : $(shell date)" @echo "img size : `wc -c < $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin` byte" @echo "bss size : 0x`$(CROSS_COMPILE)readelf -SW $(D_BIN)/$(PL_IMAGE_NAME).elf | grep bss | awk '{if (NF==11) print $$6; else print $$7;}'` byte" @echo "dram size : 0x`$(CROSS_COMPILE)readelf -SW $(D_BIN)/$(PL_IMAGE_NAME).elf | grep dram | awk '{if (NF==11) print $$6; else print $$7;}'` byte" @echo ============================================