xref: /optee_os/ldelf/link.mk (revision c96d7091b566e1c37410bfddb5b3c5280ddcc13a)
1link-script$(sm) = ldelf/ldelf.ld.S
2link-script-pp$(sm) = $(link-out-dir$(sm))/ldelf.lds
3link-script-dep$(sm) = $(link-out-dir$(sm))/.ldelf.ld.d
4
5.PHONY: ldelf
6ldelf: $(link-out-dir$(sm))/ldelf.dmp
7ldelf: $(link-out-dir$(sm))/ldelf.elf
8all: ldelf
9
10cleanfiles += $(link-out-dir$(sm))/ldelf.dmp
11cleanfiles += $(link-out-dir$(sm))/ldelf.elf
12cleanfiles += $(link-script-pp$(sm)) $(link-script-dep$(sm))
13
14link-ldflags  = -pie -static --gc-sections
15link-ldflags += -T $(link-script-pp$(sm))
16link-ldflags += -Map=$(link-out-dir$(sm))/ldelf.map
17link-ldflags += --sort-section=alignment
18link-ldflags += -z max-page-size=4096 # OP-TEE always uses 4K alignment
19link-ldflags += $(link-ldflags$(sm))
20
21link-ldadd  = $(addprefix -L,$(libdirs))
22link-ldadd += --start-group $(addprefix -l,$(libnames)) --end-group
23ldargs-ldelf.elf := $(link-ldflags) $(objs) $(link-ldadd)
24
25link-script-cppflags-$(sm) := -DASM=1 \
26	$(filter-out $(CPPFLAGS_REMOVE) $(cppflags-remove), \
27		$(nostdinc$(sm)) $(CPPFLAGS) \
28		$(addprefix -I,$(incdirs$(sm)) $(link-out-dir$(sm))) \
29		$(cppflags$(sm)))
30
31-include $(link-script-dep$(sm))
32
33link-script-pp-makefiles$(sm) = $(filter-out %.d %.cmd,$(MAKEFILE_LIST))
34
35define gen-link-t
36$(link-script-pp$(sm)): $(link-script$(sm)) $(conf-file) \
37			$(link-script-pp-makefiles$(sm))
38	@$(cmd-echo-silent) '  CPP     $$@'
39	$(q)mkdir -p $$(dir $$@)
40	$(q)$(CPP$(sm)) -Wp,-P,-MT,$$@,-MD,$(link-script-dep$(sm)) \
41		$(link-script-cppflags-$(sm)) $$< > $$@
42
43$(link-out-dir$(sm))/ldelf.elf: $(objs) $(libdeps) $(link-script-pp$(sm))
44	@$(cmd-echo-silent) '  LD      $$@'
45	$(q)$(LD$(sm)) $(ldargs-ldelf.elf) -o $$@
46
47$(link-out-dir$(sm))/ldelf.dmp: $(link-out-dir$(sm))/ldelf.elf
48	@$(cmd-echo-silent) '  OBJDUMP $$@'
49	$(q)$(OBJDUMP$(sm)) -l -x -d $$< > $$@
50endef
51
52$(eval $(call gen-link-t))
53