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${SAZFSSRC} 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${EDK2INC} 74CFLAGS+= -I${SYSDIR}/contrib/dev/acpica/include 75CFLAGS+= -I${BOOTSRC}/i386/libi386 76CFLAGS+= -DEFI 77 78.if defined(HAVE_FDT) && ${MK_FDT} != "no" 79.include "${BOOTSRC}/fdt.mk" 80LIBEFI_FDT= ${BOOTOBJ}/efi/fdt/libefi_fdt.a 81HELP_FILES+= ${FDTSRC}/help.fdt 82.endif 83 84# Include bcache code. 85HAVE_BCACHE= yes 86 87.if defined(EFI_STAGING_SIZE) 88CFLAGS+= -DEFI_STAGING_SIZE=${EFI_STAGING_SIZE} 89.endif 90 91.if ${MK_LOADER_EFI_SECUREBOOT} != "no" 92CFLAGS+= -DEFI_SECUREBOOT 93.endif 94 95NEWVERSWHAT?= "EFI loader" ${MACHINE} 96VERSION_FILE?= ${.CURDIR}/../loader/version 97HELP_FILENAME= loader.help.efi 98 99# Always add MI sources 100.include "${BOOTSRC}/loader.mk" 101 102CLEANFILES+= 8x16.c 103 1048x16.c: ${SRCTOP}/contrib/terminus/ter-u16b.bdf 105 vtfontcvt -f compressed-source -o ${.TARGET} ${.ALLSRC} 106 107FILES+= ${LOADER}.efi 108FILESMODE_${LOADER}.efi= ${BINMODE} 109 110.if ${LOADER_INTERP} == ${LOADER_DEFAULT_INTERP} && ${__arch} != "i386" 111LINKS+= ${BINDIR}/${LOADER}.efi ${BINDIR}/loader.efi 112.endif 113 114LDSCRIPT= ${.CURDIR}/../loader/arch/${__arch}/${__arch}.ldscript 115LDFLAGS+= -Wl,-T${LDSCRIPT},-Bsymbolic,-znotext -pie 116.if ${LINKER_TYPE} == "bfd" && ${LINKER_VERSION} >= 23400 117LDFLAGS+= -Wl,--no-dynamic-linker 118.endif 119 120.include <bsd.linker.mk> 121 122.if ${LINKER_TYPE} == "lld" && ${LINKER_FREEBSD_VERSION} < 1500001 123# When lld is using multiple threads, which it does by default, it can 124# result in non-reproducible output with the custom linker script. Work 125# around this by disabling threading. 126LDFLAGS+= -Wl,--threads=1 127.endif 128 129CLEANFILES+= ${LOADER}.efi 130 131${LOADER}.efi: ${PROG} 132 @if ${NM} ${.ALLSRC} | grep ' U '; then \ 133 echo "Undefined symbols in ${.ALLSRC}"; \ 134 exit 1; \ 135 fi 136 SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \ 137 ${EFI_OBJCOPY} -j .peheader -j .text -j .sdata -j .data \ 138 -j .dynamic -j .dynsym -j .rel.dyn \ 139 -j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \ 140 -j set_X${LOADER_INTERP}_compile_set \ 141 --output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET} 142 143LIBEFI= ${BOOTOBJ}/efi/libefi/libefi.a 144LIBEFI32= ${BOOTOBJ}/efi/libefi32/libefi.a 145 146.if ${__arch} == "i386" 147DPADD= ${LDR_INTERP32} ${LIBEFI32} ${LIBSA32} ${LDSCRIPT} 148LDADD= ${LDR_INTERP32} ${LIBEFI32} ${LIBSA32} 149.else 150DPADD= ${LDR_INTERP} ${LIBEFI} ${LIBSAFDT} ${LIBEFI_FDT} ${LIBSA} ${LDSCRIPT} 151LDADD= ${LDR_INTERP} ${LIBEFI} ${LIBSAFDT} ${LIBEFI_FDT} ${LIBSA} 152.endif 153 154.include <bsd.prog.mk> 155