On 07/29/2013 12:27:13 PM, Andrew Bradford wrote:
I rolled back to an older version of uClibc due to our configs patch
leaving a lot of questions for the user when doing a 'make oldconfig' on
the newest uClibc release.  I'm working on migrating to the newest
uClibc, but in stages rather than all at once so that I can understand
what new config options are present and craft a sane config patch.

Understood. I put a lot of _effort_ into getting newer versions of uClibc to work, which is why I pointed you at my setup so you could leverage it.

I have one config that's mostly the same for all targets. It's the set of options I needed to build Linux From Scratch natively under the resulting system, so it's got a lot of things like gnu regex instead of simpler regex. (I'll have to fight that battle all over again with musl...)

I don't bother with what's in git. When they have a release, I care. If it's not in a release and not winding up in a release in the forseeable future, I don't care. And unfortunately, uClibc git is in such horrible state that you can't bisect anything because none of the intermediate versions compile, let alone work, so... their repository is useless to me.

> If you have any interst in the patches, config, or build invocations
> that made that work, they're all at http://landley.net/aboriginal

I'll take a look.  My biggest beef with uClibc is just that keeping a
patch up to date for uClibc configuration has been annoying and time
consuming. I'm lazy. My assumption is that the uClibc defconfig is not
a sane configuration most of the time, but that's only based off of a
small amount of investigation, I need to do more.

My uClibc config is a baseconfig plus target specific snippets, using the "miniconfig" technique. It started with a read through the options many moons ago, and since then is experimentally derived based on what various packages needed to build.

Basically I take this:

  http://landley.net/hg/aboriginal/file/1616/sources/baseconfig-uClibc

And glue the UCLIBC_CONFIGURE chunks of these files to the start of them:

  http://landley.net/hg/aboriginal/file/1616/sources/targets

And then run it through:

  make allnoconfig KCONFIG_ALLCONFIG=filename

And that's my .config.

My desire is to use a
libc that doesn't involve a thousand config variables or to use uClibc
in a way that can leverage the defconfig sanely.

In theory, that would be musl. I'm following that project very closely and working on redoing my infrastructure to use it.

(My build uses a much modified version of the old uClibc wrapper to rewrite each gcc command line to start with --nostdinc --nostdlib and then explicitly add back everything it needs. I gave up trying to fix the gcc path logic and use something to take pathing decisions out of gcc's hands entirely.)

> That said, I'm working on migrating the project to musl over the next > couple releases: uClibc development's been moribund for years, musl's
> git repository started in Feb 2011 and it's approaching 1.0 already;
> not a tough call. The downside is I've got a dozen or so targets
> working under uClibc and musl supports something like 4 at the moment, > but klibc has code under a compatible license musl could bootstrap the > others with, so it shouldn't take too long. (Including stuff like s390
> that uClibc never did support, but qemu _does_...)

We're also evaluating musl for the clfs-embedded book.  I've recently
subscribed to the musl ml and your toybox ml.  Both projects look very
interesting to me from a KISS standpoint which I think is a good way for
clfs-embedded to go.

Thanks. Musl is noticeably closer to a 1.0 release.

Aboriginal Linux starts with a sort of "airlock step" (host-tools.sh) where it builds busybox and toybox and a couple other things like mksquashfs, and then changes the $PATH to point to just that new directory, so the rest of the build is done using those tools. This is a little bit like chapter 5 of LFS, but without the chroot (because that would require root access and my build runs entirely as a normal user).

The host-tools stuff means I actually have some portability (should work the same on ubuntu and gentoo and fedora and such), and to derive what should go in there I have a command recording wrapper (http://landley.net/aboriginal/FAQ.html#debug_logging) that gives me a list of every single command line run out of the $PATH during the build, and then another script gives me a list of commands and how many times each one got run.

This let me trim the busybox config down from "defconfig" to a specific config:

  http://landley.net/hg/aboriginal/file/1616/sources/baseconfig-busybox

And then I started replacing those commands with toybox. (Everything after the toybox comment, line 143 at the moment, is stuff busybox used to do that toybox now does instead; they're still there so I can test build with busybox if I want to, but the default build filters 'em out with a sed invocation.) This means busybox is still used for:

  ash awk bunzip2 bzip2 cpio dd diff egrep expr fdisk fgrep find ftpd
  ftpget ftpput grep gunzip gzip install less lspci man mount pgrep
  ping pkill ps route sed sh sha512sum tar test tr umount unxz vi wget
  xzcat zcat

So toybox has a way to go before it can replace the rest of busybox in the aboriginal build. But I'm working on it. :)

Musl already builds lots of packages under sabotage, so they've found the most obvious stuff already. (They patch a lot of those packages, though. Sabotage is the main collection point for them. Someday, googling for "musl sabotage" might give the current repository instead of the old abandoned one. Until then, the link's on the musl wiki under distros.)

Rob
_______________________________________________
Clfs-dev mailing list
[email protected]
http://lists.cross-lfs.org/listinfo.cgi/clfs-dev-cross-lfs.org

Reply via email to