1# Input 2# 3# libname the name of the lib 4# libdir directory of lib which also is used as input to 5# mk/subdir.mk 6# conf-file [optional] if set, all objects will depend on $(conf-file) 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] 13# 14# Output 15# 16# updated cleanfiles and 17# updated libfiles, libdirs, libnames and libdeps 18 19 20subdirs = $(libdir) 21include mk/subdir.mk 22ifeq ($(filter $(sm), core ldelf),) # TA 23ifeq ($(CFG_ULIBS_MCOUNT),y) 24cflags-lib$(libname)-$(sm) += -pg 25endif 26endif 27include mk/compile.mk 28 29lib-libfile := $(out-dir)/$(base-prefix)$(libdir)/lib$(libname).a 30ifeq ($(CFG_ULIBS_SHARED),y) 31lib-shlibfile := $(out-dir)/$(base-prefix)$(libdir)/lib$(libname).so 32lib-shlibstrippedfile := $(out-dir)/$(base-prefix)$(libdir)/lib$(libname).stripped.so 33lib-shlibtafile := $(out-dir)/$(base-prefix)$(libdir)/$(libuuid).ta 34lib-libuuidln := $(out-dir)/$(base-prefix)$(libdir)/$(libuuid).elf 35lib-shlibfile-$(libname)-$(sm) := $(lib-shlibfile) 36lib-libdir-$(libname)-$(sm) := $(out-dir)/$(base-prefix)$(libdir) 37lib-needed-so-files := $(foreach l,$(libl),$(lib-shlibfile-$(l)-$(sm))) 38lib-Ll-args := $(foreach l,$(libl),-L$(lib-libdir-$(l)-$(sm)) -l$(l)) 39endif 40cleanfiles := $(lib-libfile) $(lib-shlibfile) $(lib-shlibstrippedfile) $(lib-shlibtafile) $(lib-libuuidln) $(cleanfiles) 41libfiles := $(lib-libfile) $(lib-shlibfile) $(lib-shlibstrippedfile) $(lib-shlibtafile) $(lib-libuuidln) $(libfiles) 42libdirs := $(out-dir)/$(base-prefix)$(libdir) $(libdirs) 43libnames := $(libname) $(libnames) 44libdeps := $(lib-libfile) $(libdeps) 45 46SIGN = scripts/sign.py 47TA_SIGN_KEY ?= keys/default_ta.pem 48 49define process-lib 50ifeq ($(lib-use-ld), y) 51$(lib-libfile): $(objs) 52 @echo ' LD $$@' 53 @mkdir -p $$(dir $$@) 54 $$(q)$$(LD$(sm)) $(lib-ldflags) -o $$@ $$^ 55else 56$(lib-libfile): $(objs) 57 @$(cmd-echo-silent) ' AR $$@' 58 @mkdir -p $$(dir $$@) 59 $$(q)rm -f $$@ && $$(AR$(sm)) rcs $$@ $$^ 60endif 61ifeq ($(CFG_ULIBS_SHARED),y) 62$(lib-shlibfile): $(objs) $(lib-needed-so-files) 63 @$(cmd-echo-silent) ' LD $$@' 64 @mkdir -p $$(dir $$@) 65 $$(q)$$(LD$(sm)) $(lib-ldflags) $(lib-Ll-args) -shared \ 66 -z max-page-size=4096 --soname=$(libuuid) -o $$@ $$^ 67 68$(lib-shlibstrippedfile): $(lib-shlibfile) 69 @$(cmd-echo-silent) ' OBJCOPY $$@' 70 $$(q)$$(OBJCOPY$(sm)) --strip-unneeded $$< $$@ 71 72$(lib-shlibtafile): $(lib-shlibstrippedfile) $(TA_SIGN_KEY) 73 @$(cmd-echo-silent) ' SIGN $$@' 74 $$(q)$$(SIGN) --key $(TA_SIGN_KEY) --uuid $(libuuid) --in $$< --out $$@ 75 76$(lib-libuuidln): $(lib-shlibfile) 77 @$(cmd-echo-silent) ' LN $$@' 78 $$(q)ln -sf lib$(libname).so $$@ 79endif 80endef #process-lib 81 82$(eval $(call process-lib)) 83 84$(objs): $(conf-file) 85 86# Clean residues from processing 87objs := 88libname := 89libuuid := 90lib-use-ld := 91lib-shlibfile := 92lib-shlibstrippedfile := 93lib-shlibtafile := 94lib-libuuidln := 95lib-needed-so-files := 96libl := 97