Skip to content
Raspberry Pi cross-compiler and sysroot in a Docker container.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
example Update axel example submodule Oct 10, 2017
image Fix permissions from last commit Jun 25, 2016
.gitmodules Add qtbase example Jun 25, 2016
Dockerfile Update qemu-arm-static path May 31, 2017
LICENSE Update license years Jun 25, 2016 Fix examples link in May 31, 2017 Rewrite with qemu-arm-static and raspbian sysroot Jun 18, 2016


Raspberry Pi Cross-Compiler in a Docker Container

An easy-to-use all-in-one cross compiler for the Raspberry Pi.

This project is available as sdthirlwall/raspberry-pi-cross-compiler on Docker Hub, and as sdt/docker-raspberry-pi-cross-compiler on GitHub.

Please raise any issues on the GitHub issue tracker as I don't get notified about Docker Hub comments.




This image is not intended to be run manually. Instead, there is a helper script which comes bundled with the image.

To install the helper script, run the image with no arguments, and redirect the output to a file.


docker run sdthirlwall/raspberry-pi-cross-compiler > ~/bin/rpxc
chmod +x ~/bin/rpxc


rpxc [command] [args...]

Execute the given command-line inside the container.

If the command matches one of the rpxc built-in commands (see below), that will be executed locally, otherwise the command is executed inside the container.

rpxc -- [command] [args...]

To force a command to run inside the container (in case of a name clash with a built-in command), use -- before the command.

Built-in commands


rpxc install-debian [--update] package packages...

Install native packages into the docker image. Changes are committed back to the sdthirlwall/raspberry-pi-cross-compiler image.


rpxc install-raspbian [--update] package packages...

Install raspbian packages from the raspbian repositories into the sysroot of thedocker image. Changes are committed back to the sdthirlwall/raspberry-pi-cross-compiler image.


rpxc update-image

Pull the latest version of the docker image.

If a new docker image is available, any extra packages installed with install-debian or install-raspbian will be lost.


rpxc update-script

Update the installed rpxc script with the one bundled in the image.


rpxc update

Update both the docker image and the rpxc script.


The following command-line options and environment variables are used. In all cases, the command-line option overrides the environment variable.

RPXC_CONFIG / --config <path-to-config-file>

This file is sourced if it exists.

Default: ~/.rpxc

RPXC_IMAGE / --image <docker-image-name>

The docker image to run.

Default: sdthirlwall/raspberry-pi-cross-compiler

RPXC_ARGS / --args <docker-run-args>

Extra arguments to pass to the docker run command.

Custom Images

Using rpxc install-debian and rpxc install-raspbian are really only intended for getting a build environment together. Once you've figured out which debian and raspbian packages you need, it's better to create a custom downstream image that has all your tools and development packages built in.

Create a Dockerfile

FROM sdthirlwall/raspberry-pi-cross-compiler

# Install some native build-time tools
RUN install-debian scons

# Install raspbian development libraries
RUN install-raspbian libboost-dev-all

Name your image with an RPXC_IMAGE variable and build the image

export RPXC_IMAGE=my-custom-rpxc-image
docker build -t $RPXC_IMAGE .

With RPXC_IMAGE set, rpxc will automatically use your new image.

# These are typical cross-compilation flags to pass to configure.
# Note the use of single quotes in the shell command-line. We want the
# variables to be interpolated in the container, not in the host system.
rpxc sh -c 'CFLAGS=--sysroot=$SYSROOT ./configure --host=$HOST'
rpxc make

Another way to achieve this is to create a shell script.

CFLAGS=--sysroot=$SYSROOT ./configure --host=$HOST

And call it as rpxc ./


See the examples directory for some real examples.

You can’t perform that action at this time.