1LOADER_NET_SUPPORT?= yes 2LOADER_MSDOS_SUPPORT?= yes 3LOADER_UFS_SUPPORT?= yes 4LOADER_CD9660_SUPPORT?= no 5LOADER_EXT2FS_SUPPORT?= no 6 7.include <bsd.init.mk> 8 9.if ${MACHINE} == "amd64" && ${DO32:U0} == 1 10__arch= i386 11LOADER?= loader_ia32 12.else 13__arch= ${MACHINE} 14LOADER?= loader_${LOADER_INTERP} 15.endif 16PROG= ${LOADER}.sym 17INTERNALPROG= 18WARNS?= 3 19 20# architecture-specific loader code 21SRCS= autoload.c \ 22 bootinfo.c \ 23 conf.c \ 24 copy.c \ 25 efi_main.c \ 26 framebuffer.c \ 27 main.c \ 28 self_reloc.c \ 29 vers.c \ 30 gfx_fb.c \ 31 8x16.c 32 33SRCS+= acpi_detect.c 34.PATH: ${EFISRC}/acpica 35CFLAGS+= -I${EFISRC}/acpica/include 36 37CFLAGS+= -I${.CURDIR}/../loader 38.if ${MK_LOADER_ZFS} != "no" 39CFLAGS+= -I${ZFSSRC} 40CFLAGS+= -I${SYSDIR}/contrib/openzfs/include 41CFLAGS+= -I${SYSDIR}/contrib/openzfs/include/os/freebsd/zfs 42CFLAGS+= -DEFI_ZFS_BOOT 43HAVE_ZFS= yes 44.endif 45 46CFLAGS.bootinfo.c += -I$(SRCTOP)/sys/teken 47CFLAGS.bootinfo.c += -I${SRCTOP}/contrib/pnglite 48CFLAGS.framebuffer.c += -I$(SRCTOP)/sys/teken 49CFLAGS.framebuffer.c += -I${SRCTOP}/contrib/pnglite 50CFLAGS.main.c += -I$(SRCTOP)/sys/teken 51CFLAGS.main.c += -I${SRCTOP}/contrib/pnglite 52CFLAGS.gfx_fb.c += -I$(SRCTOP)/sys/teken 53CFLAGS.gfx_fb.c += -I${SRCTOP}/sys/cddl/contrib/opensolaris/common/lz4 54CFLAGS.gfx_fb.c += -I${SRCTOP}/contrib/pnglite 55CFLAGS.gfx_fb.c += -DHAVE_MEMCPY -I${SRCTOP}/sys/contrib/zlib 56 57# We implement a slightly non-standard %S in that it always takes a 58# CHAR16 that's common in UEFI-land instead of a wchar_t. This only 59# seems to matter on arm64 where wchar_t defaults to an int instead 60# of a short. There's no good cast to use here so just ignore the 61# warnings for now. 62CWARNFLAGS.main.c+= -Wno-format 63 64.PATH: ${.CURDIR}/../loader 65.PATH: ${.CURDIR}/../loader/arch/${__arch} 66.include "${.CURDIR}/../loader/arch/${__arch}/Makefile.inc" 67 68CFLAGS+= -Wall 69CFLAGS+= -I${.CURDIR} 70CFLAGS+= -I${.CURDIR}/arch/${__arch} 71CFLAGS+= -I${EFISRC}/include 72CFLAGS+= -I${EFISRC}/include/${__arch} 73CFLAGS+= -I${SYSDIR}/contrib/dev/acpica/include 74CFLAGS+= -I${BOOTSRC}/i386/libi386 75CFLAGS+= -DEFI 76 77.if defined(HAVE_FDT) && ${MK_FDT} != "no" 78.include "${BOOTSRC}/fdt.mk" 79LIBEFI_FDT= ${BOOTOBJ}/efi/fdt/libefi_fdt.a 80HELP_FILES+= ${FDTSRC}/help.fdt 81.endif 82 83# Include bcache code. 84HAVE_BCACHE= yes 85 86.if defined(EFI_STAGING_SIZE) 87CFLAGS+= -DEFI_STAGING_SIZE=${EFI_STAGING_SIZE} 88.endif 89 90.if ${MK_LOADER_EFI_SECUREBOOT} != "no" 91CFLAGS+= -DEFI_SECUREBOOT 92.endif 93 94NEWVERSWHAT?= "EFI loader" ${MACHINE} 95VERSION_FILE?= ${.CURDIR}/../loader/version 96HELP_FILENAME= loader.help.efi 97 98# Always add MI sources 99.include "${BOOTSRC}/loader.mk" 100 101CLEANFILES+= 8x16.c 102 1038x16.c: ${SRCTOP}/contrib/terminus/ter-u16b.bdf 104 vtfontcvt -f compressed-source -o ${.TARGET} ${.ALLSRC} 105 106FILES+= ${LOADER}.efi 107FILESMODE_${LOADER}.efi= ${BINMODE} 108 109.if ${LOADER_INTERP} == ${LOADER_DEFAULT_INTERP} && ${__arch} != "i386" 110LINKS+= ${BINDIR}/${LOADER}.efi ${BINDIR}/loader.efi 111.endif 112 113LDSCRIPT= ${.CURDIR}/../loader/arch/${__arch}/${__arch}.ldscript 114LDFLAGS+= -Wl,-T${LDSCRIPT},-Bsymbolic,-znotext -pie 115.if ${LINKER_TYPE} == "bfd" && ${LINKER_VERSION} >= 23400 116LDFLAGS+= -Wl,--no-dynamic-linker 117.endif 118 119.include <bsd.linker.mk> 120 121.if ${LINKER_TYPE} == "lld" && ${LINKER_FREEBSD_VERSION} < 1500001 122# When lld is using multiple threads, which it does by default, it can 123# result in non-reproducible output with the custom linker script. Work 124# around this by disabling threading. 125LDFLAGS+= -Wl,--threads=1 126.endif 127 128CLEANFILES+= ${LOADER}.efi 129 130${LOADER}.efi: ${PROG} 131 @if ${NM} ${.ALLSRC} | grep ' U '; then \ 132 echo "Undefined symbols in ${.ALLSRC}"; \ 133 exit 1; \ 134 fi 135 SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \ 136 ${EFI_OBJCOPY} -j .peheader -j .text -j .sdata -j .data \ 137 -j .dynamic -j .dynsym -j .rel.dyn \ 138 -j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \ 139 -j set_X${LOADER_INTERP}_compile_set \ 140 --output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET} 141 142LIBEFI= ${BOOTOBJ}/efi/libefi/libefi.a 143LIBEFI32= ${BOOTOBJ}/efi/libefi32/libefi.a 144 145.if ${__arch} == "i386" 146DPADD= ${LDR_INTERP32} ${LIBEFI32} ${LIBSA32} ${LDSCRIPT} 147LDADD= ${LDR_INTERP32} ${LIBEFI32} ${LIBSA32} 148.else 149DPADD= ${LDR_INTERP} ${LIBEFI} ${LIBSAFDT} ${LIBEFI_FDT} ${LIBSA} ${LDSCRIPT} 150LDADD= ${LDR_INTERP} ${LIBEFI} ${LIBSAFDT} ${LIBEFI_FDT} ${LIBSA} 151.endif 152 153.include <bsd.prog.mk> 154