Makefile revision 281300
150476Speter# $FreeBSD: head/sys/boot/efi/boot1/Makefile 281300 2015-04-09 10:08:10Z andrew $
21987Swollman
31987SwollmanMAN=
41987Swollman
5100346Sru.include <bsd.own.mk>
6100346Sru
7100346Sru# In-tree GCC does not support __attribute__((ms_abi)).
8100346Sru.if ${COMPILER_TYPE} != "gcc"
9100346Sru
10100346SruMK_SSP=		no
11100346Sru
12100346SruPROG=		loader.sym
13100346SruINTERNALPROG=
14100346Sru
15100346Sru# architecture-specific loader code
16100346SruSRCS=	boot1.c reloc.c start.S
17100346Sru
18100346SruCFLAGS+=	-I.
19100346SruCFLAGS+=	-I${.CURDIR}/../include
20100346SruCFLAGS+=	-I${.CURDIR}/../include/${MACHINE_CPUARCH}
21100346SruCFLAGS+=	-I${.CURDIR}/../../../contrib/dev/acpica/include
22100346SruCFLAGS+=	-I${.CURDIR}/../../..
23100346Sru
24100346Sru# Always add MI sources and REGULAR efi loader bits
25100346Sru.PATH:		${.CURDIR}/../loader/arch/${MACHINE_CPUARCH}
26100346Sru.PATH:		${.CURDIR}/../loader
27100346Sru.PATH:		${.CURDIR}/../../common
28100346SruCFLAGS+=	-I${.CURDIR}/../../common
29100346Sru
30100346SruFILES=	boot1.efi boot1.efifat
31100346SruFILESMODE_boot1.efi=	${BINMODE}
32100346Sru
33100346SruLDSCRIPT=	${.CURDIR}/../loader/arch/${MACHINE_CPUARCH}/ldscript.${MACHINE_CPUARCH}
34132211SscottlLDFLAGS=	-Wl,-T${LDSCRIPT} -Wl,-Bsymbolic -shared
354257Sphk
36100346Sru.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
37100346SruCFLAGS+=	-fPIC
38100346SruLDFLAGS+=	-Wl,-znocombreloc
39100346Sru.endif
40100346Sru
41100346Sru.if ${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "i386"
42100346Sru#
43100346Sru# Add libstand for the runtime functions used by the compiler - for example
44100346Sru# __aeabi_* (arm) or __divdi3 (i386).
45100346Sru#
46100346SruDPADD+=		${LIBSTAND}
47100346SruLDADD+=		-lstand
48100346Sru.endif
49100346Sru
50100346Sru${PROG}:	${LDSCRIPT}
51100346Sru
52100346SruOBJCOPY?=	objcopy
53100346SruOBJDUMP?=	objdump
54100346Sru
55100346Sru.if ${MACHINE_CPUARCH} == "amd64"
56100346SruEFI_TARGET=	efi-app-x86_64
57100346Sru.elif ${MACHINE_CPUARCH} == "i386"
58100346SruEFI_TARGET=	efi-app-ia32
59100346Sru.else
60100346SruEFI_TARGET=	binary
61100346Sru.endif
62100346Sru
63100346Sruboot1.efi: loader.sym
64100346Sru	if [ `${OBJDUMP} -t ${.ALLSRC} | fgrep '*UND*' | wc -l` != 0 ]; then \
65100346Sru		${OBJDUMP} -t ${.ALLSRC} | fgrep '*UND*'; \
66100346Sru		exit 1; \
67100346Sru	fi
68100346Sru	${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \
69100346Sru		-j .dynamic -j .dynsym -j .rel.dyn \
70100346Sru		-j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \
71100346Sru		--output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET}
72100346Sru
73100346Sruboot1.o: ${.CURDIR}/../../common/ufsread.c
74100346Sru
75100346Sru# The following inserts out objects into a template FAT file system
76100346Sru# created by generate-fat.sh
77100346Sru
78100346Sru.include "${.CURDIR}/Makefile.fat"
79100346Sru
80100346Sruboot1.efifat: boot1.efi
81100346Sru	echo ${.OBJDIR}
82100346Sru	uudecode ${.CURDIR}/fat-${MACHINE_CPUARCH}.tmpl.bz2.uu
83100346Sru	mv fat-${MACHINE_CPUARCH}.tmpl.bz2 ${.TARGET}.bz2
84100346Sru	bzip2 -f -d ${.TARGET}.bz2
85100346Sru	dd if=boot1.efi of=${.TARGET} seek=${BOOT1_OFFSET} conv=notrunc
86100346Sru
87100346SruCLEANFILES= boot1.efi boot1.efifat
88100346Sru
89100346Sru.endif # ${COMPILER_TYPE} != "gcc"
90100346Sru
91100346Sru.include <bsd.prog.mk>
92100346Sru
93100346Sru.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
94100346Srubeforedepend ${OBJS}: machine x86
95100346Sru
96100346SruCLEANFILES+=   machine x86
97100346Sru
98100346Srumachine:
99100346Sru	ln -sf ${.CURDIR}/../../../amd64/include machine
100100346Sru
101100346Srux86:
102100346Sru	ln -sf ${.CURDIR}/../../../x86/include x86
103100346Sru.endif
104100346Sru