Easy Cross-Compiler Toolchain Access with Docker and CMake
In the past, cross-compiling was often an art that required a Unix beard, a considerable amount of time, and a chicken to sacrifice. Assembling the cross-compiler toolchain was often a lengthy manual configuration process that was, at best, poorly documented. A number of recent projects make cross-compilers more readily available, but they still usually only work on a few versions of select Linux distributions. Docker images make cross-compiling toolchains easily accessible from any recent Linux distribution and even MacOSX and Windows. When combined with CMake, which has very good cross-compilation support, it is easy to take C/C++-based code and build it for almost anything.
Previously, we described how to build ITK code for Windows from a Debian Jessie Linux distribution. While building the cross-compiler was relatively straight forward, we can get the toolchain with one simple command on any host with Docker installed:
docker pull thewtex/cross-compiler-windows-x86
To perform an Experimental dashboard build with the source code cloned at ~/src/ITK:
docker run --rm -it -v ~/src/ITK:/usr/src/ITK:ro thewtex/cross-compiler-windows-x86 mkdir ITK-build cd ITK-build/ cmake -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -G Ninja ../ITK ctest -D Experimental -j6
This will run build the Docker image, which has the CMAKE_TOOLCHAIN_FILE location configured in an environmental variable. The -G Ninja flag tells CMake to use the Ninja Generator.
Happy cross-compiling!