Re: Kernel Cross Compiling

From: Herbert Poetzl
Date: Mon Feb 16 2004 - 17:12:14 EST


On Mon, Feb 16, 2004 at 01:41:20PM -0800, cliff white wrote:
> On Sat, 14 Feb 2004 14:03:22 +0100
> Herbert Poetzl <herbert@xxxxxxxxxxxx> wrote:

Hi Cliff!

> > On Sat, Feb 14, 2004 at 12:32:07AM -0800, Timothy D. Witham wrote:
> > > Just to point out that we (OSDL) already do this.
> > >
> > > http://www.osdl.org/projects/26lnxstblztn/results/
> > >
> > > We are willing to add more but it is always willing
> > > to look at adding more.
> >
> > thanks, yes, I knew about that, but the thing is, I would
> > like to use this as automated test (well first step of
> > an automated test) for linux-vserver[1] development, and
> > for that purpose i386/ia64 and ppc/ppc64 is a good start
> > but not nearly sufficient, we currently 'support' (or at
> > least try to ;) the following archs:
> >
> > alpha, i386, ia64, mips/64, hppa/64, ppc/64
> > sparc/64, s390/x, x86_64, uml
> >
> > and got an officially assigned syscall number for
> >
> > i386, s390, sparc/64, sh3/4, x86_64
> >
> > but if you are interested in extending this and making
> > it available for linux-vserver kernel compile tests
> > too, I'm willing to help if I can ...
>
> We're always grateful for help. Our build engine is called
> the Patch Lifecycle Manager, ( http://www.osdl.org/plm-cgi/plm )
> and the code is always available either from BK
> ( bk://developer.osdl.org/plm ) or as a tarball from Sourceforge
> ( not CVS ) ( http://sourceforge.net/projects/plm )

tried that one for vs1.20 (2.4.21,2.4.22,2.4.23) was
a little inflexible, but I didn't understand the results:

PPC-Cross Compile Regress 447 warnings, 21 errors PASS?

and what I would need is the following:

- vanilla kernel + config which compiles for arch X
- vanilla kernel + vserver patches + same config
which is tested for arch X
- differences in the warnings/errors to the default
(vanilla) build
- ability to check a 'special' config

> Basically, the farm here at OSDL auto-builds
> - each release
> - a daily BK snapshot ( from kernel.org )
> - each new tree from a few maintainers ( -mm, -ac, -mjb, -osdl )

currently there are three linux-vserver branches,
stable (2.4), devel (2.4) and experimental (2.6)
very soon the experimental branch will become the
devel branch, and the devel branch the last stable
for (2.4) devel and stable will move on to 2.6 then

> We do some cross compiles, using Dan Kegel's fine tools.

tried those, but decided not to use them, as they require
building the (g)libc which isN#t required for kernel
builds at all ...

> Several things you/we could do:
> - You could of course use our stuff to run your compilie farm, we're
> always glad to help. :)

okay, how could this be done, and what would be my part
especially:

- how to add new patches/releases/branches
- how to activate a testbuild for a kernel/patch
combination
- how to use it 'just' for a test, to detect and
correct build errors (the main purpose)

> - we always need help with the project. Mailing list is
> plm-devel@xxxxxxxxxxxxxxxxxxxxxx

how could I help?

> - we're planning on expanding the number of arch's we cross-compile for,
> x86_64 and ppc64 are the next two probable targets. We probably
> wouldn't want to add a lot of other archs doing large compiles,
> but if you have a simple target, we can add quite a few.

currently my cross compile toolchains support the
following archs:

alpha arm cris hppa hppa64 i386 ia64 m68k mips mips64
ppc ppc64 s390 sh sh64 sparc sparc64 v850 x86_64

the 'defconfig' only works for a subset of those and
some arch have even troubles building without heavy
patches ...

so planning sounds good, but we are already supporting
alpha, hppa64, i386, s390, sparc/64 and x86_64

> ( we noticed you are doing a defconfig. We've done separate config
> files for those builds, to reduce time )

sounds like a reasonable approach ...

> hope to hear from you
> cliffw

TIA,
Herbert

> > TIA,
> > Herbert
> >
> > > Tim
> > >
> > > On Fri, 2004-02-13 at 12:57, Herbert Poetzl wrote:
> > > > Hi Folks!
> > > >
> > > > I'm currently investigating the requirements/doability
> > > > of a kernel cross compiling test bed/setup, able to do
> > > > automated kernel builds for different architecture,
> > > > just to see if it compiles and later to verify if a
> > > > given patch breaks that compile on any of the tested
> > > > archs ...
> > > >
> > > > here a short status, and some issues I ran into so far,
> > > > some of them with solutions, others without, and some
> > > > interesting? observations ...
> > > >
> > > > I would be happy if somebody who has done similar, or
> > > > knows how to do it properly ;) could comment on that,
> > > > and/or point out possible improvements ...
> > > >
> > > > TIA,
> > > > Herbert
> > > >
> > > >
> > > > 1) CROSS COMPILER / TOOLCHAIN
> > > >
> > > > after reading and testing several cross build and
> > > > toolchain building howtos, I decided to do it a little
> > > > different, because I do not need glibc to compile the
> > > > kernel ...
> > > >
> > > > the result are two .spec files[1], or the commands
> > > > used to build an appropriate toolchain ...
> > > >
> > > > for the binutils the required commands are:
> > > >
> > > > configure \
> > > > --disable-nls \
> > > > --prefix=/usr \
> > > > --mandir=/usr/share/man \
> > > > --infodir=/usr/share/info \
> > > > --target=${CROSS_ARCH}-linux
> > > > make
> > > >
> > > > and for the gcc (after the binutils have been
> > > > installed on the host):
> > > >
> > > > configure \
> > > > --enable-languages=c \
> > > > --disable-nls \
> > > > --disable-threads \
> > > > --disable-shared \
> > > > --disable-checking \
> > > > --prefix=/usr \
> > > > --mandir=/usr/share/man \
> > > > --infodir=/usr/share/info \
> > > > --target=${CROSS_ARCH}-linux
> > > > make TARGET_LIBGCC2_CFLAGS='-Dinhibit_libc \
> > > > -D__gthr_posix_h'
> > > >
> > > > where ${CROSS_ARCH} is the target architecture you want
> > > > to compile the toochain for, in my case, this where one
> > > > of the following:
> > > >
> > > > alpha, hppa, hppa64, i386, ia64, m68k, mips,
> > > > mips64, ppc, ppc64, s390, sparc, sparc64, x86_64
> > > >
> > > > PROBLEMS HERE:
> > > >
> > > > I decided to use binutils 2.14.90.0.8, and gcc 3.3.2,
> > > > but soon discovered that gcc-3.3.2 will not be able
> > > > to build a cross compiler for some archs like the
> > > > alpha, ia64, powerpc and even i386 ;) without some
> > > > modifications[2] but with some help, I got all headers
> > > > fixed, except for the ia64, which still doesn't work
> > > >
> > > >
> > > > 2) KERNEL CROSS COMPILING
> > > >
> > > > equipped with the cross compiling toolchains for all
> > > > but one of the architectures mentioned above, I wrote
> > > > a little script, which basically does nothing else
> > > > but compiling a given kernel for all possible archs.
> > > >
> > > > basically this can be accomplished by doing:
> > > >
> > > > make ARCH=<arch> CROSS_COMPILE=<arch>-linux-
> > > >
> > > >
> > > > the first result was harrowing:
> > > >
> > > > 2.4.25-pre 2.6.2-rc
> > > > ----------------------------------------------------
> > > > [ARCH alpha/alpha] succeeded. succeeded.
> > > > [ARCH hppa/parisc] failed. failed.
> > > > [ARCH hppa64/parisc] failed. failed.
> > > > [ARCH i386/i386] succeeded. succeeded.
> > > > [ARCH m68k/m68k] failed. failed.
> > > > [ARCH mips/mips] failed. failed.
> > > > [ARCH mips64/mips] failed. failed.
> > > > [ARCH ppc/ppc] succeeded. succeeded.
> > > > [ARCH ppc64/ppc64] failed. failed.
> > > > [ARCH s390/s390] failed. failed.
> > > > [ARCH sparc/sparc] failed. succeeded.
> > > > [ARCH sparc64/sparc] failed. failed.
> > > > [ARCH x86_64/x86_64] failed. succeeded.
> > > >
> > > > so only alpha, i386 and ppc did work on the first run.
> > > >
> > > > what I discovered was, that there IS a big difference
> > > > between an empty .config file and a non exististing
> > > > one, where latter allowed the make oldconfig to work
> > > > similar to the make defaultconfig available on 2.6,
> > > > and added some archs (see [3] for details)
> > > >
> > > > PROBLEMS & SOLUTIONS HERE:
> > > >
> > > > ppc64:
> > > > CROSS32_COMPILE=ppc-linux-
> > > > is needed to make this work as expected.
> > > >
> > > > hppa/hppa64:
> > > > seems not to compile without using a very big
> > > > patch, which changes a lot inside the kernel
> > > >
> > > > mips/mips64:
> > > > seem to use the 'obsoleted' -mcpu= option
> > > > which results in a cc1: error: invalid option
> > > > `cpu=<cpu-here>'
> > > >
> > > > m68k:
> > > > fails with a hundred errors in the includes
> > > >
> > > >
> > > > 3) CONCLUSIONS
> > > >
> > > > it seems that recent kernels (2.4 and 2.6) do not support
> > > > most of the architectures they contain without heavy
> > > > patching (haven't tested for arm, sh3/4, ...)
> > > >
> > > > building cross compiler toolchains isn't that often done
> > > > otherwise it would not require such modifications, and
> > > > the documentation would be up to date ...
> > > >
> > > > it seems that with some minor patches and kernel tweaks
> > > > an automated build is in reach, although some archs seem
> > > > to break from one release to the other ...
> > > >
> > > > the non mainline branches, if they exist are some kernel
> > > > versions behind the current mainstream kernel, which
> > > > might not mean anything ...
> > > >
> > > >
> > > > 4) LINKS & REFERENCES
> > > >
> > > > [1] http://vserver.13thfloor.at/Stuff/Cross/binutils-cross.spec
> > > > http://vserver.13thfloor.at/Stuff/Cross/gcc-cross.spec
> > > >
> > > > [2] http://vserver.13thfloor.at/Stuff/Cross/
> > > > gcc-3.3.2-cross-alpha-fix.diff.bz2
> > > > gcc-3.3.2-cross-i386-fix.diff.bz2
> > > > gcc-3.3.2-cross-ia64-fix.diff.bz2
> > > > gcc-3.3.2-cross-powerpc-fix.diff.bz2
> > > >
> > > > [3] http://vserver.13thfloor.at/Stuff/Cross/compile.info
> > > >
> > > > ia64: http://www.gelato.unsw.edu.au/kerncomp/
> > > > mips: http://www.linux-mips.org/kernel.html
> > > > hppa: http://www.parisc-linux.org/kernel/index.html
> > > > ppc64: http://linuxppc64.org/
> > > >
> > > >
> > > > -
> > > > To unsubscribe from this list: send the line "unsubscribe linux-gcc" in
> > > > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > > > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > > --
> > > Timothy D. Witham - Lab Director - wookie@xxxxxxxx
> > > Open Source Development Lab Inc - A non-profit corporation
> > > 12725 SW Millikan Way - Suite 400 - Beaverton OR, 97005
> > > (503)-626-2455 x11 (office) (503)-702-2871 (cell)
> > > (503)-626-2436 (fax)
> > >
> > > -
> > > To unsubscribe from this list: send the line "unsubscribe linux-gcc" in
> > > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > -
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at http://www.tux.org/lkml/
> >
>
>
> --
> The church is near, but the road is icy.
> The bar is far, but i will walk carefully. - Russian proverb
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/