xref: /titanic_52/usr/src/boot/sys/boot/i386/boot2/Makefile (revision 4a5d661a82b942b6538acd26209d959ce98b593a)
1*4a5d661aSToomas Soome# $FreeBSD$
2*4a5d661aSToomas Soome
3*4a5d661aSToomas Soome.include <bsd.own.mk>
4*4a5d661aSToomas Soome
5*4a5d661aSToomas SoomeFILES=		boot boot1 boot2
6*4a5d661aSToomas Soome
7*4a5d661aSToomas SoomeNM?=		nm
8*4a5d661aSToomas Soome
9*4a5d661aSToomas Soome# A value of 0x80 enables LBA support.
10*4a5d661aSToomas SoomeBOOT_BOOT1_FLAGS?=	0x80
11*4a5d661aSToomas Soome
12*4a5d661aSToomas SoomeBOOT_COMCONSOLE_PORT?= 0x3f8
13*4a5d661aSToomas SoomeBOOT_COMCONSOLE_SPEED?= 9600
14*4a5d661aSToomas SoomeB2SIOFMT?=	0x3
15*4a5d661aSToomas Soome
16*4a5d661aSToomas SoomeREL1=	0x700
17*4a5d661aSToomas SoomeORG1=	0x7c00
18*4a5d661aSToomas SoomeORG2=	0x2000
19*4a5d661aSToomas Soome
20*4a5d661aSToomas Soome# Decide level of UFS support.
21*4a5d661aSToomas SoomeBOOT2_UFS?=	UFS1_AND_UFS2
22*4a5d661aSToomas Soome#BOOT2_UFS?=	UFS2_ONLY
23*4a5d661aSToomas Soome#BOOT2_UFS?=	UFS1_ONLY
24*4a5d661aSToomas Soome
25*4a5d661aSToomas SoomeCFLAGS=	-fomit-frame-pointer \
26*4a5d661aSToomas Soome	-mrtd \
27*4a5d661aSToomas Soome	-mregparm=3 \
28*4a5d661aSToomas Soome	-DUSE_XREAD \
29*4a5d661aSToomas Soome	-D${BOOT2_UFS} \
30*4a5d661aSToomas Soome	-DFLAGS=${BOOT_BOOT1_FLAGS} \
31*4a5d661aSToomas Soome	-DSIOPRT=${BOOT_COMCONSOLE_PORT} \
32*4a5d661aSToomas Soome	-DSIOFMT=${B2SIOFMT} \
33*4a5d661aSToomas Soome	-DSIOSPD=${BOOT_COMCONSOLE_SPEED} \
34*4a5d661aSToomas Soome	-I${.CURDIR}/../../common \
35*4a5d661aSToomas Soome	-I${.CURDIR}/../btx/lib -I. \
36*4a5d661aSToomas Soome	-Wall -Waggregate-return -Wbad-function-cast -Wcast-align \
37*4a5d661aSToomas Soome	-Wmissing-declarations -Wmissing-prototypes -Wnested-externs \
38*4a5d661aSToomas Soome	-Wpointer-arith -Wshadow -Wstrict-prototypes -Wwrite-strings \
39*4a5d661aSToomas Soome	-Winline
40*4a5d661aSToomas Soome
41*4a5d661aSToomas SoomeCFLAGS.gcc+=	-Os \
42*4a5d661aSToomas Soome		-fno-guess-branch-probability \
43*4a5d661aSToomas Soome		-fno-unit-at-a-time \
44*4a5d661aSToomas Soome		--param max-inline-insns-single=100
45*4a5d661aSToomas Soome.if ${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} <= 40201
46*4a5d661aSToomas SoomeCFLAGS.gcc+=   -mno-align-long-strings
47*4a5d661aSToomas Soome.endif
48*4a5d661aSToomas Soome
49*4a5d661aSToomas SoomeCFLAGS.clang+=	-Oz ${CLANG_OPT_SMALL}
50*4a5d661aSToomas Soome
51*4a5d661aSToomas SoomeLD_FLAGS=-static -N --gc-sections
52*4a5d661aSToomas Soome
53*4a5d661aSToomas Soome# Pick up ../Makefile.inc early.
54*4a5d661aSToomas Soome.include <bsd.init.mk>
55*4a5d661aSToomas Soome
56*4a5d661aSToomas SoomeCLEANFILES=	boot
57*4a5d661aSToomas Soome
58*4a5d661aSToomas Soomeboot: boot1 boot2
59*4a5d661aSToomas Soome	cat boot1 boot2 > boot
60*4a5d661aSToomas Soome
61*4a5d661aSToomas SoomeCLEANFILES+=	boot1 boot1.out boot1.o
62*4a5d661aSToomas Soome
63*4a5d661aSToomas Soomeboot1: boot1.out
64*4a5d661aSToomas Soome	${OBJCOPY} -S -O binary boot1.out ${.TARGET}
65*4a5d661aSToomas Soome
66*4a5d661aSToomas Soomeboot1.out: boot1.o
67*4a5d661aSToomas Soome	${LD} ${LD_FLAGS} -e start -Ttext ${ORG1} -o ${.TARGET} boot1.o
68*4a5d661aSToomas Soome
69*4a5d661aSToomas SoomeCLEANFILES+=	boot2 boot2.ld boot2.ldr boot2.bin boot2.out boot2.o \
70*4a5d661aSToomas Soome		boot2.s boot2.s.tmp boot2.h sio.o
71*4a5d661aSToomas Soome
72*4a5d661aSToomas Soomeboot2: boot2.ld
73*4a5d661aSToomas Soome	@set -- `ls -l boot2.ld`; x=$$((7680-$$5)); \
74*4a5d661aSToomas Soome	    echo "$$x bytes available"; test $$x -ge 0
75*4a5d661aSToomas Soome	dd if=boot2.ld of=${.TARGET} obs=7680 conv=osync status=none
76*4a5d661aSToomas Soome
77*4a5d661aSToomas Soomeboot2.ld: boot2.ldr boot2.bin ${BTXKERN}
78*4a5d661aSToomas Soome	btxld -v -E ${ORG2} -f bin -b ${BTXKERN} -l boot2.ldr \
79*4a5d661aSToomas Soome	    -o ${.TARGET} -P 1 boot2.bin
80*4a5d661aSToomas Soome
81*4a5d661aSToomas Soomeboot2.ldr:
82*4a5d661aSToomas Soome	dd if=/dev/zero of=${.TARGET} bs=512 count=1 status=none
83*4a5d661aSToomas Soome
84*4a5d661aSToomas Soomeboot2.bin: boot2.out
85*4a5d661aSToomas Soome	${OBJCOPY} -S -O binary boot2.out ${.TARGET}
86*4a5d661aSToomas Soome
87*4a5d661aSToomas Soomeboot2.out: ${BTXCRT} boot2.o sio.o
88*4a5d661aSToomas Soome	${LD} ${LD_FLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC}
89*4a5d661aSToomas Soome
90*4a5d661aSToomas Soomeboot2.o: boot2.s
91*4a5d661aSToomas Soome	${CC} ${ACFLAGS} -c boot2.s
92*4a5d661aSToomas Soome
93*4a5d661aSToomas SoomeSRCS=	boot2.c boot2.h
94*4a5d661aSToomas Soome
95*4a5d661aSToomas Soomeboot2.s: boot2.c boot2.h ${.CURDIR}/../../common/ufsread.c
96*4a5d661aSToomas Soome	${CC} ${CFLAGS} -S -o boot2.s.tmp ${.CURDIR}/boot2.c
97*4a5d661aSToomas Soome	sed -e '/align/d' -e '/nop/d' < boot2.s.tmp > boot2.s
98*4a5d661aSToomas Soome	rm -f boot2.s.tmp
99*4a5d661aSToomas Soome
100*4a5d661aSToomas Soomeboot2.h: boot1.out
101*4a5d661aSToomas Soome	${NM} -t d ${.ALLSRC} | awk '/([0-9])+ T xread/ \
102*4a5d661aSToomas Soome	    { x = $$1 - ORG1; \
103*4a5d661aSToomas Soome	    printf("#define XREADORG %#x\n", REL1 + x) }' \
104*4a5d661aSToomas Soome	    ORG1=`printf "%d" ${ORG1}` \
105*4a5d661aSToomas Soome	    REL1=`printf "%d" ${REL1}` > ${.TARGET}
106*4a5d661aSToomas Soome
107*4a5d661aSToomas Soome.if ${MACHINE_CPUARCH} == "amd64"
108*4a5d661aSToomas Soomebeforedepend boot2.s: machine
109*4a5d661aSToomas SoomeCLEANFILES+=	machine
110*4a5d661aSToomas Soomemachine: ${.CURDIR}/../../../i386/include .NOMETA
111*4a5d661aSToomas Soome	ln -sf ${.ALLSRC} ${.TARGET}
112*4a5d661aSToomas Soome.endif
113*4a5d661aSToomas Soome
114*4a5d661aSToomas Soome.include <bsd.prog.mk>
115*4a5d661aSToomas Soome
116*4a5d661aSToomas Soome# XXX: clang integrated-as doesn't grok .codeNN directives yet
117*4a5d661aSToomas SoomeCFLAGS.boot1.S=		${CLANG_NO_IAS}
118*4a5d661aSToomas SoomeCFLAGS+=		${CFLAGS.${.IMPSRC:T}}
119