xref: /freebsd/stand/efi/boot1/Makefile (revision b885643b63e4df51cc6c74c4ddd4d0b640075678)
1ca987d46SWarner Losh.include <bsd.init.mk>
2ca987d46SWarner Losh
3ce2403e6SWarner LoshBOOT1?=		boot1
4ce2403e6SWarner LoshPROG=		${BOOT1}.sym
5ca987d46SWarner LoshINTERNALPROG=
6ecebb3ccSKyle EvansWARNS?=		6
7ca987d46SWarner Losh
878da6046SAndrew TurnerCFLAGS+=	-DEFI_BOOT1
9ca987d46SWarner Losh# We implement a slightly non-standard %S in that it always takes a
10ca987d46SWarner Losh# CHAR16 that's common in UEFI-land instead of a wchar_t. This only
11ca987d46SWarner Losh# seems to matter on arm64 where wchar_t defaults to an int instead
12ca987d46SWarner Losh# of a short. There's no good cast to use here so just ignore the
13ca987d46SWarner Losh# warnings for now.
145698b5c2SWarner LoshCWARNFLAGS.proto.c      += -Wno-format
15ca987d46SWarner LoshCWARNFLAGS.boot1.c      += -Wno-format
16cadc9c7dSJohn F. CarrCWARNFLAGS.ufs_module.c += -Wno-format
17cadc9c7dSJohn F. CarrCWARNFLAGS.zfs_module.c += -Wno-format
18ca987d46SWarner Losh
1992fb0466SWarner Losh# Disable bogus alignment issues
2092fb0466SWarner LoshCWARNFLAGS.ufs_module.c += -Wno-cast-align
2192fb0466SWarner Losh
22ca987d46SWarner Losh# Disable warnings that are currently incompatible with the zfs boot code
23ca987d46SWarner LoshCWARNFLAGS.zfs_module.c += -Wno-array-bounds
24ca987d46SWarner LoshCWARNFLAGS.zfs_module.c += -Wno-cast-align
25ca987d46SWarner LoshCWARNFLAGS.zfs_module.c += -Wno-cast-qual
26ca987d46SWarner LoshCWARNFLAGS.zfs_module.c += -Wno-missing-prototypes
27ca987d46SWarner LoshCWARNFLAGS.zfs_module.c += -Wno-sign-compare
28ca987d46SWarner LoshCWARNFLAGS.zfs_module.c += -Wno-unused-parameter
29ca987d46SWarner LoshCWARNFLAGS.zfs_module.c += -Wno-unused-function
30ca987d46SWarner Losh
31ca987d46SWarner Losh# architecture-specific loader code
3275e5f591SWarner LoshSRCS+=	boot1.c proto.c self_reloc.c start.S ufs_module.c
33fbeb31a2SMatt Macy.if ${MK_LOADER_ZFS} != "no"
34ca987d46SWarner LoshSRCS+=		zfs_module.c
356fd96c93SWarner LoshCFLAGS.zfs_module.c+=	-I${ZFSSRC}
366fd96c93SWarner LoshCFLAGS.zfs_module.c+=	-I${SYSDIR}/cddl/boot/zfs
376fd96c93SWarner LoshCFLAGS.zfs_module.c+=	-I${SYSDIR}/crypto/skein
38e307eb94SToomas SoomeCFLAGS.zfs_module.c+=	-I${SYSDIR}/contrib/openzfs/include
39e307eb94SToomas SoomeCFLAGS.zfs_module.c+=	-I${SYSDIR}/contrib/openzfs/include/os/freebsd/spl
40e307eb94SToomas SoomeCFLAGS.zfs_module.c+=	-I${SYSDIR}/contrib/openzfs/include/os/freebsd/zfs
41e499793eSToomas SoomeCFLAGS.zfs_module.c+=	-I${SYSDIR}/cddl/contrib/opensolaris/common/lz4
422fec3ae8SWarner LoshCFLAGS.zfs_module.c+=	-include ${ZFSOSINC}/spl/sys/ccompile.h
43b1b93268SToomas Soome
44f0408ed0SWarner LoshCFLAGS+=	-DEFI_ZFS_BOOT
45ca987d46SWarner Losh.endif
46ca987d46SWarner Losh
47ca987d46SWarner LoshCFLAGS+=	-I${EFIINC}
48ca987d46SWarner LoshCFLAGS+=	-I${EFIINCMD}
49ca987d46SWarner LoshCFLAGS+=	-I${SYSDIR}/contrib/dev/acpica/include
50ca987d46SWarner LoshCFLAGS+=	-DEFI_UFS_BOOT
51ca987d46SWarner Losh.ifdef(EFI_DEBUG)
52ca987d46SWarner LoshCFLAGS+=	-DEFI_DEBUG
53ca987d46SWarner Losh.endif
54ca987d46SWarner Losh
55eda28febSEric van Gyzen.include	"${BOOTSRC}/veriexec.mk"
56eda28febSEric van Gyzen
57ca987d46SWarner Losh# Always add MI sources and REGULAR efi loader bits
58ca987d46SWarner Losh.PATH:		${EFISRC}/loader/arch/${MACHINE}
59ca987d46SWarner Losh.PATH:		${EFISRC}/loader
60ca987d46SWarner Losh.PATH:		${LDRSRC}
61ca987d46SWarner LoshCFLAGS+=	-I${LDRSRC}
62ca987d46SWarner Losh
6355de7f34SWarner LoshFILES=	${BOOT1}.efi
64ce2403e6SWarner LoshFILESMODE_${BOOT1}.efi=	${BINMODE}
65ca987d46SWarner Losh
665b3b9a58SWarner LoshLDSCRIPT=	${EFISRC}/loader/arch/${MACHINE}/${MACHINE}.ldscript
67253e820aSAlex RichardsonLDFLAGS+=	-Wl,-T${LDSCRIPT},-Bsymbolic,-znotext -pie
688bd5e2f1SJohn Baldwin.if ${LINKER_TYPE} == "bfd" && ${LINKER_VERSION} >= 23400
698bd5e2f1SJohn BaldwinLDFLAGS+=	-Wl,--no-dynamic-linker
708bd5e2f1SJohn Baldwin.endif
71ca987d46SWarner Losh
72ca987d46SWarner Losh.if ${MACHINE_CPUARCH} == "aarch64"
73ca987d46SWarner LoshCFLAGS+=	-mgeneral-regs-only
74ca987d46SWarner Losh.endif
75c16e08e5SWarner Losh.if ${MACHINE_CPUARCH} == "amd64"
76ca987d46SWarner LoshCFLAGS+=	-fPIC
77ca987d46SWarner LoshLDFLAGS+=	-Wl,-znocombreloc
78ca987d46SWarner Losh.endif
79ca987d46SWarner Losh
80ca987d46SWarner LoshLIBEFI=		${BOOTOBJ}/efi/libefi/libefi.a
81ca987d46SWarner Losh
82ca987d46SWarner Losh#
83c16e08e5SWarner Losh# Add libsa for the runtime functions used by the compiler as well as required
84c16e08e5SWarner Losh# string and memory functions for all platforms.
85ca987d46SWarner Losh#
86b8902de1SWarner LoshDPADD+=		${LIBEFI} ${LIBSA}
87b8902de1SWarner LoshLDADD+=		${LIBEFI} ${LIBSA}
88ca987d46SWarner Losh
89ca987d46SWarner LoshDPADD+=		${LDSCRIPT}
90ca987d46SWarner Losh
91a8c1c0b7SVexedUXRCLEANFILES+=	${BOOT1}.efi
92a8c1c0b7SVexedUXR
93ce2403e6SWarner Losh${BOOT1}.efi: ${PROG}
943bf9e84fSVexedUXR	@if ${NM} ${.ALLSRC} | grep ' U '; then \
95ca987d46SWarner Losh		echo "Undefined symbols in ${.ALLSRC}"; \
96ca987d46SWarner Losh		exit 1; \
97ca987d46SWarner Losh	fi
98ca987d46SWarner Losh	SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \
99*b885643bSEd Maste	${EFI_OBJCOPY} -j .peheader -j .text -j .sdata -j .data \
100ca987d46SWarner Losh		-j .dynamic -j .dynsym -j .rel.dyn \
101ca987d46SWarner Losh		-j .rela.dyn -j .reloc -j .eh_frame \
102ca987d46SWarner Losh		--output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET}
103ca987d46SWarner Losh
104ca987d46SWarner Losh.include <bsd.prog.mk>
105