[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: Cross-compilers. (resend)

Resending since my original message to fedora-extras-list bounced.

David Woodhouse wrote:
> Starting with binutils.... at http://david.woodhou.se/binutils.spec
> there's a specfile based on the current Core package which lets you
> build cross-binutils with for example --define "binutils_target i686-fedora-linux"

Any particular reason for the binutils in binutils_target? Something like target_triplet could be shared across multiple packages (gcc, gdb). Also, putting some form of Fedora in the name is great, but it should be in some way versioned like i686-fedora5-linux or even i686-fc5-linux. This is a little more specific and will scale better if cross compiler interest blossoms.

> That approach lets us track the Core package directly, and I think is
> sanest. What I'm not sure of, however, is how we actually deal with that
> when building for Extras. Is there a simple way we can build it multiple
> times with multiple definitions of %binutils_target, or would we have to
> import it all into multiple directories in CVS with the requisite
> one-line change and then build each one normally?
> Another possibility is that we could make a single SRPM spit out _all_
> the $ARCH-fedora-linux-binutils binary packages, building them all in a
> loop. But that might involve diverging even more from the Core specfile,
> which wouldn't be ideal.

This seems like a pretty small divergence. Instead of target_triplet use target_triplets, use a for loop and you're scarcely any further from the original spec file. That said, three downsides come to mind:

1.  The build will become increasingly slow as targets are added.
2. A build failure of one target may prevent any target RPMs from being produced (optional). 3. If people want to take the idea and run with it for other targets, a single SRPM means less flexible maintainership.

The question that's been gnawing on my mind since your original posting is: Where does the sys-root come from? Clearly for the Fedora targets, there exist RPMs that contain the needed files from the existing build process. These need to be available when generating the crosses. Your binutils.spec (nice) assumes there is an installation under "/usr/%{binutils_target}". Whether or not this is the right place, it'd be good for there to be a dependency that ensures this exists.

My current thought is that there be a wrapper spec file that takes in the target's RPMs, puts them in a standardized directory "/usr/share/sys-roots/%{target_triplet}" (imperfect location of the day), then makes a noarch RPM out of the contents. Is this possible in the build system? How do we accommodate the GPL here? Assuming this is a viable option, binutils (gcc, etc) could simply require this package prior to building. Having distinct sys-root packages also accommodates other (non-Fedora targeted) systems for which some interest has been shown.

It would be great if Fedora could be cross compiled using any host system to produce binaries for any target system, be it a supported and rare host (s390, ia64) or an entirely new target (arm, mips*).

-Brendan (blc redhat com)

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]