1ca987d46SWarner LoshLOADER_NET_SUPPORT?= yes 2ca987d46SWarner LoshLOADER_MSDOS_SUPPORT?= yes 3ca987d46SWarner LoshLOADER_UFS_SUPPORT?= yes 4ca987d46SWarner LoshLOADER_CD9660_SUPPORT?= no 5ca987d46SWarner LoshLOADER_EXT2FS_SUPPORT?= no 6ca987d46SWarner Losh 7ca987d46SWarner Losh.include <bsd.init.mk> 8ca987d46SWarner Losh 9f8ca5d45SAhmad Khalifa.if ${MACHINE} == "amd64" && ${DO32:U0} == 1 10f8ca5d45SAhmad Khalifa__arch= i386 11f8ca5d45SAhmad KhalifaLOADER?= loader_ia32 12f8ca5d45SAhmad Khalifa.else 13f8ca5d45SAhmad Khalifa__arch= ${MACHINE} 149d45c24cSWarner LoshLOADER?= loader_${LOADER_INTERP} 15f8ca5d45SAhmad Khalifa.endif 169d45c24cSWarner LoshPROG= ${LOADER}.sym 17ca987d46SWarner LoshINTERNALPROG= 18ca987d46SWarner LoshWARNS?= 3 19ca987d46SWarner Losh 20ca987d46SWarner Losh# architecture-specific loader code 21ca987d46SWarner LoshSRCS= autoload.c \ 22ca987d46SWarner Losh bootinfo.c \ 23ca987d46SWarner Losh conf.c \ 24ca987d46SWarner Losh copy.c \ 25ca987d46SWarner Losh efi_main.c \ 26ca987d46SWarner Losh framebuffer.c \ 27ca987d46SWarner Losh main.c \ 28ca987d46SWarner Losh self_reloc.c \ 293630506bSToomas Soome vers.c \ 303630506bSToomas Soome gfx_fb.c \ 313630506bSToomas Soome 8x16.c 32ca987d46SWarner Losh 339d45c24cSWarner LoshCFLAGS+= -I${.CURDIR}/../loader 34fbeb31a2SMatt Macy.if ${MK_LOADER_ZFS} != "no" 35ca987d46SWarner LoshCFLAGS+= -I${ZFSSRC} 36e307eb94SToomas SoomeCFLAGS+= -I${SYSDIR}/contrib/openzfs/include 37e307eb94SToomas SoomeCFLAGS+= -I${SYSDIR}/contrib/openzfs/include/os/freebsd/zfs 38ca987d46SWarner LoshCFLAGS+= -DEFI_ZFS_BOOT 394784aef9SWarner LoshHAVE_ZFS= yes 40ca987d46SWarner Losh.endif 41ca987d46SWarner Losh 4250180d2bSToomas SoomeCFLAGS.bootinfo.c += -I$(SRCTOP)/sys/teken 4350180d2bSToomas SoomeCFLAGS.bootinfo.c += -I${SRCTOP}/contrib/pnglite 4450180d2bSToomas SoomeCFLAGS.framebuffer.c += -I$(SRCTOP)/sys/teken 4550180d2bSToomas SoomeCFLAGS.framebuffer.c += -I${SRCTOP}/contrib/pnglite 46df065f69SWarner LoshCFLAGS.main.c += -I$(SRCTOP)/sys/teken 47df065f69SWarner LoshCFLAGS.main.c += -I${SRCTOP}/contrib/pnglite 483630506bSToomas SoomeCFLAGS.gfx_fb.c += -I$(SRCTOP)/sys/teken 493630506bSToomas SoomeCFLAGS.gfx_fb.c += -I${SRCTOP}/sys/cddl/contrib/opensolaris/common/lz4 503630506bSToomas SoomeCFLAGS.gfx_fb.c += -I${SRCTOP}/contrib/pnglite 513630506bSToomas SoomeCFLAGS.gfx_fb.c += -DHAVE_MEMCPY -I${SRCTOP}/sys/contrib/zlib 523630506bSToomas Soome 53ca987d46SWarner Losh# We implement a slightly non-standard %S in that it always takes a 54ca987d46SWarner Losh# CHAR16 that's common in UEFI-land instead of a wchar_t. This only 55ca987d46SWarner Losh# seems to matter on arm64 where wchar_t defaults to an int instead 56ca987d46SWarner Losh# of a short. There's no good cast to use here so just ignore the 57ca987d46SWarner Losh# warnings for now. 58ca987d46SWarner LoshCWARNFLAGS.main.c+= -Wno-format 59ca987d46SWarner Losh 609d45c24cSWarner Losh.PATH: ${.CURDIR}/../loader 61f8ca5d45SAhmad Khalifa.PATH: ${.CURDIR}/../loader/arch/${__arch} 62f8ca5d45SAhmad Khalifa.include "${.CURDIR}/../loader/arch/${__arch}/Makefile.inc" 63ca987d46SWarner Losh 64ca987d46SWarner LoshCFLAGS+= -I${.CURDIR} 65f8ca5d45SAhmad KhalifaCFLAGS+= -I${.CURDIR}/arch/${__arch} 66ca987d46SWarner LoshCFLAGS+= -I${EFISRC}/include 67f8ca5d45SAhmad KhalifaCFLAGS+= -I${EFISRC}/include/${__arch} 68ca987d46SWarner LoshCFLAGS+= -I${SYSDIR}/contrib/dev/acpica/include 69ca987d46SWarner LoshCFLAGS+= -I${BOOTSRC}/i386/libi386 7008b86a1aSWarner LoshCFLAGS+= -DEFI 71ca987d46SWarner Losh 72ca987d46SWarner Losh.if defined(HAVE_FDT) && ${MK_FDT} != "no" 73ca987d46SWarner Losh.include "${BOOTSRC}/fdt.mk" 74ca987d46SWarner LoshLIBEFI_FDT= ${BOOTOBJ}/efi/fdt/libefi_fdt.a 75dfbe8f64SMitchell HorneHELP_FILES+= ${FDTSRC}/help.fdt 76ca987d46SWarner Losh.endif 77ca987d46SWarner Losh 78ca987d46SWarner Losh# Include bcache code. 79ca987d46SWarner LoshHAVE_BCACHE= yes 80ca987d46SWarner Losh 81ca987d46SWarner Losh.if defined(EFI_STAGING_SIZE) 82ca987d46SWarner LoshCFLAGS+= -DEFI_STAGING_SIZE=${EFI_STAGING_SIZE} 83ca987d46SWarner Losh.endif 84ca987d46SWarner Losh 8513ea0450SMarcin Wojtas.if ${MK_LOADER_EFI_SECUREBOOT} != "no" 8613ea0450SMarcin WojtasCFLAGS+= -DEFI_SECUREBOOT 8713ea0450SMarcin Wojtas.endif 8813ea0450SMarcin Wojtas 89dcc7b369SAhmad KhalifaNEWVERSWHAT?= "EFI loader" ${MACHINE} 909d45c24cSWarner LoshVERSION_FILE= ${.CURDIR}/../loader/version 9188599604SMitchell HorneHELP_FILENAME= loader.help.efi 929d45c24cSWarner Losh 93ca987d46SWarner Losh# Always add MI sources 94ca987d46SWarner Losh.include "${BOOTSRC}/loader.mk" 95ca987d46SWarner Losh 963630506bSToomas SoomeCLEANFILES+= 8x16.c 973630506bSToomas Soome 986c789c55SToomas Soome8x16.c: ${SRCTOP}/contrib/terminus/ter-u16b.bdf 993630506bSToomas Soome vtfontcvt -f compressed-source -o ${.TARGET} ${.ALLSRC} 1003630506bSToomas Soome 1019d45c24cSWarner LoshFILES+= ${LOADER}.efi 1029d45c24cSWarner LoshFILESMODE_${LOADER}.efi= ${BINMODE} 103ca987d46SWarner Losh 104f8ca5d45SAhmad Khalifa.if ${LOADER_INTERP} == ${LOADER_DEFAULT_INTERP} && ${__arch} != "i386" 1054ad3fab6SWarner LoshLINKS+= ${BINDIR}/${LOADER}.efi ${BINDIR}/loader.efi 1064ad3fab6SWarner Losh.endif 1074ad3fab6SWarner Losh 108f8ca5d45SAhmad KhalifaLDSCRIPT= ${.CURDIR}/../loader/arch/${__arch}/${__arch}.ldscript 109253e820aSAlex RichardsonLDFLAGS+= -Wl,-T${LDSCRIPT},-Bsymbolic,-znotext -pie 1108bd5e2f1SJohn Baldwin.if ${LINKER_TYPE} == "bfd" && ${LINKER_VERSION} >= 23400 1118bd5e2f1SJohn BaldwinLDFLAGS+= -Wl,--no-dynamic-linker 1128bd5e2f1SJohn Baldwin.endif 113ca987d46SWarner Losh 114f97c7fdcSDimitry Andric.include <bsd.linker.mk> 115f97c7fdcSDimitry Andric 116f97c7fdcSDimitry Andric.if ${LINKER_TYPE} == "lld" && ${LINKER_FREEBSD_VERSION} < 1500001 117f5ce3f4eSDimitry Andric# When lld is using multiple threads, which it does by default, it can 118f5ce3f4eSDimitry Andric# result in non-reproducible output with the custom linker script. Work 119f5ce3f4eSDimitry Andric# around this by disabling threading. 120f97c7fdcSDimitry AndricLDFLAGS+= -Wl,--threads=1 121f97c7fdcSDimitry Andric.endif 122f5ce3f4eSDimitry Andric 1230f97a0d4SGuido van RooijCLEANFILES+= ${LOADER}.efi 124ca987d46SWarner Losh 1259d45c24cSWarner Losh${LOADER}.efi: ${PROG} 1263bf9e84fSVexedUXR @if ${NM} ${.ALLSRC} | grep ' U '; then \ 127ca987d46SWarner Losh echo "Undefined symbols in ${.ALLSRC}"; \ 128ca987d46SWarner Losh exit 1; \ 129ca987d46SWarner Losh fi 130ca987d46SWarner Losh SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \ 131*b885643bSEd Maste ${EFI_OBJCOPY} -j .peheader -j .text -j .sdata -j .data \ 132ca987d46SWarner Losh -j .dynamic -j .dynsym -j .rel.dyn \ 133ca987d46SWarner Losh -j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \ 134f5f08e41SWarner Losh -j set_X${LOADER_INTERP}_compile_set \ 135ca987d46SWarner Losh --output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET} 136ca987d46SWarner Losh 137ca987d46SWarner LoshLIBEFI= ${BOOTOBJ}/efi/libefi/libefi.a 138f8ca5d45SAhmad KhalifaLIBEFI32= ${BOOTOBJ}/efi/libefi32/libefi.a 139ca987d46SWarner Losh 140f8ca5d45SAhmad Khalifa.if ${__arch} == "i386" 141f8ca5d45SAhmad KhalifaDPADD= ${LDR_INTERP32} ${LIBEFI32} ${LIBSA32} ${LDSCRIPT} 142f8ca5d45SAhmad KhalifaLDADD= ${LDR_INTERP32} ${LIBEFI32} ${LIBSA32} 143f8ca5d45SAhmad Khalifa.else 144b247ff70SMark JohnstonDPADD= ${LDR_INTERP} ${LIBEFI} ${LIBSAFDT} ${LIBEFI_FDT} ${LIBSA} ${LDSCRIPT} 145b247ff70SMark JohnstonLDADD= ${LDR_INTERP} ${LIBEFI} ${LIBSAFDT} ${LIBEFI_FDT} ${LIBSA} 146f8ca5d45SAhmad Khalifa.endif 147ca987d46SWarner Losh 148ca987d46SWarner Losh.include <bsd.prog.mk> 149