blob: c48af1d0f754b12969b6d43d934aacbb2e380b2a [file] [log] [blame]
link-script$(sm) = ldelf/ldelf.ld.S
link-script-pp$(sm) = $(link-out-dir$(sm))/ldelf.lds
link-script-dep$(sm) = $(link-out-dir$(sm))/.ldelf.ld.d
.PHONY: ldelf
ldelf: $(link-out-dir$(sm))/ldelf.dmp
ldelf: $(link-out-dir$(sm))/ldelf.elf
all: ldelf
cleanfiles += $(link-out-dir$(sm))/ldelf.dmp
cleanfiles += $(link-out-dir$(sm))/ldelf.map
cleanfiles += $(link-out-dir$(sm))/ldelf.elf
cleanfiles += $(link-script-pp$(sm)) $(link-script-dep$(sm))
link-ldflags = -pie -static --gc-sections
link-ldflags += -T $(link-script-pp$(sm))
link-ldflags += -Map=$(link-out-dir$(sm))/ldelf.map
link-ldflags += --sort-section=alignment
link-ldflags += -z max-page-size=4096 # OP-TEE always uses 4K alignment
link-ldflags += $(link-ldflags$(sm))
link-ldadd = $(addprefix -L,$(libdirs))
link-ldadd += --start-group $(addprefix -l,$(libnames)) --end-group
ldargs-ldelf.elf := $(link-ldflags) $(objs) $(link-ldadd)
link-script-cppflags-$(sm) := \
$(filter-out $(CPPFLAGS_REMOVE) $(cppflags-remove), \
$(nostdinc$(sm)) $(CPPFLAGS) \
$(addprefix -I,$(incdirs$(sm)) $(link-out-dir$(sm))) \
$(cppflags$(sm)))
-include $(link-script-dep$(sm))
link-script-pp-makefiles$(sm) = $(filter-out %.d %.cmd,$(MAKEFILE_LIST))
define gen-link-t
$(link-script-pp$(sm)): $(link-script$(sm)) $(conf-file) \
$(link-script-pp-makefiles$(sm))
@$(cmd-echo-silent) ' CPP $$@'
$(q)mkdir -p $$(dir $$@)
$(q)$(CPP$(sm)) -P -MT $$@ -MD -MF $(link-script-dep$(sm)) \
$(link-script-cppflags-$(sm)) $$< -o $$@
$(link-out-dir$(sm))/ldelf.elf: $(objs) $(libdeps) $(link-script-pp$(sm))
@$(cmd-echo-silent) ' LD $$@'
$(q)$(LD$(sm)) $(ldargs-ldelf.elf) -o $$@
$(link-out-dir$(sm))/ldelf.dmp: $(link-out-dir$(sm))/ldelf.elf
@$(cmd-echo-silent) ' OBJDUMP $$@'
$(q)$(OBJDUMP$(sm)) -l -x -d $$< > $$@
endef
$(eval $(call gen-link-t))