Makefile revision 329140
1264391Snwhitehorn# $FreeBSD: stable/11/sys/boot/efi/boot1/Makefile 329140 2018-02-11 20:58:00Z kevans $ 2264391Snwhitehorn 3264925SimpMAN= 4264391Snwhitehorn 5329140Skevans.include <bsd.init.mk> 6264391Snwhitehorn 7264391SnwhitehornMK_SSP= no 8329140SkevansMK_FORTH= no 9264391Snwhitehorn 10287930SjhbPROG= boot1.sym 11264391SnwhitehornINTERNALPROG= 12329140SkevansWARNS?= 6 13264391Snwhitehorn 14329114Skevans# We implement a slightly non-standard %S in that it always takes a 15329114Skevans# CHAR16 that's common in UEFI-land instead of a wchar_t. This only 16329114Skevans# seems to matter on arm64 where wchar_t defaults to an int instead 17329114Skevans# of a short. There's no good cast to use here so just ignore the 18329114Skevans# warnings for now. 19329114SkevansCWARNFLAGS.boot1.c+= -Wno-format 20329114Skevans 21294068Ssmh# Disable warnings that are currently incompatible with the zfs boot code 22329140SkevansCWARNFLAGS.zfs_module.c += -Wno-array-bounds 23329140SkevansCWARNFLAGS.zfs_module.c += -Wno-cast-align 24329140SkevansCWARNFLAGS.zfs_module.c += -Wno-cast-qual 25329140SkevansCWARNFLAGS.zfs_module.c += -Wno-missing-prototypes 26329140SkevansCWARNFLAGS.zfs_module.c += -Wno-sign-compare 27329140SkevansCWARNFLAGS.zfs_module.c += -Wno-unused-parameter 28329140SkevansCWARNFLAGS.zfs_module.c += -Wno-unused-function 29294068Ssmh 30264391Snwhitehorn# architecture-specific loader code 31329140SkevansSRCS= boot1.c self_reloc.c start.S ufs_module.c 32294068Ssmh.if ${MK_ZFS} != "no" 33329140SkevansSRCS+= zfs_module.c 34329140SkevansCFLAGS+= -I${ZFSSRC} 35329140SkevansCFLAGS+= -I${SYSDIR}/cddl/boot/zfs 36329140SkevansCFLAGS+= -DEFI_ZFS_BOOT 37329140SkevansLIBZFSBOOT= ${BOOTOBJ}/zfs/libzfsboot.a 38294068Ssmh.endif 39264391Snwhitehorn 40323485Srlibby.if ${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} > 40201 41323485SrlibbyCWARNFLAGS.self_reloc.c+= -Wno-error=maybe-uninitialized 42323485Srlibby.endif 43323485Srlibby 44329140SkevansCFLAGS+= -I${EFIINC} 45329140SkevansCFLAGS+= -I${EFIINCMD} 46329140SkevansCFLAGS+= -I${SYSDIR}/contrib/dev/acpica/include 47294060SsmhCFLAGS+= -DEFI_UFS_BOOT 48294265Ssmh.ifdef(EFI_DEBUG) 49294265SsmhCFLAGS+= -DEFI_DEBUG 50294265Ssmh.endif 51264391Snwhitehorn 52264403Snwhitehorn# Always add MI sources and REGULAR efi loader bits 53329140Skevans.PATH: ${EFISRC}/loader/arch/${MACHINE} 54329140Skevans.PATH: ${EFISRC}/loader 55329140Skevans.PATH: ${LDRSRC} 56329140SkevansCFLAGS+= -I${LDRSRC} 57264391Snwhitehorn 58264975SnwhitehornFILES= boot1.efi boot1.efifat 59264391SnwhitehornFILESMODE_boot1.efi= ${BINMODE} 60264391Snwhitehorn 61329140SkevansLDSCRIPT= ${EFISRC}/loader/arch/${MACHINE}/ldscript.${MACHINE} 62329114SkevansLDFLAGS+= -Wl,-T${LDSCRIPT},-Bsymbolic,-znotext -shared 63264391Snwhitehorn 64282474Sandrew.if ${MACHINE_CPUARCH} == "aarch64" 65329100SkevansCFLAGS+= -mgeneral-regs-only 66282474Sandrew.endif 67281027Sandrew.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" 68281300SandrewCFLAGS+= -fPIC 69281027SandrewLDFLAGS+= -Wl,-znocombreloc 70281027Sandrew.endif 71281027Sandrew 72329140SkevansLIBEFI= ${BOOTOBJ}/efi/libefi/libefi.a 73329114Skevans 74281156Sandrew# 75281238Semaste# Add libstand for the runtime functions used by the compiler - for example 76281238Semaste# __aeabi_* (arm) or __divdi3 (i386). 77293460Ssmh# as well as required string and memory functions for all platforms. 78281156Sandrew# 79329140SkevansDPADD+= ${LIBEFI} ${LIBZFSBOOT} ${LIBSA} 80329140SkevansLDADD+= ${LIBEFI} ${LIBZFSBOOT} ${LIBSA} 81281156Sandrew 82287930SjhbDPADD+= ${LDSCRIPT} 83264391Snwhitehorn 84296769SemasteNM?= nm 85264391SnwhitehornOBJCOPY?= objcopy 86264391Snwhitehorn 87264391Snwhitehorn.if ${MACHINE_CPUARCH} == "amd64" 88264391SnwhitehornEFI_TARGET= efi-app-x86_64 89280950Sandrew.elif ${MACHINE_CPUARCH} == "i386" 90264391SnwhitehornEFI_TARGET= efi-app-ia32 91281156Sandrew.else 92281156SandrewEFI_TARGET= binary 93264391Snwhitehorn.endif 94264391Snwhitehorn 95305845Semaste# Arbitrarily set the PE/COFF header timestamps to 1 Jan 2016 00:00:00 96305845Semaste# for build reproducibility. 97305845SemasteSOURCE_DATE_EPOCH?=1451606400 98287930Sjhbboot1.efi: ${PROG} 99296769Semaste if ${NM} ${.ALLSRC} | grep ' U '; then \ 100296769Semaste echo "Undefined symbols in ${.ALLSRC}"; \ 101264391Snwhitehorn exit 1; \ 102264391Snwhitehorn fi 103305845Semaste SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \ 104281156Sandrew ${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \ 105264391Snwhitehorn -j .dynamic -j .dynsym -j .rel.dyn \ 106329140Skevans -j .rela.dyn -j .reloc -j .eh_frame \ 107276146Semaste --output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET} 108264391Snwhitehorn 109329134Skevansboot1.o: ${SASRC}/ufsread.c 110264414Snwhitehorn 111287930Sjhb# The following inserts our objects into a template FAT file system 112264975Snwhitehorn# created by generate-fat.sh 113264975Snwhitehorn 114264975Snwhitehorn.include "${.CURDIR}/Makefile.fat" 115264975Snwhitehorn 116264975Snwhitehornboot1.efifat: boot1.efi 117319024Sngie @set -- `ls -l ${.ALLSRC}`; \ 118293425Semaste x=$$(($$5-${BOOT1_MAXSIZE})); \ 119293425Semaste if [ $$x -ge 0 ]; then \ 120293425Semaste echo "boot1 $$x bytes too large; regenerate FAT templates?" >&2 ;\ 121293425Semaste exit 1; \ 122293425Semaste fi 123264975Snwhitehorn echo ${.OBJDIR} 124329114Skevans xz -d -c ${.CURDIR}/fat-${MACHINE}.tmpl.xz > ${.TARGET} 125319024Sngie ${DD} if=${.ALLSRC} of=${.TARGET} seek=${BOOT1_OFFSET} conv=notrunc 126264975Snwhitehorn 127329140SkevansCLEANFILES+= boot1.efi boot1.efifat 128264975Snwhitehorn 129264391Snwhitehorn.include <bsd.prog.mk> 130