xref: /optee_os/ta/link_shlib.mk (revision 31b31015b854f6688ce8ea71aed055a1e7f493e1)
1*31b31015Sliushiweiifeq (,$(shlibuuid))
2*31b31015Sliushiwei$(error SHLIBUUID not set)
3*31b31015Sliushiweiendif
4*31b31015Sliushiweilink-out-dir = $(out-dir)
5*31b31015Sliushiwei
6*31b31015SliushiweiSIGN ?= $(TA_DEV_KIT_DIR)/scripts/sign_encrypt.py
7*31b31015SliushiweiTA_SIGN_KEY ?= $(TA_DEV_KIT_DIR)/keys/default_ta.pem
8*31b31015Sliushiwei
9*31b31015Sliushiweiall: $(link-out-dir)/$(shlibname).so $(link-out-dir)/$(shlibname).dmp \
10*31b31015Sliushiwei	$(link-out-dir)/$(shlibname).stripped.so \
11*31b31015Sliushiwei	$(link-out-dir)/$(shlibuuid).elf \
12*31b31015Sliushiwei	$(link-out-dir)/$(shlibuuid).ta
13*31b31015Sliushiwei
14*31b31015Sliushiweicleanfiles += $(link-out-dir)/$(shlibname).so
15*31b31015Sliushiweicleanfiles += $(link-out-dir)/$(shlibname).dmp
16*31b31015Sliushiweicleanfiles += $(link-out-dir)/$(shlibname).stripped.so
17*31b31015Sliushiweicleanfiles += $(link-out-dir)/$(shlibuuid).elf
18*31b31015Sliushiweicleanfiles += $(link-out-dir)/$(shlibuuid).ta
19*31b31015Sliushiwei
20*31b31015Sliushiweishlink-ldflags  = $(LDFLAGS)
21*31b31015Sliushiweishlink-ldflags += -shared -z max-page-size=4096
22*31b31015Sliushiweishlink-ldflags += $(call ld-option,-z separate-loadable-segments)
23*31b31015Sliushiweiifeq ($(sm)-$(CFG_TA_BTI),ta_arm64-y)
24*31b31015Sliushiweishlink-ldflags += $(call ld-option,-z force-bti) --fatal-warnings
25*31b31015Sliushiweiendif
26*31b31015Sliushiweishlink-ldflags += --as-needed # Do not add dependency on unused shlib
27*31b31015Sliushiwei
28*31b31015Sliushiweishlink-ldadd  = $(LDADD)
29*31b31015Sliushiweishlink-ldadd += $(addprefix -L,$(libdirs))
30*31b31015Sliushiweishlink-ldadd += --start-group $(addprefix -l,$(libnames)) --end-group
31*31b31015Sliushiweildargs-$(shlibname).so := $(shlink-ldflags) $(objs) $(shlink-ldadd) $(libgcc$(sm))
32*31b31015Sliushiwei
33*31b31015Sliushiwei
34*31b31015Sliushiwei$(link-out-dir)/$(shlibname).so: $(objs) $(libdeps)
35*31b31015Sliushiwei	@$(cmd-echo-silent) '  LD      $@'
36*31b31015Sliushiwei	$(q)$(LD$(sm)) $(ldargs-$(shlibname).so) --soname=$(shlibuuid) -o $@
37*31b31015Sliushiwei
38*31b31015Sliushiwei$(link-out-dir)/$(shlibname).dmp: $(link-out-dir)/$(shlibname).so
39*31b31015Sliushiwei	@$(cmd-echo-silent) '  OBJDUMP $@'
40*31b31015Sliushiwei	$(q)$(OBJDUMP$(sm)) -l -x -d $< > $@
41*31b31015Sliushiwei
42*31b31015Sliushiwei$(link-out-dir)/$(shlibname).stripped.so: $(link-out-dir)/$(shlibname).so
43*31b31015Sliushiwei	@$(cmd-echo-silent) '  OBJCOPY $@'
44*31b31015Sliushiwei	$(q)$(OBJCOPY$(sm)) --strip-unneeded $< $@
45*31b31015Sliushiwei
46*31b31015Sliushiwei$(link-out-dir)/$(shlibuuid).elf: $(link-out-dir)/$(shlibname).so
47*31b31015Sliushiwei	@$(cmd-echo-silent) '  LN      $@'
48*31b31015Sliushiwei	$(q)ln -sf $(<F) $@
49*31b31015Sliushiwei
50*31b31015Sliushiwei$(link-out-dir)/$(shlibuuid).ta: $(link-out-dir)/$(shlibname).stripped.so \
51*31b31015Sliushiwei				$(TA_SIGN_KEY) $(TA_SUBKEY_DEPS)
52*31b31015Sliushiwei	@$(cmd-echo-silent) '  SIGN    $@'
53*31b31015Sliushiwei	$(q)$(PYTHON3) $(SIGN) --key $(TA_SIGN_KEY) $(TA_SUBKEY_ARGS) \
54*31b31015Sliushiwei		--uuid $(shlibuuid) --in $< --out $@
55