xref: /optee_os/ldelf/link.mk (revision 45fecab081173ef58b1cb14b6ddf6892b0b9d3f6)
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
2048685b6cSJerome Forissierifeq ($(CFG_CORE_BTI),y)
2148685b6cSJerome Forissierlink-ldflags += $(call ld-option,-z force-bti) --fatal-warnings
2248685b6cSJerome Forissierendif
232f4d97e7SJerome Forissierifeq ($(CFG_ARM32_$(sm)), y)
242f4d97e7SJerome Forissierlink-ldflags += $(call ld-option,--no-warn-execstack)
252f4d97e7SJerome Forissierendif
267509ff7cSJens Wiklanderlink-ldflags += $(link-ldflags$(sm))
277509ff7cSJens Wiklander
287509ff7cSJens Wiklanderlink-ldadd  = $(addprefix -L,$(libdirs))
297509ff7cSJens Wiklanderlink-ldadd += --start-group $(addprefix -l,$(libnames)) --end-group
30*45fecab0SJens Wiklanderldargs-ldelf.elf := $(link-ldflags) $(objs) $(link-ldadd)
317509ff7cSJens Wiklander
32df7712baSJens Wiklanderlink-script-cppflags-$(sm) := \
337509ff7cSJens Wiklander	$(filter-out $(CPPFLAGS_REMOVE) $(cppflags-remove), \
347509ff7cSJens Wiklander		$(nostdinc$(sm)) $(CPPFLAGS) \
357509ff7cSJens Wiklander		$(addprefix -I,$(incdirs$(sm)) $(link-out-dir$(sm))) \
367509ff7cSJens Wiklander		$(cppflags$(sm)))
377509ff7cSJens Wiklander
387509ff7cSJens Wiklander-include $(link-script-dep$(sm))
397509ff7cSJens Wiklander
407509ff7cSJens Wiklanderlink-script-pp-makefiles$(sm) = $(filter-out %.d %.cmd,$(MAKEFILE_LIST))
417509ff7cSJens Wiklander
427509ff7cSJens Wiklanderdefine gen-link-t
437509ff7cSJens Wiklander$(link-script-pp$(sm)): $(link-script$(sm)) $(conf-file) \
447509ff7cSJens Wiklander			$(link-script-pp-makefiles$(sm))
457509ff7cSJens Wiklander	@$(cmd-echo-silent) '  CPP     $$@'
467509ff7cSJens Wiklander	$(q)mkdir -p $$(dir $$@)
472f6dffbdSJerome Forissier	$(q)$(CPP$(sm)) -P -MT $$@ -MD -MF $(link-script-dep$(sm)) \
482f6dffbdSJerome Forissier		$(link-script-cppflags-$(sm)) $$< -o $$@
497509ff7cSJens Wiklander
507509ff7cSJens Wiklander$(link-out-dir$(sm))/ldelf.elf: $(objs) $(libdeps) $(link-script-pp$(sm))
517509ff7cSJens Wiklander	@$(cmd-echo-silent) '  LD      $$@'
527509ff7cSJens Wiklander	$(q)$(LD$(sm)) $(ldargs-ldelf.elf) -o $$@
537509ff7cSJens Wiklander
547509ff7cSJens Wiklander$(link-out-dir$(sm))/ldelf.dmp: $(link-out-dir$(sm))/ldelf.elf
557509ff7cSJens Wiklander	@$(cmd-echo-silent) '  OBJDUMP $$@'
567509ff7cSJens Wiklander	$(q)$(OBJDUMP$(sm)) -l -x -d $$< > $$@
577509ff7cSJens Wiklanderendef
587509ff7cSJens Wiklander
597509ff7cSJens Wiklander$(eval $(call gen-link-t))
60