1264391Snwhitehorn# $FreeBSD: stable/11/stand/efi/boot1/Makefile 344409 2019-02-21 02:46:32Z kevans $ 2264391Snwhitehorn 3329140Skevans.include <bsd.init.mk> 4264391Snwhitehorn 5287930SjhbPROG= boot1.sym 6264391SnwhitehornINTERNALPROG= 7329140SkevansWARNS?= 6 8264391Snwhitehorn 9344409SkevansCFLAGS+= -DEFI_BOOT1 10329114Skevans# We implement a slightly non-standard %S in that it always takes a 11329114Skevans# CHAR16 that's common in UEFI-land instead of a wchar_t. This only 12329114Skevans# seems to matter on arm64 where wchar_t defaults to an int instead 13329114Skevans# of a short. There's no good cast to use here so just ignore the 14329114Skevans# warnings for now. 15329114SkevansCWARNFLAGS.boot1.c+= -Wno-format 16329114Skevans 17294068Ssmh# Disable warnings that are currently incompatible with the zfs boot code 18329140SkevansCWARNFLAGS.zfs_module.c += -Wno-array-bounds 19329140SkevansCWARNFLAGS.zfs_module.c += -Wno-cast-align 20329140SkevansCWARNFLAGS.zfs_module.c += -Wno-cast-qual 21329140SkevansCWARNFLAGS.zfs_module.c += -Wno-missing-prototypes 22329140SkevansCWARNFLAGS.zfs_module.c += -Wno-sign-compare 23329140SkevansCWARNFLAGS.zfs_module.c += -Wno-unused-parameter 24329140SkevansCWARNFLAGS.zfs_module.c += -Wno-unused-function 25294068Ssmh 26264391Snwhitehorn# architecture-specific loader code 27329140SkevansSRCS= boot1.c self_reloc.c start.S ufs_module.c 28344399Skevans.if ${MK_LOADER_ZFS} != "no" 29329140SkevansSRCS+= zfs_module.c 30329175SkevansCFLAGS.zfs_module.c+= -I${ZFSSRC} 31329175SkevansCFLAGS.zfs_module.c+= -I${SYSDIR}/cddl/boot/zfs 32329175SkevansCFLAGS.zfs_module.c+= -I${SYSDIR}/crypto/skein 33329140SkevansCFLAGS+= -DEFI_ZFS_BOOT 34294068Ssmh.endif 35264391Snwhitehorn 36323485Srlibby.if ${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} > 40201 37323485SrlibbyCWARNFLAGS.self_reloc.c+= -Wno-error=maybe-uninitialized 38323485Srlibby.endif 39323485Srlibby 40329140SkevansCFLAGS+= -I${EFIINC} 41329140SkevansCFLAGS+= -I${EFIINCMD} 42329140SkevansCFLAGS+= -I${SYSDIR}/contrib/dev/acpica/include 43294060SsmhCFLAGS+= -DEFI_UFS_BOOT 44294265Ssmh.ifdef(EFI_DEBUG) 45294265SsmhCFLAGS+= -DEFI_DEBUG 46294265Ssmh.endif 47264391Snwhitehorn 48264403Snwhitehorn# Always add MI sources and REGULAR efi loader bits 49329140Skevans.PATH: ${EFISRC}/loader/arch/${MACHINE} 50329140Skevans.PATH: ${EFISRC}/loader 51329140Skevans.PATH: ${LDRSRC} 52329140SkevansCFLAGS+= -I${LDRSRC} 53264391Snwhitehorn 54264975SnwhitehornFILES= boot1.efi boot1.efifat 55264391SnwhitehornFILESMODE_boot1.efi= ${BINMODE} 56264391Snwhitehorn 57329140SkevansLDSCRIPT= ${EFISRC}/loader/arch/${MACHINE}/ldscript.${MACHINE} 58329114SkevansLDFLAGS+= -Wl,-T${LDSCRIPT},-Bsymbolic,-znotext -shared 59264391Snwhitehorn 60282474Sandrew.if ${MACHINE_CPUARCH} == "aarch64" 61329100SkevansCFLAGS+= -mgeneral-regs-only 62282474Sandrew.endif 63281027Sandrew.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" 64281300SandrewCFLAGS+= -fPIC 65281027SandrewLDFLAGS+= -Wl,-znocombreloc 66281027Sandrew.endif 67281027Sandrew 68329140SkevansLIBEFI= ${BOOTOBJ}/efi/libefi/libefi.a 69329114Skevans 70281156Sandrew# 71281238Semaste# Add libstand for the runtime functions used by the compiler - for example 72281238Semaste# __aeabi_* (arm) or __divdi3 (i386). 73293460Ssmh# as well as required string and memory functions for all platforms. 74281156Sandrew# 75344377SkevansDPADD+= ${LIBEFI} ${LIBSA} 76344377SkevansLDADD+= ${LIBEFI} ${LIBSA} 77281156Sandrew 78287930SjhbDPADD+= ${LDSCRIPT} 79264391Snwhitehorn 80287930Sjhbboot1.efi: ${PROG} 81296769Semaste if ${NM} ${.ALLSRC} | grep ' U '; then \ 82296769Semaste echo "Undefined symbols in ${.ALLSRC}"; \ 83264391Snwhitehorn exit 1; \ 84264391Snwhitehorn fi 85305845Semaste SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \ 86281156Sandrew ${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \ 87264391Snwhitehorn -j .dynamic -j .dynsym -j .rel.dyn \ 88329140Skevans -j .rela.dyn -j .reloc -j .eh_frame \ 89276146Semaste --output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET} 90264391Snwhitehorn 91287930Sjhb# The following inserts our objects into a template FAT file system 92264975Snwhitehorn# created by generate-fat.sh 93264975Snwhitehorn 94329183Skevans.include "Makefile.fat" 95264975Snwhitehorn 96264975Snwhitehornboot1.efifat: boot1.efi 97319024Sngie @set -- `ls -l ${.ALLSRC}`; \ 98293425Semaste x=$$(($$5-${BOOT1_MAXSIZE})); \ 99293425Semaste if [ $$x -ge 0 ]; then \ 100293425Semaste echo "boot1 $$x bytes too large; regenerate FAT templates?" >&2 ;\ 101293425Semaste exit 1; \ 102293425Semaste fi 103264975Snwhitehorn echo ${.OBJDIR} 104329183Skevans xz -d -c ${BOOTSRC}/efi/boot1/fat-${MACHINE}.tmpl.xz > ${.TARGET} 105319024Sngie ${DD} if=${.ALLSRC} of=${.TARGET} seek=${BOOT1_OFFSET} conv=notrunc 106264975Snwhitehorn 107329140SkevansCLEANFILES+= boot1.efi boot1.efifat 108264975Snwhitehorn 109264391Snwhitehorn.include <bsd.prog.mk> 110