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