summaryrefslogtreecommitdiff
path: root/scripts/Makefile.lib-u-boot
blob: 4d60a8eee49b79e14ca0da94cb12f5257bcff205 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# SPDX-License-Identifier: GPL-2.0
#
# U-Boot-specific rules for embedding binary data via .incbin
# These are split out of Makefile.lib to simplify kbuild re-syncs.

# Fonts
# ---------------------------------------------------------------------------

# Generate an assembly file to wrap the font data
quiet_cmd_S_ttf= TTF     $@
cmd_S_ttf=						\
(							\
	echo '.section .rodata.ttf.init,"a"';		\
	echo '.balign 16';				\
	echo '.global __ttf_$(*F)_begin';		\
	echo '__ttf_$(*F)_begin:';			\
	echo '.incbin "$<" ';				\
	echo '__ttf_$(*F)_end:';			\
	echo '.global __ttf_$(*F)_end';			\
	echo '.balign 16';				\
) > $@

$(obj)/%.ttf.S: $(src)/%.ttf FORCE
	$(call if_changed,S_ttf)

# Splash logos
# ---------------------------------------------------------------------------

# Generate an assembly file to wrap the splash data
quiet_cmd_S_splash= TTF     $@
cmd_S_splash=						\
(							\
	echo '.section .rodata.splash.init,"a"';	\
	echo '.balign 16';				\
	echo '.global __splash_$(*F)_begin';		\
	echo '__splash_$(*F)_begin:';			\
	echo '.incbin "$<" ';				\
	echo '__splash_$(*F)_end:';			\
	echo '.global __splash_$(*F)_end';		\
	echo '.balign 16';				\
) > $@

$(obj)/%.bmp.S: $(src)/%.bmp FORCE
	$(call if_changed,S_splash)

# EFI applications
# A Makefile target *.efi is built as EFI application.
# A Makefile target *_efi.S wraps *.efi as built-in EFI application.
# ---------------------------------------------------------------------------

# Generate an assembly file to wrap the EFI app
cmd_S_efi=					\
(						\
	echo '.section .rodata.$*.init,"a"';	\
	echo '.balign 16';			\
	echo '.global __efi_$*_begin';		\
	echo '__efi_$*_begin:';			\
	echo '.incbin "$<" ';			\
	echo '__efi_$*_end:';			\
	echo '.global __efi_$*_end';		\
	echo '.balign 16';			\
) > $@

$(obj)/%_efi.S: $(obj)/%.efi
	$(call cmd,S_efi)

quiet_cmd_efi_objcopy = OBJCOPY $@
cmd_efi_objcopy = $(OBJCOPY) -j .header -j .text -j .sdata -j .data \
		-j .dynamic -j .dynstr  -j .dynsym -j .rel* -j .reloc \
		$(if $(EFI_TARGET),$(EFI_TARGET),-O binary) $^ $@

$(obj)/%.efi: $(obj)/%_efi.so
	$(call cmd,efi_objcopy)

KBUILD_EFILDFLAGS = -nostdlib -zexecstack -znocombreloc -znorelro
KBUILD_EFILDFLAGS += $(call ld-option,--no-warn-rwx-segments)
quiet_cmd_efi_ld = LD      $@
cmd_efi_ld = $(LD) $(KBUILD_EFILDFLAGS) -L $(srctree) -T $(EFI_LDS_PATH) \
		-shared -Bsymbolic -s $^ $(PLATFORM_LIBGCC) -o $@

EFI_LDS_PATH = arch/$(ARCH)/lib/$(EFI_LDS)

$(obj)/efi_crt0.o: $(srctree)/arch/$(ARCH)/lib/$(EFI_CRT0:.o=.S) FORCE
	$(call if_changed_dep,as_o_S)

$(obj)/efi_reloc.o: $(srctree)/arch/$(ARCH)/lib/$(EFI_RELOC:.o=.c) $(recordmcount_source) FORCE
	$(call cmd,force_checksrc)
	$(call if_changed_rule,cc_o_c)

$(obj)/%_efi.so: $(obj)/%.o $(obj)/efi_crt0.o $(obj)/efi_reloc.o $(obj)/efi_freestanding.o
	$(call cmd,efi_ld)

targets += $(obj)/efi_crt0.o $(obj)/efi_reloc.o $(obj)/efi_freestanding.o

CFLAGS_REMOVE_efi_reloc.o := $(LTO_CFLAGS)
CFLAGS_REMOVE_efi_freestanding.o := $(LTO_CFLAGS)