Subject: Re: Cross compiling NetBSD/i386 -> NetBSD/mac68k
To: port-mac68k@NetBSD.ORG, Dave Huang <khym@bga.com>
From: Andrew Cagney <cagney@highland.com.au>
List: port-mac68k
Date: 09/14/1995 13:10:02
Hello,

Some general comments on cross compiling may be helpful (I'm doing this
but not for the 68k).


Cross compiling NetBSD is non trivial.


Compilation tools:

This is where you may come to grief...

Firstly I suggest that you check that you've got sufficient disk space
to keep online fully built copies of the compiler, assembler, linker and
possibly debugger.  I suggest this as it is esentially guarenteed that
you'll find bugs in your compiler tools (if you don't you're very very
lucky :-).

Also needed is a decision on which compiler tools to use.  I can think
of several choices 1) GNU's current tools. 2) NetBSD's tools or 3) some
hybrid (eg current gcc but NetBSD's as/ld).  I'm using a variation on #1
- the bleading edge of the GNU tools - because NetBSD's bundled compiler
et.al. don't suport my target (yes that is my blood on the floor). Any
advice?  Mainly shop around. I believe that someone in the Amega group
has recently being doing work on getting better NetBSD/68k suport into
GCC.


Build process:

I've successfuly (for my target) built lib and built/run a few select
user programs.  I've also (before beeing distracted by yet another
compler bug) linked a kernel.  Over all, this side of the problem (once
the compler tools works) is fairly straight forward.

In my case, I've got a script called emake that contains something like:

	#!/bin/sh
	PATH=$HOME/bin/hacks:$PATH ; export PATH
	# sets up environment variables for parts of make that need to be
overwritten eg:
	CC="target-unknown-netbsd-gcc -g" ; export CC
	DESTDIR=/path/to/root ; export DESTDIR
	# it sets all of CC, LD, CXX, AS, CPP, RANLIB, AR, NM, SIZE, TARGET,
MACHINE, MACHINE_ARCH, NOPIC, NOTAGS, NOPROFILE, NOMAN, DESTDIR
	# run make -e to so that these variables override the defaults
	make -e -I $HOME/bin/hacks "$@"

Where the directory $HOME/bin/hacks contains several useful things. 
Other people probably handle this differently.  Firstly it contains two
shell scripts:

	a wrapper for `install' that strips off -[mog] options
	a wrapper for chown that ignores its arguments

this is so I can do installs as a normal user (emake install) with out
running the risk of me trashing say /usr/include.  Secondly (the make -I
...), if I find a problem with one of the bsd.*.mk make files, I can put
them in there so that they override the default bsd.*.mk files (in
/usr/share/....).


With this set up, I can (the kernel may require some minor fiddling that
I've forgoten) do the following:

	# unpack
	gunzip < include.tar.gz | tar xf -
	gunzip < lib.tar.gz | tar xf -
	gunzip < sys.tar.gz | tar xf -
	gunzip < something in gnu (flex?) so you've got a file that lib needs | ....
	...
	( cd src/include && emake install )
	( cd src/lib/libcurses && emake && emake install ) # bug
	( cd src/lib && emake && emake install )
	( cd src/usr.bin/printenv && emake )
	( cd src/sys/arch/<arch>/conf && config{.new} GENERIC && cd
../compile/GENERIC && emake depend && emake )

BTW: You don't need to build/install lib to build the kernel.  You may
also be able to get away with not installing the include files - I've
not tried it though.

Other people probably have different notes.

		Andrew