Here's the method I've been using to build packages.
First some config files:
~/.pbuilderrc COMPONENTS="main contrib non-free" export LD_PRELOAD="${LD_PRELOAD:+$LD_PRELOAD:}/usr/lib/libeatmydata/libeatmydata.so" export CCACHE_DIR="/var/cache/pbuilder/ccache" export PATH="/usr/lib/ccache:${PATH}" BINDMOUNTS="${CCACHE_DIR}" EXTRAPACKAGES="ccache eatmydata"
~/.gbp.conf [DEFAULT]
[buildpackage] export-dir = ~/export builder = ARCH=armhf DIST=testing git-pbuilder -I -i -j2
/etc/sudoers.d/50-pbuilder %sudo ALL=(ALL:ALL) NOPASSWD: /usr/bin/pbuilder %sudo ALL=(ALL:ALL) NOPASSWD: /usr/sbin/cowbuilder
And to install everything:
apt-get install eatmydata ccache git-buildpackage dh-autoreconf xserver-xorg-dev ARCH=armhf DIST=testing git-pbuilder create ARCH=armhf DIST=testing git-pbuilder login --save-after-update echo "deb http://packages.pyra-handheld.com/debian jessie-pyra main"
/etc/apt/sources.list.d/pyra.list
apt-get update apt-get install eatmydata ccache exit
chmod -R a+rwx /var/cache/pbuilder/ccache # compiling will probably fail the first time, since not all ccache dirs are created, so run it again to allow the ccache from pbuilder to access the cache. After that ccache behaves fine.
To compile packages from git:
gbp clone git://git.openpandora.org/xserver-xorg-video-fbturbo.git cd xserver-xorg-video-fbturbo git-buildpackage
And now all your stuff ends up in ~/export you can set up gbp.conf to run additional scripts to sign/upload the package, etc.
gbp clone/pull should be used instead of git clone/pull. This automatically checks out all the branches and tags gbp needs.
Before every run the chroot should be updated, which is done with ARCH=armhf DIST=testing git-pbuilder update
This only works on native arm hardware, however, once the chroot is created, you can do the qemu-static chroot trick and run it on non arm hardware as well.