Makefile.bootxx revision 1.28
152284Sobrien# $NetBSD: Makefile.bootxx,v 1.28 2007/09/27 01:57:24 ad Exp $
290075Sobrien
352284SobrienS=	${.CURDIR}/../../../../../
452284Sobrien
552284SobrienNOMAN=
652284SobrienPROG?= bootxx_${FS}
752284SobrienBINDIR= /usr/mdec
852284SobrienBINMODE= 0444
952284Sobrien
1052284SobrienPRIMARY_LOAD_ADDRESS=0x600
1152284SobrienSECONDARY_LOAD_ADDRESS=0x10000
1252284Sobrien
1352284Sobrien# We ought (need?) to fit into track 0 of a 1.2M floppy.
1452284Sobrien# This restricts us to 15 sectors (including pbr and label)
1552284SobrienBOOTXX_SECTORS?=15
1652284SobrienBOOTXX_MAXSIZE?= $$(( ${BOOTXX_SECTORS} * 512 ))
1752284Sobrien
1852284SobrienSRCS= pbr.S label.S bootxx.S boot1.c
1952284Sobrien
2052284Sobrien.include <bsd.own.mk>
2152284Sobrien
2252284SobrienSTRIPFLAG=	# nothing
2352284Sobrien
2452284SobrienLIBCRT0=	# nothing
2552284SobrienLIBCRTBEGIN=	# nothing
2652284SobrienLIBCRTEND=	# nothing
2752284SobrienLIBC=		# nothing
2852284Sobrien
2990075SobrienBINDIR=/usr/mdec
3052284SobrienBINMODE=444
3190075Sobrien
3252284Sobrien.PATH:	${.CURDIR}/.. ${.CURDIR}/../../lib
3352284Sobrien
3452284SobrienLDFLAGS+= -nostdlib -Wl,-N -Wl,-e,start
3552284SobrienCPPFLAGS+= -DBOOTXX
3652284Sobrien# CPPFLAGS+= -D__daddr_t=int32_t
3752284SobrienCPPFLAGS+= -I ${.CURDIR}/../../lib -I ${.OBJDIR}
3852284SobrienCPPFLAGS+= -DBOOTXX_SECTORS=${BOOTXX_SECTORS}
3952284SobrienCPPFLAGS+= -DPRIMARY_LOAD_ADDRESS=${PRIMARY_LOAD_ADDRESS}
4052284SobrienCPPFLAGS+= -DSECONDARY_LOAD_ADDRESS=${SECONDARY_LOAD_ADDRESS}
4152284SobrienCPPFLAGS+= -DXXfs_open=${FS}_open
4290075SobrienCPPFLAGS+= -DXXfs_close=${FS}_close
4390075SobrienCPPFLAGS+= -DXXfs_read=${FS}_read
4490075SobrienCPPFLAGS+= -DXXfs_stat=${FS}_stat
4552284SobrienCPPFLAGS+= -DFS=${FS}
4652284Sobrien
4752284Sobrien# Make sure we override any optimization options specified by the user
4852284SobrienCOPTS=  -Os
4952284SobrienDBG=
5052284Sobrien
5152284SobrienCPPFLAGS+= -DNO_LBA_CHECK
5252284Sobrien
5352284Sobrien.if ${MACHINE} == "amd64"
5452284SobrienLDFLAGS+=  -Wl,-m,elf_i386
5552284SobrienAFLAGS+=   -m32
5652284SobrienCPUFLAGS=  -m32
5752284SobrienLIBKERN_ARCH=i386
5852284SobrienKERNMISCMAKEFLAGS="LIBKERN_ARCH=i386"
5952284Sobrien.else
6052284Sobrien.if ${HAVE_GCC} == 3
6152284SobrienCPUFLAGS=  -mcpu=i386
6252284Sobrien.else
6352284SobrienCPUFLAGS=  -march=i386 -mtune=i386
6452284Sobrien.endif
6552284Sobrien.endif
6652284Sobrien
6752284SobrienCOPTS+=    -ffreestanding
6896263SobrienCFLAGS+= -Wall -Wmissing-prototypes -Wstrict-prototypes
6990075SobrienCPPFLAGS+= -nostdinc -D_STANDALONE
7052284SobrienCPPFLAGS+= -I$S
7152284Sobrien
7252284SobrienCPPFLAGS+= -DLIBSA_SINGLE_FILESYSTEM=xxfs \
7352284Sobrien		-DLIBSA_NO_TWIDDLE \
7452284Sobrien		-DLIBSA_NO_FD_CHECKING \
7552284Sobrien		-DLIBSA_NO_RAW_ACCESS \
7652284Sobrien		-DLIBSA_NO_FS_WRITE \
7752284Sobrien		-DLIBSA_NO_FS_SEEK \
7852284Sobrien		-DLIBSA_USE_MEMCPY \
7952284Sobrien		-DLIBSA_USE_MEMSET \
8052284Sobrien		-DLIBSA_SINGLE_DEVICE=blkdev \
8152284Sobrien		-DLIBKERN_OPTIMISE_SPACE \
8252284Sobrien		-D"blkdevioctl(x,y,z)=EINVAL" \
8352284Sobrien		-D"blkdevclose(f)=0" \
8452284Sobrien		-D"devopen(f,n,fl)=(*(fl)=(void *)n,0)" \
8552284Sobrien		-DLIBSA_NO_DISKLABEL_MSGS
8652284Sobrien
8790075Sobrien# -DLIBSA_FS_SINGLECOMPONENT 
8852284Sobrien
8952284Sobrien# CPPFLAGS+= -DBOOTXX_RAID1_SUPPORT
9052284Sobrien
9152284SobrienI386_STAND_DIR?= $S/arch/i386/stand
9252284Sobrien
9352284SobrienCLEANFILES+= machine x86
9490075Sobrien
9552284Sobrien.if !make(obj) && !make(clean) && !make(cleandir)
9652284Sobrien.BEGIN:
9752284Sobrien	-rm -f machine && ln -s $S/arch/i386/include machine
9852284Sobrien	-rm -f x86 && ln -s $S/arch/x86/include x86
9952284Sobrien.ifdef LIBOBJ
10052284Sobrien	-rm -f lib && ln -s ${LIBOBJ}/lib lib
10152284Sobrien	mkdir -p ${LIBOBJ}/lib
10252284Sobrien.endif
10352284Sobrien.endif
10452284Sobrien
10552284Sobrien### find out what to use for libi386
10652284SobrienI386DIR= ${I386_STAND_DIR}/lib
10752284Sobrien.include "${I386DIR}/Makefile.inc"
10852284SobrienLIBI386= ${I386LIB}
10952284Sobrien
11052284Sobrien### find out what to use for libsa
11152284SobrienSA_AS= library
11252284SobrienSAMISCMAKEFLAGS+="SA_USE_LOADFILE=yes"
11352284Sobrien.include "${S}/lib/libsa/Makefile.inc"
11452284SobrienLIBSA= ${SALIB}
11552284Sobrien
11652284Sobrien### find out what to use for libkern
11752284SobrienKERN_AS=        library
11852284Sobrien.include "${S}/lib/libkern/Makefile.inc"
11952284SobrienLIBKERN=        ${KERNLIB}
12052284Sobrien
12152284Sobrien
12252284Sobriencleandir distclean: cleanlibdir
12352284Sobrien
12452284Sobriencleanlibdir:
12552284Sobrien	-rm -rf lib
12652284Sobrien
12752284SobrienLIBLIST= ${LIBI386} ${LIBSA} ${LIBKERN} ${LIBI386} ${LIBSA}
12852284Sobrien
12952284SobrienCLEANFILES+= ${PROG}.sym ${PROG}.map
13052284Sobrien
13152284Sobrien${PROG}: ${OBJS} ${LIBLIST}
13252284Sobrien	${_MKTARGET_LINK}
13352284Sobrien	${CC} -o ${PROG}.sym ${LDFLAGS} -Wl,-Ttext,${PRIMARY_LOAD_ADDRESS} \
13452284Sobrien		-Wl,-Map,${PROG}.map -Wl,-cref ${OBJS} ${LIBLIST}
13552284Sobrien	${OBJCOPY} -O binary ${PROG}.sym ${PROG}
13652284Sobrien	@ sz=$$(${TOOL_STAT} -f '%z' ${PROG}); \
13752284Sobrien	if [ "$$sz" -gt "${BOOTXX_MAXSIZE}" ]; then \
13852284Sobrien		echo "### ${PROG} size $$sz is larger than ${BOOTXX_MAXSIZE}" >&2; \
13952284Sobrien		rm ${PROG}; \
14052284Sobrien		! :; \
14152284Sobrien	else \
14252284Sobrien		: pad to sector boundary; \
14352284Sobrien		pad=$$(( 512 - ( $$sz & 511 ) )); \
14490075Sobrien		[ $$pad = 512 ] || \
14552284Sobrien		    dd if=/dev/zero bs=1 count=$$pad >>${PROG} 2>/dev/null; \
14652284Sobrien		echo "${PROG} size $$sz, $$((${BOOTXX_MAXSIZE} - $$sz)) free"; \
14752284Sobrien	fi
14852284Sobrien
14952284Sobrien.include <bsd.prog.mk>
15052284Sobrien