Subject: Patches to allow sgimips cross-built full releases and ISO
To: None <port-sgimips@netbsd.org>
From: sgimips NetBSD list <sgimips@mrynet.com>
List: port-sgimips
Date: 05/17/2004 21:45:10
Hi All,

Attached are two diffs to etc/etc.sgimips/Makefile.inc and
sys/arch/sgimips/stand/sgivol/sgivol.c.

These diffs allow a complete release, including ISO image, to be cross-built
for the NetBSD/sgimips port under FreeBSD 4.x and 5.x.  These mods only affect
the sgimips portion of build code and are unused by any other ports.

Explanation of the diffs:

etc/etc.sgimips/Makefile.inc:

	FreeBSD uses different 'vnode' device commands and devices than
	NetBSD.  To complicate things further, FreeBSD 4.x differs from
	FreeBSD 5.x
	
	Under NetBSD, the vnconfig command is used:
		# vnconfig vnd0 imagefile.iso
		# sgivol -f -i vnd0
		# vnconfig -u vnd0

	Under FreeBSD 4.x, the necessary steps are:
		# vnconfig -s labels -c vn0 imagefile.iso
		# disklabel -w -r vn0 auto
		# vnconfig -u vn0

	While under FreeBSD 5.x, the necessary steps are:
		# mdconfig -a -t vnode -u md0 -f imagefile.iso
		# bsdlabel -m i386 -w -r md0 auto
		# sgivol -f -i md0
		# mdconfig -d -u md0
	The bsdlabel (aka disklabel) on FreeBSD 5.x requires "-m i386" to ensure
	that non-i386 platforms can access disk block 0 on the md0 device.  

sys/arch/sgimips/stand/sgivol/sgivol.c:

	Under NetBSD, access to the raw disk is via r${DEV}c (/dev/rvnd0d).  
	Under FreeBSD, only the DEV is needed (/dev/vn0 or /dev/md0), 
	without "r" (raw) or the "raw" partition letter.  Furthermore,
	getrawpartition() is a NetBSD-only function.

	This mod detects whether NetBSD is the target host and compiles support
	accordingly.

	A slight bit of functionality change when running on a cross-build host:
	the device argument to sgivol.c should be the full device rather than
	just the device name (without "r" and partition letter).  I.e. on FreeBSD
	4.x you should supply "/dev/rda0c" instead of "da0" as you would expect
	on a NetBSD platform.

I've attempted to code the scripting generically enough to accomodate other
operating-system hosts.  Surely there will be tweaking necessary for them,
but at least FreeBSD and Mac OS X should be accomodated now.

Please consider these mods for committal to the MAIN and 2-0 branches.
They have been tested on FreeBSD 4.x/i386, FreeBSD 5.x/i386, FreeBSD 5.x/alpha,
NetBSD 2.0/alpha, NetBSD 2.0/i386 and NetBSD 2.0/amd64.  Target architectures
tested have been alpha, i386, amd64, sparc, sparc64, sgimips and vax.

I'm currently working on adding support for Solaris 8/9/10 and IRIX 6.5
crossbuild release support for NetBSD/sgimips.  I'm not sure if I'll succeed
since neither OS has the disklabel capabilities we need, but perhaps sgivol(8)
is enough to accomplish this.

Thanks and regards,
-scott



Index: etc/etc.sgimips/Makefile.inc
===================================================================
RCS file: /cvsroot/src/etc/etc.sgimips/Makefile.inc,v
retrieving revision 1.9
diff -r1.9 Makefile.inc
15a16,50
> SGI.image= ${RELEASEDIR}/${MACHINE}/installation/cdrom/netbsd-sgimips.img
> 
> THISHOSTSYS!= uname -s
> 
> # Set up vnode/memory-disk port-specific stuff
> 
> # Default to NetBSD
> VDEV=         vnd0
> VDEVF=                r${VDEV}d
> VDEVCREATE=   vnconfig ${VDEV} ${SGI.image}
> VDEVDESTROY=  vnconfig -u ${VDEV}
> VDEVLABEL=    :
> 
> .if ${THISHOSTSYS} == "FreeBSD"
> FREEBSDTYPE!= which mdconfig
> .if ${FREEBSDTYPE} == ""
> # FreeBSD 4.x and prior
> VDEV=         vn0
> VDEVF=                r${VDEV}c
> VDEVCREATE=   vnconfig -s labels -c ${VDEV} ${SGI.image}
> VDEVLABEL=    disklabel -w -r ${VDEV} auto
> .else
> # FreeBSD 5.x and later
> VDEV=         md0
> VDEVF=                ${VDEV}c
> VDEVCREATE=   mdconfig -a -t vnode -u ${VDEV} -f ${SGI.image}
> VDEVDESTROY=  mdconfig -d -u ${VDEV}
> # FreeBSD 5 bsdlabel requires "-m i386" on platforms other than i386
> # otherwise, disk block zero cannot be written to.  On the alpha,
> # FreeBSD's bsdlabel will even fail with a floating exception without
> # it.
> VDEVLABEL=    bsdlabel -m i386 -w -r ${VDEV} auto
> .endif
> .endif
> 
22,23d56
< SGI.image= ${RELEASEDIR}/${MACHINE}/installation/cdrom/netbsd-sgimips.img
< 
26,31c59,69
<       vnconfig vnd0 ${SGI.image}
<       ${TOOLDIR}/bin/nbsgivol -f -i vnd0
<       ${TOOLDIR}/bin/nbsgivol -f -w aoutboot ${DESTDIR}/usr/mdec/aoutboot vnd0
<       ${TOOLDIR}/bin/nbsgivol -f -w ip2xboot ${DESTDIR}/usr/mdec/ip2xboot vnd0
<       ${TOOLDIR}/bin/nbsgivol -f -w ip3xboot ${DESTDIR}/usr/mdec/ip3xboot vnd0
<       vnconfig -u vnd0
---
> 
>       ${VDEVCREATE}
>       ${VDEVLABEL}
> 
>       ${TOOLDIR}/bin/nbsgivol -f -i ${VDEVF}
>       ${TOOLDIR}/bin/nbsgivol -f -w aoutboot ${DESTDIR}/usr/mdec/aoutboot ${VDEVF}
>       ${TOOLDIR}/bin/nbsgivol -f -w ip2xboot ${DESTDIR}/usr/mdec/ip2xboot ${VDEVF}
>       ${TOOLDIR}/bin/nbsgivol -f -w ip3xboot ${DESTDIR}/usr/mdec/ip3xboot ${VDEVF}
> 
>       ${VDEVDESTROY}
> 
Index: sys/arch/sgimips/stand/sgivol/sgivol.c
===================================================================
RCS file: /cvsroot/src/sys/arch/sgimips/stand/sgivol/sgivol.c,v
retrieving revision 1.8
diff -r1.8 sgivol.c
251a252
> #ifdef __NetBSD__
252a254,256
> #else
>               sprintf(buf, "/dev/%s", argv[0]);
> #endif