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