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