| #!/bin/bash |
| |
| # |
| # Build a mingw64 compiler for doing x64 compiles. |
| # |
| |
| ### |
| ### CYGWIN :: Make sure that cygwin is mouting its file systems in binmode. |
| ### |
| |
| # |
| # Specify the architectures for which the tools are to be built |
| # |
| TARGS="${TARGS:-x86_64-pc-mingw64 }" |
| |
| # Let's be nice |
| renice 10 -p $$ |
| |
| # If any thing goes wrong, we'll bail out. |
| set -e |
| |
| # |
| # Specify the versions |
| # |
| GCC=gcc-4.1.1 |
| BINUTILS=binutils-2.17 |
| W32API=w32api-3.6 |
| # BINUTILS=binutils-2.16.91-20060119-1 |
| CYGWIN_SNAP=20060403 # You may need to find a more recent one. |
| export PATH=/bin:/usr/bin:/usr/local/bin |
| |
| # |
| # Where to install |
| # |
| # PREFIX="${PREFIX:-~/tiano/}" |
| PREFIX="${PREFIX:-/opt/tiano/}" |
| |
| # |
| # Where to get the GNU tools |
| # |
| BINUTILS_URL=ftp://ftp.ibiblio.org/pub/mirrors/gnu/ftp/gnu/binutils/${BINUTILS}.tar.bz2 |
| GCC_URL=ftp://mirrors.kernel.org/gnu/gcc/$GCC/$GCC.tar.bz2 |
| CYG_LOC=http://cygwin.com/snapshots/cygwin-src-${CYGWIN_SNAP}.tar.bz2 |
| W32API_LOC=http://superb-west.dl.sourceforge.net/sourceforge/mingw/${W32API}-src.tar.gz |
| # export http_proxy=http://proxy.dp.intel.com:911 |
| # export ftp_proxy=http://proxy.dp.intel.com:911 |
| |
| # |
| # Uncomment one of the following depending upon which your system provides |
| # |
| #GET_COMMAND="curl --remote-name" |
| GET_COMMAND="wget -nc --no-directories --retr-symlinks " |
| |
| # |
| # Allow environment to override some programs |
| # |
| MAKE="${MAKE:-make}" |
| export MAKE |
| SHELL="${SHELL:-/bin/sh}" |
| export SHELL |
| |
| # |
| # Get the source |
| # If you don't have curl on your machine, try using |
| # wget --passive-ftp --no-directories --retr-symlinks <<url>> |
| # If that doesn't work, try without the --passive-ftp option. |
| # |
| getSource() { |
| ${GET_COMMAND} "${BINUTILS_URL}" & |
| ${GET_COMMAND} "${GCC_URL}" & |
| ${GET_COMMAND} "${CYG_LOC}" & |
| ${GET_COMMAND} "${W32API_LOC}" & |
| wait |
| } |
| |
| # |
| # Unpack the source |
| # |
| unpackSource() { |
| (rm -rf "${BINUTILS}" |
| tar jxf "${BINUTILS}.tar.bz2" |
| ) & |
| |
| (rm -rf "${GCC}" |
| tar jxf "${GCC}.tar.bz2" |
| ) & |
| |
| (rm -rf cygwin-snapshot-${CYGWIN_SNAP}-1/ |
| tar jxf cygwin-src-${CYGWIN_SNAP}.tar.bz2 |
| ) & |
| |
| (rm -rf ${W32API} |
| tar zxf ${W32API}-src.tar.gz |
| ) & |
| |
| wait |
| |
| # Apply patches |
| (cd ${GCC}; patch -p1 < ../gcc_4.1.1.x86_64.061113.diff |
| ) |
| |
| (cd ${BINUTILS}; patch -p1 < ../binutils.diff |
| ) |
| |
| wait |
| } |
| |
| CONF_SHELL="${CONF_SHELL:-/bin/bash}" |
| # CONF_SHELL="${CONF_SHELL:-echo}" |
| |
| # |
| # Build |
| # |
| build() { |
| for targ in $TARGS |
| do ( |
| export pref=${PREFIX}${targ} |
| export PATH="${pref}/bin:$PATH" |
| |
| ( mkdir -p build-binutils-$targ |
| cd build-binutils-$targ |
| "${CONF_SHELL}" "../${BINUTILS}/configure" \ |
| --disable-nls "--target=${targ}" "--prefix=${pref}" |
| ${MAKE} -j1 -w all |
| ${MAKE} -w install |
| ) >> ${targ}.log 2>&1 |
| |
| ( |
| mkdir -p $pref/$targ/sys-include; |
| cp -fr cygwin-snapshot-${CYGWIN_SNAP}-1/newlib/libc/include/* $pref/$targ/sys-include |
| cp -fr cygwin-snapshot-${CYGWIN_SNAP}-1/winsup/cygwin/include/* $pref/$targ/sys-include |
| ) |
| |
| ( |
| mkdir -p $pref/$targ/include; |
| cp -fr ${W32API}/include/* $pref/$targ/sys-include; |
| ) |
| |
| ( mkdir -p build-gcc-$targ |
| cd build-gcc-$targ |
| "${CONF_SHELL}" "../${GCC}/configure" "--target=${targ}" "--prefix=${pref}" \ |
| --with-gnu-as --with-gnu-ld --without-headers --with-newlib --verbose \ |
| --disable-libssp \ |
| --disable-nls --enable-languages=c |
| ${MAKE} -j1 -w all |
| ${MAKE} -w install |
| ) >> ${targ}.log 2>&1 |
| ) & |
| done |
| |
| wait |
| } |
| |
| |
| |
| # |
| # Do everything |
| # |
| # Comment out any activities you wish to omit |
| # |
| getSource |
| unpackSource |
| build |