Makefile revision 344377
1264391Snwhitehorn# $FreeBSD: stable/11/stand/efi/boot1/Makefile 344377 2019-02-20 19:13:09Z kevans $ 2264391Snwhitehorn 3329140Skevans.include <bsd.init.mk> 4264391Snwhitehorn 5287930SjhbPROG= boot1.sym 6264391SnwhitehornINTERNALPROG= 7329140SkevansWARNS?= 6 8264391Snwhitehorn 9329114Skevans# We implement a slightly non-standard %S in that it always takes a 10329114Skevans# CHAR16 that's common in UEFI-land instead of a wchar_t. This only 11329114Skevans# seems to matter on arm64 where wchar_t defaults to an int instead 12329114Skevans# of a short. There's no good cast to use here so just ignore the 13329114Skevans# warnings for now. 14329114SkevansCWARNFLAGS.boot1.c+= -Wno-format 15329114Skevans 16294068Ssmh# Disable warnings that are currently incompatible with the zfs boot code 17329140SkevansCWARNFLAGS.zfs_module.c += -Wno-array-bounds 18329140SkevansCWARNFLAGS.zfs_module.c += -Wno-cast-align 19329140SkevansCWARNFLAGS.zfs_module.c += -Wno-cast-qual 20329140SkevansCWARNFLAGS.zfs_module.c += -Wno-missing-prototypes 21329140SkevansCWARNFLAGS.zfs_module.c += -Wno-sign-compare 22329140SkevansCWARNFLAGS.zfs_module.c += -Wno-unused-parameter 23329140SkevansCWARNFLAGS.zfs_module.c += -Wno-unused-function 24294068Ssmh 25264391Snwhitehorn# architecture-specific loader code 26329140SkevansSRCS= boot1.c self_reloc.c start.S ufs_module.c 27294068Ssmh.if ${MK_ZFS} != "no" 28329140SkevansSRCS+= zfs_module.c 29329175SkevansCFLAGS.zfs_module.c+= -I${ZFSSRC} 30329175SkevansCFLAGS.zfs_module.c+= -I${SYSDIR}/cddl/boot/zfs 31329175SkevansCFLAGS.zfs_module.c+= -I${SYSDIR}/crypto/skein 32329140SkevansCFLAGS+= -DEFI_ZFS_BOOT 33294068Ssmh.endif 34264391Snwhitehorn 35323485Srlibby.if ${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} > 40201 36323485SrlibbyCWARNFLAGS.self_reloc.c+= -Wno-error=maybe-uninitialized 37323485Srlibby.endif 38323485Srlibby 39329140SkevansCFLAGS+= -I${EFIINC} 40329140SkevansCFLAGS+= -I${EFIINCMD} 41329140SkevansCFLAGS+= -I${SYSDIR}/contrib/dev/acpica/include 42294060SsmhCFLAGS+= -DEFI_UFS_BOOT 43294265Ssmh.ifdef(EFI_DEBUG) 44294265SsmhCFLAGS+= -DEFI_DEBUG 45294265Ssmh.endif 46264391Snwhitehorn 47264403Snwhitehorn# Always add MI sources and REGULAR efi loader bits 48329140Skevans.PATH: ${EFISRC}/loader/arch/${MACHINE} 49329140Skevans.PATH: ${EFISRC}/loader 50329140Skevans.PATH: ${LDRSRC} 51329140SkevansCFLAGS+= -I${LDRSRC} 52264391Snwhitehorn 53264975SnwhitehornFILES= boot1.efi boot1.efifat 54264391SnwhitehornFILESMODE_boot1.efi= ${BINMODE} 55264391Snwhitehorn 56329140SkevansLDSCRIPT= ${EFISRC}/loader/arch/${MACHINE}/ldscript.${MACHINE} 57329114SkevansLDFLAGS+= -Wl,-T${LDSCRIPT},-Bsymbolic,-znotext -shared 58264391Snwhitehorn 59282474Sandrew.if ${MACHINE_CPUARCH} == "aarch64" 60329100SkevansCFLAGS+= -mgeneral-regs-only 61282474Sandrew.endif 62281027Sandrew.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" 63281300SandrewCFLAGS+= -fPIC 64281027SandrewLDFLAGS+= -Wl,-znocombreloc 65281027Sandrew.endif 66281027Sandrew 67329140SkevansLIBEFI= ${BOOTOBJ}/efi/libefi/libefi.a 68329114Skevans 69281156Sandrew# 70281238Semaste# Add libstand for the runtime functions used by the compiler - for example 71281238Semaste# __aeabi_* (arm) or __divdi3 (i386). 72293460Ssmh# as well as required string and memory functions for all platforms. 73281156Sandrew# 74344377SkevansDPADD+= ${LIBEFI} ${LIBSA} 75344377SkevansLDADD+= ${LIBEFI} ${LIBSA} 76281156Sandrew 77287930SjhbDPADD+= ${LDSCRIPT} 78264391Snwhitehorn 79296769SemasteNM?= nm 80264391SnwhitehornOBJCOPY?= objcopy 81264391Snwhitehorn 82264391Snwhitehorn.if ${MACHINE_CPUARCH} == "amd64" 83264391SnwhitehornEFI_TARGET= efi-app-x86_64 84280950Sandrew.elif ${MACHINE_CPUARCH} == "i386" 85264391SnwhitehornEFI_TARGET= efi-app-ia32 86281156Sandrew.else 87281156SandrewEFI_TARGET= binary 88264391Snwhitehorn.endif 89264391Snwhitehorn 90305845Semaste# Arbitrarily set the PE/COFF header timestamps to 1 Jan 2016 00:00:00 91305845Semaste# for build reproducibility. 92305845SemasteSOURCE_DATE_EPOCH?=1451606400 93287930Sjhbboot1.efi: ${PROG} 94296769Semaste if ${NM} ${.ALLSRC} | grep ' U '; then \ 95296769Semaste echo "Undefined symbols in ${.ALLSRC}"; \ 96264391Snwhitehorn exit 1; \ 97264391Snwhitehorn fi 98305845Semaste SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \ 99281156Sandrew ${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \ 100264391Snwhitehorn -j .dynamic -j .dynsym -j .rel.dyn \ 101329140Skevans -j .rela.dyn -j .reloc -j .eh_frame \ 102276146Semaste --output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET} 103264391Snwhitehorn 104287930Sjhb# The following inserts our objects into a template FAT file system 105264975Snwhitehorn# created by generate-fat.sh 106264975Snwhitehorn 107329183Skevans.include "Makefile.fat" 108264975Snwhitehorn 109264975Snwhitehornboot1.efifat: boot1.efi 110319024Sngie @set -- `ls -l ${.ALLSRC}`; \ 111293425Semaste x=$$(($$5-${BOOT1_MAXSIZE})); \ 112293425Semaste if [ $$x -ge 0 ]; then \ 113293425Semaste echo "boot1 $$x bytes too large; regenerate FAT templates?" >&2 ;\ 114293425Semaste exit 1; \ 115293425Semaste fi 116264975Snwhitehorn echo ${.OBJDIR} 117329183Skevans xz -d -c ${BOOTSRC}/efi/boot1/fat-${MACHINE}.tmpl.xz > ${.TARGET} 118319024Sngie ${DD} if=${.ALLSRC} of=${.TARGET} seek=${BOOT1_OFFSET} conv=notrunc 119264975Snwhitehorn 120329140SkevansCLEANFILES+= boot1.efi boot1.efifat 121264975Snwhitehorn 122264391Snwhitehorn.include <bsd.prog.mk> 123