linux-gcc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Herbert Poetzl <herbert@13thfloor.at>
To: linux-kernel@vger.kernel.org
Cc: linux-gcc@vger.kernel.org
Subject: Kernel Cross Compiling
Date: Fri, 13 Feb 2004 21:57:43 +0100	[thread overview]
Message-ID: <20040213205743.GA30245@MAIL.13thfloor.at> (raw)


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/
   	


             reply	other threads:[~2004-02-13 20:57 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-13 20:57 Herbert Poetzl [this message]
2004-02-13 21:31 ` Kernel Cross Compiling 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-17 13:26 ` Maciej W. Rozycki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040213205743.GA30245@MAIL.13thfloor.at \
    --to=herbert@13thfloor.at \
    --cc=linux-gcc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).