QtMoko/CrossBuildingOnDebian
From Openmoko
(→Creating the pbuilder chroot) |
(→Building QtMoko v36) |
||
Line 7: | Line 7: | ||
$ sudo apt-get install pdebuild-cross | $ sudo apt-get install pdebuild-cross | ||
+ | ===Building QtMoko v36=== | ||
+ | ====Configuration==== | ||
+ | Configuration file for multistrap (/etc/multistrap/armel-sid.conf): | ||
+ | [General] | ||
+ | arch= | ||
+ | directory= | ||
+ | # same as --tidy-up option if set to true | ||
+ | cleanup=true | ||
+ | # same as --no-auth option if set to true | ||
+ | # keyring packages listed in each debootstrap will | ||
+ | # still be installed. | ||
+ | noauth=false | ||
+ | # whether to add the /suite to be explicit about where apt | ||
+ | # needs to look for packages. Default is false. | ||
+ | explicitsuite=true | ||
+ | # extract all downloaded archives (default is true) | ||
+ | unpack=true | ||
+ | |||
+ | omitrequired=false | ||
+ | configscript= | ||
+ | setupscript=/usr/share/multistrap/setcrossarch.sh | ||
+ | debootstrap=Debian Toolchains | ||
+ | aptsources=Debian Toolchains | ||
+ | tarballname=pdebuild-cross.tgz | ||
+ | |||
+ | [Toolchains] | ||
+ | packages=g++-4.4-arm-linux-gnueabi linux-libc-dev-armel-cross | ||
+ | reinstall=binutils-multiarch | ||
+ | source=http://www.emdebian.org/debian | ||
+ | keyring=emdebian-archive-keyring | ||
+ | suite=squeeze | ||
+ | |||
+ | [Debian] | ||
+ | packages=dpkg-dev binutils-multiarch build-essential dpkg-cross | ||
+ | source=http://ftp.fr.debian.org/debian | ||
+ | keyring=debian-archive-keyring | ||
+ | suite=unstable | ||
+ | omitdebsrc=false | ||
+ | Configuration file for pdebuild-cross (/etc/pdebuild-cross/pdebuild-cross.rc): | ||
+ | # this is your configuration file for pdebuild-cross. | ||
+ | # /etc/pdebuild-cross/pdebuild-cross.rc is the one meant for editing. | ||
+ | # | ||
+ | # read pbuilderrc (5) and pdebuild-cross (1) for notes on specific options. | ||
+ | |||
+ | # remember to change CROSSARCH, DEBBUILDOPTS and MULTISTRAPFILE to | ||
+ | # change your target cross-building architecture from armel. | ||
+ | |||
+ | CROSSARCH=armel | ||
+ | DEBBUILDOPTS="-aarmel" | ||
+ | MULTISTRAPFILE=/etc/multistrap/armel-sid.conf | ||
+ | #BASETGZ=/var/lib/pdebuild-cross/pdebuild-cross.tgz | ||
+ | BASETGZ=/home/pdebuild-cross.tgz | ||
+ | BUILDPLACE=/var/lib/pdebuild-cross/build/ | ||
+ | BUILDRESULT=.. | ||
+ | APTCACHE=/var/lib/pdebuild-cross/aptcache/ | ||
+ | APTCACHEHARDLINK=no | ||
+ | PBUILDERSATISFYDEPENDSCMD=/usr/sbin/embuilddeps | ||
+ | PBUILDERSATISFYDEPENDSOPT="-m -a armel" | ||
+ | USEDEVPTS=yes | ||
+ | AUTO_DEBSIGN=no | ||
+ | |||
+ | # Only use when testing Xorg apps, not when building | ||
+ | # also remember to copy ~/.Xauthority into /home/$SUDO_USER/ | ||
+ | # (mkdir /home/$SUDO_USER if necessary). | ||
+ | #BINDMOUNTS="/tmp" | ||
+ | ====Creating the pbuilder chroot==== | ||
+ | As simple as: | ||
+ | $ sudo pdebuild-cross-create | ||
+ | $ sudo pdebuild-cross-update | ||
+ | ====Setting up the git workspace==== | ||
+ | First clone the QtMoko repo: | ||
+ | $ git clone --recursive git://github.com/radekp/qtmoko.git | ||
+ | Check out the v36 tag: | ||
+ | $ cd qtmoko | ||
+ | $ git checkout v36 | ||
+ | Patch the debian files | ||
+ | $ wget -O - -c http://wiki.openmoko.org/images/0/0a/QtMoko-v36-pdebuild-cross-patch.txt | patch -p1 | ||
+ | ====Building the QtMoko package==== | ||
+ | Create the orig tarball (once after each git merge): | ||
+ | $ tar czf ../qtmoko_36.orig.tar.gz -C .. --exclude .git --exclude .pc --exclude qtmoko/debian --transform 's:\./qtmoko:qtmoko-36:' ./qtmoko | ||
+ | Build: | ||
+ | $ pdebuild-cross -aarmel | ||
===Building QtMoko v35=== | ===Building QtMoko v35=== | ||
QtMoko v35 is the trickiest case since it requires a Debian Squeeze pbuilder chroot which misses the xapt tool. Hopefully a backport will be available soon. | QtMoko v35 is the trickiest case since it requires a Debian Squeeze pbuilder chroot which misses the xapt tool. Hopefully a backport will be available soon. | ||
Line 61: | Line 143: | ||
This file must be executable (chmod a+x). | This file must be executable (chmod a+x). | ||
− | Configuration file for pdebuild-cross (/etc/pdebuild-cross/ | + | Configuration file for pdebuild-cross (/etc/pdebuild-cross/pdebuild-cross.rc): |
# this is your configuration file for pdebuild-cross. | # this is your configuration file for pdebuild-cross. | ||
# /etc/pdebuild-cross/pdebuild-cross.rc is the one meant for editing. | # /etc/pdebuild-cross/pdebuild-cross.rc is the one meant for editing. |
Revision as of 19:27, 3 December 2011
Contents |
Cross-building QtMoko on Debian
It is possible to cross-build QtMoko on a Debian box using only (em)debian tools.
Tools needed
The builds are done the Debian way, using pbuilder on a Debian Wheezy box. Most of the magic is handled by the pdebuild-cross package:
$ sudo apt-get install pdebuild-cross
Building QtMoko v36
Configuration
Configuration file for multistrap (/etc/multistrap/armel-sid.conf):
[General] arch= directory= # same as --tidy-up option if set to true cleanup=true # same as --no-auth option if set to true # keyring packages listed in each debootstrap will # still be installed. noauth=false # whether to add the /suite to be explicit about where apt # needs to look for packages. Default is false. explicitsuite=true # extract all downloaded archives (default is true) unpack=true omitrequired=false configscript= setupscript=/usr/share/multistrap/setcrossarch.sh debootstrap=Debian Toolchains aptsources=Debian Toolchains tarballname=pdebuild-cross.tgz [Toolchains] packages=g++-4.4-arm-linux-gnueabi linux-libc-dev-armel-cross reinstall=binutils-multiarch source=http://www.emdebian.org/debian keyring=emdebian-archive-keyring suite=squeeze [Debian] packages=dpkg-dev binutils-multiarch build-essential dpkg-cross source=http://ftp.fr.debian.org/debian keyring=debian-archive-keyring suite=unstable omitdebsrc=false
Configuration file for pdebuild-cross (/etc/pdebuild-cross/pdebuild-cross.rc):
# this is your configuration file for pdebuild-cross. # /etc/pdebuild-cross/pdebuild-cross.rc is the one meant for editing. # # read pbuilderrc (5) and pdebuild-cross (1) for notes on specific options. # remember to change CROSSARCH, DEBBUILDOPTS and MULTISTRAPFILE to # change your target cross-building architecture from armel. CROSSARCH=armel DEBBUILDOPTS="-aarmel" MULTISTRAPFILE=/etc/multistrap/armel-sid.conf #BASETGZ=/var/lib/pdebuild-cross/pdebuild-cross.tgz BASETGZ=/home/pdebuild-cross.tgz BUILDPLACE=/var/lib/pdebuild-cross/build/ BUILDRESULT=.. APTCACHE=/var/lib/pdebuild-cross/aptcache/ APTCACHEHARDLINK=no PBUILDERSATISFYDEPENDSCMD=/usr/sbin/embuilddeps PBUILDERSATISFYDEPENDSOPT="-m -a armel" USEDEVPTS=yes AUTO_DEBSIGN=no # Only use when testing Xorg apps, not when building # also remember to copy ~/.Xauthority into /home/$SUDO_USER/ # (mkdir /home/$SUDO_USER if necessary). #BINDMOUNTS="/tmp"
Creating the pbuilder chroot
As simple as:
$ sudo pdebuild-cross-create $ sudo pdebuild-cross-update
Setting up the git workspace
First clone the QtMoko repo:
$ git clone --recursive git://github.com/radekp/qtmoko.git
Check out the v36 tag:
$ cd qtmoko $ git checkout v36
Patch the debian files
$ wget -O - -c http://wiki.openmoko.org/images/0/0a/QtMoko-v36-pdebuild-cross-patch.txt | patch -p1
Building the QtMoko package
Create the orig tarball (once after each git merge):
$ tar czf ../qtmoko_36.orig.tar.gz -C .. --exclude .git --exclude .pc --exclude qtmoko/debian --transform 's:\./qtmoko:qtmoko-36:' ./qtmoko
Build:
$ pdebuild-cross -aarmel
Building QtMoko v35
QtMoko v35 is the trickiest case since it requires a Debian Squeeze pbuilder chroot which misses the xapt tool. Hopefully a backport will be available soon.
Configuration
The toolchain comes from the Emdebian project and is set up via the multistrap package (pulled in by pdebuild-cross).
Configuration file for multistrap (/etc/multistrap/armel-squeeze.conf):
[General] arch= directory= # same as --tidy-up option if set to true cleanup=true # same as --no-auth option if set to true # keyring packages listed in each debootstrap will # still be installed. noauth=false # whether to add the /suite to be explicit about where apt # needs to look for packages. Default is false. explicitsuite=true # extract all downloaded archives (default is true) unpack=true omitrequired=false configscript= setupscript=/usr/share/multistrap/setcrossarch.sh debootstrap=Debian Toolchains aptsources=Debian Toolchains tarballname=pdebuild-cross.tgz [Toolchains] packages=g++-4.4-arm-linux-gnueabi linux-libc-dev-armel-cross reinstall=binutils-multiarch source=http://www.emdebian.org/debian keyring=emdebian-archive-keyring suite=squeeze [Debian] packages=dpkg-dev binutils-multiarch build-essential makedev wget source=http://ftp.fr.debian.org/debian keyring=debian-archive-keyring suite=squeeze omitdebsrc=false
You may also want to change the Debian mirror URIs in to use one near your location. I use a french one.
Hook file for multistrap so that it installs the xapt backport for squeeze from my repository (/etc/multistrap/armel-squeeze-hooks/E10-xapt):
#!/bin/sh set -e if [ ! -f /usr/bin/xapt ]; then wget http://pini.free.fr/debian/pool/main/e/emdebian-crush/xapt_2.2.17~stable_all.deb dpkg -i xapt_2.2.17~stable_all.deb || apt-get -f -y install rm xapt_2.2.17~stable_all.deb fi
This file must be executable (chmod a+x).
Configuration file for pdebuild-cross (/etc/pdebuild-cross/pdebuild-cross.rc):
# this is your configuration file for pdebuild-cross. # /etc/pdebuild-cross/pdebuild-cross.rc is the one meant for editing. # # read pbuilderrc (5) and pdebuild-cross (1) for notes on specific options. # remember to change CROSSARCH, DEBBUILDOPTS and MULTISTRAPFILE to # change your target cross-building architecture from armel. CROSSARCH=armel DEBBUILDOPTS="-aarmel" MULTISTRAPFILE=/etc/multistrap/armel-squeeze.conf #BASETGZ=/var/lib/pdebuild-cross/pdebuild-cross.tgz BASETGZ=/home/pdebuild-cross.tgz BUILDPLACE=/var/lib/pdebuild-cross/build/ BUILDRESULT=.. APTCACHE=/var/lib/pdebuild-cross/aptcache/ HOOKDIR=/etc/multistrap/armel-squeeze-hooks APTCACHEHARDLINK=no PBUILDERSATISFYDEPENDSCMD=/usr/sbin/embuilddeps PBUILDERSATISFYDEPENDSOPT="-m -a armel" USEDEVPTS=yes AUTO_DEBSIGN=no # Only use when testing Xorg apps, not when building # also remember to copy ~/.Xauthority into /home/$SUDO_USER/ # (mkdir /home/$SUDO_USER if necessary). #BINDMOUNTS="/tmp"
You may want to change the BUILDPLACE path as well in case you're short of space in /var.
Creating the pbuilder chroot
As simple as:
$ sudo pdebuild-cross-create $ sudo pdebuild-cross-update
The second step will trigger the xapt installation through the E10-xapt hook script defined above.
Setting up the git workspace
First clone the QtMoko repo:
$ git clone --recursive git://github.com/radekp/qtmoko.git
Check out the v35 tag:
$ cd qtmoko $ git checkout v35
Patch the debian files
$ wget -O - -c http://wiki.openmoko.org/images/f/f6/QtMoko-v35-pdebuild-cross-patch.txt | patch -p1
Building the QtMoko package
Create the orig tarball (once after each git merge):
$ tar czf ../qtmoko_35.orig.tar.gz -C .. --exclude .git --exclude .pc --exclude qtmoko/debian --transform 's:\./qtmoko:qtmoko-35:' ./qtmoko
Build:
$ pdebuild-cross -aarmel
On my Zotac ZBox (amd64) the whole build takes just less than five hours.