linux-embedded.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Rob Landley <rob@landley.net>
To: Jamie Lokier <jamie@shareable.org>
Cc: Bernd Petrovitsch <bernd@firmix.at>,
	Valdis.Kletnieks@vt.edu, Ingo Oeser <ioe-lkml@rameria.de>,
	Embedded Linux mailing list <linux-embedded@vger.kernel.org>,
	linux-kernel@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	"H. Peter Anvin" <hpa@zytor.com>, Sam Ravnborg <sam@ravnborg.org>
Subject: Re: [PATCH 1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh
Date: Mon, 5 Jan 2009 18:06:53 -0600	[thread overview]
Message-ID: <200901051806.54403.rob@landley.net> (raw)
In-Reply-To: <20090105150156.GD14503@shareable.org>

On Monday 05 January 2009 09:01:56 Jamie Lokier wrote:
> Bernd Petrovitsch wrote:
> > I assume that the NFS-mounted root filesystem is a real distribution.
>
> Not unless you call uClinux (MMU-less) a real distribution, no.

I want things to be orthogonal.  The following should be completely separate 
steps:

1) Creating a cross compiler
2) building a native development environment
3) booting a native development environment (on real hardware or under and 
emulator)
4) natively building your target system.

You should be able to mix and match.  Crosstool for #1, go download "fedora 
for arm" instead of #2, qemu or real hardware is your choice for #3, and then 
you should be able to natively build gentoo under an ubuntu host or vice 
versa.  (How is not currently properly documented, but I'm working on that.)

My objection to build systems like buildroot or uClinux is that they bundle 
all this together into a big hairball.  They create their own cross compiler, 
build their own root file system, use their own packaging system, and you have 
to take it all or nothing.

My build system is ruthlessly orthogonal.  I try not to make it depend on 
other bits of _itself_ more than necessary.

> > > (* - No MMU on some ARMs, but I'm working on ARM FDPIC-ELF to add
> > >      proper shared libs.  Feel free to fund this :-)
> >
> > The above mentioned ARMs have a MMU. Without MMU, it would be truly
> > insane IMHO.
>
> We have similar cross-build issues without MMUs... I.e. that a lot of
> useful packages don't cross-build properly (including many which use
> Autoconf), and it might be easier to make a native build environment
> than to debug and patch all the broken-for-cross-build packages.
> Especially as sometimes they build, but fail at run-time in some
> conditions.

If you can get a version of the same architecture with an mmu you can actually 
build natively on that.  It's not ideal (it's a bit like trying to build i486 
code on an i686; the fact it runs on the host is no guarantee it'll run on the 
target), but it's better than cross compiling.  And most things have a broad 
enough compatible "base architecture" that you can mostly get away with it.

> But you're right it's probably insane to try.  I haven't dared as I
> suspect GCC and/or Binutils would break too :-)

Oh it does, but you can fix it. :)

> I'm sticking instead with "oh well cross-build a few packages by hand
> and just don't even _try_ to use most of the handy software out there".

Cross compiling doesn't scale, and it bit-rots insanely quickly.

> You mentioned ARM Debian.  According to
> http://wiki.debian.org/ArmEabiPort one recommended method of
> bootstrapping it is building natively on an emulated ARM, because
> cross-building is fragile.

That's what my firmware linux project does too.  (I believe I was one of the 
first doing this back in 2006, but there are three or four others out there 
doing it now.)

Native compiling under emulation is an idea whose time has come.  Emulators on 
cheap x86-64 laptops today are about as powerful as high end tricked out build 
servers circa 2001, and Moore's Law continues to advance.  More memory, more 
CPU (maybe via SMP but distcc can take advantage of that today and qemu will 
develop threading someday).  You can throw engineering time at the problem 
(making cross compiling work) or you can throw hardware at the problem (build 
natively and buy fast native or emulator-hosting hardware).  The balance used 
to be in favor of the former; not so much anymore.

That said, my drive for reproducibility and orthogonality says that your 
native development environment must be something you can reproduce entirely 
from source on an arbitrary host.  You can't make cross compiling go away 
entirely, the best you can do is limit it to bootstrapping the native 
environment.  But I want to keep the parts I have to cross compile as small 
and simple as possible, and then run a native build script to get a richer 
environment.  For the past 5+ years my definition has been "an environment 
that can rebuild itself under itself is powerful enough, that's all I need to 
cross compile", and from the first time I tried this (late 2002) up until 
2.6.25 that was 7 packages.  That's why I responded to the addition of perl as 
a regression, because for my use case it was.

