xref: /freebsd/stand/efi/loader/Makefile (revision 9978553d0199e7ec0bdd1c44fc7f6c7b0c11e43b)
1LOADER_NET_SUPPORT?=	yes
2LOADER_MSDOS_SUPPORT?=	yes
3LOADER_UFS_SUPPORT?=	yes
4LOADER_CD9660_SUPPORT?=	no
5LOADER_EXT2FS_SUPPORT?=	no
6
7.include <bsd.init.mk>
8
9.if ${MACHINE} == "amd64" && ${DO32:U0} == 1
10__arch=	i386
11LOADER?=	loader_ia32
12.else
13__arch=	${MACHINE}
14LOADER?=	loader_${LOADER_INTERP}
15.endif
16PROG=		${LOADER}.sym
17INTERNALPROG=
18WARNS?=		3
19
20# architecture-specific loader code
21SRCS=	autoload.c \
22	bootinfo.c \
23	conf.c \
24	copy.c \
25	efi_main.c \
26	framebuffer.c \
27	main.c \
28	self_reloc.c \
29	vers.c \
30	gfx_fb.c \
31	8x16.c
32
33SRCS+= acpi_detect.c
34.PATH: ${EFISRC}/acpica
35CFLAGS+=	-I${EFISRC}/acpica/include
36
37CFLAGS+=	-I${.CURDIR}/../loader
38.if ${MK_LOADER_ZFS} != "no"
39CFLAGS+=	-I${SAZFSSRC}
40CFLAGS+=        -I${SYSDIR}/contrib/openzfs/include
41CFLAGS+=        -I${SYSDIR}/contrib/openzfs/include/os/freebsd/zfs
42CFLAGS+=	-DEFI_ZFS_BOOT
43HAVE_ZFS=	yes
44.endif
45
46CFLAGS.bootinfo.c += -I$(SRCTOP)/sys/teken
47CFLAGS.bootinfo.c += -I${SRCTOP}/contrib/pnglite
48CFLAGS.framebuffer.c += -I$(SRCTOP)/sys/teken
49CFLAGS.framebuffer.c += -I${SRCTOP}/contrib/pnglite
50CFLAGS.main.c += -I$(SRCTOP)/sys/teken
51CFLAGS.main.c += -I${SRCTOP}/contrib/pnglite
52CFLAGS.gfx_fb.c += -I$(SRCTOP)/sys/teken
53CFLAGS.gfx_fb.c += -I${SRCTOP}/sys/cddl/contrib/opensolaris/common/lz4
54CFLAGS.gfx_fb.c += -I${SRCTOP}/contrib/pnglite
55CFLAGS.gfx_fb.c += -DHAVE_MEMCPY -I${SRCTOP}/sys/contrib/zlib
56
57# We implement a slightly non-standard %S in that it always takes a
58# CHAR16 that's common in UEFI-land instead of a wchar_t. This only
59# seems to matter on arm64 where wchar_t defaults to an int instead
60# of a short. There's no good cast to use here so just ignore the
61# warnings for now.
62CWARNFLAGS.main.c+=	-Wno-format
63
64.PATH: ${.CURDIR}/../loader
65.PATH: ${.CURDIR}/../loader/arch/${__arch}
66.include "${.CURDIR}/../loader/arch/${__arch}/Makefile.inc"
67
68CFLAGS+=	-Wall
69CFLAGS+=	-I${.CURDIR}
70CFLAGS+=	-I${.CURDIR}/arch/${__arch}
71CFLAGS+=	-I${EFISRC}/include
72CFLAGS+=	-I${EFISRC}/include/${__arch}
73CFLAGS+=	-I${EDK2INC}
74CFLAGS+=	-I${SYSDIR}/contrib/dev/acpica/include
75CFLAGS+=	-I${BOOTSRC}/i386/libi386
76CFLAGS+=	-DEFI
77
78.if defined(HAVE_FDT) && ${MK_FDT} != "no"
79.include	"${BOOTSRC}/fdt.mk"
80LIBEFI_FDT=	${BOOTOBJ}/efi/fdt/libefi_fdt.a
81HELP_FILES+=	${FDTSRC}/help.fdt
82.endif
83
84# Include bcache code.
85HAVE_BCACHE=    yes
86
87.if defined(EFI_STAGING_SIZE)
88CFLAGS+=	-DEFI_STAGING_SIZE=${EFI_STAGING_SIZE}
89.endif
90
91.if ${MK_LOADER_EFI_SECUREBOOT} != "no"
92CFLAGS+= -DEFI_SECUREBOOT
93.endif
94
95NEWVERSWHAT?=	"EFI loader" ${MACHINE}
96VERSION_FILE?=	${.CURDIR}/../loader/version
97HELP_FILENAME=	loader.help.efi
98
99# Always add MI sources
100.include	"${BOOTSRC}/loader.mk"
101
102CLEANFILES+=	8x16.c
103
1048x16.c:		${SRCTOP}/contrib/terminus/ter-u16b.bdf
105	vtfontcvt -f compressed-source -o ${.TARGET} ${.ALLSRC}
106
107FILES+=	${LOADER}.efi
108FILESMODE_${LOADER}.efi=	${BINMODE}
109
110.if ${LOADER_INTERP} == ${LOADER_DEFAULT_INTERP} && ${__arch} != "i386"
111LINKS+=		${BINDIR}/${LOADER}.efi ${BINDIR}/loader.efi
112.endif
113
114LDSCRIPT=	${.CURDIR}/../loader/arch/${__arch}/${__arch}.ldscript
115LDFLAGS+=	-Wl,-T${LDSCRIPT},-Bsymbolic,-znotext -pie
116.if ${LINKER_TYPE} == "bfd" && ${LINKER_VERSION} >= 23400
117LDFLAGS+=	-Wl,--no-dynamic-linker
118.endif
119
120.include <bsd.linker.mk>
121
122.if ${LINKER_TYPE} == "lld" && ${LINKER_FREEBSD_VERSION} < 1500001
123# When lld is using multiple threads, which it does by default, it can
124# result in non-reproducible output with the custom linker script. Work
125# around this by disabling threading.
126LDFLAGS+=	-Wl,--threads=1
127.endif
128
129CLEANFILES+=	${LOADER}.efi
130
131${LOADER}.efi: ${PROG}
132	@if ${NM} ${.ALLSRC} | grep ' U '; then \
133		echo "Undefined symbols in ${.ALLSRC}"; \
134		exit 1; \
135	fi
136	SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \
137	${EFI_OBJCOPY} -j .peheader -j .text -j .sdata -j .data \
138		-j .dynamic -j .dynsym -j .rel.dyn \
139		-j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \
140		-j set_X${LOADER_INTERP}_compile_set \
141		--output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET}
142
143LIBEFI=		${BOOTOBJ}/efi/libefi/libefi.a
144LIBEFI32=	${BOOTOBJ}/efi/libefi32/libefi.a
145
146.if ${__arch} == "i386"
147DPADD=		${LDR_INTERP32} ${LIBEFI32} ${LIBSA32} ${LDSCRIPT}
148LDADD=		${LDR_INTERP32} ${LIBEFI32} ${LIBSA32}
149.else
150DPADD=		${LDR_INTERP} ${LIBEFI} ${LIBSAFDT} ${LIBEFI_FDT} ${LIBSA} ${LDSCRIPT}
151LDADD=		${LDR_INTERP} ${LIBEFI} ${LIBSAFDT} ${LIBEFI_FDT} ${LIBSA}
152.endif
153
154.include <bsd.prog.mk>
155