• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (C) 2022 Huawei Technologies Co., Ltd.
2# Licensed under the Mulan PSL v2.
3# You can use this software according to the terms and conditions of the Mulan PSL v2.
4# You may obtain a copy of Mulan PSL v2 at:
5#     http://license.coscl.org.cn/MulanPSL2
6# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
7# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
8# PURPOSE.
9# See the Mulan PSL v2 for more details.
10ifneq ($V,)
11VER :=
12else
13VER := @
14endif
15
16ifneq ($(TOPDIR),)
17export TOPDIR := $(TOPDIR)
18else
19export TOPDIR := $(CURDIR)/../
20endif
21
22ifneq (${TARGET_BOARD_PLATFORM},)
23export TARGET_BOARD_PLATFORM := ${TARGET_BOARD_PLATFORM}
24else
25export TARGET_BOARD_PLATFORM := oh_64
26endif
27
28ifneq (${FRAMEWORK_ELF_PATH},)
29export FRAMEWORK_ELF_PATH := ${FRAMEWORK_ELF_PATH}
30else
31export FRAMEWORK_ELF_PATH := $(TOPDIR)/elf_out
32endif
33
34ifneq (${TEE_COMPILER_DIR},)
35export TEE_COMPILER_DIR := ${TEE_COMPILER_DIR}
36else
37export TEE_COMPILER_DIR := $(TOPDIR)/../../../../tools/llvm
38endif
39
40ifneq (${LLVM_BASEVER},)
41export LLVM_BASEVER := ${LLVM_BASEVER}
42else
43export LLVM_BASEVER := 15.0.4
44endif
45
46ifneq ($(THIRDPARTY),)
47	export THIRDPARTY := $(THIRDPARTY)
48else
49	# Try to find third_party directory in default places
50	IS_THIRDPARTY_EMPTY := $(wildcard $(TOPDIR)/../third_party/*)
51	ifneq ($(IS_THIRDPARTY_EMPTY),)
52		export THIRDPARTY := $(TOPDIR)/../third_party/
53	endif
54
55	IS_THIRDPARTY_EMPTY := $(wildcard $(TOPDIR)/../../../third_party/*)
56	ifneq ($(IS_THIRDPARTY_EMPTY),)
57		export THIRDPARTY := $(TOPDIR)/../../../third_party/
58	endif
59endif
60
61export TEE_CLANG_DIR := ${TEE_COMPILER_DIR}/bin
62export TEE_SECUREC_DIR := $(THIRDPARTY)/bounds_checking_function
63export OLD_TOPDIR := $(TOPDIR)/config
64export TOOLS      := $(TOPDIR)/build/tools
65export VER
66export PLATFORM_DIR := $(OLD_TOPDIR)/platform
67export TEELIB := $(TOPDIR)/lib/teelib
68export DRVLIB := $(TOPDIR)/lib/drvlib
69export FRAMEWORK_PATH := $(TOPDIR)/framework
70export SYSLIB := $(TOPDIR)/lib/syslib
71export SERVICES_PATH := $(TOPDIR)/services
72export DRIVERS_PATH := $(TOPDIR)/drivers
73export CONFIG_PATH := $(TOPDIR)/config
74
75export BUILD_TOOLS := $(TOPDIR)/build/tools
76export BUILD_PACK := $(TOPDIR)/build/mk/pack
77export BUILD_LIB := $(TOPDIR)/build/mk/lib_common
78export BUILD_SERVICE := $(TOPDIR)/build/mk/service_common
79export BUILD_DRIVER := $(TOPDIR)/build/mk/driver_common
80export BUILD_FRAMEWORK := $(TOPDIR)/build/mk/framework_common
81export BUILD_CFI := $(TOPDIR)/build/mk/common/cfi
82export BUILD_CONFIG := $(TOPDIR)/build/mk/common/config
83export BUILD_OPERATION := $(TOPDIR)/build/mk/common/operation
84
85export PREBUILD_ROOT := $(TOPDIR)/prebuild
86export OUTPUTDIR := $(TOPDIR)/output
87
88export SDK_VER := tee-kernel-local-release
89
90ifneq ($(PLATFORM),)
91export PLATFORM_DRIVERS_PATH := $(DRIVERS_PATH)/platform/$(PLATFORM)
92endif
93
94PHONY += default
95default: all
96
97# top directory use aarch64
98ARCH = aarch64
99include $(BUILD_CONFIG)/var.mk
100include $(BUILD_CONFIG)/plat_config_file.mk
101
102PHONY += GEN_CONF_FILE PREBUILD_OPENSSL
103
104GEN_CONF_FILE:
105	echo "generated platautoconf.h "
106	rm -rf $(PLAT_AUTOCONF_FILE)
107	test -d $(PREBUILD_DIR)/headers || mkdir -p $(PREBUILD_DIR)/headers
108	touch $(PLAT_AUTOCONF_FILE)
109	grep '.*=.*' < $(CONFIG_FILE) > $(PLAT_AUTOCONF_FILE)
110	sed -i '1i\#define PLAT_AUTO_CONFIG_H' $(PLAT_AUTOCONF_FILE)
111	sed -i '1i\#ifndef PLAT_AUTO_CONFIG_H' $(PLAT_AUTOCONF_FILE)
112	sed -i -r 's/(.*)=y/#define \1\t1/g' $(PLAT_AUTOCONF_FILE)
113	sed -i -r '/(.*)=n/d' $(PLAT_AUTOCONF_FILE)
114	sed -i -r 's/(.*)=(.*)/#define \1\t\2/g' $(PLAT_AUTOCONF_FILE)
115	sed -i '$$a\#endif /* AUTO_CONFIG_H */'  $(PLAT_AUTOCONF_FILE)
116	rm -rf $(PREBUILD_DIR)/headers/.config
117	cat $(CONFIG_FILE) | tee $(PREBUILD_DIR)/headers/.config
118
119PREBUILD_OPENSSL:
120	@bash $(TOPDIR)/lib/teelib/libopenssl/build_openssl.sh $(THIRDPARTY) $(TOPDIR)
121
122export CONFIG_CRYPTO_SOFT_ENGINE := $(CONFIG_CRYPTO_SOFT_ENGINE)
123
124export PLAT_CFG_DIR := $(PLATFORM_DIR)/$(PLATFORM_NAME)/$(PRODUCT_NAME)/$(CHIP_NAME)/plat_cfg
125export PLAT_COMMON_DIR := $(PLATFORM_DIR)/common
126ifneq ($(strip $(TARGET_BOARD_PLATFORM)), )
127ifeq ($(LIBS_INSTALL_DIR),)
128include $(BUILD_PACK)/plat_config.mk
129endif
130endif
131include $(BUILD_CONFIG)/toolchain.mk
132include $(BUILD_OPERATION)/project.mk
133
134# for install header
135ifeq ($(HDR_INSTALL_DIR),)
136HDR_INSTALL_DIR:=$(HDR_L_DIR)
137$(shell test -d $(HDR_INSTALL_DIR) || mkdir -p $(HDR_INSTALL_DIR))
138endif
139
140check_platform:
141ifndef PLATFORM
142	$(error PLATFORM is not set)
143endif
144	@echo "PLATFORM is set to $(PLATFORM)"
145
146PHONY += check_platform
147
148# default target
149PHONY += libs $(drivers) $(platform_drivers) $(frameworks) $(service) package
150all: install_headers setup_links libs $(drivers) $(platform_drivers) $(frameworks) $(service) package
151tees: setup_links libs $(drivers) $(platform_drivers) $(frameworks) $(service)
152$(drivers): setup_links libs link_libs
153$(platform_drivers): check_platform setup_links libs link_libs
154$(frameworks): setup_links libs link_libs
155$(service): setup_links libs link_libs
156package: check_sym
157	@mkdir -p $(FRAMEWORK_ELF_PATH)
158	@mkdir -p $(FRAMEWORK_ELF_PATH)/apps
159	cp -a $(product_apps) $(FRAMEWORK_ELF_PATH)/apps
160
161ifeq ($(CONFIG_SUPPORT_64BIT),)
162PHONY += link_libs link_arm_libs link_aarch64_libs $(product_apps)
163link_libs: link_arm_libs link_aarch64_libs
164endif
165
166ifeq ($(CONFIG_SUPPORT_64BIT), false)
167PHONY += link_libs link_arm_libs $(product_apps)
168link_libs: link_arm_libs
169endif
170
171ifeq ($(CONFIG_SUPPORT_64BIT), true)
172PHONY += link_libs link_aarch64_libs $(product_apps)
173link_libs: link_aarch64_libs
174endif
175
176link_arm_libs: libs
177	@echo "[link] libs=$(libs)"
178	$(VER) PBD=$(PREBUILD_LIBS)/arm/ ; \
179	for lib in `ls $$PBD`; do \
180		link=$(OUTPUTDIR)/arm/libs/$$lib ; \
181		f=$$PBD/$$lib ; \
182		if [ ! -L $$link ] && [ ! -e $$link ] ; then \
183			ln -s $$f $$link && \
184			echo "link prebuild library: $$link" ; \
185		fi \
186	done
187
188link_aarch64_libs: libs
189	@echo "[link] aarch libs=$(libs)"
190	$(VER) PBD=$(PREBUILD_LIBS)/aarch64/ ; \
191	for lib in `ls $$PBD`; do \
192		link=$(OUTPUTDIR)/aarch64/libs/$$lib ; \
193		f=$$PBD/$$lib ; \
194		if [ ! -L $$link ] && [ ! -e $$link ] ; then \
195			ln -s $$f $$link && \
196			echo "link prebuild library: $$link" ; \
197		fi \
198	done
199
200check_sym: $(product_apps)
201	@if [ "xy" = "xy" ] ; then \
202	set -e ;\
203	for i in $(check-syms-y) ; do \
204		echo " [ CHECK SYMS ]: $$i" ;\
205		$(BUILD_TOOLS)/generate_img/check-syms.sh $$i \
206			$(PREBUILD_LIBS)/arm/libc_shared_a32.so \
207			$(OUTPUTDIR)/arm/obj/arm/libtee_shared/libtee_shared_a32.so; \
208	done ;\
209	for i in $(check-a64-syms-y) ; do \
210		echo " [ CHECK a64 SYMS ]: $$i" ;\
211		$(BUILD_TOOLS)/generate_img/check-syms.sh $$i \
212			$(PREBUILD_LIBS)/aarch64/libc_shared.so \
213			$(OUTPUTDIR)/aarch64/obj/aarch64/libtee_shared/libtee_shared.so \
214			$(OUTPUTDIR)/aarch64/obj/aarch64/libdrv_shared/libdrv_shared.so; \
215	done ; fi
216	$(BUILD_TOOLS)/generate_img/smart-strip.sh $(product_apps)
217
218## setup & clean directory symbol-links, to compatible with CI circle-complexity
219setup_links:
220
221clean_links:
222
223## install headers:
224install_headers: setup_links $(HDR_INSTALL_DIR)/.timestamp
225$(HDR_INSTALL_DIR)/.timestamp:
226	@echo "before tools ${EXPORT_HDRS}"
227	$(VER) if [ -f "$(PLATFORM_DIR)/${PLATFORM_NAME}/${PRODUCT_NAME}/${CHIP_NAME}/plat_cfg/plat_cfg.h" ] ; then \
228	cp $(PLATFORM_DIR)/${PLATFORM_NAME}/${PRODUCT_NAME}/${CHIP_NAME}/plat_cfg/plat_cfg.h $(HDR_INSTALL_DIR)/; fi;
229	touch $(HDR_INSTALL_DIR)/.timestamp
230
231## install libs:
232install_libs:
233	@for l in $(OUTPUTDIR)/arm/libs/* $(OUTPUTDIR)/aarch64/libs/*; do \
234		if [ -e $$l ] && [ ! -L $$l ]; then cp -rf $$l $(LIBS_INSTALL_DIR); fi; \
235	done
236
237PHONY += release
238release:
239	@echo "!!compile release"
240	@rm -rf tools/elf_extract
241
242PHONY += clean
243clean: clean_links
244	bash $(TOPDIR)/lib/teelib/libopenssl/clean_openssl.sh $(TOPDIR)
245	@rm -rf $(OUTPUTDIR)
246	@rm -rf sec_trustedcore.img
247	@rm -rf tools/linker.lds_pp
248	@rm -rf $(TOPDIR)/prebuild
249
250.PHONY: $(PHONY)
251