xref: /dragonfly/stand/boot/efi/loader/Makefile (revision 7d3e9a5b)
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