├── Dockerfile ├── Makefile ├── README.md ├── android-arm └── Dockerfile ├── darwin-x64 ├── Dockerfile └── gen_sdk_package.sh ├── linux-arm ├── Dockerfile └── Dockerfile.armv7 ├── linux-x64 └── Dockerfile ├── linux-x86 ├── Dockerfile └── i686-linux-gnu.sh ├── windows-x64 └── Dockerfile └── windows-x86 └── Dockerfile /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:wheezy 2 | MAINTAINER Steeve Morin "steeve.morin@gmail.com" 3 | 4 | RUN apt-get update && apt-get -y install \ 5 | bash \ 6 | curl wget \ 7 | pkg-config build-essential make automake autogen \ 8 | tar xz-utils bzip2 gzip \ 9 | file \ 10 | rsync \ 11 | sed \ 12 | vim 13 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | PLATFORMS = android-arm \ 2 | darwin-x64 \ 3 | linux-x86 \ 4 | linux-x64 \ 5 | linux-arm \ 6 | windows-x86 \ 7 | windows-x64 8 | DOCKER = docker 9 | IMAGE = steeve/cross-compiler 10 | 11 | all: 12 | $(DOCKER) build -t $(IMAGE):base . 13 | for i in $(PLATFORMS); do \ 14 | $(DOCKER) build -t $(IMAGE):$$i $$i ; \ 15 | done 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | cross-compilers 2 | =============== 3 | 4 | Dockerfiles for cross compiling environments 5 | -------------------------------------------------------------------------------- /android-arm/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM steeve/cross-compiler:base 2 | MAINTAINER Steeve Morin "steeve.morin@gmail.com" 3 | 4 | RUN apt-get update && apt-get -y --force-yes install \ 5 | bash \ 6 | curl \ 7 | pkg-config \ 8 | build-essential \ 9 | file \ 10 | tar xz-utils bzip2 gzip sed 11 | 12 | ENV CROSS_TRIPLE arm-linux-androideabi 13 | ENV CROSS_ROOT /usr/${CROSS_TRIPLE} 14 | ENV PATH ${PATH}:${CROSS_ROOT}/bin 15 | ENV LD_LIBRARY_PATH ${CROSS_ROOT}/lib:${LD_LIBRARY_PATH} 16 | 17 | RUN mkdir -p /build && \ 18 | cd /build && \ 19 | curl -L http://dl.google.com/android/ndk/android-ndk32-r10b-linux-x86_64.tar.bz2 | tar xvj && \ 20 | cd /build/android-ndk-r10b && \ 21 | /bin/bash ./build/tools/make-standalone-toolchain.sh --platform=android-14 --install-dir=${CROSS_ROOT} && \ 22 | cd / && \ 23 | rm -rf /build 24 | 25 | RUN cd ${CROSS_ROOT}/bin && \ 26 | ln -s ${CROSS_TRIPLE}-gcc ${CROSS_TRIPLE}-cc 27 | -------------------------------------------------------------------------------- /darwin-x64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM steeve/cross-compiler:base 2 | MAINTAINER Steeve Morin "steeve.morin@gmail.com" 3 | 4 | ENV CROSS_TRIPLE x86_64-apple-darwin14 5 | ENV CROSS_ROOT /usr/${CROSS_TRIPLE} 6 | ENV PATH ${PATH}:${CROSS_ROOT}/bin 7 | ENV LD_LIBRARY_PATH /usr/lib/llvm-3.4/lib:${CROSS_ROOT}/lib 8 | ENV MAC_SDK_VERSION 10.10 9 | 10 | RUN echo "deb http://llvm.org/apt/wheezy/ llvm-toolchain-wheezy-3.4-binaries main" >> /etc/apt/sources.list && \ 11 | curl http://llvm.org/apt/llvm-snapshot.gpg.key | apt-key add - && \ 12 | apt-get update 13 | 14 | RUN apt-get update && \ 15 | apt-get install -y --force-yes clang-3.4 llvm-3.4-dev automake autogen \ 16 | libtool libxml2-dev uuid-dev libssl-dev bash \ 17 | patch make tar xz-utils bzip2 gzip sed cpio 18 | 19 | RUN curl -L https://github.com/tpoechtrager/osxcross/archive/master.tar.gz | tar xvz && \ 20 | cd /osxcross-master/ && \ 21 | curl -L -o tarballs/MacOSX${MAC_SDK_VERSION}.sdk.tar.xz https://www.dropbox.com/s/yfbesd249w10lpc/MacOSX${MAC_SDK_VERSION}.sdk.tar.xz && \ 22 | echo | SDK_VERSION=${MAC_SDK_VERSION} OSX_VERSION_MIN=10.6 ./build.sh && \ 23 | mv /osxcross-master/target ${CROSS_ROOT} && \ 24 | mkdir -p ${CROSS_ROOT}/lib && \ 25 | rm -rf /osxcross-master 26 | -------------------------------------------------------------------------------- /darwin-x64/gen_sdk_package.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # OS X SDK packaging script 3 | 4 | export LC_ALL=C 5 | 6 | if [ $(uname -s) != "Darwin" ]; then 7 | if [ -z "$XCODEDIR" ]; then 8 | echo "This script must be run on OS X" 9 | echo "... Or with XCODEDIR=... on Linux" 10 | exit 1 11 | else 12 | XCODEDIR+="/$(ls "$XCODEDIR" | grep "^Xcode.*" | head -n1)" 13 | fi 14 | else 15 | XCODEDIR=$(ls /Volumes | grep "^Xcode.*" | head -n1) 16 | 17 | if [ -z "$XCODEDIR" ]; then 18 | if [ -d /Applications/Xcode*.app ]; then 19 | XCODEDIR="/Applications/Xcode*.app" 20 | else 21 | echo "please mount Xcode.dmg" 22 | exit 1 23 | fi 24 | else 25 | XCODEDIR="/Volumes/$XCODEDIR/Xcode*.app" 26 | fi 27 | fi 28 | 29 | if [ ! -d $XCODEDIR ]; then 30 | echo "cannot find Xcode (XCODEDIR=$XCODEDIR)" 31 | exit 1 32 | fi 33 | 34 | echo -e "found Xcode: $XCODEDIR" 35 | 36 | WDIR=$(pwd) 37 | 38 | which gnutar &>/dev/null 39 | 40 | if [ $? -eq 0 ]; then 41 | TAR=gnutar 42 | else 43 | TAR=tar 44 | fi 45 | 46 | which xz &>/dev/null 47 | 48 | if [ $? -eq 0 ]; then 49 | COMPRESSOR=xz 50 | PKGEXT="tar.xz" 51 | else 52 | COMPRESSOR=bzip2 53 | PKGEXT="tar.bz2" 54 | fi 55 | 56 | set -e 57 | 58 | pushd $XCODEDIR &>/dev/null 59 | 60 | if [ -d "Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs" ]; then 61 | pushd "Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs" &>/dev/null 62 | else 63 | if [ -d "../Packages" ]; then 64 | pushd "../Packages" &>/dev/null 65 | else 66 | if [ $? -ne 0 ]; then 67 | echo "Xcode (or this script) is out of date" 68 | echo "trying some magic to find the SDKs anyway ..." 69 | 70 | SDKDIR=$(find . -name SDKs -type d | grep MacOSX | head -n1) 71 | 72 | if [ -z "$SDKDIR" ]; then 73 | echo "cannot find SDKs!" 74 | exit 1 75 | fi 76 | 77 | pushd $SDKDIR &>/dev/null 78 | fi 79 | fi 80 | fi 81 | 82 | SDKS=$(ls | grep "^MacOSX10.*" | grep -v "Patch") 83 | 84 | if [ -z "$SDKS" ]; then 85 | echo "No SDK found" 86 | exit 1 87 | fi 88 | 89 | # Xcode 5 90 | LIBCXXDIR1="Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1" 91 | 92 | # Xcode 6 93 | LIBCXXDIR2="Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1" 94 | 95 | for SDK in $SDKS; do 96 | echo -n "packaging $(echo "$SDK" | sed -E "s/(.sdk|.pkg)//g") SDK " 97 | echo "(this may take several minutes) ..." 98 | 99 | if [[ $SDK == *.pkg ]]; then 100 | cp $SDK $WDIR 101 | continue 102 | fi 103 | 104 | TMP=$(mktemp -d /tmp/XXXXXXXXXXX) 105 | cp -r $SDK $TMP &>/dev/null || true 106 | 107 | pushd $XCODEDIR &>/dev/null 108 | 109 | # libc++ headers for C++11/C++14 110 | if [ -d $LIBCXXDIR1 ]; then 111 | cp -rf $LIBCXXDIR1 "$TMP/$SDK/usr/include/c++" 112 | elif [ -d $LIBCXXDIR2 ]; then 113 | cp -rf $LIBCXXDIR2 "$TMP/$SDK/usr/include/c++" 114 | fi 115 | 116 | popd &>/dev/null 117 | 118 | pushd $TMP &>/dev/null 119 | $TAR -cf - * | $COMPRESSOR -9 -c - > "$WDIR/$SDK.$PKGEXT" 120 | popd &>/dev/null 121 | 122 | rm -rf $TMP 123 | done 124 | 125 | popd &>/dev/null 126 | popd &>/dev/null 127 | 128 | echo "" 129 | ls -lh | grep MacOSX 130 | -------------------------------------------------------------------------------- /linux-arm/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM steeve/cross-compiler:base 2 | MAINTAINER Steeve Morin "steeve.morin@gmail.com" 3 | 4 | ENV CROSS_TRIPLE arm-linux-gnueabihf 5 | ENV CROSS_ROOT /usr/${CROSS_TRIPLE} 6 | ENV PATH ${PATH}:${CROSS_ROOT}/bin 7 | ENV LD_LIBRARY_PATH ${CROSS_ROOT}/lib:${LD_LIBRARY_PATH} 8 | ENV RASPBERRYPI_TOOLS_COMMIT 9c3d7b6ac692498dd36fec2872e0b55f910baac1 9 | 10 | # Enable 32 bits binaries 11 | RUN dpkg --add-architecture i386 && \ 12 | apt-get update && \ 13 | apt-get install -y libstdc++6:i386 libgcc1:i386 zlib1g:i386 14 | 15 | # Raspberry Pi is ARMv6+VFP2, Debian armhf is ARMv7+VFP3 16 | # Since this Dockerfile is targeting linux-arm from Raspberry Pi onward, 17 | # we're sticking with it's custom built cross-compiler with hardfp support. 18 | # We could use Debian's armel, but we'd have softfp and loose a good deal 19 | # of performance. 20 | # See: https://wiki.debian.org/RaspberryPi 21 | # We are also using the 4.7 version of the toolchain, so that glibc=2.13 22 | RUN curl -L https://github.com/raspberrypi/tools/archive/${RASPBERRYPI_TOOLS_COMMIT}.tar.gz | tar xvz --wildcards --no-anchored "*gcc-linaro-${CROSS_TRIPLE}-raspbian*" && \ 23 | rsync -av /tools-${RASPBERRYPI_TOOLS_COMMIT}/arm-bcm2708/gcc-linaro-${CROSS_TRIPLE}-raspbian/* /usr && \ 24 | cd /usr/bin && \ 25 | ln -s ${CROSS_TRIPLE}-gcc ${CROSS_TRIPLE}-cc && \ 26 | rm -rf /tools-${RASPBERRYPI_TOOLS_COMMIT} 27 | -------------------------------------------------------------------------------- /linux-arm/Dockerfile.armv7: -------------------------------------------------------------------------------- 1 | FROM steeve/cross-compiler:base 2 | MAINTAINER Steeve Morin "steeve.morin@gmail.com" 3 | 4 | # Add the cross compiler sources 5 | RUN echo "deb http://toolchains.secretsauce.net unstable main" >> /etc/apt/sources.list && \ 6 | dpkg --add-architecture armhf && \ 7 | curl -L http://toolchains.secretsauce.net/key.gpg | apt-key add - 8 | 9 | RUN apt-get update && apt-get -y install \ 10 | gcc-4.9-arm-linux-gnueabihf \ 11 | g++-4.9-arm-linux-gnueabihf 12 | 13 | ENV CROSS_TRIPLE arm-linux-gnueabihf 14 | ENV CROSS_ROOT /usr/${CROSS_TRIPLE} 15 | ENV PATH ${PATH}:${CROSS_ROOT}/bin 16 | ENV LD_LIBRARY_PATH ${CROSS_ROOT}/lib:${LD_LIBRARY_PATH} 17 | 18 | RUN cd /usr/bin && \ 19 | ln -s ${CROSS_TRIPLE}-gcc-4.9 ${CROSS_TRIPLE}-cc && \ 20 | ln -s ${CROSS_TRIPLE}-gcc-4.9 ${CROSS_TRIPLE}-gcc && \ 21 | ln -s ${CROSS_TRIPLE}-g++-4.9 ${CROSS_TRIPLE}-g++ && \ 22 | ln -s ${CROSS_TRIPLE}-g++-4.9 ${CROSS_TRIPLE}-c++ 23 | -------------------------------------------------------------------------------- /linux-x64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM steeve/cross-compiler:base 2 | MAINTAINER Steeve Morin "steeve.morin@gmail.com" 3 | 4 | ENV CROSS_TRIPLE x86_64-linux-gnu 5 | ENV CROSS_ROOT /usr/${CROSS_TRIPLE} 6 | ENV PATH ${PATH}:${CROSS_ROOT}/bin 7 | ENV LD_LIBRARY_PATH ${CROSS_ROOT}/lib:${LD_LIBRARY_PATH} 8 | 9 | RUN mkdir -p ${CROSS_ROOT} && \ 10 | cd /usr/bin && \ 11 | ln -s ${CROSS_TRIPLE}-gcc ${CROSS_TRIPLE}-cc && \ 12 | ln -s ${CROSS_TRIPLE}-g++ ${CROSS_TRIPLE}-c++ && \ 13 | for i in strip objdump; do \ 14 | ln -s ${i} ${CROSS_TRIPLE}-${i} ; \ 15 | done && \ 16 | for i in ranlib nm ar; do \ 17 | ln -s ${CROSS_TRIPLE}-gcc-${i}-4.7 ${CROSS_TRIPLE}-${i} ; \ 18 | done 19 | -------------------------------------------------------------------------------- /linux-x86/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM steeve/cross-compiler:base 2 | MAINTAINER Steeve Morin "steeve.morin@gmail.com" 3 | 4 | RUN apt-get update && apt-get -y install \ 5 | gcc-multilib \ 6 | g++-multilib 7 | 8 | ENV CROSS_TRIPLE i686-linux-gnu 9 | ENV CROSS_ROOT /usr/i686-linux-gnu 10 | ENV PATH ${PATH}:${CROSS_ROOT}/bin 11 | ENV LD_LIBRARY_PATH ${CROSS_ROOT}/lib:${LD_LIBRARY_PATH} 12 | 13 | COPY ${CROSS_TRIPLE}.sh /usr/bin/${CROSS_TRIPLE}.sh 14 | RUN mkdir -p ${CROSS_ROOT} && \ 15 | cd /usr/bin && \ 16 | chmod +x ${CROSS_TRIPLE}.sh && \ 17 | ln -s x86_64-linux-gnu-gcc x86_64-linux-gnu-cc && \ 18 | ln -s x86_64-linux-gnu-g++ x86_64-linux-gnu-c++ && \ 19 | ln -s ${CROSS_TRIPLE}.sh ${CROSS_TRIPLE}-gcc && \ 20 | ln -s ${CROSS_TRIPLE}.sh ${CROSS_TRIPLE}-cc && \ 21 | ln -s ${CROSS_TRIPLE}.sh ${CROSS_TRIPLE}-g++ && \ 22 | ln -s ${CROSS_TRIPLE}.sh ${CROSS_TRIPLE}-c++ && \ 23 | for i in strip objdump; do \ 24 | ln -s ${i} ${CROSS_TRIPLE}-${i} ; \ 25 | done && \ 26 | for i in ranlib nm ar; do \ 27 | ln -s x86_64-linux-gnu-gcc-${i}-4.7 ${CROSS_TRIPLE}-${i} ; \ 28 | done 29 | -------------------------------------------------------------------------------- /linux-x86/i686-linux-gnu.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | exec ${0/${CROSS_TRIPLE}-/x86_64-linux-gnu-} -m32 "$@" 3 | -------------------------------------------------------------------------------- /windows-x64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM steeve/cross-compiler:base 2 | MAINTAINER Steeve Morin "steeve.morin@gmail.com" 3 | 4 | RUN apt-get update && apt-get -y install mingw-w64 5 | 6 | ENV CROSS_TRIPLE x86_64-w64-mingw32 7 | ENV CROSS_ROOT /usr/${CROSS_TRIPLE} 8 | ENV PATH ${PATH}:${CROSS_ROOT}/bin 9 | ENV LD_LIBRARY_PATH ${CROSS_ROOT}/lib:${LD_LIBRARY_PATH} 10 | 11 | RUN cd /usr/bin && \ 12 | ln -s ${CROSS_TRIPLE}-gcc ${CROSS_TRIPLE}-cc 13 | -------------------------------------------------------------------------------- /windows-x86/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM steeve/cross-compiler:base 2 | MAINTAINER Steeve Morin "steeve.morin@gmail.com" 3 | 4 | RUN apt-get update && apt-get -y install mingw-w64 5 | 6 | ENV CROSS_TRIPLE i686-w64-mingw32 7 | ENV CROSS_ROOT /usr/${CROSS_TRIPLE} 8 | ENV PATH ${PATH}:${CROSS_ROOT}/bin 9 | ENV LD_LIBRARY_PATH ${CROSS_ROOT}/lib:${LD_LIBRARY_PATH} 10 | 11 | RUN cd /usr/bin && \ 12 | ln -s ${CROSS_TRIPLE}-gcc ${CROSS_TRIPLE}-cc 13 | --------------------------------------------------------------------------------