1link-out-dir = $(out-dir)/core 2 3link-script = $(platform-dir)/kern.ld.S 4link-script-pp = $(link-out-dir)/kern.ld 5link-script-dep = $(link-out-dir)/.kern.ld.d 6 7AWK = awk 8 9 10link-ldflags = $(LDFLAGS) 11link-ldflags += -T $(link-script-pp) -Map=$(link-out-dir)/tee.map 12link-ldflags += --sort-section=alignment 13link-ldflags += --fatal-warnings 14link-ldflags += --print-gc-sections 15 16link-ldadd = $(LDADD) 17link-ldadd += $(addprefix -L,$(libdirs)) 18link-ldadd += $(addprefix -l,$(libnames)) 19ldargs-tee.elf := $(link-ldflags) $(objs) $(link-ldadd) $(libgcccore) 20 21link-script-cppflags := -DASM=1 \ 22 $(filter-out $(CPPFLAGS_REMOVE) $(cppflags-remove), \ 23 $(nostdinccore) $(CPPFLAGS) \ 24 $(addprefix -I,$(incdirscore) $(link-out-dir)) \ 25 $(cppflagscore)) 26 27entries-unpaged += tee_pager_abort_handler 28entries-unpaged += thread_init_vbar 29entries-unpaged += sm_init 30entries-unpaged += core_init_mmu_regs 31entries-unpaged += generic_boot_cpu_on_handler 32entries-unpaged += generic_boot_init_secondary 33entries-unpaged += stack_tmp_top 34objs-unpaged := \ 35 $(filter-out $(addprefix $(out-dir)/, $(objs-unpaged-rem)), $(objs)) 36ldargs-unpaged := -i --gc-sections \ 37 $(addprefix -u, $(entries-unpaged)) \ 38 $(objs-unpaged) $(link-ldadd) $(libgcccore) 39cleanfiles += $(link-out-dir)/unpaged.o 40$(link-out-dir)/unpaged.o: $(objs-unpaged) $(libdeps) $(MAKEFILE_LIST) 41 @$(cmd-echo-silent) ' LD $@' 42 $(q)$(LDcore) $(ldargs-unpaged) -o $@ 43 44cleanfiles += $(link-out-dir)/text_unpaged.ld.S: 45$(link-out-dir)/text_unpaged.ld.S: $(link-out-dir)/unpaged.o 46 @$(cmd-echo-silent) ' GEN $@' 47 $(q)$(READELFcore) -a -W $< | ${AWK} -f ./scripts/gen_ld_text_sects.awk > $@ 48 49cleanfiles += $(link-out-dir)/rodata_unpaged.ld.S: 50$(link-out-dir)/rodata_unpaged.ld.S: $(link-out-dir)/unpaged.o 51 @$(cmd-echo-silent) ' GEN $@' 52 $(q)$(READELFcore) -a -W $< | \ 53 ${AWK} -f ./scripts/gen_ld_rodata_sects.awk > $@ 54 55objs-init-rem += core/arch/arm/tee/arch_svc.o 56objs-init-rem += core/arch/arm/tee/arch_svc_asm.o 57objs-init-rem += core/arch/arm/tee/init.o 58objs-init-rem += core/arch/arm/tee/entry.o 59entries-init += _start 60objs-init := \ 61 $(filter-out $(addprefix $(out-dir)/, $(objs-init-rem)), $(objs)) 62ldargs-init := -i --gc-sections \ 63 $(addprefix -u, $(entries-init)) \ 64 $(objs-init) $(link-ldadd) $(libgcccore) 65cleanfiles += $(link-out-dir)/init.o 66$(link-out-dir)/init.o: $(objs-init) $(libdeps) $(MAKEFILE_LIST) 67 @$(cmd-echo-silent) ' LD $@' 68 $(q)$(LDcore) $(ldargs-init) -o $@ 69 70cleanfiles += $(link-out-dir)/text_init.ld.S: 71$(link-out-dir)/text_init.ld.S: $(link-out-dir)/init.o 72 @$(cmd-echo-silent) ' GEN $@' 73 $(q)$(READELFcore) -a -W $< | ${AWK} -f ./scripts/gen_ld_text_sects.awk > $@ 74 75cleanfiles += $(link-out-dir)/rodata_init.ld.S: 76$(link-out-dir)/rodata_init.ld.S: $(link-out-dir)/init.o 77 @$(cmd-echo-silent) ' GEN $@' 78 $(q)$(READELFcore) -a -W $< | \ 79 ${AWK} -f ./scripts/gen_ld_rodata_sects.awk > $@ 80 81-include $(link-script-dep) 82 83link-script-extra-deps += $(link-out-dir)/text_unpaged.ld.S 84link-script-extra-deps += $(link-out-dir)/rodata_unpaged.ld.S 85link-script-extra-deps += $(link-out-dir)/text_init.ld.S 86link-script-extra-deps += $(link-out-dir)/rodata_init.ld.S 87link-script-extra-deps += $(conf-file) 88cleanfiles += $(link-script-pp) $(link-script-dep) 89$(link-script-pp): $(link-script) $(link-script-extra-deps) 90 @$(cmd-echo-silent) ' CPP $@' 91 @mkdir -p $(dir $@) 92 $(q)$(CPPcore) -Wp,-P,-MT,$@,-MD,$(link-script-dep) \ 93 $(link-script-cppflags) $< > $@ 94 95all: $(link-out-dir)/tee.elf 96cleanfiles += $(link-out-dir)/tee.elf $(link-out-dir)/tee.map 97$(link-out-dir)/tee.elf: $(objs) $(libdeps) $(link-script-pp) 98 @$(cmd-echo-silent) ' LD $@' 99 $(q)$(LDcore) $(ldargs-tee.elf) -o $@ 100 101all: $(link-out-dir)/tee.dmp 102cleanfiles += $(link-out-dir)/tee.dmp 103$(link-out-dir)/tee.dmp: $(link-out-dir)/tee.elf 104 @$(cmd-echo-silent) ' OBJDUMP $@' 105 $(q)$(OBJDUMPcore) -l -x -d $< > $@ 106 107pageable_sections := .*_pageable 108init_sections := .*_init 109cleanfiles += $(link-out-dir)/tee-pager.bin 110$(link-out-dir)/tee-pager.bin: $(link-out-dir)/tee.elf 111 @$(cmd-echo-silent) ' OBJCOPY $@' 112 $(q)$(OBJCOPYcore) -O binary \ 113 --remove-section="$(pageable_sections)" \ 114 --remove-section="$(init_sections)" \ 115 $< $@ 116 117cleanfiles += $(link-out-dir)/tee-pageable.bin 118$(link-out-dir)/tee-pageable.bin: $(link-out-dir)/tee.elf 119 @$(cmd-echo-silent) ' OBJCOPY $@' 120 $(q)$(OBJCOPYcore) -O binary \ 121 --only-section="$(init_sections)" \ 122 --only-section="$(pageable_sections)" \ 123 $< $@ 124 125cleanfiles += $(link-out-dir)/tee-init_size.txt 126$(link-out-dir)/tee-init_size.txt: $(link-out-dir)/tee.elf 127 @$(cmd-echo-silent) ' GEN $@' 128 @echo -n 0x > $@ 129 $(q)$(NMcore) $< | grep __init_size | sed 's/ .*$$//' >> $@ 130 131cleanfiles += $(link-out-dir)/tee-init_load_addr.txt 132$(link-out-dir)/tee-init_load_addr.txt: $(link-out-dir)/tee.elf 133 @$(cmd-echo-silent) ' GEN $@' 134 @echo -n 0x > $@ 135 $(q)$(NMcore) $< | grep ' _start' | sed 's/ .*$$//' >> $@ 136 137cleanfiles += $(link-out-dir)/tee-init_mem_usage.txt 138$(link-out-dir)/tee-init_mem_usage.txt: $(link-out-dir)/tee.elf 139 @$(cmd-echo-silent) ' GEN $@' 140 @echo -n 0x > $@ 141 $(q)$(NMcore) $< | grep ' __init_mem_usage' | sed 's/ .*$$//' >> $@ 142 143all: $(link-out-dir)/tee.bin 144cleanfiles += $(link-out-dir)/tee.bin 145$(link-out-dir)/tee.bin: $(link-out-dir)/tee-pager.bin \ 146 $(link-out-dir)/tee-pageable.bin \ 147 $(link-out-dir)/tee-init_size.txt \ 148 $(link-out-dir)/tee-init_load_addr.txt \ 149 $(link-out-dir)/tee-init_mem_usage.txt \ 150 ./scripts/gen_hashed_bin.py 151 @$(cmd-echo-silent) ' GEN $@' 152 $(q)./scripts/gen_hashed_bin.py \ 153 --arch $(core-tee-bin-arch) \ 154 --init_size `cat $(link-out-dir)/tee-init_size.txt` \ 155 --init_load_addr_lo \ 156 `cat $(link-out-dir)/tee-init_load_addr.txt` \ 157 --init_mem_usage `cat $(link-out-dir)/tee-init_mem_usage.txt` \ 158 --tee_pager_bin $(link-out-dir)/tee-pager.bin \ 159 --tee_pageable_bin $(link-out-dir)/tee-pageable.bin \ 160 --out $@ 161 162 163all: $(link-out-dir)/tee.symb_sizes 164cleanfiles += $(link-out-dir)/tee.symb_sizes 165$(link-out-dir)/tee.symb_sizes: $(link-out-dir)/tee.elf 166 @$(cmd-echo-silent) ' GEN $@' 167 $(q)$(NMcore) --print-size --reverse-sort --size-sort $< > $@ 168 169cleanfiles += $(link-out-dir)/tee.mem_usage 170ifneq ($(filter mem_usage,$(MAKECMDGOALS)),) 171mem_usage: $(link-out-dir)/tee.mem_usage 172 173$(link-out-dir)/tee.mem_usage: $(link-out-dir)/tee.elf 174 @$(cmd-echo-silent) ' GEN $@' 175 $(q)$(READELFcore) -a -W $< | ${AWK} -f ./scripts/mem_usage.awk > $@ 176endif 177