aboutsummaryrefslogtreecommitdiff
path: root/ta/arch
diff options
context:
space:
mode:
authorJerome Forissier <jerome.forissier@linaro.org>2018-02-06 16:25:53 +0100
committerJérôme Forissier <jerome.forissier@linaro.org>2018-05-04 15:58:52 +0200
commitf8896d1301fc1fbb4eef751c4c9de1d2969c1190 (patch)
tree35921dfc97ee16e840584da932bee644ab942ca7 /ta/arch
parentceae7156316bb24975a0eb6a3b62c02848af64eb (diff)
TA dev kit: add support for creating shared libraries
A new Makefile include (ta/arch/arm/link_shlib.mk) is introduced, it is quite similar to the file used to generate a TA (ta/arch/arm/link.mk) except that is produces a shared object: $(SHLIBNAME).so. A signed file is also produced: $(SHLIBUUID).ta. Actual support for dynamically linked TAs in the OP-TEE ELF loader will be added in subsequent patches. Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Joakim Bech <joakim.bech@linaro.org>
Diffstat (limited to 'ta/arch')
-rw-r--r--ta/arch/arm/link_shlib.mk41
1 files changed, 41 insertions, 0 deletions
diff --git a/ta/arch/arm/link_shlib.mk b/ta/arch/arm/link_shlib.mk
new file mode 100644
index 00000000..717097ad
--- /dev/null
+++ b/ta/arch/arm/link_shlib.mk
@@ -0,0 +1,41 @@
+ifeq (,$(shlibuuid))
+$(error SHLIBUUID not set)
+endif
+link-out-dir = $(out-dir)
+
+SIGN = $(TA_DEV_KIT_DIR)/scripts/sign.py
+TA_SIGN_KEY ?= $(TA_DEV_KIT_DIR)/keys/default_ta.pem
+
+all: $(link-out-dir)/$(shlibname).so $(link-out-dir)/$(shlibname).dmp \
+ $(link-out-dir)/$(shlibname).stripped.so \
+ $(link-out-dir)/$(shlibuuid).ta
+
+cleanfiles += $(link-out-dir)/$(shlibname).so
+cleanfiles += $(link-out-dir)/$(shlibname).dmp
+cleanfiles += $(link-out-dir)/$(shlibname).stripped.so
+cleanfiles += $(link-out-dir)/$(shlibuuid).ta
+
+shlink-ldflags = $(LDFLAGS)
+shlink-ldflags += -shared
+
+shlink-ldadd = $(LDADD)
+ldargs-$(shlibname).so := $(shlink-ldflags) $(objs) $(shlink-ldadd)
+
+
+$(link-out-dir)/$(shlibname).so: $(objs) $(libdeps)
+ @$(cmd-echo-silent) ' LD $@'
+ $(q)$(LD$(sm)) $(ldargs-$(shlibname).so) --soname=$(shlibuuid) -o $@
+
+$(link-out-dir)/$(shlibname).dmp: $(link-out-dir)/$(shlibname).so
+ @$(cmd-echo-silent) ' OBJDUMP $@'
+ $(q)$(OBJDUMP$(sm)) -l -x -d $< > $@
+
+$(link-out-dir)/$(shlibname).stripped.so: $(link-out-dir)/$(shlibname).so
+ @$(cmd-echo-silent) ' OBJCOPY $@'
+ $(q)$(OBJCOPY$(sm)) --strip-unneeded $< $@
+
+$(link-out-dir)/$(shlibuuid).ta: $(link-out-dir)/$(shlibname).stripped.so \
+ $(TA_SIGN_KEY)
+ @echo ' SIGN $@'
+ $(q)$(SIGN) --key $(TA_SIGN_KEY) --uuid $(shlibuuid) --version 0 \
+ --in $< --out $@