Makefile.bootfloppy revision 1.5
1#	$NetBSD: Makefile.bootfloppy,v 1.5 2002/04/11 12:17:15 lukem Exp $
2
3.include <bsd.own.mk>
4.include "${_SRC_TOP_}/distrib/Makefile.inc"
5
6# needs the following set:
7#	IMAGE		image name
8#	KERNELDIR	where kernel is grabbed from
9#	KERNEL		kernel name
10#	DISKSIZE	size of image in 0.5K blocks
11
12FSTMP=		ustar.tmp
13MDEC=		${DESTDIR}/usr/mdec
14BOOTCODE?=	${MDEC}/biosboot.sym
15#BOOTCODE=	${MDEC}/biosboot_com0.sym	# Serial output
16
17CLEANFILES+=	netbsd boot ustar.tmp ${METAFILE} ${IMAGE} ${IMAGE}.tmp
18
19realall:	${IMAGE}
20
21${IMAGE}:	netbsd boot
22	if test "${METAFILE}" != ""; then \
23		touch ${METAFILE}; \
24	fi
25	${PAX} -wvf ${FSTMP} boot ${METAFILE} netbsd
26	@echo
27	@echo Making disk number one
28	rm -rf empty
29	mkdir -m 755 empty
30	${MAKEFS} -s ${DISKSIZE}b ${IMAGE}.tmp empty
31	dd bs=8k seek=1 count=$$((${DISKSIZE} / 16 - 1)) \
32	    if=${FSTMP} of=${IMAGE}.tmp
33	@echo "installing new bootblocks"
34	${MDEC}/installboot -b 17 -v -f ${BOOTCODE} ${IMAGE}.tmp
35		# XXXDISTRIB
36	@ls -l ${FSTMP} | (read mode links uid gid size junk; \
37		dksize=$$((${DISKSIZE} * 512 - 8 * 1024)); \
38		disks=$$(($$size / $$dksize + 1)); \
39		if test $$size -gt $$dksize; then \
40                	bytes=$$(($$size - $$dksize));    \
41			echo "Image is $$bytes ($$(($$bytes / 1024))K) too big\
42				to fit on one disk."; \
43			exit 1; \
44		else \
45			dd seek=$$(($${size} / 512 + 15)) count=1 \
46				if=/dev/zero of=${IMAGE}.tmp; \
47		fi; \
48		echo; \
49                bytes=$$(($$dksize * $$disks - $$size));    \
50		if test "${PAD}" = "yes"; then \
51			size=$$(($$size + 8 * 1024)); \
52			echo "Padding image with $$bytes bytes from $$size"; \
53			sectors=$$(($$bytes / 512)); \
54			ssize=$$(($$size / 512)); \
55			dd if=/dev/zero bs=512 seek=$${ssize} of=${IMAGE}.tmp \
56				count=$${sectors}; \
57                else \
58			echo "There are $$bytes ($$(($$bytes / 1024))K) bytes\
59				free on disk $$disks."; \
60		fi; \
61	)
62	mv -f ${IMAGE}.tmp ${IMAGE}
63
64# Let the kernel on the diskette be called "netbsd" although
65# it is compressed.  This is because the boot code will search
66# for "netbsd" first, and calling it "netbsd" instead of "netbsd.gz"
67# we avoid scanning all the diskettes before reading the file.
68
69KERNELOBJDIR!=	cd ${.CURDIR}/../${KERNELDIR} && ${PRINTOBJDIR}
70
71netbsd: ${KERNELOBJDIR}/${KERNEL}
72	rm -f netbsd
73	cp ${KERNELOBJDIR}/${KERNEL} netbsd
74
75# This is "cheating", just so that we have the available
76# space at the start of the tar file.  Installboot will overwrite
77# the start of the bootcode with the tail end of the "real", aligned
78# second-stage boot loader when it is run (which is quite a bit shorter
79# than the entire ${BOOTCODE} file, even when symbols are removed.
80# (the first 15*512 bytes are put into the first 8K filesystem block,
81# around the disklabel)
82
83boot: ${BOOTCODE}
84	rm -f boot
85	cp ${BOOTCODE} boot
86	${STRIP} boot
87
88release: check_RELEASEDIR
89	-mkdir -p ${RELEASEDIR}/installation/floppy
90	cp -p ${IMAGE} ${RELEASEDIR}/installation/floppy
91
92clean cleandir distclean:
93	rm -rf empty
94
95.include <bsd.prog.mk>
96