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