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