Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 1 | link-script$(sm) = ldelf/ldelf.ld.S |
| 2 | link-script-pp$(sm) = $(link-out-dir$(sm))/ldelf.lds |
| 3 | link-script-dep$(sm) = $(link-out-dir$(sm))/.ldelf.ld.d |
| 4 | |
| 5 | .PHONY: ldelf |
| 6 | ldelf: $(link-out-dir$(sm))/ldelf.dmp |
| 7 | ldelf: $(link-out-dir$(sm))/ldelf.elf |
| 8 | all: ldelf |
| 9 | |
| 10 | cleanfiles += $(link-out-dir$(sm))/ldelf.dmp |
Jerome Forissier | 2d8d7e2 | 2019-10-23 18:12:46 +0200 | [diff] [blame] | 11 | cleanfiles += $(link-out-dir$(sm))/ldelf.map |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 12 | cleanfiles += $(link-out-dir$(sm))/ldelf.elf |
| 13 | cleanfiles += $(link-script-pp$(sm)) $(link-script-dep$(sm)) |
| 14 | |
| 15 | link-ldflags = -pie -static --gc-sections |
| 16 | link-ldflags += -T $(link-script-pp$(sm)) |
| 17 | link-ldflags += -Map=$(link-out-dir$(sm))/ldelf.map |
| 18 | link-ldflags += --sort-section=alignment |
| 19 | link-ldflags += -z max-page-size=4096 # OP-TEE always uses 4K alignment |
Jerome Forissier | 48685b6 | 2021-12-16 19:08:41 +0100 | [diff] [blame] | 20 | ifeq ($(CFG_CORE_BTI),y) |
| 21 | link-ldflags += $(call ld-option,-z force-bti) --fatal-warnings |
| 22 | endif |
Jerome Forissier | 2f4d97e | 2022-08-23 11:41:00 +0000 | [diff] [blame] | 23 | ifeq ($(CFG_ARM32_$(sm)), y) |
| 24 | link-ldflags += $(call ld-option,--no-warn-execstack) |
| 25 | endif |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 26 | link-ldflags += $(link-ldflags$(sm)) |
| 27 | |
| 28 | link-ldadd = $(addprefix -L,$(libdirs)) |
| 29 | link-ldadd += --start-group $(addprefix -l,$(libnames)) --end-group |
Victor Chong | a03cdef | 2020-05-07 10:50:34 +0100 | [diff] [blame] | 30 | ldargs-ldelf.elf := $(link-ldflags) $(objs) $(link-ldadd) $(libgcc$(sm)) |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 31 | |
Jens Wiklander | df7712b | 2019-08-21 11:28:37 +0200 | [diff] [blame] | 32 | link-script-cppflags-$(sm) := \ |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 33 | $(filter-out $(CPPFLAGS_REMOVE) $(cppflags-remove), \ |
| 34 | $(nostdinc$(sm)) $(CPPFLAGS) \ |
| 35 | $(addprefix -I,$(incdirs$(sm)) $(link-out-dir$(sm))) \ |
| 36 | $(cppflags$(sm))) |
| 37 | |
| 38 | -include $(link-script-dep$(sm)) |
| 39 | |
| 40 | link-script-pp-makefiles$(sm) = $(filter-out %.d %.cmd,$(MAKEFILE_LIST)) |
| 41 | |
| 42 | define gen-link-t |
| 43 | $(link-script-pp$(sm)): $(link-script$(sm)) $(conf-file) \ |
| 44 | $(link-script-pp-makefiles$(sm)) |
| 45 | @$(cmd-echo-silent) ' CPP $$@' |
| 46 | $(q)mkdir -p $$(dir $$@) |
Jerome Forissier | 2f6dffb | 2019-09-02 10:51:46 +0200 | [diff] [blame] | 47 | $(q)$(CPP$(sm)) -P -MT $$@ -MD -MF $(link-script-dep$(sm)) \ |
| 48 | $(link-script-cppflags-$(sm)) $$< -o $$@ |
Jens Wiklander | 7509ff7 | 2019-05-23 17:42:08 +0200 | [diff] [blame] | 49 | |
| 50 | $(link-out-dir$(sm))/ldelf.elf: $(objs) $(libdeps) $(link-script-pp$(sm)) |
| 51 | @$(cmd-echo-silent) ' LD $$@' |
| 52 | $(q)$(LD$(sm)) $(ldargs-ldelf.elf) -o $$@ |
| 53 | |
| 54 | $(link-out-dir$(sm))/ldelf.dmp: $(link-out-dir$(sm))/ldelf.elf |
| 55 | @$(cmd-echo-silent) ' OBJDUMP $$@' |
| 56 | $(q)$(OBJDUMP$(sm)) -l -x -d $$< > $$@ |
| 57 | endef |
| 58 | |
| 59 | $(eval $(call gen-link-t)) |