QtMoko/CrossBuildingOnDebian

From Openmoko

(Difference between revisions)
Jump to: navigation, search
(Building QtMoko v36)
(+cat)
 
(3 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.
 
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===
 
===Building QtMoko v36===
 
====Configuration====
 
====Configuration====
Line 40: Line 41:
 
   
 
   
 
  [Debian]
 
  [Debian]
  packages=dpkg-dev binutils-multiarch build-essential dpkg-cross
+
  packages=dpkg-dev binutils-multiarch build-essential dpkg-cross makedev
 +
# 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
Line 90: Line 92:
 
  $ pdebuild-cross -aarmel
 
  $ 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 an official backport will be available soon. For now I use a backport sitting in my own repository.
  
 
====Configuration====
 
====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):
 
Configuration file for multistrap (/etc/multistrap/armel-squeeze.conf):
 
  [General]
 
  [General]
Line 127: Line 127:
 
  [Debian]
 
  [Debian]
 
  packages=dpkg-dev binutils-multiarch build-essential makedev wget
 
  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=squeeze
 
  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):
 
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
 
  #!/bin/sh
Line 191: Line 190:
 
Build:
 
Build:
 
  $ pdebuild-cross -aarmel
 
  $ pdebuild-cross -aarmel
On my Zotac ZBox (amd64) the whole build takes just less than five hours.
+
 
 +
[[Category:Qt Moko]]

Latest revision as of 10: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
Personal tools

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.