Openmoko build infrastructure questions

Werner Almesberger werner at
Thu Apr 17 00:04:44 CEST 2008

Holger Freyther wrote:
> Regarding distribution tool:

Once upon a time, I used SLS, Slackware, then for a long time Red Hat,
a bit of Debian, finally for a long time Gentoo, and now more and more
Ubuntu. Except for Gentoo, I never worried much about the distribution's
build process.

Why should I ? Either the distribution provided a binary package for me,
or some 3rd party did, or, if all else failed, I compiled it from
sources, and did any fixes/hacks that were needed to run it on Linux
myself. In those cases where that looked like to momentous a task, I put
the darn thing aside for a few months and then looked again if someone
had gone through the effort of building a friendly package for me.

Guess what, that friendly package usually materialized before too long.
And nowadays, it's very rare that the nice package wasn't already there
long before I even thought I'd need it.

Why should Openmoko be any different ?

>From the software author's point of view, I learned how to write Red Hat
spec files, because Red Hat what I was using all the time back then, and
it wasn't too much effort for me to do so. However, if someone sent me
the respective meta-data for Debian or Gentoo, I checked that for obvious
errors, and if it looked reasonable, I included it in the distribution of
my package. When necessary, they sent me updates, or (less good but
popular) they fixed it in their distribution. (I hated it when they
fixed portability issues and didn't tell me, though.)

Again, Openmoko/OE does that. Since we have quite a number of people in
our team who understand OE very well, they also write their .bb files.
If I need one, and it's not absolutely trivial for me to write it myself
(i.e., beyond mere copy and paste), I just ask them to help me.

> OE as a development tool:

This is where I see the big problem area. Why should I need substantially
more than  make CC=arm-angstrom-linux-gnueabi-gcc  ? I don't expect this
to figure out dependencies for me. I know that make doesn't do such
things, but there's probably a README that will warn me about unusual

I don't want it to build a cross-compiler for me. And I certainly don't
want it to install a secondary system environment for me in which I'm
supposed to live while trying to compile and perhaps change that package.

If the magic phrase is configure --target=mumble --prefix=blah, so be it.
Perhaps a little README.Openmoko or README.OE could guide me. That could
come with the original package or Openmoko/OE could provide it. The
height of luxury would be a shell script that contains the few lines of
wisdom I really need to care about here.

This doesn't have to cover all possible configurations and all that. Just
make the thing build. The fine-grained embedded optimizations, whatever
they are, will most likely just bore me. I can very well live with a
scenario where the thing that's my current focus takes up a few MB more
space on my Neo, or doesn't merge itself seamlessly into my setup.

I'll expect any package that's really worth keeping will eventually find
its way into the distribution, so all these issues will be solved for me
in the future when I wish meet the same package as a mere user, not as a
developer. If it ends up a permanent local addition with no support from
upstream, then I'll most likely abandon it as well, since it's just not
worth the effort.

So this last role, that of the development tool, is where I see OE fail
us. All I need is the small task of running the right build command,
and maybe set up a few files and fix a few portability issues in the
sources. Instead, I get asked to spend at least a day and significant
system resources to set up and build a monster machine that will let me
become my own distribution czar, and - almost as an afterthought - will
also let me build that package.

Chances are that I need this service for a few days, and then all the
infrastructure and the knowledge how to use it will rot for months, and
I'll have to throw it all away and start from scratch again the next
time I need it.

That's why I love John's toolchain. It does exactly what I need to
successfully build things with "make", and I can download and set it
up in a few minutes, using blatantly obvious operations. It doesn't
force me to join a new religion, it doesn't force me to learn some IDE
and adapt my workflow to its logic, it doesn't waste my time by
building its own microcosmos where it can be god. It just makes sure
that the same sane build process I know works for native builds
continues to work sanely also for cross-compilation.

Now, there are obviously limitations to this approach. E.g., if
something really doesn't want to be cross-compiled, I'll hit a problem.
Also, if it needs libraries John didn't think I'd need, there's another

Packages that are just plainly hostile to cross-compilation need
patching. So if I have to touch their source, I'd need some way to
find those patches. Ideally, they would have been merged upstream long
ago, but I understand that this sometimes may not have happened yet,
or that some developers are just unresponsive. That's the first problem
to solve.

>From this discussion, I gather that Poky is basically the natural
extension of the toolchain approach that solves the second problem,
namely the libraries something may depend on. Is this so ? If yes, can
we make OE and Poky work together, so that each is used where it is
strong, and lets the other take over where it isn't ? Or if they can't
work together, can OE at least steal the good ideas ?

- Werner

More information about the distro-devel mailing list