Makefile 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687
  1. # Copyright Statement:
  2. #
  3. # This software/firmware and related documentation ("MediaTek Software") are
  4. # protected under relevant copyright laws. The information contained herein
  5. # is confidential and proprietary to MediaTek Inc. and/or its licensors.
  6. # Without the prior written permission of MediaTek inc. and/or its licensors,
  7. # any reproduction, modification, use or disclosure of MediaTek Software,
  8. # and information contained herein, in whole or in part, shall be strictly prohibited.
  9. #
  10. # MediaTek Inc. (C) 2011. All rights reserved.
  11. #
  12. # BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  13. # THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  14. # RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
  15. # AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  16. # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  17. # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  18. # NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  19. # SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  20. # SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
  21. # THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
  22. # THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
  23. # CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
  24. # SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
  25. # STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
  26. # CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  27. # AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  28. # OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
  29. # MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  30. #
  31. # The following software/firmware and/or related documentation ("MediaTek Software")
  32. # have been modified by MediaTek Inc. All revisions are subject to any receiver's
  33. # applicable license agreements with MediaTek Inc.
  34. # Compatible with Ubuntu 12.04
  35. SHELL := /bin/bash
  36. .DELETE_ON_ERROR:
  37. all:
  38. HOST_OS ?= $(shell uname | tr '[A-Z]' '[a-z]')
  39. ##############################################################
  40. # Including Neccesary Files
  41. #
  42. ifndef PRELOADER_OUT
  43. PRELOADER_OUT := .
  44. endif
  45. ifndef MTK_PROJECT
  46. $(error MTK_PROJECT is not defined)
  47. else
  48. export MTK_PROJECT
  49. endif
  50. ##############################################################
  51. # Secure Library Building Control
  52. #
  53. export CREATE_SEC_LIB := FALSE
  54. export STANDALONE_SEC_DEVINFO := TRUE
  55. export CREATE_DEVINFO_LIB := FALSE
  56. ##############################################################
  57. # Variable Initialization
  58. #
  59. export D_ROOT := $(CURDIR)
  60. export MTK_ROOT_OUT := $(CURDIR)
  61. export PWD := $(CURDIR)
  62. ALL ?= show_title show_internal_feature show_feature
  63. ALL_PREGEN_FILE :=
  64. export MTK_ROOT_CUSTOM := $(D_ROOT)/custom
  65. PROJECT_CONFIGS := $(MTK_ROOT_CUSTOM)/$(MTK_PROJECT)/$(MTK_PROJECT).mk
  66. include $(PROJECT_CONFIGS)
  67. ifndef TARGET
  68. $(error TARGET is not defined)
  69. else
  70. export TARGET
  71. endif
  72. export MTK_PATH_CUSTOM := $(MTK_ROOT_CUSTOM)/$(TARGET)
  73. ifndef MTK_PLATFORM
  74. $(error MTK_PLATFORM is not defined)
  75. else
  76. export MTK_PLATFORM
  77. PLATFORM := $(shell echo $(MTK_PLATFORM) | tr A-Z a-z)
  78. endif
  79. export MTK_PATH_PLATFORM := $(D_ROOT)/platform/$(PLATFORM)
  80. export MTK_PATH_COMMON := $(D_ROOT)/platform/common
  81. export MTK_PATH_PAL := $(D_ROOT)/platform/pal
  82. export INCLUDE_FILE_COMMON := -I$(MTK_PATH_COMMON)/inc \
  83. -I$(MTK_PATH_COMMON)/geniezone/inc \
  84. -I$(MTK_PATH_PAL)/inc \
  85. -I$(PRELOADER_OUT)/inc \
  86. -I$(MTK_PATH_PLATFORM)/src/init/inc \
  87. -I$(MTK_PATH_PLATFORM)/src/core/inc \
  88. -I$(MTK_PATH_PLATFORM)/src/drivers/inc \
  89. -I$(MTK_PATH_PLATFORM)/src/security/inc \
  90. -I$(MTK_PATH_PLATFORM)/src/security/trustzone/inc \
  91. -I$(MTK_ROOT_CUSTOM)/$(PLATFORM)/drdi
  92. #
  93. # Image Auth
  94. #
  95. CUSTOM_PATH := $(MTK_PATH_CUSTOM)/security
  96. IMAGE_AUTH_CFG_FILE := ${PRELOADER_OUT}/inc/KEY_IMAGE_AUTH.h
  97. #IMAGE_AUTH_CONFIG_PATH := ${CUSTOM_PATH}/image_auth
  98. IMAGE_AUTH_CONFIG_PATH := ${CUSTOM_PATH}/image_auth
  99. IMAGE_AUTH_KEY := ${IMAGE_AUTH_CONFIG_PATH}/IMG_AUTH_KEY.ini
  100. IMAGE_AUTH_CFG := ${IMAGE_AUTH_CONFIG_PATH}/IMG_AUTH_CFG.ini
  101. IMAGE_AUTH_KEY_EXIST := $(if $(wildcard $(IMAGE_AUTH_KEY)),TRUE,FALSE)
  102. ifeq ("$(IMAGE_AUTH_KEY_EXIST)","TRUE")
  103. ALL += img_auth_info
  104. ALL_PREGEN_FILE += $(IMAGE_AUTH_CFG_FILE)
  105. endif
  106. CHIP_CONFIG_PATH := $(CUSTOM_PATH)/chip_config
  107. GFH_PATH := $(CHIP_CONFIG_PATH)/s/gfh
  108. CONFIG_PATH := $(CHIP_CONFIG_PATH)/s/cfg
  109. KEY_PATH := $(CHIP_CONFIG_PATH)/s/key
  110. ifneq ($(wildcard $(CONFIG_PATH)/PADDING_TYPE.ini),)
  111. PADDING_TYPE := $(shell cat $(CONFIG_PATH)/PADDING_TYPE.ini)
  112. endif
  113. #
  114. # preloader extension
  115. #
  116. PRELOADER_EXT_BIN := $(MTK_ROOT_CUSTOM)/$(PLATFORM)/preloader/preloader_ext.bin
  117. PRELOADER_EXT_BIN_EXIST := $(if $(wildcard $(PRELOADER_EXT_BIN)),TRUE,FALSE)
  118. #
  119. # Tool
  120. #
  121. EFUSE_PY_FILE := tools/efuse/efuse_bingen_v2.py
  122. EFUSE_PY_DEF := tools/efuse/$(MTK_PLATFORM)/efuse_definition.xml
  123. EFUSE_INPUT_FILE := $(D_ROOT)/../../../../../../vendor/mediatek/proprietary/custom/$(TARGET)/security/efuse/input.xml
  124. EFUSE_IMAGE_NAME := efuse_$(MTK_PROJECT).img
  125. TOOL_PATH ?= $(D_ROOT)/../../../../../../device/mediatek/build/build/tools
  126. ifeq ($(HOST_OS),darwin)
  127. SIGN_TOOL := tools/signtool/SignTool_PL.darwin
  128. CIPHER_TOOL := tools/ciphertool/CipherTool.darwin
  129. else
  130. SIGN_TOOL := tools/signtool/SignTool_PL
  131. CIPHER_TOOL := tools/ciphertool/CipherTool
  132. endif
  133. ifdef PL_MODE
  134. PL_IMAGE_NAME := preloader_$(MTK_PROJECT)_$(PL_MODE)
  135. else
  136. PL_IMAGE_NAME := preloader_$(MTK_PROJECT)
  137. endif
  138. SEC_LIB := $(MTK_PATH_PLATFORM)/lib/libsec.a
  139. SEC_PLAT_LIB := $(MTK_PATH_PLATFORM)/lib/libsecplat.a
  140. CRYPTO_LIB := $(MTK_PATH_PLATFORM)/lib/libcrypto.a
  141. DEVINFO_LIB := $(MTK_PATH_PLATFORM)/lib/libdevinfo.a
  142. DEVINFO_DEBUG_LIB := $(MTK_PATH_PLATFORM)/lib/libdevinfo_debug.a
  143. HW_CRYPTO_LIB := $(MTK_PATH_PLATFORM)/src/HwCryptoLib.a
  144. PICACHU_LIB := $(MTK_PATH_PLATFORM)/src/PicachuLib.a
  145. ALL += build_info project_info
  146. ALL_PREGEN_FILE += $(PRELOADER_OUT)/inc/preloader.h $(PRELOADER_OUT)/inc/proj_cfg.h
  147. COMMON_DIR_MK := $(D_ROOT)/build/common-dir.mak
  148. COMMON_FILE_MK := $(D_ROOT)/build/common.mak
  149. export COMMON_DIR_MK COMMON_FILE_MK
  150. SUBDIRS := $(MTK_PATH_PLATFORM)/src/ $(MTK_PATH_CUSTOM)/ $(MTK_PATH_COMMON)/ $(MTK_PATH_PAL)/
  151. ifeq ($(CREATE_SEC_LIB),TRUE)
  152. ALL += $(SEC_LIB) $(CRYPTO_LIB) $(SEC_PLAT_LIB)
  153. ifeq ($(STANDALONE_SEC_DEVINFO),TRUE)
  154. ALL += $(DEVINFO_LIB) $(DEVINFO_DEBUG_LIB)
  155. endif
  156. endif
  157. ifeq ($(CREATE_DEVINFO_LIB),TRUE)
  158. ALL += $(DEVINFO_LIB) $(DEVINFO_DEBUG_LIB)
  159. endif
  160. ALL += preloader_bin
  161. ALL += dump_build_info
  162. include build/debug.in build/setting.in
  163. include $(MTK_PATH_PLATFORM)/makefile.mak
  164. export EMIGEN_OUT := $(PRELOADER_OUT)
  165. export DRVGEN_OUT := $(PRELOADER_OUT)
  166. export PTGEN_OUT := $(PRELOADER_OUT)
  167. include tools/emigen/emigen.mk
  168. include tools/drvgen/drvgen.mk
  169. -include tools/ptgen/$(MTK_PLATFORM)/ptgen.mk
  170. ALL_PREGEN_FILE += $(EMIGEN_FILE_LIST)
  171. ALL_PREGEN_FILE += $(DRVGEN_FILE_LIST)
  172. ALL_PREGEN_FILE += $(PTGEN_FILE_LIST)
  173. export ALL_DEPENDENCY_FILE := $(foreach m,$(MAKEFILE_LIST),$(if $(filter /% ~%,$(m)),$(m),$(D_ROOT)/$(m)))
  174. .PHONY: clean
  175. .PHONY: $(ALL)
  176. all: $(ALL)
  177. #########
  178. # recursive
  179. #
  180. # $(1): subdir
  181. # $(2): target flag
  182. # $(3): dependency
  183. define build-topdirs
  184. $(2): $(3) FORCE
  185. @mkdir -p $$(dir $$@)
  186. $$(MAKE) -C $(1) --no-print-directory
  187. endef
  188. .PHONY: FORCE
  189. FORCE:
  190. SUBDIRS_FLAGS :=
  191. $(foreach d,$(SUBDIRS),\
  192. $(eval r := $(patsubst $(D_ROOT)/%,%,$(patsubst %/,%,$(if $(filter /%,$(d)),,$(CURDIR)/)$(d))))\
  193. $(eval t := $(PRELOADER_OUT)/obj/$(subst /,_,$(r)).flag)\
  194. $(eval $(call build-topdirs,$(d),$(t),$(ALL_PREGEN_FILE)))\
  195. $(eval SUBDIRS_FLAGS += $(t))\
  196. )
  197. ##############################################################
  198. # ELF Generation
  199. #
  200. CFG_PRELOADER_EXT_COMMON_BUILD := 0
  201. ifeq ($(CFG_PRELOADER_EXTENSION), 1)
  202. ifeq ($(CREATE_SEC_LIB),FALSE)
  203. CFG_PRELOADER_EXT_COMMON_BUILD := 1
  204. endif
  205. endif
  206. ifeq ($(CFG_PRELOADER_EXT_COMMON_BUILD), 1)
  207. SECLIB2OBJ_TOOL := tools/efuse/seclib2obj_convertor.py
  208. SECLIB_OBJ_LIST_FILE := $(PRELOADER_OUT)/seclib_obj_list.txt
  209. DEVINFO_OBJ_DIR := $(PRELOADER_OUT)/obj/libdevinfo_obj
  210. else
  211. SECLIB2OBJ_TOOL :=
  212. SECLIB_OBJ_LIST_FILE :=
  213. DEVINFO_OBJ_DIR :=
  214. endif
  215. ifeq ($(CFG_PRELOADER_DRAM_USE), 1)
  216. PL_IMG_SECOND_PARTION_SECTION :=.pl_dram.text .pl_dram.data .pl_dram.rodata .pl_dram.start
  217. OBJONCHIP_FLAG := $(addprefix -R , $(PL_IMG_SECOND_PARTION_SECTION))
  218. OBJSECOND_FLAG := $(addprefix -j , $(PL_IMG_SECOND_PARTION_SECTION))
  219. PL_DRAM_IMAGE_NAME := $(PL_IMAGE_NAME)_dram
  220. PL_DRAM_HDRBIN_PATH := $(D_BIN)/hd_$(PL_DRAM_IMAGE_NAME).bin
  221. LDSCRIPT := $(D_BIN)/$(MTK_PROJECT)_gen.ld
  222. else
  223. OBJONCHIP_FLAG :=
  224. OBJSECOND_FLAG :=
  225. PL_DRAM_IMAGE_NAME :=
  226. PL_DRAM_HDRBIN_PATH :=
  227. endif
  228. ifdef CFG_TEE_DRAM_SIZE
  229. PL_DRAM_RESERVE_SIZE := $(CFG_TEE_DRAM_SIZE)
  230. else
  231. PL_DRAM_RESERVE_SIZE := 0
  232. endif
  233. ifdef CFG_PRELOADER_DRAM_USE
  234. ifeq ($(CFG_PRELOADER_DRAM_USE), 1)
  235. $(LDSCRIPT): $(LDSCRIPT_DRAM)
  236. $(LDSCRIPT): $(ALL_DEPENDENCY_FILE)
  237. @echo generating $@
  238. $(MKDIR)
  239. sed "s/%CFG_DRAM_SIZE%/$(CFG_DRAM_SIZE)/;s/%EXT_PRELOAER_DRAMSIZE%/$(EXT_PRELOAER_DRAMSIZE)/;s/%PL_DRAM_RESERVE_SIZE%/$(PL_DRAM_RESERVE_SIZE)/" < $< > $@
  240. endif
  241. endif
  242. ifeq ($(CFG_PRELOADER_EXTENSION), 1)
  243. MKIMAGE := tools/mkimage/mkimage
  244. LOADER_EXT_NAME := loader_ext
  245. LOADER_EXT_ETC_HEADER_CFG := loader_ext_etc_hdr.cfg
  246. LOADER_EXT_DRAM_HEADER_CFG := loader_ext_dram_hdr.cfg
  247. endif #($(CFG_PRELOADER_EXTENSION), 1)
  248. ifneq ($(wildcard $(CONFIG_PATH)/PBP_PY_SUPPORT),)
  249. PBP_TOOL := tools/pbp/pbp.py
  250. BIN_TO_TXT_TOOL := tools/pbp/bin2txt.py
  251. CHIP_KEY := $(KEY_PATH)/pl_key.ini
  252. else
  253. ifeq ($(HOST_OS),darwin)
  254. PBP_TOOL := tools/pbp/PBP.darwin
  255. else
  256. PBP_TOOL := tools/pbp/PBP
  257. endif
  258. CHIP_CONFIG := $(CONFIG_PATH)/CHIP_CONFIG.ini
  259. CHIP_KEY := $(KEY_PATH)/CHIP_TEST_KEY.ini
  260. endif
  261. preloader_bin: $(D_BIN)/$(PL_IMAGE_NAME).bin $(PRELOADER_OUT)/report-codesize.csv $(PRELOADER_OUT)/codesize_profiling.csv
  262. ifeq ($(MTK_EFUSE_WRITER_SUPPORT),yes)
  263. preloader_bin: $(D_BIN)/efuse.img
  264. endif
  265. $(D_BIN)/keyhash.bin: $(PBP_TOOL) $(KEY_PATH)/root_prvk.pem
  266. ifneq (,$(findstring legacy,$(PADDING_TYPE)))
  267. PYTHONDONTWRITEBYTECODE=True python $(PBP_TOOL) -j $(KEY_PATH)/root_prvk.pem -func keyhash_legacy -o $@
  268. else
  269. PYTHONDONTWRITEBYTECODE=True python $(PBP_TOOL) -j $(KEY_PATH)/root_prvk.pem -func keyhash_pss -o $@
  270. endif
  271. $(D_BIN)/keyhash.txt: $(D_BIN)/keyhash.bin $(BIN_TO_TXT_TOOL) $(PBP_TOOL) $(CHIP_KEY)
  272. ifneq ($(wildcard $(CONFIG_PATH)/PBP_PY_SUPPORT),)
  273. python $(BIN_TO_TXT_TOOL) $< $@
  274. else
  275. $(PBP_TOOL) -func keyhash -i $(CHIP_KEY) -o $@
  276. endif
  277. $(D_BIN)/$(EFUSE_IMAGE_NAME): $(D_BIN)/keyhash.txt $(EFUSE_PY_FILE) $(EFUSE_INPUT_FILE) $(EFUSE_PY_DEF)
  278. rm -rf $(PRELOADER_OUT)/efuse_bingen.log
  279. python $(EFUSE_PY_FILE) -f $(EFUSE_INPUT_FILE) -d $(EFUSE_PY_DEF) -k $< -o $@ -l $(PRELOADER_OUT)/efuse_bingen.log
  280. rm -rf $(D_BIN)/keyhash.txt
  281. $(D_BIN)/efuse.img: $(D_BIN)/$(EFUSE_IMAGE_NAME)
  282. ifeq ($(MTK_EFUSE_WRITER_SUPPORT),yes)
  283. rm -rf $@
  284. cp -f $< $@
  285. endif
  286. $(D_BIN)/$(PL_IMAGE_NAME).elf: $(SUBDIRS_FLAGS) $(LDSCRIPT)
  287. $(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))
  288. $(D_BIN)/$(PL_IMAGE_NAME).elf: $(ALL_DEPENDENCY_FILE)
  289. @mkdir -p $(dir $@)
  290. ifeq ($(CFG_PRELOADER_EXT_COMMON_BUILD), 1)
  291. rm -rf $(DEVINFO_OBJ_DIR)
  292. mkdir -p $(DEVINFO_OBJ_DIR)
  293. $(AR) -t $(DEVINFO_LIB) | grep "\.o" > $(SECLIB_OBJ_LIST_FILE)
  294. python $(SECLIB2OBJ_TOOL) -b $(SECLIB_OBJ_LIST_FILE) -r $(D_ROOT) -p $(DEVINFO_OBJ_DIR) -s $(DEVINFO_LIB) -t $(PRELOADER_OUT)
  295. rm -rf $(SECLIB_OBJ_LIST_FILE)
  296. $(LD) --gc-sections -Bstatic -T$(LDSCRIPT) \
  297. `cat $(PRELOADER_OUT)/obj/*.flag | tr ' ' '\n' | grep "\.o$$" | LC_COLLATE=C sort` \
  298. $(wildcard $(PICACHU_LIB)) \
  299. --start-group \
  300. $(SEC_LIB) \
  301. $(CRYPTO_LIB) \
  302. $(SEC_PLAT_LIB) \
  303. $(DEVINFO_OBJ_DIR)/*.o \
  304. $(wildcard $(DEVINFO_DEBUG_LIB)) \
  305. $(wildcard $(HW_CRYPTO_LIB)) \
  306. --end-group \
  307. -Map $(PRELOADER_OUT)/system.map -o $(D_BIN)/$(PL_IMAGE_NAME).elf
  308. rm -rf $(DEVINFO_OBJ_DIR)
  309. else
  310. $(LD) --gc-sections -Bstatic -T$(LDSCRIPT) \
  311. `cat $(PRELOADER_OUT)/obj/*.flag | tr ' ' '\n' | grep "\.o$$" | LC_COLLATE=C sort` \
  312. $(wildcard $(PICACHU_LIB)) \
  313. --start-group \
  314. $(SEC_LIB) \
  315. $(CRYPTO_LIB) \
  316. $(SEC_PLAT_LIB) \
  317. $(wildcard $(DEVINFO_LIB)) \
  318. $(wildcard $(DEVINFO_DEBUG_LIB)) \
  319. $(wildcard $(HW_CRYPTO_LIB)) \
  320. --end-group \
  321. -Map $(PRELOADER_OUT)/system.map -o $(D_BIN)/$(PL_IMAGE_NAME).elf
  322. endif
  323. $(D_BIN)/preloader.elf: $(D_BIN)/$(PL_IMAGE_NAME).elf
  324. $(OBJCOPY) -R .dram $(D_BIN)/$(PL_IMAGE_NAME).elf -O elf32-littlearm $(D_BIN)/preloader.elf
  325. ifeq ($(CFG_PRELOADER_DRAM_USE), 1)
  326. preloader_bin: $(D_BIN)/$(PL_DRAM_IMAGE_NAME).bin
  327. $(D_BIN)/$(PL_DRAM_IMAGE_NAME).bin: $(D_BIN)/$(PL_IMAGE_NAME).elf
  328. $(hide) $(OBJCOPY) $(OBJCFLAGS) $(OBJSECOND_FLAG) $(D_BIN)/$(PL_IMAGE_NAME).elf -O binary $(D_BIN)/$(PL_DRAM_IMAGE_NAME).bin
  329. endif
  330. $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: $(D_BIN)/$(PL_IMAGE_NAME).elf
  331. ifeq ($(PRELOADER_EXT_BIN_EXIST),TRUE)
  332. $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: $(PRELOADER_EXT_BIN)
  333. endif
  334. $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: $(PRELOADER_OUT)/MTK_Loader_Info.tag
  335. $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: zero_padding.sh
  336. $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: $(PRELOADER_OUT)/report-objsize.txt
  337. $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: $(PRELOADER_OUT)/report-codesize.txt
  338. $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin: $(PRELOADER_OUT)/function.map
  339. ifeq ($(CFG_PRELOADER_DRAM_USE), 1)
  340. $(hide) $(OBJCOPY) $(OBJCFLAGS) $(OBJONCHIP_FLAG) $(D_BIN)/$(PL_IMAGE_NAME).elf -O binary $@
  341. else
  342. ifeq ($(CFG_PRELOADER_EXTENSION), 1)
  343. # loader_ext_etc
  344. $(hide) $(OBJCOPY) $(OBJCFLAGS) -j .loader_ext_etc $(D_BIN)/$(PL_IMAGE_NAME).elf -O binary $(D_BIN)/$(PL_IMAGE_NAME)_ETC_NO_HDR.bin
  345. $(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
  346. # loader_ext_dram
  347. $(hide) $(OBJCOPY) $(OBJCFLAGS) -j .loader_ext_dram $(D_BIN)/$(PL_IMAGE_NAME).elf -O binary $(D_BIN)/$(PL_IMAGE_NAME)_DRAM_NO_HDR.bin
  348. $(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
  349. # loader_ext.img = loader_ext_dram + loader_ext_etc
  350. cp $(D_BIN)/$(PL_IMAGE_NAME)_DRAM.bin $(D_BIN)/$(LOADER_EXT_NAME).img
  351. cat $(D_BIN)/$(PL_IMAGE_NAME)_ETC.bin >> $(D_BIN)/$(LOADER_EXT_NAME).img
  352. $(hide) $(OBJCOPY) $(OBJCFLAGS) -R .loader_ext_etc -R .loader_ext_dram $(D_BIN)/$(PL_IMAGE_NAME).elf -O binary $@
  353. else # original flow
  354. $(hide) $(OBJCOPY) $(OBJCFLAGS) $(D_BIN)/$(PL_IMAGE_NAME).elf -O binary $@
  355. endif #($(CFG_PRELOADER_EXTENSION), 1)
  356. endif
  357. ifeq ("$(PRELOADER_EXT_BIN_EXIST)","TRUE")
  358. cat $(PRELOADER_EXT_BIN) >> $@
  359. endif
  360. ./zero_padding.sh $@ 4
  361. ./alignment_check.sh $(PRELOADER_OUT)/MTK_Loader_Info.tag 4
  362. cat $(PRELOADER_OUT)/MTK_Loader_Info.tag >> $@
  363. $(PRELOADER_OUT)/report-codesize.txt: $(D_BIN)/$(PL_IMAGE_NAME).elf
  364. $(CROSS_COMPILE)readelf -s $(D_BIN)/$(PL_IMAGE_NAME).elf | awk -F':' '/Num/ {print $$2}' > $@
  365. $(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 >> $@
  366. $(PRELOADER_OUT)/report-codesize.csv: $(PRELOADER_OUT)/report-codesize.txt
  367. cat $(PRELOADER_OUT)/report-codesize.txt | sed 's/[ ]+/,/g' > $@
  368. $(PRELOADER_OUT)/report-objsize.txt: $(D_BIN)/$(PL_IMAGE_NAME).elf
  369. $(CROSS_COMPILE)size `ls $(PRELOADER_OUT)/obj/*.o` > $@
  370. $(PRELOADER_OUT)/codesize_profiling.csv: $(D_BIN)/$(PL_IMAGE_NAME).elf
  371. $(PRELOADER_OUT)/codesize_profiling.csv: codesize_profiling.sh
  372. ./codesize_profiling.sh $(PRELOADER_OUT)/system.map $@
  373. ##############################################################
  374. # Security Library Generation
  375. #
  376. ifeq ($(CREATE_SEC_LIB),TRUE)
  377. $(SEC_LIB): $(SUBDIRS_FLAGS)
  378. rm -rf $@
  379. @echo AR $(PRELOADER_OUT)/out/*.o
  380. $(AR) -r $@ $(PRELOADER_OUT)/out/*.o
  381. @echo =================================================================
  382. @echo Security Library Common
  383. @echo '$@' built at
  384. @echo time : $(shell date)
  385. @echo =================================================================
  386. $(CRYPTO_LIB): $(SUBDIRS_FLAGS)
  387. rm -rf $@
  388. @echo AR $(PRELOADER_OUT)/out_crypto/*.o
  389. $(AR) -r $@ $(PRELOADER_OUT)/out_crypto/*.o
  390. @echo =================================================================
  391. @echo Crypto Library
  392. @echo '$@' built at
  393. @echo time : $(shell date)
  394. @echo =================================================================
  395. $(SEC_PLAT_LIB): $(SUBDIRS_FLAGS)
  396. rm -rf $@
  397. @echo AR $(PRELOADER_OUT)/out_plat/*.o
  398. $(AR) -r $@ $(PRELOADER_OUT)/out_plat/*.o
  399. @echo =================================================================
  400. @echo Security Library Platform
  401. @echo '$@' built at
  402. @echo time : $(shell date)
  403. @echo =================================================================
  404. endif
  405. ifeq ($(CREATE_DEVINFO_LIB), TRUE)
  406. $(DEVINFO_LIB): $(SUBDIRS_FLAGS)
  407. rm -rf $@
  408. @echo AR $(PRELOADER_OUT)/out_devinfo/*.o
  409. -$(AR) -r $@ $(PRELOADER_OUT)/out_devinfo/*.o
  410. @echo =================================================================
  411. @echo Devinfo Security Library
  412. @echo '$@' built at
  413. @echo time : $(shell date)
  414. @echo =================================================================
  415. $(DEVINFO_DEBUG_LIB): $(SUBDIRS_FLAGS)
  416. rm -rf $@
  417. @echo AR $(PRELOADER_OUT)/out_devinfo_debug/*.o
  418. -$(AR) -r $@ $(PRELOADER_OUT)/out_devinfo_debug/*.o
  419. @echo =================================================================
  420. @echo Devinfo Security Library Debug Version
  421. @echo '$@' built at
  422. @echo time : $(shell date)
  423. @echo =================================================================
  424. endif
  425. ##############################################################
  426. # File for Debugging
  427. #
  428. $(PRELOADER_OUT)/function.map: $(D_BIN)/$(PL_IMAGE_NAME).elf
  429. $(NM) $< | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > $@
  430. ##############################################################
  431. # Dump Configurations
  432. #
  433. show_title:
  434. @echo =================================================================
  435. @echo Building Configuration:
  436. @echo Project = $(MTK_PROJECT)
  437. @echo Platform = $(MTK_PLATFORM)
  438. @echo Buildspec = buildspec.mak
  439. @echo Create SecLib = $(CREATE_SEC_LIB)
  440. @echo Image Auth key exist = $(IMAGE_AUTH_KEY_EXIST)
  441. @echo Preloader EXT exist = $(PRELOADER_EXT_BIN_EXIST)
  442. @echo SECRO AC support = $(MTK_SEC_SECRO_AC_SUPPORT)
  443. @echo =================================================================
  444. show_internal_feature:
  445. @echo =================================================================
  446. @echo Internal Feature:
  447. @echo HW_INIT_ONLY = $(HW_INIT_ONLY)
  448. @echo CFG_MDJTAG_SWITCH= $(CFG_MDJTAG_SWITCH)
  449. @echo CFG_MDMETA_DETECT= $(CFG_MDMETA_DETECT)
  450. @echo CFG_HW_WATCHDOG= $(CFG_HW_WATCHDOG)
  451. @echo CFG_APWDT= $(CFG_APWDT)
  452. @echo CFG_APWDT_DISABLE= $(CFG_APWDT_DISABLE)
  453. @echo CFG_MDWDT_DISABLE= $(CFG_MDWDT_DISABLE)
  454. @echo CFG_SYS_STACK_SZ= $(CFG_SYS_STACK_SZ)
  455. @echo CFG_MMC_ADDR_TRANS= $(CFG_MMC_ADDR_TRANS)
  456. @echo CFG_BOOT_ARGUMENT= $(CFG_BOOT_ARGUMENT)
  457. @echo CFG_RAM_CONSOLE= $(CFG_RAM_CONSOLE)
  458. @echo =================================================================
  459. @echo MTK_PATH_PLATFORM= $(MTK_PATH_PLATFORM)
  460. @echo MTK_PATH_CUSTOM= $(MTK_PATH_CUSTOM)
  461. @echo MTK_ROOT_CUSTOM= $(MTK_ROOT_CUSTOM)
  462. @echo CUSTOM_PATH= $(CUSTOM_PATH)
  463. @echo =================================================================
  464. show_feature:
  465. @if [ -e "$(MTK_PATH_CUSTOM)/cust_bldr.mak" ]; then \
  466. echo =========================================== ; \
  467. echo Platform Feature: ; \
  468. echo 'CFG_FPGA_PLATFORM'= $(CFG_FPGA_PLATFORM) ; \
  469. echo 'CFG_EVB_PLATFORM'= $(CFG_EVB_PLATFORM) ; \
  470. echo 'CFG_BATTERY_DETECT'= $(CFG_BATTERY_DETECT) ; \
  471. echo 'CFG_PMT_SUPPORT'= $(CFG_PMT_SUPPORT) ; \
  472. echo =========================================== ; \
  473. echo Communication Feature: ; \
  474. echo 'CFG_UART_TOOL_HANDSHAKE'= $(CFG_UART_TOOL_HANDSHAKE) ; \
  475. echo 'CFG_USB_TOOL_HANDSHAKE'= $(CFG_USB_TOOL_HANDSHAKE) ; \
  476. echo 'CFG_USB_DOWNLOAD'= $(CFG_USB_DOWNLOAD) ; \
  477. echo 'CFG_LOG_BAUDRATE'= $(CFG_LOG_BAUDRATE) ; \
  478. echo 'CFG_META_BAUDRATE'= $(CFG_META_BAUDRATE) ; \
  479. echo 'CFG_UART_LOG'= $(CFG_UART_LOG) ; \
  480. echo 'CFG_UART_META'= $(CFG_UART_META) ; \
  481. echo 'CFG_EMERGENCY_DL_SUPPORT'= $(CFG_EMERGENCY_DL_SUPPORT) ; \
  482. echo 'CFG_EMERGENCY_DL_TIMEOUT_MS'= $(CFG_EMERGENCY_DL_TIMEOUT_MS) ; \
  483. echo 'MTK_UART_USB_SWITCH'= $(MTK_UART_USB_SWITCH) ; \
  484. echo =========================================== ; \
  485. echo Image Loading: ; \
  486. echo 'CFG_LOAD_UBOOT'= $(CFG_LOAD_UBOOT) ; \
  487. echo 'CFG_LOAD_AP_ROM'= $(CFG_LOAD_AP_ROM) ; \
  488. echo 'CFG_LOAD_MD_ROM'= $(CFG_LOAD_MD_ROM) ; \
  489. echo 'CFG_LOAD_MD_RAMDISK'= $(CFG_LOAD_MD_RAMDISK) ; \
  490. echo 'CFG_LOAD_CONN_SYS'= $(CFG_LOAD_CONN_SYS) ; \
  491. echo 'CFG_UBOOT_MEMADDR'= $(CFG_UBOOT_MEMADDR) ; \
  492. echo 'CFG_AP_ROM_MEMADDR'= $(CFG_AP_ROM_MEMADDR) ; \
  493. echo 'CFG_MD1_ROM_MEMADDR'= $(CFG_MD1_ROM_MEMADDR) ; \
  494. echo 'CFG_MD1_RAMDISK_MEMADDR'= $(CFG_MD1_RAMDISK_MEMADDR) ; \
  495. echo 'CFG_MD2_ROM_MEMADDR'= $(CFG_MD2_ROM_MEMADDR) ; \
  496. echo 'CFG_MD2_RAMDISK_MEMADDR'= $(CFG_MD2_RAMDISK_MEMADDR) ; \
  497. echo 'CFG_CONN_SYS_MEMADDR'= $(CFG_CONN_SYS_MEMADDR) ; \
  498. echo 'ONEKEY_REBOOT_NORMAL_MODE_PL'= $(ONEKEY_REBOOT_NORMAL_MODE_PL) ; \
  499. echo 'KPD_USE_EXTEND_TYPE'= $(KPD_USE_EXTEND_TYPE) ; \
  500. echo 'KPD_PMIC_LPRST_TD'= $(KPD_PMIC_LPRST_TD) ; \
  501. echo 'MTK_PMIC_RST_KEY'= $(MTK_PMIC_RST_KEY) ; \
  502. echo 'CFG_ATF_SUPPORT'= $(CFG_ATF_SUPPORT) ; \
  503. echo 'CFG_ATF_LOG_SUPPORT'= $(CFG_ATF_LOG_SUPPORT) ; \
  504. echo 'CFG_TEE_SUPPORT'= $(CFG_TEE_SUPPORT) ; \
  505. echo 'CFG_TEE_VIRTUAL_RPMB_SUPPORT'= $(CFG_TEE_VIRTUAL_RPMB_SUPPORT) ; \
  506. echo 'CFG_RPMB_SET_KEY'= $(CFG_RPMB_SET_KEY) ; \
  507. echo 'CFG_TRUSTONIC_TEE_SUPPORT'= $(CFG_TRUSTONIC_TEE_SUPPORT) ; \
  508. echo 'CFG_MICROTRUST_TEE_SUPPORT'= $(CFG_MICROTRUST_TEE_SUPPORT) ; \
  509. echo 'CFG_MICROTRUST_TEE_LITE_SUPPORT'= $(CFG_MICROTRUST_TEE_LITE_SUPPORT) ; \
  510. echo 'CFG_TRUSTKERNEL_TEE_SUPPORT'= $(CFG_TRUSTKERNEL_TEE_SUPPORT) ; \
  511. echo 'CFG_TEE_SECURE_MEM_PROTECTED'= $(CFG_TEE_SECURE_MEM_PROTECTED) ; \
  512. echo 'CFG_TEE_SECURE_MEM_TAG_FORMAT'= $(CFG_TEE_SECURE_MEM_TAG_FORMAT) ; \
  513. echo 'CFG_TEE_SECURE_MEM_SHARED'= $(CFG_TEE_SECURE_MEM_SHARED) ; \
  514. echo 'CFG_TEE_TRUSTED_APP_HEAP_SIZE'= $(CFG_TEE_TRUSTED_APP_HEAP_SIZE) ; \
  515. echo 'CFG_RPMB_KEY_PROGRAMED_IN_KERNEL'= $(CFG_RPMB_KEY_PROGRAMED_IN_KERNEL) ; \
  516. echo 'MTK_EFUSE_WRITER_SUPPORT'= $(MTK_EFUSE_WRITER_SUPPORT) ; \
  517. echo 'CFG_GOOGLE_TRUSTY_SUPPORT'= $(CFG_GOOGLE_TRUSTY_SUPPORT) ; \
  518. echo 'CFG_GZ_SUPPORT'= $(CFG_GZ_SUPPORT) ; \
  519. echo 'CFG_GZ_NEED_DESCRAMBLE'= $(CFG_GZ_NEED_DESCRAMBLE) ; \
  520. echo 'CFG_GZ_REMAP'= $(CFG_GZ_REMAP) ; \
  521. echo 'CFG_NEBULA_VM_SUPPORT'= $(CFG_NEBULA_VM_SUPPORT) ; \
  522. echo 'CFG_NEBULA_LOAD_IN_PART2'= $(CFG_NEBULA_LOAD_IN_PART2) ; \
  523. echo 'CFG_GZ_PWRAP_ENABLE'= $(CFG_GZ_PWRAP_ENABLE) ; \
  524. fi
  525. ##############################################################
  526. # Adding Build Time
  527. #
  528. build_info: $(PRELOADER_OUT)/inc/preloader.h
  529. $(PRELOADER_OUT)/inc/preloader.h: $(ALL_DEPENDENCY_FILE)
  530. @mkdir -p $(dir $@)
  531. @echo // Auto generated. Build Time Information > $@
  532. @echo '#'define BUILD_TIME '"'$(shell date +%Y%m%d-%H%M%S)'"' >> $@
  533. ##############################################################
  534. # Adding Project Configuration
  535. #
  536. project_info: $(PRELOADER_OUT)/inc/proj_cfg.h
  537. $(PRELOADER_OUT)/inc/proj_cfg.h: $(MTK_PATH_PLATFORM)/default.mak $(MTK_PATH_CUSTOM)/cust_bldr.mak $(PROJECT_CONFIGS)
  538. $(PRELOADER_OUT)/inc/proj_cfg.h: $(ALL_DEPENDENCY_FILE)
  539. @mkdir -p $(dir $@)
  540. @echo // Auto generated. Import ProjectConfig.mk > $@
  541. @echo '#'define CUSTOM_SUSBDL_CFG $(MTK_SEC_USBDL) >> $@
  542. @echo '#'define CUSTOM_SBOOT_CFG $(MTK_SEC_BOOT) >> $@
  543. @echo '#'define MTK_SEC_MODEM_AUTH $(MTK_SEC_MODEM_AUTH) >> $@
  544. ifdef MTK_SEC_SECRO_AC_SUPPORT
  545. @echo '#'define MTK_SEC_SECRO_AC_SUPPORT $(MTK_SEC_SECRO_AC_SUPPORT) >> $@
  546. endif
  547. ##############################################################
  548. # Generate Key Info File
  549. #
  550. img_auth_info: $(IMAGE_AUTH_CFG_FILE)
  551. $(IMAGE_AUTH_CFG_FILE): $(SIGN_TOOL) $(IMAGE_AUTH_KEY) $(IMAGE_AUTH_CFG)
  552. $(IMAGE_AUTH_CFG_FILE): $(ALL_DEPENDENCY_FILE)
  553. @mkdir -p $(dir $@)
  554. @touch $@
  555. @chmod 777 $@
  556. $(SIGN_TOOL) $(IMAGE_AUTH_KEY) $(IMAGE_AUTH_CFG) $@ IMG
  557. ##############################################################
  558. # Clean
  559. #
  560. clean:
  561. @rm -rf $(PRELOADER_OUT)/obj
  562. @rm -rf $(PRELOADER_OUT)/inc
  563. @rm -rf $(PRELOADER_OUT)/bin
  564. @rm -rf $(PRELOADER_OUT)/out_crypto
  565. @rm -rf $(PRELOADER_OUT)/out_plat
  566. @rm -rf $(PRELOADER_OUT)/out_devinfo
  567. @rm -rf $(PRELOADER_OUT)/out_devinfo_debug
  568. @rm -rf $(PRELOADER_OUT)/out_hw_crypto_lib
  569. #
  570. # Encode Key
  571. #
  572. ifeq ($(HOST_OS),darwin)
  573. KEY_ENCODE_TOOL := tools/ke/KeyEncode.darwin
  574. else
  575. KEY_ENCODE_TOOL := tools/ke/KeyEncode
  576. endif
  577. #key_encode
  578. $(D_BIN)/KEY_ENCODED_PL: $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin | $(KEY_ENCODE_TOOL)
  579. $(KEY_ENCODE_TOOL) $< $@
  580. @echo "$(KEY_ENCODE_TOOL) pass !!!!"
  581. ifdef SEC_ROM_INFO_V2
  582. $(D_BIN)/$(PL_IMAGE_NAME)_NO_GFH.bin: $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin
  583. @echo "[ Load Chip Config. ]"
  584. @echo "============================================"
  585. @echo " : MTK_SEC_CHIP_SUPPORT - $(MTK_SEC_CHIP_SUPPORT)"
  586. cp -f $< $@
  587. else
  588. $(D_BIN)/$(PL_IMAGE_NAME)_NO_GFH.bin: $(D_BIN)/KEY_ENCODED_PL
  589. @echo "[ Load Chip Config. ]"
  590. @echo "============================================"
  591. @echo " : MTK_SEC_CHIP_SUPPORT - $(MTK_SEC_CHIP_SUPPORT)"
  592. cp -f $< $@
  593. endif
  594. ifneq ($(wildcard $(CONFIG_PATH)/PBP_PY_SUPPORT),)
  595. include bl_sign_v21.mak
  596. else
  597. ifneq ($(wildcard $(GFH_PATH)/GFH_CONFIG.ini),)
  598. include bl_sign_v11.mak
  599. else
  600. include bl_sign_v10.mak
  601. endif
  602. endif
  603. dump_build_info: $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin $(D_BIN)/$(PL_IMAGE_NAME).elf
  604. @echo "============================================"
  605. @echo "${MTK_PROJECT} preloader load"
  606. @echo "$(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin built at"
  607. @echo "time : $(shell date)"
  608. @echo "img size : `wc -c < $(D_BIN)/$(PL_IMAGE_NAME)_LINKED.bin` byte"
  609. @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"
  610. @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"
  611. @echo ============================================