Makefile revision 185029
1234353Sdim# $FreeBSD: head/sys/boot/i386/zfsboot/Makefile 185029 2008-11-17 20:49:29Z pjd $
2234353Sdim
3353358Sdim.PATH:		${.CURDIR}/../boot2
4353358Sdim
5353358SdimFILES=		zfsboot
6193323Sed
7193323SedNM?=		nm
8193323Sed
9193323Sed# A value of 0x80 enables LBA support.
10193323SedBOOT_BOOT1_FLAGS?=	0x80
11193323Sed
12276479SdimBOOT_COMCONSOLE_PORT?= 0x3f8
13276479SdimBOOT_COMCONSOLE_SPEED?= 9600
14276479SdimB2SIOFMT?=	0x3
15288943Sdim
16276479SdimREL1=	0x700
17276479SdimORG1=	0x7c00
18276479SdimORG2=	0x2000
19276479Sdim
20276479SdimCFLAGS=	-Os -g \
21276479Sdim	-fno-guess-branch-probability \
22276479Sdim	-fomit-frame-pointer \
23276479Sdim	-fno-unit-at-a-time \
24276479Sdim	-mno-align-long-strings \
25276479Sdim	-mrtd \
26276479Sdim	-mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 \
27276479Sdim	-DBOOT2 \
28276479Sdim	-DFLAGS=${BOOT_BOOT1_FLAGS} \
29276479Sdim	-DSIOPRT=${BOOT_COMCONSOLE_PORT} \
30276479Sdim	-DSIOFMT=${B2SIOFMT} \
31276479Sdim	-DSIOSPD=${BOOT_COMCONSOLE_SPEED} \
32276479Sdim	-I${.CURDIR}/../../zfs \
33276479Sdim	-I${.CURDIR}/../../../cddl/boot/zfs \
34276479Sdim	-I${.CURDIR}/../btx/lib -I. \
35276479Sdim	-I${.CURDIR}/../boot2 \
36276479Sdim	-Wall -Waggregate-return -Wbad-function-cast -Wcast-align \
37276479Sdim	-Wmissing-declarations -Wmissing-prototypes -Wnested-externs \
38276479Sdim	-Wpointer-arith -Wshadow -Wstrict-prototypes -Wwrite-strings \
39276479Sdim	-Winline --param max-inline-insns-single=100
40276479Sdim
41276479SdimLDFLAGS=-static -N --gc-sections
42276479Sdim
43276479Sdim# Pick up ../Makefile.inc early.
44276479Sdim.include <bsd.init.mk>
45276479Sdim
46276479SdimCLEANFILES=	zfsboot
47276479Sdim
48276479Sdimzfsboot: zfsboot1 zfsboot2
49276479Sdim	cat zfsboot1 zfsboot2 > zfsboot
50276479Sdim
51276479SdimCLEANFILES+=	zfsboot1 zfsldr.out zfsldr.o
52276479Sdim
53276479Sdimzfsboot1: zfsldr.out
54276479Sdim	objcopy -S -O binary zfsldr.out ${.TARGET}
55276479Sdim
56276479Sdimzfsldr.out: zfsldr.o
57276479Sdim	${LD} ${LDFLAGS} -e start -Ttext ${ORG1} -o ${.TARGET} zfsldr.o
58276479Sdim
59276479SdimCLEANFILES+=	zfsboot2 zfsboot.ld zfsboot.ldr zfsboot.bin zfsboot.out \
60276479Sdim		zfsboot.o zfsboot.s zfsboot.s.tmp zfsboot.h sio.o
61276479Sdim
62276479Sdim# We currently allow 32768 bytes for zfsboot - in practice it could be
63276479Sdim# any size up to 3.5Mb but keeping it fixed size simplifies zfsldr.
64344779Sdim# 
65344779SdimBOOT2SIZE=	32768
66276479Sdim
67276479Sdimzfsboot2: zfsboot.ld
68276479Sdim	@set -- `ls -l zfsboot.ld`; x=$$((${BOOT2SIZE}-$$5)); \
69276479Sdim	    echo "$$x bytes available"; test $$x -ge 0
70276479Sdim	dd if=zfsboot.ld of=${.TARGET} obs=${BOOT2SIZE} conv=osync
71309124Sdim
72309124Sdimzfsboot.ld: zfsboot.ldr zfsboot.bin ${BTXKERN}
73276479Sdim	btxld -v -E ${ORG2} -f bin -b ${BTXKERN} -l zfsboot.ldr \
74276479Sdim	    -o ${.TARGET} -P 1 zfsboot.bin
75276479Sdim
76276479Sdimzfsboot.ldr:
77276479Sdim	cp /dev/null ${.TARGET}
78276479Sdim
79276479Sdimzfsboot.bin: zfsboot.out
80276479Sdim	objcopy -S -O binary zfsboot.out ${.TARGET}
81276479Sdim
82276479Sdimzfsboot.out: ${BTXCRT} zfsboot.o sio.o
83276479Sdim	${LD} ${LDFLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC}
84276479Sdim
85276479Sdimzfsboot.o: zfsboot.s
86276479Sdim
87276479SdimSRCS=	zfsboot.c zfsboot.h
88341825Sdim
89341825Sdimzfsboot.s: zfsboot.c zfsboot.h ${.CURDIR}/../../zfs/zfsimpl.c
90276479Sdim	${CC} ${CFLAGS} -S -o zfsboot.s.tmp ${.CURDIR}/zfsboot.c
91276479Sdim	sed -e '/align/d' -e '/nop/d' < zfsboot.s.tmp > zfsboot.s
92276479Sdim	rm -f zfsboot.s.tmp
93276479Sdim
94276479Sdimzfsboot.h: zfsldr.out
95276479Sdim	${NM} -t d ${.ALLSRC} | awk '/([0-9])+ T xread/ \
96276479Sdim	    { x = $$1 - ORG1; \
97276479Sdim	    printf("#define XREADORG %#x\n", REL1 + x) }' \
98276479Sdim	    ORG1=`printf "%d" ${ORG1}` \
99276479Sdim	    REL1=`printf "%d" ${REL1}` > ${.TARGET}
100276479Sdim
101276479Sdim.if ${MACHINE_ARCH} == "amd64"
102276479Sdimbeforedepend zfsboot.s: machine
103276479SdimCLEANFILES+=	machine
104276479Sdimmachine:
105276479Sdim	ln -sf ${.CURDIR}/../../../i386/include machine
106276479Sdim.endif
107276479Sdim
108353358Sdim.include <bsd.prog.mk>
109276479Sdim