Subject: re: road map for new immigrants?
To: Bill Studenmund <skippy@macro.stanford.edu>
From: matthew green <mrg@eterna.com.au>
List: current-users
Date: 09/15/1998 19:01:32
   
   My suggestion is to set things up for obj work BEFORE compiling. I didn't,
   and I still have little bits of crud lying around.
   
   Important make variables (which I set in /etc/mk.conf):
   
   BSDSRCDIR	This is where the source lives. For me, it's on my
   			/y2 partition.
   BSDOBJDIR	Here's where all the obj stuff will go. For me, it's
   			on the /y5 partition.
   OBJMACHINE=1	Use the machine name when making obj dirs, so you
   			get obj.i386, obj.mac68k, ...
   
   There are two ways the obj.XXX stuff works. If you're compiling from under
   the BSDSRCDIR tree (and leaving it /usr/src when /usr/src is a sym link
   doesn't count), you get a slew of symlinks to directories under the
   BSDOBJDIR tree. For instance, BSDSRCDIR/bin/sh has obj.i386, obj.mac68k,
   and obj.macppc, which are symlinks to the BSDOBJDIR/bin/sh.i386,
   sh.mac68k, and sh.macppc directories.
   
   If you're not under the BSDSRCDIR hierarchy, you get directories in your
   source tree.


while we're giving lessons, let me expand on this one..


BSDSRCDIR: the *realpath* of the src directory, typically /usr/src.  it
*can* *not* be a symlink if you want BSDOBJDIR to work correctly.

BSDOBJDIR: directory where objects for sources in BSDSRCDIR go.  it can
be a symlink and this makes it quite powerful [see below].

OBJMACHINE: defines whether to create obj.${MACHINE} or just obj, in the
source directory.

USR_OBJMACHINE: defines whether $BSDOBJDIR gets a .${MACHINE} postfix or
not, rather than individual directories getting prog.${MACHINE}.


here's the relevant bits from my /etc/mk.conf (and is the same all my
sparc, arm32, pmax and hp300 machines):

	BSDSRCDIR?=		/orb/v/src
	BSDOBJDIR?=		/var/obj
	OBJMACHINE?=		yes
	USR_OBJMACHINE?=	yes

where my sources *really* live in /orb/v/src, and i want .${MACHINE}
postfixes on my objdirs.  what this does is this (my example will be
src/bin/ps).

in /orb/v/src/bin/ps:

lrwxrwxr-x  1 root  wsrc      21 Aug  9 15:26 obj.arm32 -> /var/obj.arm32/bin/ps
lrwxrwxr-x  1 root  wsrc      21 Aug 13 11:44 obj.hp300 -> /var/obj.hp300/bin/ps
lrwxrwxr-x  1 root  wsrc      20 Mar 24 11:10 obj.pmax -> /var/obj.pmax/bin/ps
lrwxrwxr-x  1 root  wsrc      21 Sep  2 01:42 obj.sparc -> /var/obj.sparc/bin/ps

/var/obj.${MACHINE} is a symlink to the correct object directory for
that machine (and thus makes it *very* easy to switch objdirs for
the same ${MACHINE} by switching /var/obj.${MACHINE} to some new
place).  eg, on one sparc i have:

lrwxr-xr-x  1 root  wheel  16 Jun 26 14:16 /var/obj.sparc -> /orb/a/obj.sparc

and another has:

lrwxrwxr-x  1 root  wheel  16 Mar  1  1998 /var/obj.sparc -> /orb/g/obj.sparc

where /orb/a and /orb/g are local disks for each machine, so that they
can build from separate objtrees.  when i want to update one machine
from another's objects, i just switch the /var/obj.sparc link to the
right place, and `make install'.


hope this helps, it wasn't going to be this long :)