1include mk/cleanvars.mk 2 3# Set current submodule (used for module specific flags compile result etc) 4sm := $(ta-target) 5sm-$(sm) := y 6 7# Setup compiler for this sub module 8COMPILER_$(sm) ?= $(COMPILER) 9include mk/$(COMPILER_$(sm)).mk 10 11# 12# Config flags from mk/config.mk 13# 14 15ifeq ($(_CFG_TA_STACK_PROTECTOR),y) 16ta-stackp-cflags-$(CFG_TA_STACK_PROTECTOR) := -fstack-protector 17ta-stackp-cflags-$(CFG_TA_STACK_PROTECTOR_STRONG) := -fstack-protector-strong 18ta-stackp-cflags-$(CFG_TA_STACK_PROTECTOR_ALL) := -fstack-protector-all 19else 20ta-stackp-cflags-y := -fno-stack-protector 21endif 22$(sm)-platform-cflags += $(ta-stackp-cflags-y) 23 24ifeq ($(CFG_TA_MBEDTLS_SELF_TEST),y) 25$(sm)-platform-cppflags += -DMBEDTLS_SELF_TEST 26endif 27 28ifeq ($(CFG_TEE_TA_MALLOC_DEBUG),y) 29# Build malloc debug code into libutils, that is, record allocation 30# location and extra sanity checks. 31$(sm)-platform-cppflags += -DENABLE_MDBG=1 32endif 33 34# Config variables to be explicitly exported to the dev kit conf.mk 35ta-mk-file-export-vars-$(sm) += CFG_TA_FLOAT_SUPPORT 36ta-mk-file-export-vars-$(sm) += CFG_CACHE_API 37ta-mk-file-export-vars-$(sm) += CFG_SECURE_DATA_PATH 38ta-mk-file-export-vars-$(sm) += CFG_TA_MBEDTLS_SELF_TEST 39ta-mk-file-export-vars-$(sm) += CFG_TA_MBEDTLS 40ta-mk-file-export-vars-$(sm) += CFG_TA_MBEDTLS_MPI 41ta-mk-file-export-vars-$(sm) += CFG_SYSTEM_PTA 42ta-mk-file-export-vars-$(sm) += CFG_FTRACE_SUPPORT 43ta-mk-file-export-vars-$(sm) += CFG_UNWIND 44ta-mk-file-export-vars-$(sm) += CFG_TA_MCOUNT 45ta-mk-file-export-vars-$(sm) += CFG_TA_BTI 46ta-mk-file-export-vars-$(sm) += CFG_TA_PAUTH 47ta-mk-file-export-vars-$(sm) += CFG_CORE_TPM_EVENT_LOG 48ta-mk-file-export-add-$(sm) += CFG_TEE_TA_LOG_LEVEL ?= $(CFG_TEE_TA_LOG_LEVEL)_nl_ 49ta-mk-file-export-vars-$(sm) += CFG_TA_BGET_TEST 50ta-mk-file-export-vars-$(sm) += CFG_ATTESTATION_PTA 51ta-mk-file-export-vars-$(sm) += CFG_MEMTAG 52ta-mk-file-export-vars-$(sm) += CFG_TA_LIBGCC 53ta-mk-file-export-vars-$(sm) += CFG_TA_SANITIZE_UNDEFINED 54ta-mk-file-export-vars-$(sm) += CFG_TA_SANITIZE_KADDRESS 55ta-mk-file-export-vars-$(sm) += CFG_USER_ASAN_SHADOW_OFFSET 56ta-mk-file-export-vars-$(sm) += _CFG_TA_STACK_PROTECTOR 57 58# Expand platform flags here as $(sm) will change if we have several TA 59# targets. Platform flags should not change after inclusion of ta/ta.mk. 60cppflags$(sm) := $(platform-cppflags) $($(sm)-platform-cppflags) 61cflags$(sm) := $(platform-cflags) $($(sm)-platform-cflags) 62aflags$(sm) := $(platform-aflags) $($(sm)-platform-aflags) 63 64# Changes to cppflags$(sm) will only affect how TA dev kit libraries are 65# compiled, these flags are not propagated to the TA 66cppflags$(sm) += -include $(conf-file) 67cppflags$(sm) += -DTRACE_LEVEL=$(CFG_TEE_TA_LOG_LEVEL) 68ifeq ($(CFG_TA_SANITIZE_UNDEFINED),y) 69cflags$(sm) += -fsanitize=undefined 70endif 71 72ifeq ($(CFG_TA_SANITIZE_KADDRESS),y) 73cflags$(sm) += \ 74 -fsanitize=kernel-address \ 75 -fasan-shadow-offset=$(CFG_USER_ASAN_SHADOW_OFFSET) \ 76 --param=asan-globals=1 \ 77 --param=asan-instrumentation-with-call-threshold=0 \ 78 --param=asan-stack=1 79endif 80 81ifeq ($(ta-target),ta_arm32) 82arm32-user-sysreg-txt = lib/libutee/arch/arm/arm32_user_sysreg.txt 83arm32-user-sysregs-$(arm32-user-sysreg-txt)-h := arm32_user_sysreg.h 84arm32-user-sysregs += $(arm32-user-sysreg-txt) 85 86arm32-user-sysregs-out := $(out-dir)/include/generated 87 88define process-arm32-user-sysreg 89FORCE-GENSRC$(sm): $$(arm32-user-sysregs-out)/$$(arm32-user-sysregs-$(1)-h) 90cleanfiles := $$(cleanfiles) \ 91 $$(arm32-user-sysregs-out)/$$(arm32-user-sysregs-$(1)-h) 92 93$$(arm32-user-sysregs-out)/$$(arm32-user-sysregs-$(1)-h): \ 94 $(1) scripts/arm32_sysreg.py 95 @$(cmd-echo-silent) ' GEN $$@' 96 $(q)mkdir -p $$(dir $$@) 97 $(q)$(PYTHON3) scripts/arm32_sysreg.py --guard __$$(arm32-user-sysregs-$(1)-h) \ 98 < $$< > $$@ 99 100endef #process-arm32-user-sysreg 101 102$(foreach sr, $(arm32-user-sysregs), \ 103 $(eval $(call process-arm32-user-sysreg,$(sr)))) 104 105cppflags$(sm) += -I$(arm32-user-sysregs-out) 106endif 107 108base-prefix := $(sm)- 109 110libname = utils 111libdir = lib/libutils 112libuuid = 71855bba-6055-4293-a63f-b0963a737360 113include mk/lib.mk 114 115libname = mbedtls 116libdir = lib/libmbedtls 117libuuid = 87bb6ae8-4b1d-49fe-9986-2b966132c309 118libl = utils 119include mk/lib.mk 120ta-mk-file-export-vars-$(sm) += CFG_TA_MBEDTLS 121 122libname = utee 123libdir = lib/libutee 124libuuid = 4b3d937e-d57e-418b-8673-1c04f2420226 125libl = mbedtls utils 126include mk/lib.mk 127 128libname = dl 129libdir = lib/libdl 130libuuid = be807bbd-81e1-4dc4-bd99-3d363f240ece 131libl = utee utils 132include mk/lib.mk 133 134base-prefix := 135 136incdirs-host := $(filter-out lib/libutils%, $(incdirs$(sm))) 137incfiles-extra-host := lib/libutils/ext/include/compiler.h 138incfiles-extra-host += lib/libutils/ext/include/util.h 139incfiles-extra-host += lib/libutils/ext/include/types_ext.h 140incfiles-extra-host += $(conf-file) 141incfiles-extra-host += $(conf-mk-file) 142incfiles-extra-host += $(conf-cmake-file) 143incfiles-extra-host += core/include/tee/tee_fs_key_manager.h 144incfiles-extra-host += core/include/tee/fs_htree.h 145incfiles-extra-host += core/include/signed_hdr.h 146ifeq ($(ta-target),ta_arm32) 147incfiles-extra-host += $(out-dir)/include/generated/arm32_user_sysreg.h 148endif 149# 150# Copy lib files and exported headers from each lib 151# 152 153define copy-file 154$2/$$(notdir $1): $1 155 @set -e; \ 156 mkdir -p $$(dir $$@) ; \ 157 $(cmd-echo-silent) ' INSTALL $$@' ; \ 158 cp -P $$< $$@ 159 160cleanfiles += $2/$$(notdir $1) 161ta_dev_kit: $2/$$(notdir $1) 162ta_dev_kit-files += $2/$$(notdir $1) 163ta_dev_kit-files-$3 += $2/$$(notdir $1) 164endef 165 166# Copy the .a files 167$(foreach f, $(libfiles), \ 168 $(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/lib,lib))) 169 170# Copy .mk files 171ta-mkfiles = mk/compile.mk mk/subdir.mk mk/gcc.mk mk/clang.mk mk/cleandirs.mk \ 172 mk/cc-option.mk mk/macros.mk \ 173 ta/link.mk ta/link_shlib.mk \ 174 ta/mk/ta_dev_kit.mk 175 176$(foreach f, $(ta-mkfiles), \ 177 $(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/mk))) 178 179# Copy the .h files for TAs 180define copy-incdir 181sf := $(subst $1/, , $(shell find $1 -name "*.[hS]")) 182$$(foreach h, $$(sf), $$(eval $$(call copy-file, $1/$$(h), \ 183 $$(patsubst %/,%,$$(subst /./,/,$2/$$(dir $$(h)))),$3))) 184endef 185$(foreach d, $(incdirs$(sm)), \ 186 $(eval $(call copy-incdir,$(d),$(out-dir)/export-$(sm)/include,include))) 187 188# Copy the .h files needed by host 189$(foreach d, $(incdirs-host), \ 190 $(eval $(call copy-incdir, $(d), $(out-dir)/export-$(sm)/host_include))) 191$(foreach f, $(incfiles-extra-host), \ 192 $(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/host_include))) 193 194# Copy the src files 195ta-srcfiles = ta/user_ta_header.c ta/arch/$(ARCH)/ta.ld.S 196ifeq ($(ta-target),ta_arm32) 197ta-srcfiles += ta/arch/$(ARCH)/ta_entry_a32.S 198endif 199$(foreach f, $(ta-srcfiles), \ 200 $(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/src))) 201 202# Copy keys 203ta-keys := $(TA_SIGN_KEY) 204# default_ta.pem is a symlink to default.pem, for backwards compatibility. 205# If default_ta.pem is used, copy both files. 206ifeq ($(TA_SIGN_KEY),keys/default_ta.pem) 207ta-keys += keys/default.pem 208endif 209 210$(foreach f, $(ta-keys), \ 211 $(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/keys))) 212 213# Copy the scripts 214ta-scripts = scripts/sign_encrypt.py scripts/symbolize.py \ 215 scripts/sign_rproc_fw.py scripts/ftrace_format.py 216$(foreach f, $(ta-scripts), \ 217 $(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/scripts))) 218 219# Create config file 220conf-mk-file-export := $(out-dir)/export-$(sm)/mk/conf.mk 221sm-$(conf-mk-file-export) := $(sm) 222define mk-file-export 223.PHONY: $(conf-mk-file-export) 224$(conf-mk-file-export): 225 @$$(cmd-echo-silent) ' CHK ' $$@ 226 $(q)mkdir -p $$(dir $$@) 227 $(q)echo sm := $$(sm-$(conf-mk-file-export)) > $$@.tmp 228 $(q)echo sm-$$(sm-$(conf-mk-file-export)) := y >> $$@.tmp 229 $(q)($$(foreach v, $$(ta-mk-file-export-vars-$$(sm-$(conf-mk-file-export))), \ 230 $$(if $$($$(v)),echo $$(v) := $$($$(v));,))) >> $$@.tmp 231 $(q)echo '$$(ta-mk-file-export-add-$$(sm-$(conf-mk-file-export)))' | sed 's/_nl_ */\n/g' >> $$@.tmp 232 $(q)$(call mv-if-changed,$$@.tmp,$$@) 233endef 234$(eval $(mk-file-export)) 235 236cleanfiles := $(cleanfiles) $(conf-mk-file-export) 237ta_dev_kit: $(conf-mk-file-export) 238 239all: ta_dev_kit 240