xref: /freebsd/stand/efi/loader/Makefile (revision b885643b63e4df51cc6c74c4ddd4d0b640075678)
1ca987d46SWarner LoshLOADER_NET_SUPPORT?=	yes
2ca987d46SWarner LoshLOADER_MSDOS_SUPPORT?=	yes
3ca987d46SWarner LoshLOADER_UFS_SUPPORT?=	yes
4ca987d46SWarner LoshLOADER_CD9660_SUPPORT?=	no
5ca987d46SWarner LoshLOADER_EXT2FS_SUPPORT?=	no
6ca987d46SWarner Losh
7ca987d46SWarner Losh.include <bsd.init.mk>
8ca987d46SWarner Losh
9f8ca5d45SAhmad Khalifa.if ${MACHINE} == "amd64" && ${DO32:U0} == 1
10f8ca5d45SAhmad Khalifa__arch=	i386
11f8ca5d45SAhmad KhalifaLOADER?=	loader_ia32
12f8ca5d45SAhmad Khalifa.else
13f8ca5d45SAhmad Khalifa__arch=	${MACHINE}
149d45c24cSWarner LoshLOADER?=	loader_${LOADER_INTERP}
15f8ca5d45SAhmad Khalifa.endif
169d45c24cSWarner LoshPROG=		${LOADER}.sym
17ca987d46SWarner LoshINTERNALPROG=
18ca987d46SWarner LoshWARNS?=		3
19ca987d46SWarner Losh
20ca987d46SWarner Losh# architecture-specific loader code
21ca987d46SWarner LoshSRCS=	autoload.c \
22ca987d46SWarner Losh	bootinfo.c \
23ca987d46SWarner Losh	conf.c \
24ca987d46SWarner Losh	copy.c \
25ca987d46SWarner Losh	efi_main.c \
26ca987d46SWarner Losh	framebuffer.c \
27ca987d46SWarner Losh	main.c \
28ca987d46SWarner Losh	self_reloc.c \
293630506bSToomas Soome	vers.c \
303630506bSToomas Soome	gfx_fb.c \
313630506bSToomas Soome	8x16.c
32ca987d46SWarner Losh
339d45c24cSWarner LoshCFLAGS+=	-I${.CURDIR}/../loader
34fbeb31a2SMatt Macy.if ${MK_LOADER_ZFS} != "no"
35ca987d46SWarner LoshCFLAGS+=	-I${ZFSSRC}
36e307eb94SToomas SoomeCFLAGS+=        -I${SYSDIR}/contrib/openzfs/include
37e307eb94SToomas SoomeCFLAGS+=        -I${SYSDIR}/contrib/openzfs/include/os/freebsd/zfs
38ca987d46SWarner LoshCFLAGS+=	-DEFI_ZFS_BOOT
394784aef9SWarner LoshHAVE_ZFS=	yes
40ca987d46SWarner Losh.endif
41ca987d46SWarner Losh
4250180d2bSToomas SoomeCFLAGS.bootinfo.c += -I$(SRCTOP)/sys/teken
4350180d2bSToomas SoomeCFLAGS.bootinfo.c += -I${SRCTOP}/contrib/pnglite
4450180d2bSToomas SoomeCFLAGS.framebuffer.c += -I$(SRCTOP)/sys/teken
4550180d2bSToomas SoomeCFLAGS.framebuffer.c += -I${SRCTOP}/contrib/pnglite
46df065f69SWarner LoshCFLAGS.main.c += -I$(SRCTOP)/sys/teken
47df065f69SWarner LoshCFLAGS.main.c += -I${SRCTOP}/contrib/pnglite
483630506bSToomas SoomeCFLAGS.gfx_fb.c += -I$(SRCTOP)/sys/teken
493630506bSToomas SoomeCFLAGS.gfx_fb.c += -I${SRCTOP}/sys/cddl/contrib/opensolaris/common/lz4
503630506bSToomas SoomeCFLAGS.gfx_fb.c += -I${SRCTOP}/contrib/pnglite
513630506bSToomas SoomeCFLAGS.gfx_fb.c += -DHAVE_MEMCPY -I${SRCTOP}/sys/contrib/zlib
523630506bSToomas Soome
53ca987d46SWarner Losh# We implement a slightly non-standard %S in that it always takes a
54ca987d46SWarner Losh# CHAR16 that's common in UEFI-land instead of a wchar_t. This only
55ca987d46SWarner Losh# seems to matter on arm64 where wchar_t defaults to an int instead
56ca987d46SWarner Losh# of a short. There's no good cast to use here so just ignore the
57ca987d46SWarner Losh# warnings for now.
58ca987d46SWarner LoshCWARNFLAGS.main.c+=	-Wno-format
59ca987d46SWarner Losh
609d45c24cSWarner Losh.PATH: ${.CURDIR}/../loader
61f8ca5d45SAhmad Khalifa.PATH: ${.CURDIR}/../loader/arch/${__arch}
62f8ca5d45SAhmad Khalifa.include "${.CURDIR}/../loader/arch/${__arch}/Makefile.inc"
63ca987d46SWarner Losh
64ca987d46SWarner LoshCFLAGS+=	-I${.CURDIR}
65f8ca5d45SAhmad KhalifaCFLAGS+=	-I${.CURDIR}/arch/${__arch}
66ca987d46SWarner LoshCFLAGS+=	-I${EFISRC}/include
67f8ca5d45SAhmad KhalifaCFLAGS+=	-I${EFISRC}/include/${__arch}
68ca987d46SWarner LoshCFLAGS+=	-I${SYSDIR}/contrib/dev/acpica/include
69ca987d46SWarner LoshCFLAGS+=	-I${BOOTSRC}/i386/libi386
7008b86a1aSWarner LoshCFLAGS+=	-DEFI
71ca987d46SWarner Losh
72ca987d46SWarner Losh.if defined(HAVE_FDT) && ${MK_FDT} != "no"
73ca987d46SWarner Losh.include	"${BOOTSRC}/fdt.mk"
74ca987d46SWarner LoshLIBEFI_FDT=	${BOOTOBJ}/efi/fdt/libefi_fdt.a
75dfbe8f64SMitchell HorneHELP_FILES+=	${FDTSRC}/help.fdt
76ca987d46SWarner Losh.endif
77ca987d46SWarner Losh
78ca987d46SWarner Losh# Include bcache code.
79ca987d46SWarner LoshHAVE_BCACHE=    yes
80ca987d46SWarner Losh
81ca987d46SWarner Losh.if defined(EFI_STAGING_SIZE)
82ca987d46SWarner LoshCFLAGS+=	-DEFI_STAGING_SIZE=${EFI_STAGING_SIZE}
83ca987d46SWarner Losh.endif
84ca987d46SWarner Losh
8513ea0450SMarcin Wojtas.if ${MK_LOADER_EFI_SECUREBOOT} != "no"
8613ea0450SMarcin WojtasCFLAGS+= -DEFI_SECUREBOOT
8713ea0450SMarcin Wojtas.endif
8813ea0450SMarcin Wojtas
89dcc7b369SAhmad KhalifaNEWVERSWHAT?=	"EFI loader" ${MACHINE}
909d45c24cSWarner LoshVERSION_FILE=	${.CURDIR}/../loader/version
9188599604SMitchell HorneHELP_FILENAME=	loader.help.efi
929d45c24cSWarner Losh
93ca987d46SWarner Losh# Always add MI sources
94ca987d46SWarner Losh.include	"${BOOTSRC}/loader.mk"
95ca987d46SWarner Losh
963630506bSToomas SoomeCLEANFILES+=	8x16.c
973630506bSToomas Soome
986c789c55SToomas Soome8x16.c:		${SRCTOP}/contrib/terminus/ter-u16b.bdf
993630506bSToomas Soome	vtfontcvt -f compressed-source -o ${.TARGET} ${.ALLSRC}
1003630506bSToomas Soome
1019d45c24cSWarner LoshFILES+=	${LOADER}.efi
1029d45c24cSWarner LoshFILESMODE_${LOADER}.efi=	${BINMODE}
103ca987d46SWarner Losh
104f8ca5d45SAhmad Khalifa.if ${LOADER_INTERP} == ${LOADER_DEFAULT_INTERP} && ${__arch} != "i386"
1054ad3fab6SWarner LoshLINKS+=		${BINDIR}/${LOADER}.efi ${BINDIR}/loader.efi
1064ad3fab6SWarner Losh.endif
1074ad3fab6SWarner Losh
108f8ca5d45SAhmad KhalifaLDSCRIPT=	${.CURDIR}/../loader/arch/${__arch}/${__arch}.ldscript
109253e820aSAlex RichardsonLDFLAGS+=	-Wl,-T${LDSCRIPT},-Bsymbolic,-znotext -pie
1108bd5e2f1SJohn Baldwin.if ${LINKER_TYPE} == "bfd" && ${LINKER_VERSION} >= 23400
1118bd5e2f1SJohn BaldwinLDFLAGS+=	-Wl,--no-dynamic-linker
1128bd5e2f1SJohn Baldwin.endif
113ca987d46SWarner Losh
114f97c7fdcSDimitry Andric.include <bsd.linker.mk>
115f97c7fdcSDimitry Andric
116f97c7fdcSDimitry Andric.if ${LINKER_TYPE} == "lld" && ${LINKER_FREEBSD_VERSION} < 1500001
117f5ce3f4eSDimitry Andric# When lld is using multiple threads, which it does by default, it can
118f5ce3f4eSDimitry Andric# result in non-reproducible output with the custom linker script. Work
119f5ce3f4eSDimitry Andric# around this by disabling threading.
120f97c7fdcSDimitry AndricLDFLAGS+=	-Wl,--threads=1
121f97c7fdcSDimitry Andric.endif
122f5ce3f4eSDimitry Andric
1230f97a0d4SGuido van RooijCLEANFILES+=	${LOADER}.efi
124ca987d46SWarner Losh
1259d45c24cSWarner Losh${LOADER}.efi: ${PROG}
1263bf9e84fSVexedUXR	@if ${NM} ${.ALLSRC} | grep ' U '; then \
127ca987d46SWarner Losh		echo "Undefined symbols in ${.ALLSRC}"; \
128ca987d46SWarner Losh		exit 1; \
129ca987d46SWarner Losh	fi
130ca987d46SWarner Losh	SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \
131*b885643bSEd Maste	${EFI_OBJCOPY} -j .peheader -j .text -j .sdata -j .data \
132ca987d46SWarner Losh		-j .dynamic -j .dynsym -j .rel.dyn \
133ca987d46SWarner Losh		-j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \
134f5f08e41SWarner Losh		-j set_X${LOADER_INTERP}_compile_set \
135ca987d46SWarner Losh		--output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET}
136ca987d46SWarner Losh
137ca987d46SWarner LoshLIBEFI=		${BOOTOBJ}/efi/libefi/libefi.a
138f8ca5d45SAhmad KhalifaLIBEFI32=	${BOOTOBJ}/efi/libefi32/libefi.a
139ca987d46SWarner Losh
140f8ca5d45SAhmad Khalifa.if ${__arch} == "i386"
141f8ca5d45SAhmad KhalifaDPADD=		${LDR_INTERP32} ${LIBEFI32} ${LIBSA32} ${LDSCRIPT}
142f8ca5d45SAhmad KhalifaLDADD=		${LDR_INTERP32} ${LIBEFI32} ${LIBSA32}
143f8ca5d45SAhmad Khalifa.else
144b247ff70SMark JohnstonDPADD=		${LDR_INTERP} ${LIBEFI} ${LIBSAFDT} ${LIBEFI_FDT} ${LIBSA} ${LDSCRIPT}
145b247ff70SMark JohnstonLDADD=		${LDR_INTERP} ${LIBEFI} ${LIBSAFDT} ${LIBEFI_FDT} ${LIBSA}
146f8ca5d45SAhmad Khalifa.endif
147ca987d46SWarner Losh
148ca987d46SWarner Losh.include <bsd.prog.mk>
149