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