Home Home > 2008 > 08 > 31 > Hackweek Day 2: cross-build with OBS Part 1
Sign up | Login

Hackweek Day 2: cross-build with OBS Part 1

August 31st, 2008 by

I took the chance to meet with the openSUSE Buildservice Developers on tuesday and discuss with them the progress made so far. Although the OBS was not a theme at Hackweek that much, I found two people participating.

Dirk Müller, Marcus Hüwe and me decided to meet at Hackweek to accelerate the development by adding a way to build for architectures, where the buildhost is different from the architecture you are working at. Dirk was inspired by the call of some KDE akademy participants to get the Maemo Project used in the Nokia N810 building and running in OBS. We were all motivated by all the embedded systems out there and a secenario of running embedded openSUSE on them. Also, Adrian told me very often that cross-build is one of the most wanted features requested when openSUSE and OBS is beeing presented at an event.

During the last months, I was busy with testing and making sure that the source code in the subversion repository and snapshots of openSUSE:Tools* packages do work in general but also could be used for building on/for non x86 architectures. As a first result, some weeks ago new PowerPC workers could be easily introduced without doing much more than installing OBS regularily in the PowerPC workers. The required PowerPC distributions could also be used without much more effort other than installing also the PowerPC packages next to the others in the backend.

So the next thing we wanted to achive was cross-building. Say, your buildhost is a openSUSE:11.0 on a x86_64 processor, and your target is a Debian:Etch on a armv4l processor type. There are different ways to achive this, so we searched for a solution that fits into the openSUSE Buildservice philosophy, which allows you also to use prebuild binaries and a set of metadata to be as compatible as possibe to the target system where the original was build.

A central requirement was to use original binaries for building. That got us faced with the situation that we could not change the originals in the source code. Lets see how we solved this.

First some thoughts on cross-build in general, how it can be implemented and how it is used by some projects in the field. A first consideration are the types of cross-build in a packaged build environments like OBS:

  • Type 1 cross-build: Build a complete set of packages using one big Package in OBS. Examples are busybox and the uClibc buildroot system
  • Type 2 cross-build: Put a complete distro including cross-tools into a Project, by modifying all single Packages to build for the cross-target. No original packages for the target can be used.
  • Type 3 cross-build: In contrast to Type 2, the build system is modified so original source and binary packages can be build and used in a repository
  • Type 4 cross-build: To make things even more compatible, an emulator is used in the build system to provide the original target system. Now, the orginial binaries can be even run. Also, testsuites can be run.
  • I had myself been working on a complete distribution, that used Type 2 cross-build to implement. As a result, the current OBS is already capable of running Type 2 cross-build.

    To define an achivable goal for Hackweek, we decided to implement Type 4 cross-build at Hackweek. In advance I had made already some preparations, and installed Debian:Etch/Arm in my local OBS (openSUSE:11.0/ppc was there already quite a while, but for native workers), and got the projects/repos running in OBS backend, to make some feasibility testing. Also Marcus did the same on another level, because he was working on another project, he wanted to combine with ours (he works on a way to use official Distribution mirrors to extract the meta data from there instead of installing a copy in your local OBS).

    The results of the preparations were: in fact can the backend also handle Debian:Etch/Arm, we wanted to use the qemu emulator in the so called “User Emulation Mode” as the emulator and we decided to first implement cross-build with Arm architecture, because qemu for PowerPC is not that mature, and there is already PowerPC running with native works now in the official build.o.o OBS.

    So much for an introdution, next part is about doing and first results. The last part will be about next steps.

    Both comments and pings are currently closed.

    Comments are closed.