• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6#     http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13#
14# ֱ��ʹ��make���б����ʹ�÷���
15# make �� make all : ɾ�����н����������±�������ģ��
16# make clean : ɾ����������������patch�ļ����ɵ��м��
17# make all_clean : ɾ�����н�����
18# make link : ����
19THIRD_DIR = $(MAIN_TOPDIR)/third_party
20U_BOOT_DIR = $(MAIN_TOPDIR)/third_party/u-boot-v2019.07
21
22include $(MAIN_TOPDIR)/build/make_scripts/config.mk
23include $(MAIN_TOPDIR)/build/make_scripts/config_lib_non_factory.mk
24
25GCC_PATH := $(dir $(shell which $(CC)))
26GCC_LIBPATH := -L$(GCC_PATH)../lib/gcc/riscv32-unknown-elf/$(GCC_VER_NUM)
27LIBPATH += $(addprefix -Lbuild/build_tmp/libs/, $(foreach module, $(COMPILE_MODULE), $($(module)_dir)))
28ifneq ($(USR_LIBS),)
29	LIBPATH := $(foreach path, $(LIBPATH), $(patsubst -L%, -L$(MAIN_TOPDIR)/%, $(path)))
30endif
31COMPILE_MODULE += boot loaderboot
32SIGN_CFG = A B
33A_SIGN = 0x0040d3c0
34B_SIGN = 0x004f13c0
35FACTORY_SIGN = 0x0054d3c0
36
37FIRM_WARE_VER := $(shell if [ $(CONFIG_TARGET_KERNEL_VER) -gt -1 ] && [ $(CONFIG_TARGET_KERNEL_VER) -lt 49 ];then echo $(CONFIG_TARGET_KERNEL_VER);fi;)
38ifneq ($(FIRM_WARE_VER), $(CONFIG_TARGET_KERNEL_VER))
39$(error [ERROR]:FIRM_WARE_VER=$(FIRM_WARE_VER) Ranges From 0 To 48)
40endif
41
42BOOT_VER = $(shell if [ $(CONFIG_TARGET_BOOT_VER) -gt -1 ] && [ $(CONFIG_TARGET_BOOT_VER) -lt 17 ];then echo $(CONFIG_TARGET_BOOT_VER);fi;)
43ifneq ($(BOOT_VER), $(CONFIG_TARGET_BOOT_VER))
44$(error [ERROR]:BOOT_VER Ranges From 0 To 16)
45endif
46
47ifeq ($(CONFIG_MESH_SUPPORT),y)
48    LIBS += -lmeshautolink
49endif
50LIBS := $(filter-out -lboot -lloaderboot, $(LIBS))
51ifeq ($(CONFIG_TARGET_SIG_RSA_V15), y)
52    SIGN_ALG = 0x0
53else ifeq ($(CONFIG_TARGET_SIG_RSA_PSS), y)
54    SIGN_ALG = 0x1
55else ifeq ($(CONFIG_TARGET_SIG_ECC), y)
56    SIGN_ALG = 0x10
57else ifeq ($(CONFIG_TARGET_SIG_SHA256), y)
58    SIGN_ALG = 0x3F
59endif
60
61OUT_DIRS = $(MAIN_TOPDIR)/$(LOG_PATH) $(MAIN_TOPDIR)/$(CACHE_PATH) $(MAIN_TOPDIR)/$(LINK_PATH) $(MAIN_TOPDIR)/$(NV_PATH) $(MAIN_TOPDIR)/$(BIN_PATH)
62all: prepare build_libs nv link check ota
63	$(Q)echo "< ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >"
64	$(Q)echo "                              BUILD SUCCESS                              "
65	$(Q)echo "< ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >"
66
67build_libs:
68	$(Q)$(foreach module, $(COMPILE_MODULE), \
69	$(foreach lib, $($(module)_libs), \
70	$(MAKE) -C $(MAIN_TOPDIR)/$($(module)_dir) MODULE_DIR=$($(module)_dir) LIB=$(lib) all;))
71
72nv:
73	$(NV_TOOL) $(MAIN_TOPDIR)/$(NV_PATH) $(TARGET_NAME) $(NV_CFG_NAME)
74
75#link: build_libs nv
76link:
77	$(CC) $(LINK_SCRIPTS_FLAG) -E $(MAIN_TOPDIR)/build/link/system_config.ld.S -o $(MAIN_TOPDIR)/$(LINK_PATH)/system_config.ld -P
78
79ifeq ($(CONFIG_COMPRESSION_OTA_SUPPORT), y)
80	$(CC) $(LINK_SCRIPTS_FLAG) -DFLASH_FIRM_START=$(A_SIGN) -E $(MAIN_TOPDIR)/build/link/link.ld.S -o $(MAIN_TOPDIR)/$(LINK_PATH)/link.lds -P
81	$(LINK) $(LINKFLAGS) $(GCC_LIBPATH) $(sort $(LIBPATH)) -T$(MAIN_TOPDIR)/$(LINK_PATH)/link.lds -Map=$(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME).map -o $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME).out --start-group $(LIBS) --end-group
82	$(OBJCOPY) -O binary $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME).out $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME).bin
83	$(OBJDUMP) -d $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME).out >$(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME).asm
84	dd if=$(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME).bin of=$(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_base.bin seek=0 count=278 bs=1K
85	dd if=$(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME).bin of=$(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_kernel.bin skip=278 bs=1K
86else
87	$(Q)$(foreach X, $(SIGN_CFG), \
88	$(CC) $(LINK_SCRIPTS_FLAG) -DFLASH_FIRM_START=$($(X)_SIGN) -E $(MAIN_TOPDIR)/build/link/link.ld.S -o $(MAIN_TOPDIR)/$(LINK_PATH)/link_$(X).lds -P; \
89	$(LINK) $(LINKFLAGS) $(GCC_LIBPATH) $(sort $(LIBPATH)) -T$(MAIN_TOPDIR)/$(LINK_PATH)/link_$(X).lds -Map=$(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_$(X).map -o $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_$(X).out --start-group $(LIBS) --end-group; \
90	$(OBJCOPY) -O binary $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_$(X).out $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_$(X).bin; \
91	$(OBJDUMP) -d $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_$(X).out >$(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_$(X).asm; \
92	dd if=$(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_$(X).bin of=$(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_base_$(X).bin seek=0 count=278 bs=1K; \
93	dd if=$(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_$(X).bin of=$(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_kernel_$(X).bin skip=278 bs=1K; )
94endif
95
96ota:
97	$(OTA_TOOL) boot_ota $(TARGET_NAME) $(SIGN_ALG) $(FIRM_WARE_VER) $(BOOT_VER) $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_flash_boot_ota.bin usr_output=$(USR_OUTPUT_DIR)
98ifeq ($(CONFIG_COMPRESSION_OTA_SUPPORT), y)
99	$(OTA_TOOL) ota $(TARGET_NAME) $(SIGN_ALG) $(FIRM_WARE_VER) $(BOOT_VER) $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_ota_temp.bin usr_output=$(USR_OUTPUT_DIR) $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_kernel.bin A;
100	$(OTA_TOOL) burn_bin $(TARGET_NAME) $(SIGN_ALG) $(FIRM_WARE_VER) $(BOOT_VER) $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_burn.bin usr_output=$(USR_OUTPUT_DIR) $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_ota_temp.bin;
101	$(OTA_TOOL) ota_compress $(TARGET_NAME) $(SIGN_ALG) $(FIRM_WARE_VER) $(BOOT_VER) $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_ota.bin usr_output=$(USR_OUTPUT_DIR) $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_ota_temp.bin;
102else
103	$(Q)$(foreach X, $(SIGN_CFG), \
104	$(OTA_TOOL) ota $(TARGET_NAME) $(SIGN_ALG) $(FIRM_WARE_VER) $(BOOT_VER) $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_ota_$X.bin usr_output=$(USR_OUTPUT_DIR) $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_kernel_$(X).bin $X; )
105
106	$(OTA_TOOL) burn_bin $(TARGET_NAME) $(SIGN_ALG) $(FIRM_WARE_VER) $(BOOT_VER) $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_burn.bin usr_output=$(USR_OUTPUT_DIR) $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_kernel_A.bin
107endif
108
109check: link
110ifeq ($(CONFIG_COMPRESSION_OTA_SUPPORT), y)
111	@TARGET_SUM=$(shell sha256sum $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_base.bin | cut -d ' ' -f1) && \
112	if [ "$$TARGET_SUM" == '$(BASE_NUM)' ]; \
113	then echo "#########BASE BIN IS SAME WITH FIRST COMPILE!#########"; \
114	else echo "\033[32m#########BASE BIN IS DIFFERENT WITH FIRST COMPILE!#########\033[0m"; exit 1; fi;
115else
116	$(Q)$(foreach X, $(SIGN_CFG), \
117	TARGET_SUM=$(shell sha256sum $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_base_$(X).bin | cut -d ' ' -f1) && \
118	if [ "$$TARGET_SUM" == '$(BASE_NUM)' ]; \
119	then echo "#########BASE BIN IS SAME WITH FIRST COMPILE!#########"; \
120	else echo "\033[32m#########BASE BIN IS DIFFERENT WITH FIRST COMPILE!#########\033[0m"; exit 1; fi; )
121endif
122
123prepare:
124	$(Q)$(foreach x, $(OUT_DIRS),\
125	if [ ! -d $x ]; \
126	then \
127	mkdir -p $x; \
128	echo create dir $(x) success; \
129	fi;)
130	if [ ! -d $(MAIN_TOPDIR)/third_party/u-boot-v2019.07/u-boot-v2019.07/ ]; \
131	then \
132	cd $(THIRD_DIR)/u-boot-v2019.07; \
133	tar -xvf u-boot-v2019.07.tar.gz; \
134	cd $(U_BOOT_DIR)/u-boot-v2019.07; \
135	patch -p1 < ./../patch/CVE-2019-13103.patch; \
136	patch -p1 < ./../patch/CVE-2019-13104.patch; \
137	patch -p1 < ./../patch/CVE-2019-13105.patch; \
138	patch -p1 < ./../patch/CVE-2019-13106.patch; \
139	patch -p1 < ./../patch/CVE-2019-14192-14193-14199.patch; \
140	patch -p1 < ./../patch/CVE-2019-14194-14198.patch; \
141	patch -p1 < ./../patch/CVE-2019-14195.patch; \
142	patch -p1 < ./../patch/CVE-2019-14196.patch;  \
143	patch -p1 < ./../patch/CVE-2019-14197-14200-14201-14202-14203-14204.patch; \
144	patch -p1 < ./../hisilicon_patch/hisilicon-u-boot-v2019.07.patch ; \
145	cd $(MAIN_TOPDIR);  \
146	fi;
147
148clean:
149	$(Q)$(foreach x, $(OUT_DIRS),\
150	if [ -d $(dir $x) ]; \
151	then \
152	$(RM) $(dir $x); \
153	echo clean dir $(dir $x) success; \
154	fi;)
155	$(RM) $(MAIN_TOPDIR)/build/libs/factory_bin
156	$(RM) $(MAIN_TOPDIR)/build/scripts/__pycache__/
157
158all_clean:
159	$(Q)$(foreach x, $(OUT_DIRS),\
160	if [ -d $(dir $x) ]; \
161	then \
162	$(RM) $(dir $x); \
163	echo clean dir $(dir $x) success; \
164	fi;)
165	$(RM) $(MAIN_TOPDIR)/build/libs/factory_bin
166	$(RM) $(MAIN_TOPDIR)/build/scripts/__pycache__/
167	$(RM) $(MAIN_TOPDIR)/third_party/u-boot-v2019.07/u-boot-v2019.07
168	$(RM) $(MAIN_TOPDIR)/build/config/usr_config.mk.old
169