Makefile revision 302408
1# $FreeBSD: stable/11/sys/boot/efi/boot1/Makefile 296769 2016-03-12 21:44:33Z emaste $
2
3MAN=
4
5.include <src.opts.mk>
6
7MK_SSP=		no
8
9PROG=		boot1.sym
10INTERNALPROG=
11WARNS?=		6
12
13.if ${MK_ZFS} != "no"
14# Disable warnings that are currently incompatible with the zfs boot code
15CWARNFLAGS.zfs_module.c += -Wno-array-bounds
16CWARNFLAGS.zfs_module.c += -Wno-cast-align
17CWARNFLAGS.zfs_module.c += -Wno-cast-qual
18CWARNFLAGS.zfs_module.c += -Wno-missing-prototypes
19CWARNFLAGS.zfs_module.c += -Wno-sign-compare
20CWARNFLAGS.zfs_module.c += -Wno-unused-parameter
21CWARNFLAGS.zfs_module.c += -Wno-unused-function
22.endif
23
24# architecture-specific loader code
25SRCS=	boot1.c self_reloc.c start.S ufs_module.c
26.if ${MK_ZFS} != "no"
27SRCS+=		zfs_module.c
28.endif
29
30CFLAGS+=	-I.
31CFLAGS+=	-I${.CURDIR}/../include
32CFLAGS+=	-I${.CURDIR}/../include/${MACHINE}
33CFLAGS+=	-I${.CURDIR}/../../../contrib/dev/acpica/include
34CFLAGS+=	-I${.CURDIR}/../../..
35CFLAGS+=	-DEFI_UFS_BOOT
36.ifdef(EFI_DEBUG)
37CFLAGS+=	-DEFI_DEBUG
38.endif
39
40.if ${MK_ZFS} != "no"
41CFLAGS+=	-I${.CURDIR}/../../zfs/
42CFLAGS+=	-I${.CURDIR}/../../../cddl/boot/zfs/
43CFLAGS+=	-DEFI_ZFS_BOOT
44.endif
45
46# Always add MI sources and REGULAR efi loader bits
47.PATH:		${.CURDIR}/../loader/arch/${MACHINE}
48.PATH:		${.CURDIR}/../loader
49.PATH:		${.CURDIR}/../../common
50CFLAGS+=	-I${.CURDIR}/../../common
51
52FILES=	boot1.efi boot1.efifat
53FILESMODE_boot1.efi=	${BINMODE}
54
55LDSCRIPT=	${.CURDIR}/../loader/arch/${MACHINE}/ldscript.${MACHINE}
56LDFLAGS+=	-Wl,-T${LDSCRIPT} -Wl,-Bsymbolic -shared
57
58.if ${MACHINE_CPUARCH} == "aarch64"
59CFLAGS+=	-msoft-float -mgeneral-regs-only
60.endif
61.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
62CFLAGS+=	-fPIC
63LDFLAGS+=	-Wl,-znocombreloc
64.endif
65
66#
67# Add libstand for the runtime functions used by the compiler - for example
68# __aeabi_* (arm) or __divdi3 (i386).
69# as well as required string and memory functions for all platforms.
70#
71DPADD+=		${LIBSTAND}
72LDADD+=		-lstand
73
74DPADD+=		${LDSCRIPT}
75
76NM?=		nm
77OBJCOPY?=	objcopy
78
79.if ${MACHINE_CPUARCH} == "amd64"
80EFI_TARGET=	efi-app-x86_64
81.elif ${MACHINE_CPUARCH} == "i386"
82EFI_TARGET=	efi-app-ia32
83.else
84EFI_TARGET=	binary
85.endif
86
87boot1.efi: ${PROG}
88	if ${NM} ${.ALLSRC} | grep ' U '; then \
89		echo "Undefined symbols in ${.ALLSRC}"; \
90		exit 1; \
91	fi
92	${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \
93		-j .dynamic -j .dynsym -j .rel.dyn \
94		-j .rela.dyn -j .reloc -j .eh_frame \
95		--output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET}
96
97boot1.o: ${.CURDIR}/../../common/ufsread.c
98
99# The following inserts our objects into a template FAT file system
100# created by generate-fat.sh
101
102.include "${.CURDIR}/Makefile.fat"
103BOOT1_MAXSIZE?=	131072
104
105boot1.efifat: boot1.efi
106	@set -- `ls -l boot1.efi`; \
107	x=$$(($$5-${BOOT1_MAXSIZE})); \
108	if [ $$x -ge 0 ]; then \
109	    echo "boot1 $$x bytes too large; regenerate FAT templates?" >&2 ;\
110	    exit 1; \
111	fi
112	echo ${.OBJDIR}
113	uudecode ${.CURDIR}/fat-${MACHINE}.tmpl.bz2.uu
114	mv fat-${MACHINE}.tmpl.bz2 ${.TARGET}.bz2
115	bzip2 -f -d ${.TARGET}.bz2
116	dd if=boot1.efi of=${.TARGET} seek=${BOOT1_OFFSET} conv=notrunc \
117	    status=none
118
119CLEANFILES= boot1.efi boot1.efifat
120
121.include <bsd.prog.mk>
122
123beforedepend ${OBJS}: machine
124
125CLEANFILES+=   machine
126
127machine: .NOMETA
128	ln -sf ${.CURDIR}/../../../${MACHINE}/include machine
129
130.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
131beforedepend ${OBJS}: x86
132CLEANFILES+=   x86
133
134x86: .NOMETA
135	ln -sf ${.CURDIR}/../../../x86/include x86
136.endif
137