xref: /optee_os/ldelf/link.mk (revision 48685b6c6c1f531a9bf65437f7503cf2e28c8560)
17509ff7cSJens Wiklanderlink-script$(sm) = ldelf/ldelf.ld.S
27509ff7cSJens Wiklanderlink-script-pp$(sm) = $(link-out-dir$(sm))/ldelf.lds
37509ff7cSJens Wiklanderlink-script-dep$(sm) = $(link-out-dir$(sm))/.ldelf.ld.d
47509ff7cSJens Wiklander
57509ff7cSJens Wiklander.PHONY: ldelf
67509ff7cSJens Wiklanderldelf: $(link-out-dir$(sm))/ldelf.dmp
77509ff7cSJens Wiklanderldelf: $(link-out-dir$(sm))/ldelf.elf
87509ff7cSJens Wiklanderall: ldelf
97509ff7cSJens Wiklander
107509ff7cSJens Wiklandercleanfiles += $(link-out-dir$(sm))/ldelf.dmp
112d8d7e28SJerome Forissiercleanfiles += $(link-out-dir$(sm))/ldelf.map
127509ff7cSJens Wiklandercleanfiles += $(link-out-dir$(sm))/ldelf.elf
137509ff7cSJens Wiklandercleanfiles += $(link-script-pp$(sm)) $(link-script-dep$(sm))
147509ff7cSJens Wiklander
157509ff7cSJens Wiklanderlink-ldflags  = -pie -static --gc-sections
167509ff7cSJens Wiklanderlink-ldflags += -T $(link-script-pp$(sm))
177509ff7cSJens Wiklanderlink-ldflags += -Map=$(link-out-dir$(sm))/ldelf.map
187509ff7cSJens Wiklanderlink-ldflags += --sort-section=alignment
197509ff7cSJens Wiklanderlink-ldflags += -z max-page-size=4096 # OP-TEE always uses 4K alignment
20*48685b6cSJerome Forissierifeq ($(CFG_CORE_BTI),y)
21*48685b6cSJerome Forissierlink-ldflags += $(call ld-option,-z force-bti) --fatal-warnings
22*48685b6cSJerome Forissierendif
237509ff7cSJens Wiklanderlink-ldflags += $(link-ldflags$(sm))
247509ff7cSJens Wiklander
257509ff7cSJens Wiklanderlink-ldadd  = $(addprefix -L,$(libdirs))
267509ff7cSJens Wiklanderlink-ldadd += --start-group $(addprefix -l,$(libnames)) --end-group
27a03cdefbSVictor Chongldargs-ldelf.elf := $(link-ldflags) $(objs) $(link-ldadd) $(libgcc$(sm))
287509ff7cSJens Wiklander
29df7712baSJens Wiklanderlink-script-cppflags-$(sm) := \
307509ff7cSJens Wiklander	$(filter-out $(CPPFLAGS_REMOVE) $(cppflags-remove), \
317509ff7cSJens Wiklander		$(nostdinc$(sm)) $(CPPFLAGS) \
327509ff7cSJens Wiklander		$(addprefix -I,$(incdirs$(sm)) $(link-out-dir$(sm))) \
337509ff7cSJens Wiklander		$(cppflags$(sm)))
347509ff7cSJens Wiklander
357509ff7cSJens Wiklander-include $(link-script-dep$(sm))
367509ff7cSJens Wiklander
377509ff7cSJens Wiklanderlink-script-pp-makefiles$(sm) = $(filter-out %.d %.cmd,$(MAKEFILE_LIST))
387509ff7cSJens Wiklander
397509ff7cSJens Wiklanderdefine gen-link-t
407509ff7cSJens Wiklander$(link-script-pp$(sm)): $(link-script$(sm)) $(conf-file) \
417509ff7cSJens Wiklander			$(link-script-pp-makefiles$(sm))
427509ff7cSJens Wiklander	@$(cmd-echo-silent) '  CPP     $$@'
437509ff7cSJens Wiklander	$(q)mkdir -p $$(dir $$@)
442f6dffbdSJerome Forissier	$(q)$(CPP$(sm)) -P -MT $$@ -MD -MF $(link-script-dep$(sm)) \
452f6dffbdSJerome Forissier		$(link-script-cppflags-$(sm)) $$< -o $$@
467509ff7cSJens Wiklander
477509ff7cSJens Wiklander$(link-out-dir$(sm))/ldelf.elf: $(objs) $(libdeps) $(link-script-pp$(sm))
487509ff7cSJens Wiklander	@$(cmd-echo-silent) '  LD      $$@'
497509ff7cSJens Wiklander	$(q)$(LD$(sm)) $(ldargs-ldelf.elf) -o $$@
507509ff7cSJens Wiklander
517509ff7cSJens Wiklander$(link-out-dir$(sm))/ldelf.dmp: $(link-out-dir$(sm))/ldelf.elf
527509ff7cSJens Wiklander	@$(cmd-echo-silent) '  OBJDUMP $$@'
537509ff7cSJens Wiklander	$(q)$(OBJDUMP$(sm)) -l -x -d $$< > $$@
547509ff7cSJens Wiklanderendef
557509ff7cSJens Wiklander
567509ff7cSJens Wiklander$(eval $(call gen-link-t))
57