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