1*31b31015Sliushiweilink-script$(sm) = $(ta-dev-kit-dir$(sm))/src/ta.ld.S 2*31b31015Sliushiweilink-script-pp$(sm) = $(link-out-dir$(sm))/ta.lds 3*31b31015Sliushiweilink-script-dep$(sm) = $(link-out-dir$(sm))/.ta.ld.d 4*31b31015Sliushiwei 5*31b31015SliushiweiSIGN_ENC ?= $(PYTHON3) $(ta-dev-kit-dir$(sm))/scripts/sign_encrypt.py 6*31b31015SliushiweiTA_SIGN_KEY ?= $(ta-dev-kit-dir$(sm))/keys/default_ta.pem 7*31b31015Sliushiwei 8*31b31015Sliushiweiifeq ($(CFG_ENCRYPT_TA),y) 9*31b31015Sliushiwei# Default TA encryption key is a dummy key derived from default 10*31b31015Sliushiwei# hardware unique key (an array of 16 zero bytes) to demonstrate 11*31b31015Sliushiwei# usage of REE-FS TAs encryption feature. 12*31b31015Sliushiwei# 13*31b31015Sliushiwei# Note that a user of this TA encryption feature needs to provide 14*31b31015Sliushiwei# encryption key and its handling corresponding to their security 15*31b31015Sliushiwei# requirements. 16*31b31015SliushiweiTA_ENC_KEY ?= 'b64d239b1f3c7d3b06506229cd8ff7c8af2bb4db2168621ac62c84948468c4f4' 17*31b31015Sliushiweiendif 18*31b31015Sliushiwei 19*31b31015Sliushiweiall: $(link-out-dir$(sm))/$(user-ta-uuid).dmp \ 20*31b31015Sliushiwei $(link-out-dir$(sm))/$(user-ta-uuid).stripped.elf \ 21*31b31015Sliushiwei $(link-out-dir$(sm))/$(user-ta-uuid).ta 22*31b31015Sliushiweicleanfiles += $(link-out-dir$(sm))/$(user-ta-uuid).elf 23*31b31015Sliushiweicleanfiles += $(link-out-dir$(sm))/$(user-ta-uuid).dmp 24*31b31015Sliushiweicleanfiles += $(link-out-dir$(sm))/$(user-ta-uuid).map 25*31b31015Sliushiweicleanfiles += $(link-out-dir$(sm))/$(user-ta-uuid).stripped.elf 26*31b31015Sliushiweicleanfiles += $(link-out-dir$(sm))/$(user-ta-uuid).ta 27*31b31015Sliushiweicleanfiles += $(link-script-pp$(sm)) $(link-script-dep$(sm)) 28*31b31015Sliushiwei 29*31b31015Sliushiweilink-ldflags = -e__ta_entry -pie 30*31b31015Sliushiweilink-ldflags += -T $(link-script-pp$(sm)) 31*31b31015Sliushiweilink-ldflags += -Map=$(link-out-dir$(sm))/$(user-ta-uuid).map 32*31b31015Sliushiweilink-ldflags += --sort-section=alignment 33*31b31015Sliushiweilink-ldflags += -z max-page-size=4096 # OP-TEE always uses 4K alignment 34*31b31015Sliushiweiifeq ($(sm)-$(CFG_TA_BTI),ta_arm64-y) 35*31b31015Sliushiweilink-ldflags += $(call ld-option,-z force-bti) --fatal-warnings 36*31b31015Sliushiweiendif 37*31b31015Sliushiweilink-ldflags += --as-needed # Do not add dependency on unused shlib 38*31b31015Sliushiweilink-ldflags += $(link-ldflags$(sm)) 39*31b31015Sliushiwei 40*31b31015Sliushiwei$(link-out-dir$(sm))/dyn_list: 41*31b31015Sliushiwei @$(cmd-echo-silent) ' GEN $@' 42*31b31015Sliushiwei $(q)mkdir -p $(dir $@) 43*31b31015Sliushiwei $(q)echo "{" >$@ 44*31b31015Sliushiwei $(q)echo "__elf_phdr_info;" >>$@ 45*31b31015Sliushiweiifeq ($(CFG_FTRACE_SUPPORT),y) 46*31b31015Sliushiwei $(q)echo "__ftrace_info;" >>$@ 47*31b31015Sliushiweiendif 48*31b31015Sliushiwei $(q)echo "trace_ext_prefix;" >>$@ 49*31b31015Sliushiwei $(q)echo "trace_level;" >>$@ 50*31b31015Sliushiwei $(q)echo "};" >>$@ 51*31b31015Sliushiweilink-ldflags += --dynamic-list $(link-out-dir$(sm))/dyn_list 52*31b31015Sliushiweidynlistdep = $(link-out-dir$(sm))/dyn_list 53*31b31015Sliushiweicleanfiles += $(link-out-dir$(sm))/dyn_list 54*31b31015Sliushiwei 55*31b31015Sliushiweilink-ldadd = $(user-ta-ldadd) $(addprefix -L,$(libdirs)) 56*31b31015Sliushiweilink-ldadd += --start-group 57*31b31015Sliushiweilink-ldadd += $(addprefix -l,$(libnames)) 58*31b31015Sliushiweiifneq (,$(filter %.cpp,$(srcs))) 59*31b31015Sliushiweilink-ldflags += --eh-frame-hdr 60*31b31015Sliushiweilink-ldadd += $(libstdc++$(sm)) $(libgcc_eh$(sm)) 61*31b31015Sliushiweiendif 62*31b31015Sliushiweilink-ldadd += --end-group 63*31b31015Sliushiwei 64*31b31015Sliushiweilink-ldadd-after-libgcc += $(addprefix -l,$(libnames-after-libgcc)) 65*31b31015Sliushiwei 66*31b31015Sliushiweildargs-$(user-ta-uuid).elf := $(link-ldflags) $(objs) $(link-ldadd) \ 67*31b31015Sliushiwei $(libgcc$(sm)) $(link-ldadd-after-libgcc) 68*31b31015Sliushiwei 69*31b31015Sliushiweilink-script-cppflags-$(sm) := \ 70*31b31015Sliushiwei $(filter-out $(CPPFLAGS_REMOVE) $(cppflags-remove), \ 71*31b31015Sliushiwei $(nostdinc$(sm)) $(CPPFLAGS) \ 72*31b31015Sliushiwei $(addprefix -I,$(incdirs$(sm)) $(link-out-dir$(sm))) \ 73*31b31015Sliushiwei $(cppflags$(sm))) 74*31b31015Sliushiwei 75*31b31015Sliushiwei-include $(link-script-dep$(sm)) 76*31b31015Sliushiwei 77*31b31015Sliushiweilink-script-pp-makefiles$(sm) = $(filter-out %.d %.cmd,$(MAKEFILE_LIST)) 78*31b31015Sliushiwei 79*31b31015Sliushiweidefine gen-link-t 80*31b31015Sliushiwei$(link-script-pp$(sm)): $(link-script$(sm)) $(conf-file) $(link-script-pp-makefiles$(sm)) 81*31b31015Sliushiwei @$(cmd-echo-silent) ' CPP $$@' 82*31b31015Sliushiwei $(q)mkdir -p $$(dir $$@) 83*31b31015Sliushiwei $(q)$(CPP$(sm)) -P -MT $$@ -MD -MF $(link-script-dep$(sm)) \ 84*31b31015Sliushiwei $(link-script-cppflags-$(sm)) $$< -o $$@ 85*31b31015Sliushiwei 86*31b31015Sliushiwei$(link-out-dir$(sm))/$(user-ta-uuid).elf: $(objs) $(libdeps) \ 87*31b31015Sliushiwei $(libdeps-after-libgcc) \ 88*31b31015Sliushiwei $(link-script-pp$(sm)) \ 89*31b31015Sliushiwei $(dynlistdep) \ 90*31b31015Sliushiwei $(additional-link-deps) 91*31b31015Sliushiwei @$(cmd-echo-silent) ' LD $$@' 92*31b31015Sliushiwei $(q)$(LD$(sm)) $(ldargs-$(user-ta-uuid).elf) -o $$@ 93*31b31015Sliushiwei 94*31b31015Sliushiwei$(link-out-dir$(sm))/$(user-ta-uuid).dmp: \ 95*31b31015Sliushiwei $(link-out-dir$(sm))/$(user-ta-uuid).elf 96*31b31015Sliushiwei @$(cmd-echo-silent) ' OBJDUMP $$@' 97*31b31015Sliushiwei $(q)$(OBJDUMP$(sm)) -l -x -d $$< > $$@ 98*31b31015Sliushiwei 99*31b31015Sliushiwei$(link-out-dir$(sm))/$(user-ta-uuid).stripped.elf: \ 100*31b31015Sliushiwei $(link-out-dir$(sm))/$(user-ta-uuid).elf 101*31b31015Sliushiwei @$(cmd-echo-silent) ' OBJCOPY $$@' 102*31b31015Sliushiwei $(q)$(OBJCOPY$(sm)) --strip-unneeded $$< $$@ 103*31b31015Sliushiwei 104*31b31015Sliushiweicmd-echo$(user-ta-uuid) := SIGN # 105*31b31015Sliushiweiifeq ($(CFG_ENCRYPT_TA),y) 106*31b31015Sliushiweicrypt-args$(user-ta-uuid) := --enc-key $(TA_ENC_KEY) 107*31b31015Sliushiweicmd-echo$(user-ta-uuid) := SIGNENC 108*31b31015Sliushiweiendif 109*31b31015Sliushiwei$(link-out-dir$(sm))/$(user-ta-uuid).ta: \ 110*31b31015Sliushiwei $(link-out-dir$(sm))/$(user-ta-uuid).stripped.elf \ 111*31b31015Sliushiwei $(TA_SIGN_KEY) $(TA_SUBKEY_DEPS) \ 112*31b31015Sliushiwei $(lastword $(SIGN_ENC)) 113*31b31015Sliushiwei @$(cmd-echo-silent) ' $$(cmd-echo$(user-ta-uuid)) $$@' 114*31b31015Sliushiwei $(q)$(SIGN_ENC) --key $(TA_SIGN_KEY) $(TA_SUBKEY_ARGS) \ 115*31b31015Sliushiwei $$(crypt-args$(user-ta-uuid)) \ 116*31b31015Sliushiwei --uuid $(user-ta-uuid) --ta-version $(user-ta-version) \ 117*31b31015Sliushiwei --in $$< --out $$@ 118*31b31015Sliushiweiendef 119*31b31015Sliushiwei 120*31b31015Sliushiwei$(eval $(call gen-link-t)) 121*31b31015Sliushiwei 122*31b31015Sliushiweiadditional-link-deps := 123