1# $FreeBSD: head/sys/boot/efi/loader/Makefile 296769 2016-03-12 21:44:33Z emaste $ 2 3MAN= 4 5MK_SSP= no 6 7PROG= loader.sym 8INTERNALPROG= 9WARNS?= 3 10 11# architecture-specific loader code 12SRCS= autoload.c \ 13 bootinfo.c \ 14 conf.c \ 15 copy.c \ 16 devicename.c \ 17 efi_main.c \ 18 i386_module.c \ 19 main.c \ 20 self_reloc.c \ 21 smbios.c \ 22 vers.c 23 24.PATH: ${.CURDIR}/arch/${MACHINE} 25# For smbios.c and i386_module.c 26.PATH: ${.CURDIR}/../../pc32/libi386 27.include "${.CURDIR}/arch/${MACHINE}/Makefile.inc" 28 29BOOT_DLOADER= yes 30 31# DO NOT USE -static, this is a special case 32.undef NOSHARED 33 34CFLAGS+= -I${.CURDIR} 35CFLAGS+= -I${.CURDIR}/arch/${MACHINE} 36CFLAGS+= -I${.CURDIR}/../include 37CFLAGS+= -I${.CURDIR}/../../../../sys/contrib/dev/acpica/source/include 38CFLAGS+= -I${.CURDIR}/../../../../sys 39CFLAGS+= -I${.CURDIR}/../../pc32/libi386 40CFLAGS+= -I${.CURDIR}/../../dloader 41CFLAGS+= -I${.CURDIR}/../../../lib 42CFLAGS+= -DNO_PCI -DEFI 43 44# make buildenv doesn't set DESTDIR, this means LIBSTAND 45# will be wrong when crossbuilding. 46.if exists(${.OBJDIR}/../../../lib/libstand.a) 47LIBSTAND= ${.OBJDIR}/../../../lib/libstand.a 48.endif 49 50.if exists(${.OBJDIR}/../../dloader/libdloader.a) 51LIBDLOADER= ${.OBJDIR}/../../dloader/libdloader.a 52.endif 53 54.if defined(EFI_STAGING_SIZE) 55CFLAGS+= -DEFI_STAGING_SIZE=${EFI_STAGING_SIZE} 56.endif 57 58# Always add MI sources 59.PATH: ${.CURDIR}/../../common 60.include "${.CURDIR}/../../common/Makefile.inc" 61CFLAGS+= -I${.CURDIR}/../../common 62 63FILES+= loader.efi 64FILESMODE_loader.efi= ${BINMODE} 65 66LDSCRIPT= ${.CURDIR}/arch/${MACHINE}/ldscript.${MACHINE} 67LDFLAGS+= -Wl,-T${LDSCRIPT} -Wl,-Bsymbolic -shared 68 69CLEANFILES+= vers.c loader.efi 70 71NEWVERSWHAT= "EFI loader" ${MACHINE} 72 73vers.c: ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/../../efi/loader/version 74 sh ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version ${NEWVERSWHAT} 75 76NM?= nm 77OBJCOPY?= objcopy 78 79.if ${MACHINE_ARCH} == "x86_64" 80EFI_TARGET= pei-x86-64 81.else 82EFI_TARGET= binary 83.endif 84 85all: loader.efi 86 87loader.efi: ${PROG} 88 if ${NM} ${.ALLSRC} | grep ' U '; then \ 89 echo "Undefined symbols in ${.ALLSRC}"; \ 90 exit 1; \ 91 fi 92 # No "-j .eh_frame", otherwise the loader doesn't run. 93 ${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \ 94 -j .dynamic -j .dynsym -j .rel.dyn \ 95 -j .rela.dyn -j .reloc -j set_Xcommand_set \ 96 ${EFI_GOLD_OBJCOPY_FLAGS} --subsystem efi-app \ 97 --output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET} 98 99LIBEFI= ${.OBJDIR}/../libefi/libefi.a 100 101DPADD= ${LIBEFI} ${LIBSTAND} ${LIBDLOADER} ${LDSCRIPT} 102LDADD= ${LIBEFI} ${LIBSTAND} ${LIBDLOADER} 103 104.include <bsd.prog.mk> 105