public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: Kernel Cross Compiling
@ 2004-02-14  3:26 Stephen M. Kenton
  2004-02-14 14:21 ` Herbert Poetzl
  0 siblings, 1 reply; 31+ messages in thread
From: Stephen M. Kenton @ 2004-02-14  3:26 UTC (permalink / raw)
  To: linux kernel mailing list

The problems with GCC cross builds are known and are
targeted for GCC 3.5 since the changes will apparently be
invasive.  If you have not seen it yet, Dan Kegel has
a very nice package called crosstool with lots of
comments about the contortions of cross compiling.
http://kegel.com/crosstool

smk

^ permalink raw reply	[flat|nested] 31+ messages in thread
* Re: Kernel Cross Compiling
@ 2004-02-17 21:51 Judith Lebzelter
  2004-02-18  7:19 ` Herbert Poetzl
  0 siblings, 1 reply; 31+ messages in thread
From: Judith Lebzelter @ 2004-02-17 21:51 UTC (permalink / raw)
  To: herbert; +Cc: wookie, cherry, linux-kernel



>
> 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?

The Compile Regress is John Cherry's filter which we run through plm,
and I include with the plm package.  The 'PASS' status is based only
on the main compiles, due to the fact that some for the compiles of the
'defconfig', 'allnoconfig', 'allyesconfig' and 'allmodconfig'.  It also
goes though the directories and compiles the objects individually, but
this does contribute to fail the test.

There is a -s option to only run 'defconfig' and 'allmodconfig' in the
newer versions of this script.


>
> 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
>

PLM is as application for tracking base releases and patches to the
release, on which you can configure 'filters' to run and store the
results.  Each architecture or type of config you want to check could be
set up as an individual filter.  The kconfig files I use are generally
part of the specific filter which I've set up.

The source trees (base + patches) are then also easily available to other
plm clients.  In our case STP.


> > 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)
>

To use our PLM:
   *  We would need to build the cross-compilers here on our compile farm.
      The cross-compilers would need to be built in an easily reproduced
      manner--to be installed on multiple machines and easily re-built
   *  Design/edit filters to suit your purpose with a reasonably short
      run time.  We would set them up in PLM.
   *  Patch submission is through the PLM web interface:
            https://www.osdl.org/plm-cgi/plm?module=addpatch
      You just upload a text diff file.
   *  The results are summarised in the output of the filter which you set
      up and available online.
To Set up your own PLM:
   *  You could use our PLM software to set up your own automated
      source/filter tracking system.
          Home:  http://developer.osdl.org/dev/plm/
          Download:  http://sourceforge.net/projects/plm
   *  There is a script to build an rpm in the source.   There are some
      admin tools to set-up filters, which you grab from a web server.
   *  It runs on a MySQL database.
   *  You design/edit filters to suit exactly your purpose.

> > - we always need help with the project. Mailing list is
> >       plm-devel@lists.sourceforge.net.
>
> how could I help?

We are planning quite a few updates to PLM soon, including creating base
patches from CVS and bk pulls, Storing build information with the patch
sets,  Improving the installation scripts, etc.

If the tool doesn't do all you would like any input would be great too.
It sounds like maybe a page to display all the recent results of a
particular filter (ie sparc64_default_compile) would be nice.

>
> > - 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
>

A very impressive list. :) Do you have automated scripts for setting up
your toolchains on other systems? Like ours?

> 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

Nobody had shown much interest in the others, so we set our
priorities...

Thanks;
Judith Lebzelter
OSDL

>
> > ( 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@vger.kernel.org
> > > > > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > > > --
> > > > Timothy D. Witham - Lab Director - wookie@osdl.org
> > > > 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@vger.kernel.org
> > > > 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@vger.kernel.org
> > > 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
>
>
>
>







^ permalink raw reply	[flat|nested] 31+ messages in thread
* re: Kernel Cross Compiling
@ 2004-02-14 21:03 Dan Kegel
  2004-02-14 22:07 ` Herbert Poetzl
  0 siblings, 1 reply; 31+ messages in thread
From: Dan Kegel @ 2004-02-14 21:03 UTC (permalink / raw)
  To: Herbert Poetzl, linux-kernel

Herbert Poetzl <herbert@13thfloor.at> wrote:
> 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 ...

Great idea!

>  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

Wouldn't it be easier to use http://kegel.com/crosstool
which already builds good toolchains for just about every
CPU type?
- Dan

-- 
US citizens: if you're considering voting for Bush, look at these first:
http://www.misleader.org/
http://www.cbc.ca/news/background/arar/
http://www.house.gov/reform/min/politicsandscience/

^ permalink raw reply	[flat|nested] 31+ messages in thread
[parent not found: <20040213205743.GA30245@MAIL.13thfloor.at.suse.lists.linux.kernel>]
* Kernel Cross Compiling
@ 2004-02-13 20:57 Herbert Poetzl
  2004-02-13 21:31 ` David Mosberger
                   ` (2 more replies)
  0 siblings, 3 replies; 31+ messages in thread
From: Herbert Poetzl @ 2004-02-13 20:57 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-gcc


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/
   	


^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2004-02-18  7:19 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-02-14  3:26 Kernel Cross Compiling Stephen M. Kenton
2004-02-14 14:21 ` Herbert Poetzl
2004-02-15 23:28   ` Robert Schwebel
2004-02-15 23:59     ` William Lee Irwin III
  -- strict thread matches above, loose matches on Subject: below --
2004-02-17 21:51 Judith Lebzelter
2004-02-18  7:19 ` Herbert Poetzl
2004-02-14 21:03 Dan Kegel
2004-02-14 22:07 ` Herbert Poetzl
2004-02-15  3:51   ` Dan Kegel
     [not found] <20040213205743.GA30245@MAIL.13thfloor.at.suse.lists.linux.kernel>
2004-02-13 21:25 ` Andi Kleen
2004-02-13 21:46   ` Herbert Poetzl
2004-02-13 23:45   ` Herbert Poetzl
2004-02-15 11:16     ` Geert Uytterhoeven
2004-02-15 17:38       ` Herbert Poetzl
2004-02-16 13:51         ` Keith Owens
2004-02-13 20:57 Herbert Poetzl
2004-02-13 21:31 ` David Mosberger
2004-02-13 21:44   ` Herbert Poetzl
2004-02-14  0:58     ` David Mosberger
2004-02-14  1:08       ` Herbert Poetzl
2004-02-14  2:35         ` Herbert Poetzl
2004-02-14  2:51           ` David Mosberger
2004-02-16 22:50       ` Jim Wilson
2004-02-16  0:03   ` Peter Chubb
2004-02-14  8:32 ` Timothy D. Witham
2004-02-14 13:03   ` Herbert Poetzl
2004-02-14 19:25     ` Timothy D. Witham
2004-02-14 22:08       ` Herbert Poetzl
2004-02-16 21:41     ` cliff white
2004-02-16 22:10       ` Herbert Poetzl
2004-02-17 13:26 ` Maciej W. Rozycki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox