buildenv target

John Baldwin jhb at FreeBSD.org
Mon Feb 14 14:01:12 PST 2005


On Sunday 13 February 2005 03:05 am, John-Mark Gurney wrote:
> David O'Brien wrote this message on Sat, Feb 12, 2005 at 22:29 -0800:
> > On Sat, Feb 12, 2005 at 04:17:52PM -0800, John-Mark Gurney wrote:
> > > Does anyone object to adding a buildenv target to our Makefile, so that
> > > when crossbuilding you can get the tools setup in a shell.  Useful for
> > > doing crossbuild testing w/ a cross-built world eaiser.
> >
> > ..
> >
> > > so:
> > > bash-2.05b$ which config
> > > /usr/sbin/config
> > > bash-2.05b$ make buildenv TARGET_ARCH=arm
> > > Entering world for arm:arm
> > > bash-2.05b$ which config
> > > /usr/obj/arm/usr/home/jmg/arm/src/i386/legacy/usr/sbin/config
> >
> > I don't quite follow what you're going to do with in it.
> > The problem is the more we bend this to do what the random person wants
> > to do we build a garantium thing that is hard to change w/o breaking some
> > "established" behavior.  Much like the huge mess we had in binutils to
> > support cross assembling to non-FreeBSD platforms.
>
> what you can do with it is:
> cd ~jmg/arm/src/sys/arm/conf
> config TS7200
> cd ../../compile/TS7200
> make depend && make -j 4
>
> and now hack to your hearts content on an arm kernel on your i386 box
> with out having to do things like cognet suggests on his arm text file
> (from http://people.freebsd.org/~cognet/freebsd_arm.txt):
> make TARGET_ARCH=arm TOOLS_PREFIX=/usr/cross depend all
> make TARGET_ARCH=arm TOOLS_PREFIX=/usr/cross DESTDIR=/usr/cross install
> Then go in /usr/src/gnu/usr.bin/binutils, and do :
> make TARGET_ARCH=arm TOOLS_PREFIX=/usr/cross depend all
> make TARGET_ARCH=arm TOOLS_PREFIX=/usr/cross DESTDIR=/usr/cross install
> You should get what is needed to cross-compile a kernel.
> You need to set the following environment varibles for cross-compiling :
> export CC=/usr/cross/usr/bin/gcc
> export AS=/usr/cross/usr/bin/as
> export NM=/usr/cross/usr/bin/nm
> export RANLIB=/usr/cross/usr/bin/ranlib
> export LD=/usr/cross/usr/bin/ld
> export OBJCOPY=/usr/cross/usr/bin/objcopy
> export SIZE=/usr/cross/usr/bin/size
> export MACHINE=arm
> export MACHINE_ARCH=arm
> Then you can compile the kernel the usual way, ie :
> cd /sys/arm/conf
> config IQ31244
> cd ../compile/IQ31244 && make depend all
>
> so, you now do:
> make buildworld TARGET_ARCH=arm
> make buildenv TARGET_ARCH=arm
> and build your kernel as you normally would...  a bit easier, wouldn't
> you say?

Did you know that you can just do:

make kernel-toolchain TARGET_ARCH=arm
make buildkernel TARGeT_ARCH=arm KERNCONF=TS7200

That's rather easy.  You can even cross-build against a different kernel tree
(I use this a lot for my p4 trees).  For example:

make TARGET_ARCH=amd64 KERNCONF=LINT KERNSRCDIR=/home/john/work/p4/proc \
    buildkernel NO_MODULES=yes

With repeated builds (e.g. when fixing compile errors) adding
NO_KERNELCLEAN=yes NO_KERNELDEPEND=yes is good as well.

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-arch mailing list