QtMoko/CrossBuildingOnDebian
From Openmoko
m (→Setting up the git workspace) |
(→Cross-building QtMoko on Debian: Adapt to v35) |
||
Line 2: | Line 2: | ||
It is possible to cross-build QtMoko on a Debian box using only (em)debian tools. | It is possible to cross-build QtMoko on a Debian box using only (em)debian tools. | ||
− | |||
− | |||
− | |||
===Tools needed=== | ===Tools needed=== | ||
+ | The builds are done the Debian way, using pbuilder on de Debian Wheezy box. | ||
Most of the magic is handled by the ''pdebuild-cross'' package: | Most of the magic is handled by the ''pdebuild-cross'' package: | ||
$ sudo apt-get install pdebuild-cross | $ sudo apt-get install pdebuild-cross | ||
− | ===Configuration=== | + | ===Building QtMoko v35=== |
− | The toolchain comes from the [http://emdebian.org Emdebian project] | + | 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 [http://emdebian.org 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] | [General] | ||
arch= | arch= | ||
Line 47: | Line 28: | ||
# extract all downloaded archives (default is true) | # extract all downloaded archives (default is true) | ||
unpack=true | unpack=true | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | omitrequired=false | |
− | [ | + | configscript= |
− | packages= | + | setupscript=/usr/share/multistrap/setcrossarch.sh |
− | source=http:// | + | debootstrap=Debian Toolchains |
− | keyring= | + | aptsources=Debian Toolchains |
− | suite= | + | 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] | [Debian] | ||
− | packages=dpkg-dev binutils-multiarch build-essential | + | packages=dpkg-dev binutils-multiarch build-essential makedev wget |
source=http://ftp.fr.debian.org/debian | source=http://ftp.fr.debian.org/debian | ||
keyring=debian-archive-keyring | keyring=debian-archive-keyring | ||
− | suite= | + | suite=squeeze |
omitdebsrc=false | 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/armel-squeeze.conf): | ||
# 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. | ||
Line 78: | Line 72: | ||
CROSSARCH=armel | CROSSARCH=armel | ||
DEBBUILDOPTS="-aarmel" | DEBBUILDOPTS="-aarmel" | ||
− | MULTISTRAPFILE=/ | + | MULTISTRAPFILE=/etc/multistrap/armel-squeeze.conf |
− | BASETGZ=/var/lib/pdebuild-cross/pdebuild-cross.tgz | + | #BASETGZ=/var/lib/pdebuild-cross/pdebuild-cross.tgz |
+ | BASETGZ=/home/pdebuild-cross.tgz | ||
BUILDPLACE=/var/lib/pdebuild-cross/build/ | BUILDPLACE=/var/lib/pdebuild-cross/build/ | ||
BUILDRESULT=.. | BUILDRESULT=.. | ||
APTCACHE=/var/lib/pdebuild-cross/aptcache/ | APTCACHE=/var/lib/pdebuild-cross/aptcache/ | ||
− | + | HOOKDIR=/etc/multistrap/armel-squeeze-hooks | |
APTCACHEHARDLINK=no | APTCACHEHARDLINK=no | ||
PBUILDERSATISFYDEPENDSCMD=/usr/sbin/embuilddeps | PBUILDERSATISFYDEPENDSCMD=/usr/sbin/embuilddeps | ||
Line 95: | Line 90: | ||
#BINDMOUNTS="/tmp" | #BINDMOUNTS="/tmp" | ||
You may want to change the BUILDPLACE path as well in case you're short of space in /var. | You may want to change the BUILDPLACE path as well in case you're short of space in /var. | ||
− | ===Creating the pbuilder chroot=== | + | ====Creating the pbuilder chroot==== |
As simple as: | As simple as: | ||
$ sudo pdebuild-cross-create | $ sudo pdebuild-cross-create | ||
− | ===Setting up the git workspace=== | + | $ sudo pdebuild-cross-update |
+ | ====Setting up the git workspace==== | ||
First clone the QtMoko repo: | First clone the QtMoko repo: | ||
− | $ git clone - | + | $ git clone --recursive git://github.com/radekp/qtmoko.git |
− | + | Check out the v35 tag: | |
$ cd qtmoko | $ cd qtmoko | ||
− | $ git | + | $ git checkout v35 |
− | + | ||
− | + | ||
Patch the debian files | Patch the debian files | ||
− | $ wget -c http://wiki.openmoko.org/images/ | + | $ wget -O - -c http://wiki.openmoko.org/images/f/f6/QtMoko-v35-pdebuild-cross-patch.txt | patch -p1 |
− | + | ====Building the QtMoko package==== | |
− | + | ||
− | ===Building the QtMoko package=== | + | |
Create the orig tarball (once after each git merge): | Create the orig tarball (once after each git merge): | ||
− | $ tar czf ../ | + | $ tar czf ../qtmoko_35.orig.tar.gz -C .. --exclude .git --exclude .pc --exclude qtmoko/debian --transform 's:\./qtmoko:qtmoko-35:' ./qtmoko |
Build: | Build: | ||
− | $ pdebuild-cross | + | $ pdebuild-cross -aarmel |
− | On my Zotac ZBox (amd64) the whole build takes five hours. | + | On my Zotac ZBox (amd64) the whole build takes just less than five hours. |
Revision as of 17:38, 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 de Debian Wheezy box. Most of the magic is handled by the pdebuild-cross package:
$ sudo apt-get install pdebuild-cross
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/armel-squeeze.conf):
# 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
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.