Version 7 (modified by sam, 6 years ago) (diff)

--

Set up a cross-build machine for the Raspberry Pi

Prerequisites

This document focuses on Debian hosts. Debian derivatives such as Ubuntu should work with minor changes.

Downloads

Get the Raspberry firmware and tools:

git clone https://github.com/raspberrypi/firmware.git
git clone https://github.com/raspberrypi/tools.git

Environment variables

  • Set RASPI_SDK_ROOT to the directory containing firmware and tools.
  • Add the following directory to PATH:
$RASPI_SDK_ROOT/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin

Building autoconf projects

For simple autoconf projects (using ./configure ; make) the following command can now be used:

RASPI_INCLUDES="$RASPI_SDK_ROOT/firmware/opt/vc/include"
RASPI_LIBS="$RASPI_SDK_ROOT/firmware/opt/vc/lib"

./configure --host=arm-bcm2708hardfp-linux-gnueabi \
    CPPFLAGS="-I$RASPI_INCLUDES -I$RASPI_INCLUDES/interface/vcos/pthreads" \
    LDFLAGS="-L$RASPI_LIBS"

make

Using Debian / Raspbian libraries

Choose a directory to store Raspbian packages, for instance $RASPI_SDK_ROOT/chroot. You can then use debootstrap to install packages to it, but if you have a multiarch-enabled system you can use this poor man's shell script:

raspi-install () {
    for pkg in "$@"
    do
        apt-get download "$pkg":armhf \
         && dpkg-deb -x "$pkg"_*.deb $RASPI_SDK_ROOT/chroot \
         && rm -f "$pkg"_*_armhf.deb
    done
}

Then for eg. SDL:

raspi-install libsdl1.2debian libsdl1.2-dev

Then add the following to CPPFLAGS in the configure line:

-I$RASPI_SDK_ROOT/chroot/usr/include

And the following to LDFLAGS:

-L$RASPI_SDK_ROOT/chroot/lib/arm-linux-gnueabihf
-Wl,-rpath-link -Wl,$RASPI_SDK_ROOT/chroot/lib/arm-linux-gnueabihf
-L$RASPI_SDK_ROOT/chroot/usr/lib/arm-linux-gnueabihf
-Wl,-rpath-link -Wl,$RASPI_SDK_ROOT/chroot/usr/lib/arm-linux-gnueabihf
-Wl,--unresolved-symbols=ignore-in-shared-libs

Bitten configuration

For Lol Engine autobuilders, add the following section to the bitten machine file:

[raspi]
version = 0