Makefile revision 213136
1257251Skib# $FreeBSD: head/sys/boot/i386/zfsboot/Makefile 213136 2010-09-24 19:49:12Z pjd $
2278947Skib
3257251Skib.PATH:		${.CURDIR}/../boot2 ${.CURDIR}/../common ${.CURDIR}/../../common
4257251Skib
5257251SkibFILES=		zfsboot
6257251Skib
7257251SkibNM?=		nm
8257251Skib
9257251Skib# A value of 0x80 enables LBA support.
10257251SkibBOOT_BOOT1_FLAGS?=	0x80
11257251Skib
12257251SkibBOOT_COMCONSOLE_PORT?= 0x3f8
13257251SkibBOOT_COMCONSOLE_SPEED?= 9600
14257251SkibB2SIOFMT?=	0x3
15257251Skib
16257251SkibREL1=	0x700
17257251SkibORG1=	0x7c00
18257251SkibORG2=	0x2000
19257251Skib
20257251SkibCFLAGS=	-DBOOTPROG=\"zfsboot\" \
21257251Skib	-Os -g \
22257251Skib	-fno-guess-branch-probability \
23257251Skib	-fomit-frame-pointer \
24257251Skib	-fno-unit-at-a-time \
25257251Skib	-mno-align-long-strings \
26257251Skib	-mrtd \
27257251Skib	-mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 \
28257251Skib	-DBOOT2 \
29257251Skib	-DFLAGS=${BOOT_BOOT1_FLAGS} \
30257251Skib	-DSIOPRT=${BOOT_COMCONSOLE_PORT} \
31257251Skib	-DSIOFMT=${B2SIOFMT} \
32257251Skib	-DSIOSPD=${BOOT_COMCONSOLE_SPEED} \
33257251Skib	-I${.CURDIR}/../../common \
34257251Skib	-I${.CURDIR}/../common \
35257251Skib	-I${.CURDIR}/../../zfs \
36257251Skib	-I${.CURDIR}/../../../cddl/boot/zfs \
37257251Skib	-I${.CURDIR}/../btx/lib -I. \
38257251Skib	-I${.CURDIR}/../boot2 \
39257251Skib	-Wall -Waggregate-return -Wbad-function-cast -Wcast-align \
40257251Skib	-Wmissing-declarations -Wmissing-prototypes -Wnested-externs \
41257251Skib	-Wpointer-arith -Wshadow -Wstrict-prototypes -Wwrite-strings \
42257251Skib	-Winline --param max-inline-insns-single=100
43257251Skib
44257251SkibLDFLAGS=-static -N --gc-sections
45257251Skib
46257251Skib# Pick up ../Makefile.inc early.
47257251Skib.include <bsd.init.mk>
48257251Skib
49257251SkibCLEANFILES=	zfsboot
50257251Skib
51257251Skibzfsboot: zfsboot1 zfsboot2
52257251Skib	cat zfsboot1 zfsboot2 > zfsboot
53257251Skib
54257251SkibCLEANFILES+=	zfsboot1 zfsldr.out zfsldr.o
55257251Skib
56257251Skibzfsboot1: zfsldr.out
57257251Skib	objcopy -S -O binary zfsldr.out ${.TARGET}
58257251Skib
59257251Skibzfsldr.out: zfsldr.o
60257251Skib	${LD} ${LDFLAGS} -e start -Ttext ${ORG1} -o ${.TARGET} zfsldr.o
61257251Skib
62257251SkibCLEANFILES+=	zfsboot2 zfsboot.ld zfsboot.ldr zfsboot.bin zfsboot.out \
63257251Skib		zfsboot.o zfsboot.s zfsboot.s.tmp xreadorg.h sio.o
64257251Skib
65257251Skib# We currently allow 32768 bytes for zfsboot - in practice it could be
66257251Skib# any size up to 3.5Mb but keeping it fixed size simplifies zfsldr.
67257251Skib# 
68257251SkibBOOT2SIZE=	32768
69257251Skib
70257251Skibzfsboot2: zfsboot.ld
71257251Skib	@set -- `ls -l zfsboot.ld`; x=$$((${BOOT2SIZE}-$$5)); \
72257251Skib	    echo "$$x bytes available"; test $$x -ge 0
73257251Skib	dd if=zfsboot.ld of=${.TARGET} obs=${BOOT2SIZE} conv=osync
74257251Skib
75257251Skibzfsboot.ld: zfsboot.ldr zfsboot.bin ${BTXKERN}
76257251Skib	btxld -v -E ${ORG2} -f bin -b ${BTXKERN} -l zfsboot.ldr \
77257251Skib	    -o ${.TARGET} -P 1 zfsboot.bin
78257251Skib
79257251Skibzfsboot.ldr:
80257251Skib	cp /dev/null ${.TARGET}
81257251Skib
82278947Skibzfsboot.bin: zfsboot.out
83278947Skib	objcopy -S -O binary zfsboot.out ${.TARGET}
84278947Skib
85278947Skibzfsboot.out: ${BTXCRT} zfsboot.o sio.o drv.o cons.o util.o
86278947Skib	${LD} ${LDFLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC} ${LIBSTAND}
87278947Skib
88278947Skibzfsboot.o: zfsboot.s
89278947Skib
90278947SkibSRCS=	zfsboot.c xreadorg.h
91278947Skib
92278947Skibzfsboot.s: zfsboot.c xreadorg.h ${.CURDIR}/../../zfs/zfsimpl.c
93278947Skib	${CC} ${CFLAGS} -S -o zfsboot.s.tmp ${.CURDIR}/zfsboot.c
94278947Skib	sed -e '/align/d' -e '/nop/d' < zfsboot.s.tmp > zfsboot.s
95278947Skib	rm -f zfsboot.s.tmp
96278947Skib
97278947Skibxreadorg.h: zfsldr.out
98278947Skib	${NM} -t d ${.ALLSRC} | awk '/([0-9])+ T xread/ \
99278947Skib	    { x = $$1 - ORG1; \
100278947Skib	    printf("#define XREADORG %#x\n", REL1 + x) }' \
101278947Skib	    ORG1=`printf "%d" ${ORG1}` \
102278947Skib	    REL1=`printf "%d" ${REL1}` > ${.TARGET}
103278947Skib
104278947Skib.if ${MACHINE_CPUARCH} == "amd64"
105278947Skibbeforedepend zfsboot.s: machine
106280343SkibCLEANFILES+=	machine
107278947Skibmachine:
108278947Skib	ln -sf ${.CURDIR}/../../../i386/include machine
109278947Skib.endif
110278947Skib
111278947Skib.include <bsd.prog.mk>
112278947Skib