> -- Jamie

Rob

  parent reply	other threads:[~2009-01-06  0:06 UTC|newest]

Thread overview: 129+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-02  8:07 PATCH [0/3]: Simplify the kernel build by removing perl Rob Landley
2009-01-02  8:13 ` [PATCH 1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh Rob Landley
2009-01-02  9:04   ` Sam Ravnborg
2009-01-02 12:00     ` Rob Landley
2009-01-02 19:33       ` H. Peter Anvin
2009-01-04  1:32         ` Rob Landley
2009-01-04  1:35           ` H. Peter Anvin
2009-01-04 12:07           ` Alan Cox
2009-01-04 18:36             ` H. Peter Anvin
2009-01-04 19:03             ` Rob Landley
2009-01-04 20:39               ` H. Peter Anvin
2009-01-05  0:59                 ` Rob Landley
2009-01-03  6:28       ` Harvey Harrison
2009-01-03 12:28   ` Ingo Oeser
2009-01-04  1:36     ` Rob Landley
2009-01-04  5:07       ` Valdis.Kletnieks
2009-01-04  6:43         ` Rob Landley
2009-01-04 22:13           ` Jamie Lokier
2009-01-05  0:15             ` Bernd Petrovitsch
2009-01-05  2:23               ` Jamie Lokier
2009-01-05 10:46                 ` Bernd Petrovitsch
2009-01-05 15:01                   ` Jamie Lokier
2009-01-05 16:18                     ` Bernd Petrovitsch
2009-01-06  0:06                     ` Rob Landley [this message]
2009-01-05 21:07                   ` Rob Landley
2009-01-05  4:50               ` Rob Landley
2009-01-05 12:29                 ` Bernd Petrovitsch
2009-01-04 21:51         ` Alejandro Mery
2009-01-04  7:15       ` Michal Jaegermann
2009-01-05  0:41   ` Ray Lee
2009-01-05  5:08     ` Rob Landley
2009-01-02  8:14 ` [PATCH 2/3]: Remove perl from make headers_install Rob Landley
2009-01-02  9:09   ` Sam Ravnborg
2009-01-02  8:15 ` [PATCH 3/3]: Convert mkcapflags.pl to mkcapflags.sh Rob Landley
2009-01-02  9:12   ` Sam Ravnborg
2009-01-02  9:26 ` PATCH [0/3]: Simplify the kernel build by removing perl Arkadiusz Miskiewicz
2009-01-02  9:49   ` Christoph Hellwig
2009-01-02 10:16     ` Alejandro Mery
2009-01-02 10:30       ` Mark Miller
2009-01-02 11:18         ` Matt Keenan
2009-01-02 10:41       ` Måns Rullgård
2009-01-15 12:59         ` Pádraig Brady
2009-01-15 18:52           ` Jamie Lokier
2009-01-15 19:45             ` Måns Rullgård
2009-01-02 11:15       ` Rob Landley
2009-01-02 11:44         ` Sam Ravnborg
2009-01-02 12:56     ` Rob Landley
2009-01-02 14:04       ` Theodore Tso
2009-01-03  3:22         ` Jamie Lokier
2009-01-04  2:23         ` Rob Landley
2009-01-02 10:02   ` Mark Miller
2009-01-02 10:03     ` Mark Miller
2009-01-02 11:13   ` Rob Landley
2009-01-02 16:04     ` Matthieu CASTET
2009-01-03 19:46       ` Rob Landley
2009-01-03 20:10         ` Sam Ravnborg
2009-01-03 20:50           ` H. Peter Anvin
2009-01-04  1:47             ` Rob Landley
2009-01-04  1:45           ` Rob Landley
2009-01-04  8:09             ` Sam Ravnborg
2009-01-04 20:19               ` Rob Landley
2009-01-04  0:44         ` Robert Hancock
2009-01-04  1:39           ` David Brownell
2009-01-04  3:05           ` Rob Landley
2009-01-04  1:32       ` Rob Landley
2009-01-02  9:50 ` Paul Mundt
2009-01-02 10:32   ` Mark Miller
2009-01-02 10:57     ` Paul Mundt
2009-01-02 12:11       ` Mark Miller
2009-01-02 12:44   ` Rob Landley
2009-01-02 17:25   ` Wookey
2009-01-02 18:01     ` Sam Ravnborg
2009-01-02 19:27       ` H. Peter Anvin
2009-01-04  1:35         ` Rob Landley
2009-01-03 19:48       ` Rob Landley
2009-01-08 13:13         ` klaasjan gm
2009-01-08 15:04           ` Christian Gagneraud
2009-01-03 14:59   ` Wolfgang Denk
2009-01-03 22:54 ` Leon Woestenberg
2009-01-03 23:03   ` H. Peter Anvin
2009-01-04  0:37     ` Leon Woestenberg
2009-01-04  2:53       ` Rob Landley
2009-01-04  3:38         ` Markus Heidelberg
2009-01-04  4:57           ` Rob Landley
2009-01-04  2:06     ` Rob Landley
2009-01-04  2:14       ` H. Peter Anvin
2009-01-04  6:29         ` Rob Landley
2009-01-15 14:32           ` Pádraig Brady
2009-01-04  2:36       ` Jamie Lokier
2009-01-04  2:39         ` H. Peter Anvin
2009-01-04  2:43           ` H. Peter Anvin
2009-01-04  3:06       ` Paul Mundt
2009-01-04 10:23         ` Leon Woestenberg
2009-01-08 13:29           ` Mike Frysinger
2009-01-11 12:45           ` Bernd Petrovitsch
2009-01-12  3:36             ` Mark A. Miller
2009-01-12  5:11               ` H. Peter Anvin
2009-01-12  5:23                 ` Mark A. Miller
2009-01-12  8:20               ` Paul Mundt
2009-01-12  9:18                 ` Mark A. Miller
2009-01-12  9:41                   ` Paul Mundt
2009-01-12 10:03                     ` Mark A. Miller
2009-01-12 10:34                       ` Paul Mundt
2009-01-12 17:56                     ` Rob Landley
2009-01-12 18:04                       ` Alan Cox
2009-01-12  8:27               ` Peter Korsgaard
2009-01-12 17:45                 ` Rob Landley
     [not found]             ` <31014a580901111928u586e2246uccf370ff941c8a01@mail.gmail.com>
2009-01-12  5:35               ` Sam Ravnborg
2009-01-12  5:50                 ` Mark A. Miller
2009-01-12 10:18                   ` Sam Ravnborg
2009-01-12 10:22                     ` Mark A. Miller
2009-01-12 10:44                       ` Alexander Neundorf
2009-01-12 10:55                         ` Mark A. Miller
2009-01-12 11:04                           ` Alexander Neundorf
2009-01-12 10:38                     ` Paul Mundt
2009-01-14  2:51                       ` Jamie Lokier
2009-01-16  6:11                         ` Rob Landley
2009-01-16  7:28                           ` Alexander Neundorf
2009-01-16 14:54                           ` Valdis.Kletnieks
2009-01-16 21:54                             ` Rob Landley
2009-01-17  9:51                               ` Jamie Lokier
2009-01-18  1:44                                 ` Rob Landley
2009-01-04 16:22         ` Vladimir Dronnikov
2009-01-04  1:24 ` PATCH [0/3]: Simplify the kernel build by removing perl v2 Rob Landley
2009-01-04  1:27   ` PATCH [1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh (v2) Rob Landley
2009-01-04  2:48     ` David Vrabel
2009-01-04 20:21       ` Rob Landley
2009-01-04  1:28   ` PATCH [2/3]: Remove perl from make headers_install Rob Landley
2009-01-04  1:29   ` PATCH [3/3]: Convert kernel/cpu/mkcapflags.pl to kernel/cpu/mkcapflags.sh Rob Landley

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=200901051806.54403.rob@landley.net \
    --to=rob@landley.net \
    --cc=Valdis.Kletnieks@vt.edu \
    --cc=akpm@linux-foundation.org \
    --cc=bernd@firmix.at \
    --cc=hpa@zytor.com \
    --cc=ioe-lkml@rameria.de \
    --cc=jamie@shareable.org \
    --cc=linux-embedded@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sam@ravnborg.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).