1# $MirOS: src/distrib/tools/Makefile,v 1.46 2014/01/04 20:24:59 tg Exp $
2
3all: sundsklbl
4
5.include <bsd.own.mk>
6
7.if ${MACHINE_ARCH} == "i386"
8all: i386_chain
9.endif
10
11CHAINSECTOR?=	24
12.if defined(SERIALSPEED)
13CDROM?=		cdrom${SERIALSPEED}.iso
14.endif
15CDROM?=		cdrom${OSrev}.iso
16DSTTOPDIR?=	/var/www/htdocs/v${OSrev}
17
18CPPFLAGS+=	-DCHAINSECTOR=${CHAINSECTOR}
19
20depend:
21prereq:
22
23clean: .PHONY
24	-rm -f i386_chain sundsklbl *.o eltorito.loo ${CDROM}*
25	-rm -rf cddir
26
27cleandir: .PHONY clean
28
29i386_chain: i386_chain.o
30	ld -o $@ --oformat binary -Ttext 0 $>
31
32sundsklbl: sundsklbl.c
33	cd ${.CURDIR} && ${MAKE} -f ${.SYSMK}/bsd.prog.mk \
34	    PROG=$@ NOMAN=Yes EXPERIMENTAL=Yes
35
36CDROM_OPTS+=	applicationid=NetBSD_makefs
37CDROM_OPTS+=	bootimage=i386\;eltorito.loo
38CDROM_OPTS+=	no-emul-boot
39CDROM_OPTS+=	label=MirOS~v${OSrev}~BSD~manifold-boot~CD
40CDROM_OPTS+=	no-trailing-padding
41CDROM_OPTS+=	preparer=MirBSD_and_its_contributors
42CDROM_OPTS+=	publisher=Copyright_\<c\>_2002=2014_The_MirOS_Project
43CDROM_OPTS+=	rockridge
44CDROM_OPTS+=	rr-squash
45CDROM_OPTS+=	volumeid=$$(uname -sl | tr -- '- \#' :_):i386\;sparc:Setup
46#CDROM_OPTS+=	v=1
47
48makecdimage: .PHONY
49	-rm -rf cddir ${CDROM}*
50	dd if=/dev/arandom bs=2048 count=1 of=eltorito.loo 2>&-	# El Torito
51	mkdir -p cddir/{boot/grub,v${OSrev}/{i386,sparc}}
52	for arch in i386 sparc; do \
53		for file in ${DSTTOPDIR}/$$arch/{*boot*,bsd.rd,*mbr*}; do \
54			[[ -e $$file ]] || continue; \
55			install -m644 $$file cddir/v${OSrev}/$$arch/; \
56		done; \
57		mv cddir/v${OSrev}/$$arch/boot cddir/b_$$arch.ldr; \
58	done
59	cp cddir/b_sparc.ldr cddir/v${OSrev}/sparc/boot.net
60	# fix path to default kernel file in second-stage boot loader
61	set -A dump -- $$(dd if=cddir/b_sparc.ldr bs=4 count=64 | \
62	    hexdump -ve '1/1 "%02X"' | sed 's/\(........\)/ \1/g'); i=0; \
63	while (( i < 64 )); do [[ $${dump[i++]} = 2035560? ]] && break; done; \
64	if [[ $$i = 64 || $${dump[i-1]} != 20355601 ]]; then \
65		print -u2 found invalid or no patch field version; exit 1; \
66	fi; ofs=$$((#0x$${dump[i+1]})); \
67	print -n v${OSrev}/sparc/bsd.rd\\0 | \
68	    dd of=cddir/b_sparc.ldr bs=1 seek=$$ofs conv=notrunc
69	ln cddir/v${OSrev}/sparc/bsd.rd cddir/vmunix		# for kicks
70	cp ${.CURDIR}/../common/00-README cddir/
71.if defined(SERIALSPEED)
72	sed \
73	    -e 's!^boot .*$$!boot /v${OSrev}/i386/bsd.rd!' \
74	    -e 's/@SPEED@/${SERIALSPEED}/g' \
75	    ${.CURDIR}/boot.cfg.serial >cddir/boot.cfg
76.else
77	cat ${.CURDIR}/../common/boot.cfg.i386 >cddir/boot.cfg
78.endif
79	cat ${.CURDIR}/../baselive/boot.cfg.dual >>cddir/boot.cfg
80	cp ${.CURDIR}/../common/extra/loopback.cfg cddir/boot/grub/
81.if defined(WAIT)
82	@print === press RETURN; read x
83.endif
84	makefs -t cd9660 -o "$$(print -r -- ${CDROM_OPTS} | tr ' ~' ', ')" \
85	    ${CDROM} cddir
86	# pad the ISO with ]0;256K] NUL bytes, ie. for
87	# a geometry of 16 heads, 32 sectors per track
88	dd if=/dev/zero count=1 bs=$$((# (512 * 32 * 16) - \
89	    ($$(stat -f %z ${CDROM}) % (512 * 32 * 16)) )) 2>&- >>${CDROM}
90	getextent_cd9660 -f ${CDROM} b_i386.ldr | \
91	    ${MKSH} ${BSDSRCDIR}/usr.sbin/installboot/bxinst.i386 -B 11 | \
92	    dd of=${CDROM} conv=notrunc bs=2048 seek=$$(getextent_cd9660 \
93	    -f ${CDROM} -b '$$BootImage$$') 2>/dev/null
94	getextent_cd9660 -f ${CDROM} b_i386.ldr | \
95	    ${MKSH} ${BSDSRCDIR}/usr.sbin/installboot/bxinst.i386 -A -S 2 | \
96	    dd of=${CDROM} conv=notrunc bs=512 seek=${CHAINSECTOR} 2>/dev/null
97	getextent_cd9660 -f ${CDROM} b_sparc.ldr | \
98	    ${MKSH} ${BSDSRCDIR}/usr.sbin/installboot/bxinst.sparc \
99	    -g $$((#$$(stat -f %z ${CDROM}) / (512 * 32 * 16))):16:32 \
100	    -0 ${CHAINSECTOR} -S 2 | \
101	    dd of=${CDROM} conv=notrunc 2>/dev/null
102
103.include <bsd.obj.mk>
104