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_STACK_PROTECTOR 55 56# Expand platform flags here as $(sm) will change if we have several TA 57# targets. Platform flags should not change after inclusion of ta/ta.mk. 58cppflags$(sm) := $(platform-cppflags) $($(sm)-platform-cppflags) 59cflags$(sm) := $(platform-cflags) $($(sm)-platform-cflags) 60aflags$(sm) := $(platform-aflags) $($(sm)-platform-aflags) 61 62# Changes to cppflags$(sm) will only affect how TA dev kit libraries are 63# compiled, these flags are not propagated to the TA 64cppflags$(sm) += -include $(conf-file) 65cppflags$(sm) += -DTRACE_LEVEL=$(CFG_TEE_TA_LOG_LEVEL) 66ifeq ($(CFG_TA_SANITIZE_UNDEFINED),y) 67cflags$(sm) += -fsanitize=undefined 68endif 69 70ifeq ($(ta-target),ta_arm32) 71arm32-user-sysreg-txt = lib/libutee/arch/arm/arm32_user_sysreg.txt 72arm32-user-sysregs-$(arm32-user-sysreg-txt)-h := arm32_user_sysreg.h 73arm32-user-sysregs += $(arm32-user-sysreg-txt) 74 75arm32-user-sysregs-out := $(out-dir)/include/generated 76 77define process-arm32-user-sysreg 78FORCE-GENSRC$(sm): $$(arm32-user-sysregs-out)/$$(arm32-user-sysregs-$(1)-h) 79cleanfiles := $$(cleanfiles) \ 80 $$(arm32-user-sysregs-out)/$$(arm32-user-sysregs-$(1)-h) 81 82$$(arm32-user-sysregs-out)/$$(arm32-user-sysregs-$(1)-h): \ 83 $(1) scripts/arm32_sysreg.py 84 @$(cmd-echo-silent) ' GEN $$@' 85 $(q)mkdir -p $$(dir $$@) 86 $(q)$(PYTHON3) scripts/arm32_sysreg.py --guard __$$(arm32-user-sysregs-$(1)-h) \ 87 < $$< > $$@ 88 89endef #process-arm32-user-sysreg 90 91$(foreach sr, $(arm32-user-sysregs), \ 92 $(eval $(call process-arm32-user-sysreg,$(sr)))) 93 94cppflags$(sm) += -I$(arm32-user-sysregs-out) 95endif 96 97base-prefix := $(sm)- 98 99libname = utils 100libdir = lib/libutils 101libuuid = 71855bba-6055-4293-a63f-b0963a737360 102include mk/lib.mk 103 104libname = mbedtls 105libdir = lib/libmbedtls 106libuuid = 87bb6ae8-4b1d-49fe-9986-2b966132c309 107libl = utils 108include mk/lib.mk 109ta-mk-file-export-vars-$(sm) += CFG_TA_MBEDTLS 110 111libname = utee 112libdir = lib/libutee 113libuuid = 4b3d937e-d57e-418b-8673-1c04f2420226 114libl = mbedtls utils 115include mk/lib.mk 116 117libname = dl 118libdir = lib/libdl 119libuuid = be807bbd-81e1-4dc4-bd99-3d363f240ece 120libl = utee utils 121include mk/lib.mk 122 123base-prefix := 124 125incdirs-host := $(filter-out lib/libutils%, $(incdirs$(sm))) 126incfiles-extra-host := lib/libutils/ext/include/compiler.h 127incfiles-extra-host += lib/libutils/ext/include/util.h 128incfiles-extra-host += lib/libutils/ext/include/types_ext.h 129incfiles-extra-host += $(conf-file) 130incfiles-extra-host += $(conf-mk-file) 131incfiles-extra-host += $(conf-cmake-file) 132incfiles-extra-host += core/include/tee/tee_fs_key_manager.h 133incfiles-extra-host += core/include/tee/fs_htree.h 134incfiles-extra-host += core/include/signed_hdr.h 135ifeq ($(ta-target),ta_arm32) 136incfiles-extra-host += $(out-dir)/include/generated/arm32_user_sysreg.h 137endif 138# 139# Copy lib files and exported headers from each lib 140# 141 142define copy-file 143$2/$$(notdir $1): $1 144 @set -e; \ 145 mkdir -p $$(dir $$@) ; \ 146 $(cmd-echo-silent) ' INSTALL $$@' ; \ 147 cp -P $$< $$@ 148 149cleanfiles += $2/$$(notdir $1) 150ta_dev_kit: $2/$$(notdir $1) 151ta_dev_kit-files += $2/$$(notdir $1) 152ta_dev_kit-files-$3 += $2/$$(notdir $1) 153endef 154 155# Copy the .a files 156$(foreach f, $(libfiles), \ 157 $(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/lib,lib))) 158 159# Copy .mk files 160ta-mkfiles = mk/compile.mk mk/subdir.mk mk/gcc.mk mk/clang.mk mk/cleandirs.mk \ 161 mk/cc-option.mk mk/macros.mk \ 162 ta/link.mk ta/link_shlib.mk \ 163 ta/mk/ta_dev_kit.mk 164 165$(foreach f, $(ta-mkfiles), \ 166 $(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/mk))) 167 168# Copy the .h files for TAs 169define copy-incdir 170sf := $(subst $1/, , $(shell find $1 -name "*.[hS]")) 171$$(foreach h, $$(sf), $$(eval $$(call copy-file, $1/$$(h), \ 172 $$(patsubst %/,%,$$(subst /./,/,$2/$$(dir $$(h)))),$3))) 173endef 174$(foreach d, $(incdirs$(sm)), \ 175 $(eval $(call copy-incdir,$(d),$(out-dir)/export-$(sm)/include,include))) 176 177# Copy the .h files needed by host 178$(foreach d, $(incdirs-host), \ 179 $(eval $(call copy-incdir, $(d), $(out-dir)/export-$(sm)/host_include))) 180$(foreach f, $(incfiles-extra-host), \ 181 $(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/host_include))) 182 183# Copy the src files 184ta-srcfiles = ta/user_ta_header.c ta/arch/$(ARCH)/ta.ld.S 185ifeq ($(ta-target),ta_arm32) 186ta-srcfiles += ta/arch/$(ARCH)/ta_entry_a32.S 187endif 188$(foreach f, $(ta-srcfiles), \ 189 $(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/src))) 190 191# Copy keys 192ta-keys := $(TA_SIGN_KEY) 193# default_ta.pem is a symlink to default.pem, for backwards compatibility. 194# If default_ta.pem is used, copy both files. 195ifeq ($(TA_SIGN_KEY),keys/default_ta.pem) 196ta-keys += keys/default.pem 197endif 198 199$(foreach f, $(ta-keys), \ 200 $(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/keys))) 201 202# Copy the scripts 203ta-scripts = scripts/sign_encrypt.py scripts/symbolize.py \ 204 scripts/sign_rproc_fw.py scripts/ftrace_format.py 205$(foreach f, $(ta-scripts), \ 206 $(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/scripts))) 207 208# Create config file 209conf-mk-file-export := $(out-dir)/export-$(sm)/mk/conf.mk 210sm-$(conf-mk-file-export) := $(sm) 211define mk-file-export 212.PHONY: $(conf-mk-file-export) 213$(conf-mk-file-export): 214 @$$(cmd-echo-silent) ' CHK ' $$@ 215 $(q)mkdir -p $$(dir $$@) 216 $(q)echo sm := $$(sm-$(conf-mk-file-export)) > $$@.tmp 217 $(q)echo sm-$$(sm-$(conf-mk-file-export)) := y >> $$@.tmp 218 $(q)($$(foreach v, $$(ta-mk-file-export-vars-$$(sm-$(conf-mk-file-export))), \ 219 $$(if $$($$(v)),echo $$(v) := $$($$(v));,))) >> $$@.tmp 220 $(q)echo '$$(ta-mk-file-export-add-$$(sm-$(conf-mk-file-export)))' | sed 's/_nl_ */\n/g' >> $$@.tmp 221 $(q)$(call mv-if-changed,$$@.tmp,$$@) 222endef 223$(eval $(mk-file-export)) 224 225cleanfiles := $(cleanfiles) $(conf-mk-file-export) 226ta_dev_kit: $(conf-mk-file-export) 227 228all: ta_dev_kit 229