Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 1 | # Input |
| 2 | # |
Jerome Forissier | e59b134 | 2018-05-29 18:03:11 +0200 | [diff] [blame] | 3 | # libname the name of the lib |
| 4 | # libdir directory of lib which also is used as input to |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 5 | # mk/subdir.mk |
Jerome Forissier | fe52b1f | 2014-11-06 17:54:51 +0100 | [diff] [blame] | 6 | # conf-file [optional] if set, all objects will depend on $(conf-file) |
Jerome Forissier | e59b134 | 2018-05-29 18:03:11 +0200 | [diff] [blame] | 7 | # [if CFG_ULIBS_SHARED==y] |
| 8 | # libuuid the UUID of the shared lib |
| 9 | # libl other libraries this library depends on; used to generate the |
| 10 | # proper link arguments (-Lxxx -lyyy) and to add dependencies |
| 11 | # on the needed .so files |
| 12 | # [endif] |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 13 | # |
| 14 | # Output |
| 15 | # |
| 16 | # updated cleanfiles and |
| 17 | # updated libfiles, libdirs, libnames and libdeps |
| 18 | |
| 19 | |
| 20 | subdirs = $(libdir) |
| 21 | include mk/subdir.mk |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 22 | ifeq ($(filter $(sm), core ldelf),) # TA |
Sumit Garg | 735565d | 2019-05-16 18:49:30 +0530 | [diff] [blame] | 23 | ifeq ($(CFG_ULIBS_MCOUNT),y) |
Jerome Forissier | b31756b | 2018-11-15 16:44:03 +0100 | [diff] [blame] | 24 | cflags-lib$(libname)-$(sm) += -pg |
| 25 | endif |
| 26 | endif |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 27 | include mk/compile.mk |
| 28 | |
Jerome Forissier | e59b134 | 2018-05-29 18:03:11 +0200 | [diff] [blame] | 29 | lib-libfile := $(out-dir)/$(base-prefix)$(libdir)/lib$(libname).a |
| 30 | ifeq ($(CFG_ULIBS_SHARED),y) |
| 31 | lib-shlibfile := $(out-dir)/$(base-prefix)$(libdir)/lib$(libname).so |
| 32 | lib-shlibstrippedfile := $(out-dir)/$(base-prefix)$(libdir)/lib$(libname).stripped.so |
| 33 | lib-shlibtafile := $(out-dir)/$(base-prefix)$(libdir)/$(libuuid).ta |
| 34 | lib-libuuidln := $(out-dir)/$(base-prefix)$(libdir)/$(libuuid).elf |
| 35 | lib-shlibfile-$(libname)-$(sm) := $(lib-shlibfile) |
| 36 | lib-libdir-$(libname)-$(sm) := $(out-dir)/$(base-prefix)$(libdir) |
| 37 | lib-needed-so-files := $(foreach l,$(libl),$(lib-shlibfile-$(l)-$(sm))) |
| 38 | lib-Ll-args := $(foreach l,$(libl),-L$(lib-libdir-$(l)-$(sm)) -l$(l)) |
| 39 | endif |
| 40 | cleanfiles := $(lib-libfile) $(lib-shlibfile) $(lib-shlibstrippedfile) $(lib-shlibtafile) $(lib-libuuidln) $(cleanfiles) |
| 41 | libfiles := $(lib-libfile) $(lib-shlibfile) $(lib-shlibstrippedfile) $(lib-shlibtafile) $(lib-libuuidln) $(libfiles) |
Jerome Forissier | 4334e8d | 2014-09-08 10:53:42 +0200 | [diff] [blame] | 42 | libdirs := $(out-dir)/$(base-prefix)$(libdir) $(libdirs) |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 43 | libnames := $(libname) $(libnames) |
Pascal Brand | 0957bcc | 2015-05-19 13:57:25 +0200 | [diff] [blame] | 44 | libdeps := $(lib-libfile) $(libdeps) |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 45 | |
Sumit Garg | 2de17fd | 2019-10-23 12:47:24 +0530 | [diff] [blame] | 46 | SIGN = scripts/sign_encrypt.py |
Jerome Forissier | e59b134 | 2018-05-29 18:03:11 +0200 | [diff] [blame] | 47 | TA_SIGN_KEY ?= keys/default_ta.pem |
| 48 | |
Jerome Forissier | 699f50a | 2014-10-28 17:22:45 +0100 | [diff] [blame] | 49 | define process-lib |
| 50 | ifeq ($(lib-use-ld), y) |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 51 | $(lib-libfile): $(objs) |
Jerome Forissier | 699f50a | 2014-10-28 17:22:45 +0100 | [diff] [blame] | 52 | @echo ' LD $$@' |
| 53 | @mkdir -p $$(dir $$@) |
Jens Wiklander | 1b4eb4f | 2015-02-02 09:19:18 +0100 | [diff] [blame] | 54 | $$(q)$$(LD$(sm)) $(lib-ldflags) -o $$@ $$^ |
Jerome Forissier | 699f50a | 2014-10-28 17:22:45 +0100 | [diff] [blame] | 55 | else |
| 56 | $(lib-libfile): $(objs) |
Jens Wiklander | 6242863 | 2015-04-29 15:05:19 +0200 | [diff] [blame] | 57 | @$(cmd-echo-silent) ' AR $$@' |
Jerome Forissier | 699f50a | 2014-10-28 17:22:45 +0100 | [diff] [blame] | 58 | @mkdir -p $$(dir $$@) |
Jerome Forissier | 4709340 | 2015-09-22 18:02:47 -0700 | [diff] [blame] | 59 | $$(q)rm -f $$@ && $$(AR$(sm)) rcs $$@ $$^ |
Jerome Forissier | 699f50a | 2014-10-28 17:22:45 +0100 | [diff] [blame] | 60 | endif |
Jerome Forissier | e59b134 | 2018-05-29 18:03:11 +0200 | [diff] [blame] | 61 | ifeq ($(CFG_ULIBS_SHARED),y) |
Jerome Forissier | 48685b6 | 2021-12-16 19:08:41 +0100 | [diff] [blame] | 62 | ifeq ($(sm)-$(CFG_TA_BTI),ta_arm64-y) |
Jerome Forissier | b489a61 | 2023-01-25 16:41:36 +0100 | [diff] [blame] | 63 | lib-ldflags$(lib-shlibfile) += $$(call ld-option,-z force-bti) --fatal-warnings |
Jerome Forissier | 48685b6 | 2021-12-16 19:08:41 +0100 | [diff] [blame] | 64 | endif |
Jerome Forissier | e59b134 | 2018-05-29 18:03:11 +0200 | [diff] [blame] | 65 | $(lib-shlibfile): $(objs) $(lib-needed-so-files) |
| 66 | @$(cmd-echo-silent) ' LD $$@' |
| 67 | @mkdir -p $$(dir $$@) |
Jerome Forissier | 4e74e39 | 2020-03-18 11:37:18 +0100 | [diff] [blame] | 68 | $$(q)$$(LD$(sm)) $(lib-ldflags) -shared -z max-page-size=4096 \ |
Jerome Forissier | 8001ec6 | 2020-06-30 09:26:33 +0200 | [diff] [blame] | 69 | $(call ld-option,-z separate-loadable-segments) \ |
Jerome Forissier | b489a61 | 2023-01-25 16:41:36 +0100 | [diff] [blame] | 70 | $$(lib-ldflags$(lib-shlibfile)) \ |
Jerome Forissier | 4e74e39 | 2020-03-18 11:37:18 +0100 | [diff] [blame] | 71 | --soname=$(libuuid) -o $$@ $$(filter-out %.so,$$^) $(lib-Ll-args) |
Jerome Forissier | e59b134 | 2018-05-29 18:03:11 +0200 | [diff] [blame] | 72 | |
| 73 | $(lib-shlibstrippedfile): $(lib-shlibfile) |
| 74 | @$(cmd-echo-silent) ' OBJCOPY $$@' |
| 75 | $$(q)$$(OBJCOPY$(sm)) --strip-unneeded $$< $$@ |
| 76 | |
| 77 | $(lib-shlibtafile): $(lib-shlibstrippedfile) $(TA_SIGN_KEY) |
| 78 | @$(cmd-echo-silent) ' SIGN $$@' |
Dick Olsson | b4faf48 | 2020-07-22 08:49:12 +0200 | [diff] [blame] | 79 | $$(q)$$(PYTHON3) $$(SIGN) --key $(TA_SIGN_KEY) --uuid $(libuuid) --in $$< --out $$@ |
Jerome Forissier | e59b134 | 2018-05-29 18:03:11 +0200 | [diff] [blame] | 80 | |
| 81 | $(lib-libuuidln): $(lib-shlibfile) |
| 82 | @$(cmd-echo-silent) ' LN $$@' |
| 83 | $$(q)ln -sf lib$(libname).so $$@ |
| 84 | endif |
Jerome Forissier | 699f50a | 2014-10-28 17:22:45 +0100 | [diff] [blame] | 85 | endef #process-lib |
| 86 | |
| 87 | $(eval $(call process-lib)) |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 88 | |
Jerome Forissier | fe52b1f | 2014-11-06 17:54:51 +0100 | [diff] [blame] | 89 | $(objs): $(conf-file) |
| 90 | |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 91 | # Clean residues from processing |
| 92 | objs := |
Jerome Forissier | 73dc728 | 2014-09-25 16:04:03 +0200 | [diff] [blame] | 93 | libname := |
Jerome Forissier | e59b134 | 2018-05-29 18:03:11 +0200 | [diff] [blame] | 94 | libuuid := |
Jerome Forissier | 699f50a | 2014-10-28 17:22:45 +0100 | [diff] [blame] | 95 | lib-use-ld := |
Jerome Forissier | e59b134 | 2018-05-29 18:03:11 +0200 | [diff] [blame] | 96 | lib-shlibfile := |
| 97 | lib-shlibstrippedfile := |
| 98 | lib-shlibtafile := |
| 99 | lib-libuuidln := |
| 100 | lib-needed-so-files := |
| 101 | libl := |