Makefile revision 329114
1264391Snwhitehorn# $FreeBSD: stable/11/sys/boot/efi/boot1/Makefile 329114 2018-02-11 02:27:50Z kevans $ 2264391Snwhitehorn 3264925SimpMAN= 4264391Snwhitehorn 5294060Ssmh.include <src.opts.mk> 6264391Snwhitehorn 7264391SnwhitehornMK_SSP= no 8264391Snwhitehorn 9287930SjhbPROG= boot1.sym 10264391SnwhitehornINTERNALPROG= 11293724SsmhWARNS?= 6 12264391Snwhitehorn 13329114Skevans# We implement a slightly non-standard %S in that it always takes a 14329114Skevans# CHAR16 that's common in UEFI-land instead of a wchar_t. This only 15329114Skevans# seems to matter on arm64 where wchar_t defaults to an int instead 16329114Skevans# of a short. There's no good cast to use here so just ignore the 17329114Skevans# warnings for now. 18329114SkevansCWARNFLAGS.boot1.c+= -Wno-format 19329114Skevans 20294068Ssmh# Disable warnings that are currently incompatible with the zfs boot code 21294068SsmhCWARNFLAGS.zfs_module.c += -Wno-array-bounds 22294068SsmhCWARNFLAGS.zfs_module.c += -Wno-cast-align 23294068SsmhCWARNFLAGS.zfs_module.c += -Wno-cast-qual 24294068SsmhCWARNFLAGS.zfs_module.c += -Wno-missing-prototypes 25294068SsmhCWARNFLAGS.zfs_module.c += -Wno-sign-compare 26294068SsmhCWARNFLAGS.zfs_module.c += -Wno-unused-parameter 27294068SsmhCWARNFLAGS.zfs_module.c += -Wno-unused-function 28328866SkevansCWARNFLAGS.skein.c += -Wno-cast-align 29328866Skevans.if ${COMPILER_TYPE} == "clang" 30328866SkevansCWARNFLAGS.skein.c += -Wno-missing-variable-declarations 31328866Skevans.else if ${COMPILER_TYPE} == "gcc" 32328866SkevansCWARNFLAGS.skein.c += -Wno-missing-declarations 33294068Ssmh.endif 34294068Ssmh 35264391Snwhitehorn# architecture-specific loader code 36294060SsmhSRCS= boot1.c self_reloc.c start.S ufs_module.c 37294068Ssmh.if ${MK_ZFS} != "no" 38294068SsmhSRCS+= zfs_module.c 39328866SkevansSRCS+= skein.c skein_block.c 40328866Skevans# Do not unroll skein loops, reduce code size 41328866SkevansCFLAGS+= -DSKEIN_LOOP=111 42328866Skevans.PATH: ${.CURDIR}/../../../crypto/skein 43294068Ssmh.endif 44264391Snwhitehorn 45323485Srlibby.if ${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} > 40201 46323485SrlibbyCWARNFLAGS.self_reloc.c+= -Wno-error=maybe-uninitialized 47323485Srlibby.endif 48323485Srlibby 49264391SnwhitehornCFLAGS+= -I. 50280950SandrewCFLAGS+= -I${.CURDIR}/../include 51281524SandrewCFLAGS+= -I${.CURDIR}/../include/${MACHINE} 52264391SnwhitehornCFLAGS+= -I${.CURDIR}/../../../contrib/dev/acpica/include 53264391SnwhitehornCFLAGS+= -I${.CURDIR}/../../.. 54294060SsmhCFLAGS+= -DEFI_UFS_BOOT 55294265Ssmh.ifdef(EFI_DEBUG) 56294265SsmhCFLAGS+= -DEFI_DEBUG 57294265Ssmh.endif 58264391Snwhitehorn 59294068Ssmh.if ${MK_ZFS} != "no" 60294068SsmhCFLAGS+= -I${.CURDIR}/../../zfs/ 61294068SsmhCFLAGS+= -I${.CURDIR}/../../../cddl/boot/zfs/ 62328866SkevansCFLAGS+= -I${.CURDIR}/../../../crypto/skein 63294068SsmhCFLAGS+= -DEFI_ZFS_BOOT 64294068Ssmh.endif 65294068Ssmh 66264403Snwhitehorn# Always add MI sources and REGULAR efi loader bits 67281524Sandrew.PATH: ${.CURDIR}/../loader/arch/${MACHINE} 68281237Semaste.PATH: ${.CURDIR}/../loader 69281237Semaste.PATH: ${.CURDIR}/../../common 70264391SnwhitehornCFLAGS+= -I${.CURDIR}/../../common 71264391Snwhitehorn 72264975SnwhitehornFILES= boot1.efi boot1.efifat 73264391SnwhitehornFILESMODE_boot1.efi= ${BINMODE} 74264391Snwhitehorn 75281524SandrewLDSCRIPT= ${.CURDIR}/../loader/arch/${MACHINE}/ldscript.${MACHINE} 76329114SkevansLDFLAGS+= -Wl,-T${LDSCRIPT},-Bsymbolic,-znotext -shared 77264391Snwhitehorn 78282474Sandrew.if ${MACHINE_CPUARCH} == "aarch64" 79329100SkevansCFLAGS+= -mgeneral-regs-only 80282474Sandrew.endif 81281027Sandrew.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" 82281300SandrewCFLAGS+= -fPIC 83281027SandrewLDFLAGS+= -Wl,-znocombreloc 84281027Sandrew.endif 85281027Sandrew 86329114SkevansLIBEFI= ${.OBJDIR}/../libefi/libefi.a 87329114Skevans 88281156Sandrew# 89281238Semaste# Add libstand for the runtime functions used by the compiler - for example 90281238Semaste# __aeabi_* (arm) or __divdi3 (i386). 91293460Ssmh# as well as required string and memory functions for all platforms. 92281156Sandrew# 93329114SkevansDPADD+= ${LIBEFI} ${LIBSTAND} 94329114SkevansLDADD+= ${LIBEFI} -lstand 95281156Sandrew 96287930SjhbDPADD+= ${LDSCRIPT} 97264391Snwhitehorn 98296769SemasteNM?= nm 99264391SnwhitehornOBJCOPY?= objcopy 100264391Snwhitehorn 101264391Snwhitehorn.if ${MACHINE_CPUARCH} == "amd64" 102264391SnwhitehornEFI_TARGET= efi-app-x86_64 103280950Sandrew.elif ${MACHINE_CPUARCH} == "i386" 104264391SnwhitehornEFI_TARGET= efi-app-ia32 105281156Sandrew.else 106281156SandrewEFI_TARGET= binary 107264391Snwhitehorn.endif 108264391Snwhitehorn 109305845Semaste# Arbitrarily set the PE/COFF header timestamps to 1 Jan 2016 00:00:00 110305845Semaste# for build reproducibility. 111305845SemasteSOURCE_DATE_EPOCH?=1451606400 112287930Sjhbboot1.efi: ${PROG} 113296769Semaste if ${NM} ${.ALLSRC} | grep ' U '; then \ 114296769Semaste echo "Undefined symbols in ${.ALLSRC}"; \ 115264391Snwhitehorn exit 1; \ 116264391Snwhitehorn fi 117305845Semaste SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \ 118281156Sandrew ${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \ 119264391Snwhitehorn -j .dynamic -j .dynsym -j .rel.dyn \ 120287930Sjhb -j .rela.dyn -j .reloc -j .eh_frame \ 121276146Semaste --output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET} 122264391Snwhitehorn 123264414Snwhitehornboot1.o: ${.CURDIR}/../../common/ufsread.c 124264414Snwhitehorn 125287930Sjhb# The following inserts our objects into a template FAT file system 126264975Snwhitehorn# created by generate-fat.sh 127264975Snwhitehorn 128264975Snwhitehorn.include "${.CURDIR}/Makefile.fat" 129264975Snwhitehorn 130264975Snwhitehornboot1.efifat: boot1.efi 131319024Sngie @set -- `ls -l ${.ALLSRC}`; \ 132293425Semaste x=$$(($$5-${BOOT1_MAXSIZE})); \ 133293425Semaste if [ $$x -ge 0 ]; then \ 134293425Semaste echo "boot1 $$x bytes too large; regenerate FAT templates?" >&2 ;\ 135293425Semaste exit 1; \ 136293425Semaste fi 137264975Snwhitehorn echo ${.OBJDIR} 138329114Skevans xz -d -c ${.CURDIR}/fat-${MACHINE}.tmpl.xz > ${.TARGET} 139319024Sngie ${DD} if=${.ALLSRC} of=${.TARGET} seek=${BOOT1_OFFSET} conv=notrunc 140264975Snwhitehorn 141281117SandrewCLEANFILES= boot1.efi boot1.efifat 142264975Snwhitehorn 143264391Snwhitehorn.include <bsd.prog.mk> 144264391Snwhitehorn 145281496Sandrewbeforedepend ${OBJS}: machine 146264391Snwhitehorn 147281496SandrewCLEANFILES+= machine 148264391Snwhitehorn 149296706Sbdrewerymachine: .NOMETA 150281496Sandrew ln -sf ${.CURDIR}/../../../${MACHINE}/include machine 151264391Snwhitehorn 152281496Sandrew.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" 153281496Sandrewbeforedepend ${OBJS}: x86 154281496SandrewCLEANFILES+= x86 155281496Sandrew 156296706Sbdreweryx86: .NOMETA 157264391Snwhitehorn ln -sf ${.CURDIR}/../../../x86/include x86 158281027Sandrew.endif 159