aboutsummaryrefslogtreecommitdiff
path: root/ta
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
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')
-rw-r--r--ta/arch/arm/link_shlib.mk41
-rw-r--r--ta/mk/ta_dev_kit.mk11
-rw-r--r--ta/ta.mk3
3 files changed, 52 insertions, 3 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 $@
diff --git a/ta/mk/ta_dev_kit.mk b/ta/mk/ta_dev_kit.mk
index 852323c5..f9832e34 100644
--- a/ta/mk/ta_dev_kit.mk
+++ b/ta/mk/ta_dev_kit.mk
@@ -7,12 +7,14 @@ all:
include $(ta-dev-kit-dir)/mk/conf.mk
-ifneq (1, $(word $(BINARY) $(LIBNAME)))
-$(error You must specify exactly one of BINARY or LIBNAME)
+ifneq (1, $(words $(BINARY) $(LIBNAME) $(SHLIBNAME)))
+$(error You must specify exactly one of BINARY, LIBNAME or SHLIBNAME)
endif
binary := $(BINARY)
libname := $(LIBNAME)
+shlibname := $(SHLIBNAME)
+shlibuuid := $(SHLIBUUID)
ifneq ($O,)
out-dir := $O
@@ -83,6 +85,7 @@ endif
include $(ta-dev-kit-dir)/mk/gcc.mk
include $(ta-dev-kit-dir)/mk/compile.mk
+
ifneq ($(binary),)
include $(ta-dev-kit-dir)/mk/link.mk
endif
@@ -96,3 +99,7 @@ $(libname).a: $(objs)
@echo ' AR $@'
$(q)rm -f $@ && $(AR$(sm)) rcs -o $@ $^
endif
+
+ifneq (,$(shlibname))
+include $(ta-dev-kit-dir)/mk/link_shlib.mk
+endif
diff --git a/ta/ta.mk b/ta/ta.mk
index 7266ee1d..13e086cc 100644
--- a/ta/ta.mk
+++ b/ta/ta.mk
@@ -82,7 +82,8 @@ $(foreach f, $(libfiles), \
# Copy .mk files
ta-mkfiles = mk/compile.mk mk/subdir.mk mk/gcc.mk mk/cleandirs.mk \
- ta/arch/$(ARCH)/link.mk ta/mk/ta_dev_kit.mk
+ ta/arch/$(ARCH)/link.mk ta/arch/$(ARCH)/link_shlib.mk \
+ ta/mk/ta_dev_kit.mk
$(foreach f, $(ta-mkfiles), \
$(eval $(call copy-file, $(f), $(out-dir)/export-$(sm)/mk)))