summaryrefslogtreecommitdiff
path: root/data/buildscripts/toolchain-windows.sh
diff options
context:
space:
mode:
Diffstat (limited to 'data/buildscripts/toolchain-windows.sh')
-rw-r--r--data/buildscripts/toolchain-windows.sh79
1 files changed, 79 insertions, 0 deletions
diff --git a/data/buildscripts/toolchain-windows.sh b/data/buildscripts/toolchain-windows.sh
new file mode 100644
index 0000000..d885831
--- /dev/null
+++ b/data/buildscripts/toolchain-windows.sh
@@ -0,0 +1,79 @@
+#!/bin/bash
+set -e
+export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+
+apt-get -q -y --yes --force-yes install libmpfrc++-dev libmpc-dev zlib1g-dev
+
+WD=$HOME/mingw-w64-build
+rm -rf $WD
+mkdir $WD
+cp spec $WD/msvcr100.spec
+
+cd $WD
+wget http://ftp.gnu.org/gnu/binutils/binutils-2.24.tar.bz2
+tar -jxf binutils-2.24.tar.bz2
+wget http://gcc.fyxm.net/releases/gcc-4.9.1/gcc-4.9.1.tar.bz2
+tar -jxf gcc-4.9.1.tar.bz2
+git clone git://git.code.sf.net/p/mingw-w64/mingw-w64
+cd mingw-w64
+git checkout 469ed5d227202b373409c8a3b4c1358be39b9983
+cd ..
+git clone https://git.torproject.org/builders/tor-browser-bundle.git
+PATCHES=$WD/tor-browser-bundle/gitian/patches
+
+# Building binutils
+cd $WD
+cd binutils-2.24
+sed 's/= extern_rt_rel_d;/= extern_rt_rel_d;\n memset (extern_rt_rel_d, 0, PE_IDATA5_SIZE);/' -i ld/pe-dll.c
+patch -p1 < $PATCHES/enable-reloc-section-ld.patch
+patch -p1 < $PATCHES/peXXigen.patch
+cd ..
+mkdir binutils-2.24-build32 && cd binutils-2.24-build32
+../binutils-2.24/configure --prefix=/usr/local/ --target=i686-w64-mingw32 --disable-multilib
+make -j7
+make install
+
+# Building mingw-w64
+cd $WD
+mkdir mingw-w64-headers32 && cd mingw-w64-headers32
+../mingw-w64/mingw-w64-headers/configure --host=i686-w64-mingw32 --prefix=/usr/local/i686-w64-mingw32/ --enable-sdk=all --enable-secure-api --enable-idl
+make install
+
+# First stage of gcc compilation
+cd $WD
+# We don't want to link against msvcrt.dll due to bug 9084.
+sed 's/msvcrt/msvcr100/' -i $WD/msvcr100.spec
+# Linking libgcc against msvcrt is hard-coded...
+sed 's/msvcrt/msvcr100/' -i $WD/gcc-4.9.1/gcc/config/i386/t-mingw-w32 $WD/gcc-4.9.1/libgcc/config/i386/t-mingw32
+mkdir gcc-4.9.1-mingw32 && cd gcc-4.9.1-mingw32
+# LDFLAGS_FOR_TARGET does not work for some reason. Thus, we take
+# CFLAGS_FOR_TARGET.
+export CFLAGS_FOR_TARGET="-specs=$WD/msvcr100.spec -Wl,--nxcompat -Wl,--dynamicbase"
+../gcc-4.9.1/configure --prefix=/usr/local/ --target=i686-w64-mingw32 --with-gnu-ld --with-gnu-as --enable-languages=c,c++ --disable-multilib
+make all-gcc -j7
+make install-gcc
+
+# Building mingw-w64-crt32
+cd $WD
+mkdir mingw-w64-crt32 && cd mingw-w64-crt32
+../mingw-w64/mingw-w64-crt/configure --host=i686-w64-mingw32 --prefix=/usr/local/i686-w64-mingw32/
+make -j7
+make install
+
+# Building widl32
+cd $WD
+mkdir widl32 && cd widl32
+../mingw-w64/mingw-w64-tools/widl/configure --prefix=/usr/local --target=i686-w64-mingw32
+make -j7
+make install
+
+# Second stage of gcc compilation
+cd $WD
+cd gcc-4.9.1-mingw32
+make -j7
+make install
+mkdir -p /usr/local/gcclibs
+cp i686-w64-mingw32/libssp/.libs/libssp-0.dll /usr/local/gcclibs
+cp i686-w64-mingw32/libgcc/shlib/libgcc_s_sjlj-1.dll /usr/local/gcclibs
+
+echo DONE