-----Original Message----- Date: Tue, 07 Jul 2009 18:03:10 -0400 From: Mark Salter msalter@redhat.com Subject: crossbuilding rpms with koji To: fedora-buildsys-list@redhat.com Message-ID: 1247004190.2512.14.camel@deneb.localdomain Content-Type: text/plain
I have been doing some experimenting with crossbuilds of rpms using koji. I realize that fedora policy requires supported arches to be native built, but my focus is towards infrastructure to crossbuild rpms for embedded systems where the fedora distribution is not well suited. So as a first stab at this, I started working with the F-10 release packages with an armv5tel target. The reason for this was that the ongoing work with fedora arm secondary arch allowed me to focus on the crossbuild infrastructure without having to spend a lot of time working on arch-specific patches in the packages themselves.
Anyway, I ended up crossbuilding around 400 F-10 packages. Enough to build up a rootfs which boots to a familiar looking gnome desktop on an omap-based beagleboard. Of those 400 packages, about 20% needed some amount of patching to support crossbuilding. Most were simple things like specfile tweaks (i.e. "s/gcc/%{__cc}/") or simple makefile patches to get around hard-coded tool names. And a handful needed more complicated patches (almost entirely autoconf/automake related).
Great! I had a similar attempt to build cross rpms for ARM. And since I was cross-building I could built those against glibc as well as uClibc. Although my package set is much smaller (~50). I'll try to place the cross patches that I have somewhere, probably most of them are already in your setup.
I didn't build these in koji though, but it would be cool to have them in there.
Now that I've gotten to this point, I'd like to solicit some comments on the approach taken and get some guidance on how to beat the kludgey first cut into shape so that it can be acceptable upstream. The infrastructure side consists of:
A yum plugin which allows yum to install non-native rpms into the build roots.
A mock plugin to handle the crossbuilding details.
A koji patch to support the crossbuild extensions to mock
A cross-toolchain package
A cross-rpm-config package which provides configuration for rpm in the mock chroot and configuration details for the mock plugin.
IIUC you have pkgname.armv5tel.rpm? If so, how did you make rpm to build those? I had to modify /etc/rpm/platform to fool rpm in thinking it is building for armv5tel. Is there a cleaner way for doing this?
...snip...
If anyone is interested and would like to take a look at the code and comment, I placed source rpms at:
http://people.redhat.com/msalter/crossbuild/source/
For convenience, here is the koji patch:
http://people.redhat.com/msalter/crossbuild/koji/koji.patch
And the yum plugin:
http://people.redhat.com/msalter/crossbuild/yum/cross.py
And the mock plugin:
http://people.redhat.com/msalter/crossbuild/mock/cross.py
and just for fun, a pic of F-10 running on a beagleboard:
http://people.redhat.com/msalter/beagle-gnome.jpg
--Mark
Kedar.
On Wed, 2009-07-08 at 22:24 -0700, Kedar Sovani wrote:
IIUC you have pkgname.armv5tel.rpm? If so, how did you make rpm to build those? I had to modify /etc/rpm/platform to fool rpm in thinking it is building for armv5tel. Is there a cleaner way for doing this?
I'm pretty sure all I had to do was pass --target=armv5tel to rpmbuild. I had some missteps early on where some packages ended up building as native packages but were named armv5tel. It didn't matter that they were full of i386 binaries and rpm query would tell me the %{ARCH} was armv5tel. A quick experiment with a minimal specfile shows that rpmbuild seems perfectly happy to use any made up arch name you pass it.
--Mark
buildsys@lists.fedoraproject.org