QtMoko/CrossBuildingOnDebian
From Openmoko
m (→Setting up the git workspace) |
(+cat) |
||
| (7 intermediate revisions by one user not shown) | |||
| 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. | ||
| − | + | On my Zotac ZBox (amd64) the whole build takes just less than five hours. | |
| − | + | ||
| − | + | ||
===Tools needed=== | ===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: | Most of the magic is handled by the ''pdebuild-cross'' package: | ||
$ sudo apt-get install pdebuild-cross | $ sudo apt-get install pdebuild-cross | ||
| − | + | The toolchain comes from the [http://emdebian.org Emdebian project] and is set up via the ''multistrap'' package (pulled in by pdebuild-cross). | |
| − | + | ===Building QtMoko v36=== | |
| − | The toolchain comes from the [http://emdebian.org Emdebian project] | + | ====Configuration==== |
| − | + | Configuration file for multistrap (/etc/multistrap/armel-sid.conf): | |
| − | + | ||
| − | + | ||
[General] | [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 | omitrequired=false | ||
configscript= | configscript= | ||
setupscript=/usr/share/multistrap/setcrossarch.sh | setupscript=/usr/share/multistrap/setcrossarch.sh | ||
| − | debootstrap=Debian | + | debootstrap=Debian Toolchains |
aptsources=Debian Toolchains | aptsources=Debian Toolchains | ||
tarballname=pdebuild-cross.tgz | tarballname=pdebuild-cross.tgz | ||
| Line 29: | Line 39: | ||
keyring=emdebian-archive-keyring | keyring=emdebian-archive-keyring | ||
suite=squeeze | suite=squeeze | ||
| − | |||
| − | |||
| − | |||
| + | [Debian] | ||
| + | packages=dpkg-dev binutils-multiarch build-essential dpkg-cross makedev | ||
| + | # Choose your preferred mirror | ||
| + | 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 an official backport will be available soon. For now I use a backport sitting in my own repository. | ||
| + | |||
| + | ====Configuration==== | ||
| + | Configuration file for multistrap (/etc/multistrap/armel-squeeze.conf): | ||
[General] | [General] | ||
arch= | arch= | ||
| Line 47: | Line 110: | ||
# 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 |
| + | # Choose your preferred mirror | ||
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 | ||
| − | + | 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. | # 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 153: | ||
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 171: | ||
#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 |
| + | 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: | 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 |
| − | + | ||
| + | [[Category:Qt Moko]] | ||
Latest revision as of 11:28, 10 February 2012
Contents |
[edit] Cross-building QtMoko on Debian
It is possible to cross-build QtMoko on a Debian box using only (em)debian tools.
On my Zotac ZBox (amd64) the whole build takes just less than five hours.
[edit] 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
The toolchain comes from the Emdebian project and is set up via the multistrap package (pulled in by pdebuild-cross).
[edit] Building QtMoko v36
[edit] 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 makedev # Choose your preferred mirror 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"
[edit] Creating the pbuilder chroot
As simple as:
$ sudo pdebuild-cross-create $ sudo pdebuild-cross-update
[edit] 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
[edit] 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
[edit] Building QtMoko v35
QtMoko v35 is the trickiest case since it requires a Debian Squeeze pbuilder chroot which misses the xapt tool. Hopefully an official backport will be available soon. For now I use a backport sitting in my own repository.
[edit] Configuration
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 # Choose your preferred mirror source=http://ftp.fr.debian.org/debian keyring=debian-archive-keyring suite=squeeze omitdebsrc=false
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.
[edit] 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.
[edit] 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
[edit] 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
