-
-
Save jedisct1/1ed4e7e1d05ad20a6eb1 to your computer and use it in GitHub Desktop.
Install a Windows cross-compiler on OSX
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
PREFIX="/usr/local/mingw" | |
BINUTILS_VERSION=2.25 | |
GCC_VERSION=5.1.0 | |
GCC_SUFFIX_VERSION=5.1 | |
MINGW_VERSION=4.0.2 | |
SHA256_SUM=yolo | |
# check_error my_cmd --param ... | |
check_error() { | |
$* | |
if [ $? -ne 0 ]; then | |
echo "The following command returned an error:" | |
echo "$*" | |
echo "Continue? y/n" | |
read a | |
if [ $a != "y" ]; then | |
exit | |
fi | |
echo "Ignoring..." | |
else | |
echo "OK: $*" | |
fi | |
} | |
# check_download "file_maybe_existing" download_cmd... | |
check_download() { | |
file=$1 | |
shift | |
if [ ! -f "$file" ]; then | |
echo "Downloading ${file}" | |
$* | |
else | |
echo "${file} already downloaded" | |
fi | |
} | |
# check_decompression "dir" decompression_cmd... | |
check_decompression() { | |
decompressed=$1 | |
shift | |
if [ ! -d "$1" ]; then | |
echo "Decompressing..." | |
$* | |
else | |
echo "Decompression not needed, ${decompressed} already exists" | |
fi | |
} | |
# prerequisites | |
check_error brew install gmp mpfr libmpc cloog isl | |
check_error brew link gmp mpfr libmpc cloog isl | |
# mingw | |
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" | |
check_error cd $DIR | |
check_error mkdir -p source | |
check_error mkdir -p $PREFIX | |
echo "Downloading binutils" | |
check_error cd ./source | |
check_error check_download "binutils-${BINUTILS_VERSION}.tar.bz2" \ | |
curl -LO http://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.bz2 | |
check_error check_decompression "binutils-${BINUTILS_VERSION}" \ | |
tar xjf binutils-${BINUTILS_VERSION}.tar.bz2 | |
echo "Building binutils" | |
echo "1/2 32-bit" | |
check_error cd binutils-${BINUTILS_VERSION} | |
check_error mkdir -p build | |
check_error cd build | |
CC=gcc-${GCC_SUFFIX_VERSION} CXX=g++-${GCC_SUFFIX_VERSION} \ | |
CPP=cpp-${GCC_SUFFIX_VERSION} LD=gcc-${GCC_SUFFIX_VERSION} | |
check_error ../configure --target=i686-w64-mingw32 --disable-werror \ | |
--disable-multilib --prefix=$PREFIX --with-sysroot=$PREFIX | |
check_error make -j4 | |
check_error make install-strip | |
echo "2/2 64-bit" | |
cd .. | |
check_error mkdir -p build64 | |
cd build64 | |
CC=gcc-${GCC_SUFFIX_VERSION} CXX=g++-${GCC_SUFFIX_VERSION} \ | |
CPP=cpp-${GCC_SUFFIX_VERSION} LD=gcc-${GCC_SUFFIX_VERSION} | |
check_error ../configure --target=x86_64-w64-mingw32 --disable-werror \ | |
--disable-multilib --prefix=$PREFIX --with-sysroot=$PREFIX \ | |
--enable-64-bit-bfd | |
check_error make -j4 | |
check_error make install-strip | |
check_error cd ../.. | |
echo "Downloading mingw-w64" | |
check_error check_download "mingw-w64-v${MINGW_VERSION}.tar.bz2" \ | |
curl -Lo mingw-w64-v${MINGW_VERSION}.tar.bz2 \ | |
"http://freefr.dl.sourceforge.net/project/mingw-w64/mingw-w64/mingw-w64-release/mingw-w64-v${MINGW_VERSION}.tar.bz2" | |
check_error check_decompression "mingw-w64-v${MINGW_VERSION}" \ | |
tar xjf mingw-w64-v${MINGW_VERSION}.tar.bz2 | |
echo "Building mingw-headers" | |
echo "1/2 32-bit" | |
check_error cd mingw-w64-v${MINGW_VERSION} | |
check_error mkdir -p build-headers32 | |
check_error cd build-headers32 | |
check_error ../mingw-w64-headers/configure --host=i686-w64-mingw32 \ | |
--prefix=$PREFIX/i686-w64-mingw32 | |
check_error make -j4 | |
check_error make install-strip | |
check_error cd $PREFIX/i686-w64-mingw32 | |
check_error ln -s lib lib32 | |
check_error cd $DIR/source/mingw-w64-v${MINGW_VERSION} | |
echo "2/2 64-bit" | |
check_error mkdir -p build-headers64 | |
check_error cd build-headers64 | |
check_error ../mingw-w64-headers/configure --host=x86_64-w64-mingw32 \ | |
--prefix=$PREFIX/x86_64-w64-mingw32 | |
check_error make -j4 | |
check_error make install-strip | |
check_error cd $PREFIX/x86_64-w64-mingw32 | |
check_error ln -s lib lib64 | |
check_error cd $DIR/source/ | |
echo "Downloading gcc" | |
check_error check_download "gcc-${GCC_VERSION}.tar.bz2" \ | |
curl -LO ftp://gcc.gnu.org/pub/gcc/releases/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.bz2 | |
check_error check_decompression "gcc-${GCC_VERSION}" tar xjf gcc-${GCC_VERSION}.tar.bz2 | |
echo "Building core gcc" | |
echo "1/2 32-bit" | |
check_error cd $PREFIX | |
check_error ln -s i686-w64-mingw32 mingw | |
check_error cd $DIR/source/gcc-${GCC_VERSION} | |
check_error mkdir -p build32 | |
check_error cd build32 | |
CC=gcc-${GCC_SUFFIX_VERSION} CXX=g++-${GCC_SUFFIX_VERSION} \ | |
CPP=cpp-${GCC_SUFFIX_VERSION} LD=gcc-${GCC_SUFFIX_VERSION} \ | |
PATH=${PREFIX}/bin/:$PATH | |
check_error ../configure --target=i686-w64-mingw32 --disable-multilib \ | |
--enable-languages=c,c++ \ | |
--with-gmp=/usr/local \ | |
--with-mpfr=/usr/local \ | |
--with-mpc=/usr/local \ | |
--with-cloog=/usr/local \ | |
--with-isl=/usr/local \ | |
--with-system-zlib --enable-version-specific-runtime-libs \ | |
--enable-libstdcxx-time=yes --enable-stage1-checking \ | |
--enable-checking=release --enable-lto --enable-threads=win32 \ | |
--disable-sjlj-exceptions --prefix=$PREFIX --with-sysroot=$PREFIX | |
check_error make all-gcc -j4 | |
check_error make install-gcc | |
echo "2/2 64-bit" | |
check_error cd $PREFIX | |
check_error rm mingw | |
check_error ln -s x86_64-w64-mingw32 mingw | |
check_error cd $DIR/source/gcc-${GCC_VERSION} | |
check_error mkdir -p build64 | |
check_error cd build64 | |
CC=gcc-${GCC_SUFFIX_VERSION} CXX=g++-${GCC_SUFFIX_VERSION} \ | |
CPP=cpp-${GCC_SUFFIX_VERSION} LD=gcc-${GCC_SUFFIX_VERSION} \ | |
PATH=${PREFIX}/bin/:$PATH | |
check_error ../configure --target=x86_64-w64-mingw32 --disable-multilib \ | |
--enable-languages=c,c++ \ | |
--with-gmp=/usr/local \ | |
--with-mpfr=/usr/local \ | |
--with-mpc=/usr/local \ | |
--with-cloog=/usr/local \ | |
--with-isl=/usr/local \ | |
--with-system-zlib --enable-version-specific-runtime-libs \ | |
--enable-libstdcxx-time=yes --enable-stage1-checking \ | |
--enable-checking=release --enable-lto --enable-threads=win32 \ | |
--prefix=$PREFIX --with-sysroot=$PREFIX | |
check_error make all-gcc -j4 | |
check_error make install-gcc | |
echo "Building mingw runtime" | |
check_error cd $PREFIX | |
check_error rm mingw | |
check_error ln -s i686-w64-mingw32 mingw | |
check_error cd $DIR/source/mingw-w64-v${MINGW_VERSION} | |
check_error mkdir -p build-crt32 | |
check_error cd build-crt32 | |
echo "1/2 32-Bit" | |
check_error ../mingw-w64-crt/configure --host=i686-w64-mingw32 \ | |
--prefix=$PREFIX/i686-w64-mingw32 --with-sysroot=$PREFIX | |
check_error make | |
check_error make install-strip | |
echo "2/2 64-Bit" | |
check_error cd $PREFIX | |
check_error rm mingw | |
check_error ln -s x86_64-w64-mingw32 mingw | |
check_error cd $DIR/source/mingw-w64-v${MINGW_VERSION} | |
check_error mkdir -p build-crt64 | |
check_error cd build-crt64 | |
check_error ../mingw-w64-crt/configure --host=x86_64-w64-mingw32 \ | |
--prefix=$PREFIX/x86_64-w64-mingw32 --with-sysroot=$PREFIX | |
check_error make | |
check_error make install-strip | |
echo "Building all gcc" | |
echo "1/2 32-Bit" | |
check_error cd $PREFIX | |
check_error rm mingw | |
check_error ln -s i686-w64-mingw32 mingw | |
check_error cd $DIR/source/gcc-${GCC_VERSION}/build32 | |
check_error make | |
check_error make install-strip | |
echo "2/2 64-Bit" | |
check_error cd $PREFIX | |
check_error rm mingw | |
check_error ln -s x86_64-w64-mingw32 mingw | |
check_error cd $DIR/source/gcc-${GCC_VERSION}/build64 | |
check_error make | |
check_error make install-strip | |
echo "Linking libgcc" | |
check_error cd $PREFIX/i686-w64-mingw32/lib | |
check_error ln -s ../../lib/gcc/i686-w64-mingw32/lib/libgcc_s.a ./ | |
check_error cd $PREFIX/x86_64-w64-mingw32/lib | |
check_error ln -s ../../lib/gcc/x86_64-w64-mingw32/lib/libgcc_s.a ./ | |
echo "Building winpthreads" | |
check_error cd $DIR/source/mingw-w64-v${MINGW_VERSION}/mingw-w64-libraries/winpthreads | |
echo "1/2 32-Bit" | |
check_error mkdir -p build32 | |
check_error cd build32 | |
check_error ../configure --host=i686-w64-mingw32 \ | |
--prefix=$PREFIX/i686-w64-mingw32 | |
check_error make | |
check_error make install-strip | |
check_error cd .. | |
echo "2/2 64-Bit" | |
check_error mkdir -p build64 | |
check_error cd build64 | |
check_error ../configure --host=x86_64-w64-mingw32 \ | |
--prefix=$PREFIX/x86_64-w64-mingw32 | |
check_error make | |
check_error make install-strip | |
echo "Cleaning up" | |
check_error cd $DIR | |
check_error rm -rf source | |
echo "Done" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment