Makefile revision 305845
1130146Sdas# $FreeBSD: stable/11/sys/boot/efi/boot1/Makefile 305845 2016-09-15 17:30:01Z emaste $
2130146Sdas
3130146SdasMAN=
4130146Sdas
5130146Sdas.include <src.opts.mk>
6130146Sdas
7130146SdasMK_SSP=		no
8130146Sdas
9130146SdasPROG=		boot1.sym
10130146SdasINTERNALPROG=
11130146SdasWARNS?=		6
12130146Sdas
13130146Sdas.if ${MK_ZFS} != "no"
14130146Sdas# Disable warnings that are currently incompatible with the zfs boot code
15130146SdasCWARNFLAGS.zfs_module.c += -Wno-array-bounds
16130146SdasCWARNFLAGS.zfs_module.c += -Wno-cast-align
17130146SdasCWARNFLAGS.zfs_module.c += -Wno-cast-qual
18130146SdasCWARNFLAGS.zfs_module.c += -Wno-missing-prototypes
19130146SdasCWARNFLAGS.zfs_module.c += -Wno-sign-compare
20130146SdasCWARNFLAGS.zfs_module.c += -Wno-unused-parameter
21130146SdasCWARNFLAGS.zfs_module.c += -Wno-unused-function
22130146Sdas.endif
23130146Sdas
24130146Sdas# architecture-specific loader code
25130146SdasSRCS=	boot1.c self_reloc.c start.S ufs_module.c
26130146Sdas.if ${MK_ZFS} != "no"
27130146SdasSRCS+=		zfs_module.c
28130146Sdas.endif
29226218Sdas
30226415SdasCFLAGS+=	-I.
31130146SdasCFLAGS+=	-I${.CURDIR}/../include
32226218SdasCFLAGS+=	-I${.CURDIR}/../include/${MACHINE}
33226218SdasCFLAGS+=	-I${.CURDIR}/../../../contrib/dev/acpica/include
34226218SdasCFLAGS+=	-I${.CURDIR}/../../..
35226218SdasCFLAGS+=	-DEFI_UFS_BOOT
36130146Sdas.ifdef(EFI_DEBUG)
37226218SdasCFLAGS+=	-DEFI_DEBUG
38226218Sdas.endif
39226218Sdas
40226218Sdas.if ${MK_ZFS} != "no"
41226218SdasCFLAGS+=	-I${.CURDIR}/../../zfs/
42226218SdasCFLAGS+=	-I${.CURDIR}/../../../cddl/boot/zfs/
43226218SdasCFLAGS+=	-DEFI_ZFS_BOOT
44226218Sdas.endif
45226218Sdas
46226218Sdas# Always add MI sources and REGULAR efi loader bits
47226218Sdas.PATH:		${.CURDIR}/../loader/arch/${MACHINE}
48226218Sdas.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
87# Arbitrarily set the PE/COFF header timestamps to 1 Jan 2016 00:00:00
88# for build reproducibility.
89SOURCE_DATE_EPOCH?=1451606400
90boot1.efi: ${PROG}
91	if ${NM} ${.ALLSRC} | grep ' U '; then \
92		echo "Undefined symbols in ${.ALLSRC}"; \
93		exit 1; \
94	fi
95	SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \
96	${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \
97		-j .dynamic -j .dynsym -j .rel.dyn \
98		-j .rela.dyn -j .reloc -j .eh_frame \
99		--output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET}
100
101boot1.o: ${.CURDIR}/../../common/ufsread.c
102
103# The following inserts our objects into a template FAT file system
104# created by generate-fat.sh
105
106.include "${.CURDIR}/Makefile.fat"
107BOOT1_MAXSIZE?=	131072
108
109boot1.efifat: boot1.efi
110	@set -- `ls -l boot1.efi`; \
111	x=$$(($$5-${BOOT1_MAXSIZE})); \
112	if [ $$x -ge 0 ]; then \
113	    echo "boot1 $$x bytes too large; regenerate FAT templates?" >&2 ;\
114	    exit 1; \
115	fi
116	echo ${.OBJDIR}
117	uudecode ${.CURDIR}/fat-${MACHINE}.tmpl.bz2.uu
118	mv fat-${MACHINE}.tmpl.bz2 ${.TARGET}.bz2
119	bzip2 -f -d ${.TARGET}.bz2
120	dd if=boot1.efi of=${.TARGET} seek=${BOOT1_OFFSET} conv=notrunc \
121	    status=none
122
123CLEANFILES= boot1.efi boot1.efifat
124
125.include <bsd.prog.mk>
126
127beforedepend ${OBJS}: machine
128
129CLEANFILES+=   machine
130
131machine: .NOMETA
132	ln -sf ${.CURDIR}/../../../${MACHINE}/include machine
133
134.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
135beforedepend ${OBJS}: x86
136CLEANFILES+=   x86
137
138x86: .NOMETA
139	ln -sf ${.CURDIR}/../../../x86/include x86
140.endif
141