On Aug 4, 2005, at 4:35 AM, Alastair Rankine wrote:

(Darwinports newbie, obviously)

I hope you mean darwinbuild ;-)     

So it seems that when you build xnu, it builds a ppc/i386 universal binary. What is the darwinbuild magic to disable this and allow me to build a kernel that will run on my Powerbook G4?

The universal binary will work fine on your PowerBook. Did you try it?

I tried modifying the .build/8C46.plist file to add the following to the xnu definition:

           environment = {
               RC_ARCHS = "ppc";
           };

But no dice. What am I missing?

Which plist did you edit? (the on in $DARWIN_BUILDROOT/.build/8C46.plist, the one in your darwinbuild distribution, or one downloaded independently?) Did you do this before or after you did "darwinbuild -init 8C46.plist"?

If you did it after, note that plists are only used as a transport mechanism to seed your local SQLite database. Once you've done either "darwinbuild -init" (or the corresponding set of "darwinxref loadIndex" commands), the plist is no longer consulted.

If you edited the plist after configuring your environment, you want to reload the index for that build with:
/usr/local/bin/darwinxref loadIndex /path/to/plist/8C46.plist

This worked for me. Your RC_ARCHS change is the right one. The only thing this will save you is time, at the expense of falling outside the norm of the standard Darwin build configuration. Some projects don't built at all unless they are built for all supported architectures, but "xnu" should build fine for ppc only if you really want this.

Alternatively, how can I turn the universal binary back into a bootable PPC binary? (possibly not a darwinbuild question)

You can use lipo(1). See the man page for more information. But this shouldn't be necessary to get a working kernel.

Shantonu