xref: /freebsd/stand/i386/zfsboot/Makefile (revision ca987d4641cdcd7f27e153db17c5bf064934faf5)
1*ca987d46SWarner Losh# $FreeBSD$
2*ca987d46SWarner Losh
3*ca987d46SWarner LoshHAVE_GELI=yes
4*ca987d46SWarner Losh
5*ca987d46SWarner Losh.include <bsd.init.mk>
6*ca987d46SWarner Losh
7*ca987d46SWarner Losh.PATH:		${BOOTSRC}/i386/boot2 ${BOOTSRC}/i386/common ${SASRC}
8*ca987d46SWarner Losh
9*ca987d46SWarner LoshFILES=		zfsboot
10*ca987d46SWarner LoshMAN=		zfsboot.8
11*ca987d46SWarner Losh
12*ca987d46SWarner LoshNM?=		nm
13*ca987d46SWarner Losh
14*ca987d46SWarner LoshBOOT_COMCONSOLE_PORT?= 0x3f8
15*ca987d46SWarner LoshBOOT_COMCONSOLE_SPEED?= 9600
16*ca987d46SWarner LoshB2SIOFMT?=	0x3
17*ca987d46SWarner Losh
18*ca987d46SWarner LoshREL1=	0x700
19*ca987d46SWarner LoshORG1=	0x7c00
20*ca987d46SWarner LoshORG2=	0x2000
21*ca987d46SWarner Losh
22*ca987d46SWarner LoshCFLAGS+=-DBOOTPROG=\"zfsboot\" \
23*ca987d46SWarner Losh	-O1 \
24*ca987d46SWarner Losh	-DZFS -DBOOT2 \
25*ca987d46SWarner Losh	-DSIOPRT=${BOOT_COMCONSOLE_PORT} \
26*ca987d46SWarner Losh	-DSIOFMT=${B2SIOFMT} \
27*ca987d46SWarner Losh	-DSIOSPD=${BOOT_COMCONSOLE_SPEED} \
28*ca987d46SWarner Losh	-I${LDRSRC} \
29*ca987d46SWarner Losh	-I${BOOTSRC}/i386/common \
30*ca987d46SWarner Losh	-I${BOOTSRC}/i386 \
31*ca987d46SWarner Losh	-I${ZFSSRC} \
32*ca987d46SWarner Losh	-I${SYSDIR}/cddl/boot/zfs \
33*ca987d46SWarner Losh	-I${BTXLIB} \
34*ca987d46SWarner Losh	-I${BOOTSRC}/i386/boot2 \
35*ca987d46SWarner Losh	-Wall -Waggregate-return -Wbad-function-cast -Wno-cast-align \
36*ca987d46SWarner Losh	-Wmissing-declarations -Wmissing-prototypes -Wnested-externs \
37*ca987d46SWarner Losh	-Wpointer-arith -Wshadow -Wstrict-prototypes -Wwrite-strings \
38*ca987d46SWarner Losh	-Winline
39*ca987d46SWarner Losh
40*ca987d46SWarner LoshCFLAGS.gcc+=	--param max-inline-insns-single=100
41*ca987d46SWarner Losh.if ${MACHINE} == "amd64"
42*ca987d46SWarner LoshLIBZFSBOOT=${BOOTOBJ}/zfs32/libzfsboot.a
43*ca987d46SWarner Losh.else
44*ca987d46SWarner LoshLIBZFSBOOT=${BOOTOBJ}/zfs/libzfsboot.a
45*ca987d46SWarner Losh.endif
46*ca987d46SWarner Losh
47*ca987d46SWarner LoshLD_FLAGS+=${LD_FLAGS_BIN}
48*ca987d46SWarner Losh
49*ca987d46SWarner LoshCLEANFILES+=	zfsboot
50*ca987d46SWarner Losh
51*ca987d46SWarner Loshzfsboot: zfsboot1 zfsboot2
52*ca987d46SWarner Losh	cat zfsboot1 zfsboot2 > zfsboot
53*ca987d46SWarner Losh
54*ca987d46SWarner LoshCLEANFILES+=	zfsboot1 zfsldr.out zfsldr.o
55*ca987d46SWarner Losh
56*ca987d46SWarner Loshzfsboot1: zfsldr.out
57*ca987d46SWarner Losh	${OBJCOPY} -S -O binary zfsldr.out ${.TARGET}
58*ca987d46SWarner Losh
59*ca987d46SWarner Loshzfsldr.out: zfsldr.o
60*ca987d46SWarner Losh	${LD} ${LD_FLAGS} -e start -Ttext ${ORG1} -o ${.TARGET} zfsldr.o
61*ca987d46SWarner Losh
62*ca987d46SWarner LoshCLEANFILES+=	zfsboot2 zfsboot.ld zfsboot.ldr zfsboot.bin zfsboot.out \
63*ca987d46SWarner Losh		zfsboot.o zfsboot.s zfsboot.s.tmp sio.o cons.o drv.o
64*ca987d46SWarner Losh
65*ca987d46SWarner Losh# We currently allow 128k bytes for zfsboot - in practice it could be
66*ca987d46SWarner Losh# any size up to 3.5Mb but keeping it fixed size simplifies zfsldr.
67*ca987d46SWarner Losh#
68*ca987d46SWarner LoshBOOT2SIZE=	131072
69*ca987d46SWarner Losh
70*ca987d46SWarner Loshzfsboot2: zfsboot.ld
71*ca987d46SWarner Losh	@set -- `ls -l ${.ALLSRC}`; x=$$((${BOOT2SIZE}-$$5)); \
72*ca987d46SWarner Losh	    echo "$$x bytes available"; test $$x -ge 0
73*ca987d46SWarner Losh	${DD} if=${.ALLSRC} of=${.TARGET} obs=${BOOT2SIZE} conv=osync
74*ca987d46SWarner Losh
75*ca987d46SWarner Loshzfsboot.ld: zfsboot.ldr zfsboot.bin ${BTXKERN}
76*ca987d46SWarner Losh	btxld -v -E ${ORG2} -f bin -b ${BTXKERN} -l zfsboot.ldr \
77*ca987d46SWarner Losh	    -o ${.TARGET} -P 1 zfsboot.bin
78*ca987d46SWarner Losh
79*ca987d46SWarner Loshzfsboot.ldr:
80*ca987d46SWarner Losh	cp /dev/null ${.TARGET}
81*ca987d46SWarner Losh
82*ca987d46SWarner Loshzfsboot.bin: zfsboot.out
83*ca987d46SWarner Losh	${OBJCOPY} -S -O binary zfsboot.out ${.TARGET}
84*ca987d46SWarner Losh
85*ca987d46SWarner Loshzfsboot.out: ${BTXCRT} zfsboot.o sio.o drv.o cons.o
86*ca987d46SWarner Losh	${LD} ${LD_FLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC} ${LIBZFSBOOT} ${LIBGELIBOOT} ${LIBSA32}
87*ca987d46SWarner Losh
88*ca987d46SWarner LoshSRCS=	zfsboot.c
89*ca987d46SWarner Losh
90*ca987d46SWarner Losh.include <bsd.prog.mk>
91*ca987d46SWarner Losh
92*ca987d46SWarner Losh# XXX: clang integrated-as doesn't grok .codeNN directives yet
93*ca987d46SWarner LoshCFLAGS.zfsldr.S=	${CLANG_NO_IAS}
94