xref: /freebsd/stand/i386/boot2/Makefile (revision e9ac41698b2f322d55ccf9da50a3596edb2c1800)
1ca987d46SWarner Losh.include <bsd.init.mk>
2ca987d46SWarner Losh
3ca987d46SWarner LoshFILES=		boot boot1 boot2
4ca987d46SWarner Losh
5ca987d46SWarner Losh# A value of 0x80 enables LBA support.
6ca987d46SWarner LoshBOOT_BOOT1_FLAGS?=	0x80
7ca987d46SWarner Losh
8ca987d46SWarner LoshBOOT_COMCONSOLE_PORT?= 0x3f8
9*4722ceb7SEd MasteBOOT_COMCONSOLE_SPEED?= 115200
10ca987d46SWarner LoshB2SIOFMT?=	0x3
11ca987d46SWarner Losh
12ca987d46SWarner LoshREL1=	0x700
13ca987d46SWarner LoshORG1=	0x7c00
14ca987d46SWarner LoshORG2=	0x2000
15ca987d46SWarner Losh
16ca987d46SWarner Losh# Decide level of UFS support.
17ca987d46SWarner LoshBOOT2_UFS?=	UFS1_AND_UFS2
18ca987d46SWarner Losh#BOOT2_UFS?=	UFS2_ONLY
19ca987d46SWarner Losh#BOOT2_UFS?=	UFS1_ONLY
20ca987d46SWarner Losh
21ca987d46SWarner LoshCFLAGS+=-fomit-frame-pointer \
22ca987d46SWarner Losh	-mrtd \
23ca987d46SWarner Losh	-mregparm=3 \
24ca987d46SWarner Losh	-D${BOOT2_UFS} \
25ca987d46SWarner Losh	-DFLAGS=${BOOT_BOOT1_FLAGS} \
26ca987d46SWarner Losh	-DSIOPRT=${BOOT_COMCONSOLE_PORT} \
27ca987d46SWarner Losh	-DSIOFMT=${B2SIOFMT} \
28ca987d46SWarner Losh	-DSIOSPD=${BOOT_COMCONSOLE_SPEED} \
29ca987d46SWarner Losh	-I${LDRSRC} \
30ca987d46SWarner Losh	-Wall -Waggregate-return -Wbad-function-cast -Wno-cast-align \
31ca987d46SWarner Losh	-Wmissing-declarations -Wmissing-prototypes -Wnested-externs \
32c8c62548SAlex Richardson	-Wpointer-arith -Wshadow -Wstrict-prototypes -Wwrite-strings
33ca987d46SWarner Losh
34ca987d46SWarner LoshCFLAGS.gcc+=	-Os \
35ca987d46SWarner Losh		-fno-asynchronous-unwind-tables \
36ca987d46SWarner Losh		--param max-inline-insns-single=100
37ca987d46SWarner Losh
38ca987d46SWarner LoshCFLAGS.clang+=	-Oz ${CLANG_OPT_SMALL}
39ca987d46SWarner Losh
40ca987d46SWarner LoshLD_FLAGS+=${LD_FLAGS_BIN}
41ca987d46SWarner Losh
42ca987d46SWarner LoshCLEANFILES+=	boot
43ca987d46SWarner Losh
44ca987d46SWarner Loshboot: boot1 boot2
45ca987d46SWarner Losh	cat boot1 boot2 > boot
46ca987d46SWarner Losh
47ca987d46SWarner LoshCLEANFILES+=	boot1 boot1.out boot1.o
48ca987d46SWarner Losh
49ca987d46SWarner Loshboot1: boot1.out
50ca987d46SWarner Losh	${OBJCOPY} -S -O binary boot1.out ${.TARGET}
51ca987d46SWarner Losh
52ca987d46SWarner Loshboot1.out: boot1.o
53a2037dbaSDimitry Andric	${LD} ${LD_FLAGS} -e start --defsym ORG=${ORG1} -T ${LDSCRIPT} -o ${.TARGET} boot1.o
54ca987d46SWarner Losh
55ca987d46SWarner LoshCLEANFILES+=	boot2 boot2.ld boot2.ldr boot2.bin boot2.out boot2.o \
56ca987d46SWarner Losh		boot2.h sio.o
57ca987d46SWarner Losh
58ca987d46SWarner LoshBOOT2SIZE=	7680
59ca987d46SWarner Losh
60ca987d46SWarner Loshboot2: boot2.ld
61ca987d46SWarner Losh	@set -- `ls -l ${.ALLSRC}`; x=$$((${BOOT2SIZE}-$$5)); \
62ca987d46SWarner Losh	    echo "$$x bytes available"; test $$x -ge 0
6387c5e64cSAlex Richardson	${DD} if=${.ALLSRC} of=${.TARGET} bs=${BOOT2SIZE} conv=sync
64ca987d46SWarner Losh
65ca987d46SWarner Loshboot2.ld: boot2.ldr boot2.bin ${BTXKERN}
66ca987d46SWarner Losh	btxld -v -E ${ORG2} -f bin -b ${BTXKERN} -l boot2.ldr \
67ca987d46SWarner Losh	    -o ${.TARGET} -P 1 boot2.bin
68ca987d46SWarner Losh
69ca987d46SWarner Loshboot2.ldr:
70ca987d46SWarner Losh	${DD} if=/dev/zero of=${.TARGET} bs=512 count=1
71ca987d46SWarner Losh
72ca987d46SWarner Loshboot2.bin: boot2.out
73ca987d46SWarner Losh	${OBJCOPY} -S -O binary boot2.out ${.TARGET}
74ca987d46SWarner Losh
7537ac567eSKyle Evans# For __ashldi3
760b57cec5SDimitry Andric.PATH: ${SRCTOP}/contrib/llvm-project/compiler-rt/lib/builtins
77e1aa7047SKyle EvansCFLAGS.ashldi3.c=	-Wno-missing-prototypes -Wno-missing-declarations
7837ac567eSKyle EvansCLEANFILES+=	ashldi3.o
7937ac567eSKyle Evans
8037ac567eSKyle Evansboot2.out: ${BTXCRT} boot2.o sio.o ashldi3.o
81a2037dbaSDimitry Andric	${LD} ${LD_FLAGS} --defsym ORG=${ORG2} -T ${LDSCRIPT} -o ${.TARGET} ${.ALLSRC}
82ca987d46SWarner Losh
83ca987d46SWarner LoshSRCS=	boot2.c boot2.h
84ca987d46SWarner Losh
85ca987d46SWarner Loshboot2.h: boot1.out
86ca987d46SWarner Losh	${NM} -t d ${.ALLSRC} | awk '/([0-9])+ T xread/ \
87ca987d46SWarner Losh	    { x = $$1 - ORG1; \
88ca987d46SWarner Losh	    printf("#define XREADORG %#x\n", REL1 + x) }' \
89ca987d46SWarner Losh	    ORG1=`printf "%d" ${ORG1}` \
90ca987d46SWarner Losh	    REL1=`printf "%d" ${REL1}` > ${.TARGET}
91ca987d46SWarner Losh
92ca987d46SWarner Losh.include <bsd.prog.mk>
93