Subject: Re: How to built a system from another platform ?
To: Manuel Bouyer <bouyer@antioche.lip6.fr>
From: Richard Earnshaw <rearnsha@buzzard.freeserve.co.uk>
List: port-i386
Date: 12/14/2000 22:19:45
>> On Wed, Dec 13, 2000 at 04:45:14PM +0100, Richard PLOIX wrote:
>> hello,
>> I have a RISCPC/arm32 and a laptop/i386 NetBSD machines.
>> I recently do an update of the arm32 machine with 1.4.3 version,
>> (SUP, kernel and make build).
>> The sources are on the 8Gb-arm32 machine.
>> I have a ppp link between the two machines.
>> The 1386 disk(250 Mb) is too small to support the sources on itself.
>> Is it possible to generate an i386 kernel and an i386 make build
>> from or via the arm32 machine?
> You could certainly set up a cross compiler on the arm32 machine. It's
> quite easy to build a kernel this way, but doing a 'make build' will
> require more tweaks. Another option is to mount the arm32's disk via
> NFS on the i386 machine, but over ppp it will be quite slow.
Actually building the sources for i386 from the ARM is not too hard (I did
it once when I first obtained the i386 machine that I use for a firewall);
you will need the following packages from the pkgsrc tree (but other than
that, it's largley a matter of "make build"):
cross-binutils-2.9.1.1 -- Unified GNU binutils for cross build environments
cross-i386-netbsdelf-1.3.0.0 -- Cross-compile environment for ELF
NetBSD/i386
I found that I needed to hask sys.mk around a bit, the easiest way was to
change most of the tools it defines as follows:
old: NM?= nm
new: NM?= $(CROSS_TOOL)nm
You could then pick up the cross tools simply by defining CROSS_TOOL to
"i386-netbsdelf-".
[looking back at my code, I see I also had similar settings for these
tools in mk.conf -- I cannot remember now why I had both, and which was
the one that finally made it work]
If you want to build the release tar-balls, things get more complicated.
First, you will need
bfd-crunchide-1.0 -- crunchide using libbfd. Used for cross-building
distributions
bfd-mdsetimage-1.0 -- mdsetimage using libbfd. Used for cross-building
distributions
Then you will have to hack the make files in a few places so that it is
possible to pick up the cross tool variants rather than the standard
binaries (in a few places commands like "strip" and "nm" are hard coded.
Finally you will need to create a bfd-based installboot program; there is
no package to do this, but I've hacked up a version that worked OK for me.
I can let you have a copy if you are interested.
The following is the shell script I used as a front-end to make, so that I
didn't leave something important out...
#! /bin/sh
PATH=/usr/pkg/cross/bin:/usr/sbin:/sbin:$PATH
export PATH
CC=/usr/pkg/cross/bin/i386-netbsdelf-cc
STRIP=/usr/pkg/cross/bin/i386-netbsdelf-strip
MAKECONF=/work/richard/cross/mk/mk.conf
export CC STRIP MAKECONF
# crunchide must create temporaries in '.'.
unset TMPDIR
make MACHINE=i386 MACHINE_ARCH=i386 DESTDIR=/mnt2/home/rearnsha/cross.i386
\
RELEASEDIR=/mnt2/home/rearnsha/release.i386 "$@"
# release UPDATE=1 NOINCLUDES=1 NBUILDJOBS=2