Makefile revision 294029
1# $FreeBSD: head/sys/boot/efi/boot1/Makefile 294029 2016-01-14 18:53:54Z smh $
2
3MAN=
4
5.include <bsd.own.mk>
6
7MK_SSP=		no
8
9PROG=		boot1.sym
10INTERNALPROG=
11WARNS?=		6
12
13# architecture-specific loader code
14SRCS=	boot1.c self_reloc.c start.S
15
16CFLAGS+=	-I.
17CFLAGS+=	-I${.CURDIR}/../include
18CFLAGS+=	-I${.CURDIR}/../include/${MACHINE}
19CFLAGS+=	-I${.CURDIR}/../../../contrib/dev/acpica/include
20CFLAGS+=	-I${.CURDIR}/../../..
21
22# Always add MI sources and REGULAR efi loader bits
23.PATH:		${.CURDIR}/../loader/arch/${MACHINE}
24.PATH:		${.CURDIR}/../loader
25.PATH:		${.CURDIR}/../../common
26CFLAGS+=	-I${.CURDIR}/../../common
27
28FILES=	boot1.efi boot1.efifat
29FILESMODE_boot1.efi=	${BINMODE}
30
31LDSCRIPT=	${.CURDIR}/../loader/arch/${MACHINE}/ldscript.${MACHINE}
32LDFLAGS=	-Wl,-T${LDSCRIPT} -Wl,-Bsymbolic -shared
33
34.if ${MACHINE_CPUARCH} == "aarch64"
35CFLAGS+=	-msoft-float -mgeneral-regs-only
36.endif
37.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
38CFLAGS+=	-fPIC
39LDFLAGS+=	-Wl,-znocombreloc
40.endif
41
42#
43# Add libstand for the runtime functions used by the compiler - for example
44# __aeabi_* (arm) or __divdi3 (i386).
45# as well as required string and memory functions for all platforms.
46#
47DPADD+=		${LIBSTAND}
48LDADD+=		-lstand
49
50DPADD+=		${LDSCRIPT}
51
52OBJCOPY?=	objcopy
53OBJDUMP?=	objdump
54
55.if ${MACHINE_CPUARCH} == "amd64"
56EFI_TARGET=	efi-app-x86_64
57.elif ${MACHINE_CPUARCH} == "i386"
58EFI_TARGET=	efi-app-ia32
59.else
60EFI_TARGET=	binary
61.endif
62
63boot1.efi: ${PROG}
64	if [ `${OBJDUMP} -t ${.ALLSRC} | fgrep '*UND*' | wc -l` != 0 ]; then \
65		${OBJDUMP} -t ${.ALLSRC} | fgrep '*UND*'; \
66		exit 1; \
67	fi
68	${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \
69		-j .dynamic -j .dynsym -j .rel.dyn \
70		-j .rela.dyn -j .reloc -j .eh_frame \
71		--output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET}
72
73boot1.o: ${.CURDIR}/../../common/ufsread.c
74
75# The following inserts our objects into a template FAT file system
76# created by generate-fat.sh
77
78.include "${.CURDIR}/Makefile.fat"
79BOOT1_MAXSIZE?=	131072
80
81boot1.efifat: boot1.efi
82	@set -- `ls -l boot1.efi`; \
83	x=$$(($$5-${BOOT1_MAXSIZE})); \
84	if [ $$x -ge 0 ]; then \
85	    echo "boot1 $$x bytes too large; regenerate FAT templates?" >&2 ;\
86	    exit 1; \
87	fi
88	echo ${.OBJDIR}
89	uudecode ${.CURDIR}/fat-${MACHINE}.tmpl.bz2.uu
90	mv fat-${MACHINE}.tmpl.bz2 ${.TARGET}.bz2
91	bzip2 -f -d ${.TARGET}.bz2
92	dd if=boot1.efi of=${.TARGET} seek=${BOOT1_OFFSET} conv=notrunc
93
94CLEANFILES= boot1.efi boot1.efifat
95
96.include <bsd.prog.mk>
97
98beforedepend ${OBJS}: machine
99
100CLEANFILES+=   machine
101
102machine:
103	ln -sf ${.CURDIR}/../../../${MACHINE}/include machine
104
105.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
106beforedepend ${OBJS}: x86
107CLEANFILES+=   x86
108
109x86:
110	ln -sf ${.CURDIR}/../../../x86/include x86
111.endif
112