Author: cfinck
Date: Sat Apr 25 18:12:32 2009
New Revision: 40697

URL: http://svn.reactos.org/svn/reactos?rev=40697&view=rev
Log:
Proof that I won the fight against MSYS :-)
- Add a script for automatically compiling a GNU/MinGW toolchain (binutils, 
gcc, mingw-runtime, w32api) under Windows making use of the toolchain packages 
bundled with RosBE-Unix.
  These tools will finally have correct relative built-in include directories.
- Add a documentation explaining the used options and possible problems when 
building the tools under Windows with MSYS

Added:
    trunk/tools/RosBE/RosBE-Windows/Compiling a working GNU toolchain under 
Windows.odt   (with props)
    trunk/tools/RosBE/RosBE-Windows/buildtoolchain.sh   (with props)

Added: trunk/tools/RosBE/RosBE-Windows/Compiling a working GNU toolchain under 
Windows.odt
URL: 
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/Compiling%20a%20working%20GNU%20toolchain%20under%20Windows.odt?rev=40697&view=auto
==============================================================================
Binary file - no diff available.

Propchange: trunk/tools/RosBE/RosBE-Windows/Compiling a working GNU toolchain 
under Windows.odt
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: trunk/tools/RosBE/RosBE-Windows/buildtoolchain.sh
URL: 
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/buildtoolchain.sh?rev=40697&view=auto
==============================================================================
--- trunk/tools/RosBE/RosBE-Windows/buildtoolchain.sh (added)
+++ trunk/tools/RosBE/RosBE-Windows/buildtoolchain.sh [iso-8859-1] Sat Apr 25 
18:12:32 2009
@@ -1,0 +1,246 @@
+#!/bin/bash
+#
+# ReactOS Build Environment for Windows - Script for building a 
binutils/GCC/mingw-runtime/w32api toolchain for Windows
+# Partly based on RosBE-Unix' "RosBE-Builder.sh"
+# Copyright 2009 Colin Finck <[email protected]>
+#
+# Released under GNU GPL v2 or any later version.
+
+##################################################################################
+# This script was tested with the following toolchain versions:
+# - binutils v2.19.51-20090127 (snapshot) using the corresponding ReactOS 
patches
+# - gcc v4.1.3-20071015 (snapshot) using the corresponding ReactOS patches
+# - mingw-runtime 3.13
+# - w32api 3.10
+##################################################################################
+
+#
+# Constants
+#
+INSTALLDIR="/c/buildtoolchain/mingw"
+MINGWDIR="/mingw"
+NEEDED_TOOLS="bison flex gcc g++ grep make makeinfo"
+TARGET="i686-pc-mingw32"
+TEMPDIR="/c/buildtoolchain"
+WIN32_INSTALLDIR="c:/buildtoolchain/mingw"
+
+#
+# Functions
+#
+boldmsg()
+{
+       echo -e $2 "\e[1m$1\e[0m"
+}
+
+greenmsg()
+{
+       echo -e $2 "\e[32m$1\e[0m"
+}
+
+redmsg()
+{
+       echo -e $2 "\e[31m$1\e[0m"
+}
+
+check_run()
+{
+       if [ $? -ne 0 ]; then
+               redmsg "FAILED"
+               echo "Please take a look at the log file \"$TEMPDIR/build.log\""
+               echo "Aborted!"
+               exit 1
+       else
+               greenmsg "OK"
+               rm "$TEMPDIR/build.log"
+       fi
+}
+
+#
+# Entry point
+#
+echo "buildtoolchain - Build a binutils/GCC/mingw-runtime/w32api toolchain for 
Windows"
+echo "by Colin Finck <[email protected]>"
+echo
+
+if [ "`uname -o`" != "Msys" ]; then
+       echo "You can only run this script under a MSYS environment!"
+       exit 1
+fi
+
+# We don't want too less nor too many parameters
+if [ "$1" == "" ] || [ "$4" != "" ]; then
+       echo "Syntax: ./buildtoolchain.sh <sources> [binutils] [gcc]"
+       echo
+       echo " sources  - Path to the directory containing RosBE-Unix toolchain 
packages (.tar.bz2 files)"
+       echo " binutils - optional; whether binutils shall be built (0/1, 
default is 1)"
+       echo " gcc      - optional; whether gcc shall be built (0/1, default is 
1)"
+       exit 1
+fi
+
+# Get the absolute path to the script directory
+cd `dirname $0`
+SCRIPTDIR="$PWD"
+
+# Find out whether the script directory contains spaces
+case "$SCRIPTDIR" in
+*" "*)
+       redmsg "The script directory \"$SCRIPTDIR\" contains spaces!"
+       redmsg "Therefore some build tools cannot be compiled properly."
+       echo
+       redmsg "Please move \"$SCRIPTDIR\" to a directory, which does not 
contain spaces."
+
+       exit 1;;
+esac
+
+# Check if all necessary tools exist
+boldmsg "Checking for the needed tools..."
+
+toolmissing=false
+for tool in $NEEDED_TOOLS; do
+       echo -n "Checking for $tool... "
+
+       if which "$tool" >& /dev/null; then
+               greenmsg "OK"
+       else
+               redmsg "MISSING"
+               toolmissing=true
+       fi
+done
+
+if $toolmissing; then
+       echo "At least one needed tool is missing, aborted!"
+       exit 1
+fi
+
+echo
+
+# Get the absolute path to the source directory
+cd "$1"
+source_path="$PWD"
+
+# What do we need to process?
+if [ "$2" == "0" ]; then
+       process_binutils=false
+else
+       process_binutils=true
+fi
+
+if [ "$3" == "0" ]; then
+       process_gcc=false
+else
+       process_gcc=true
+fi
+
+# Create all necessary directories
+if ! [ -d "$INSTALLDIR/$TARGET" ]; then
+       mkdir -p "$INSTALLDIR/$TARGET"
+fi
+
+if [ -d "$MINGWDIR" ]; then
+       rm -rf "$MINGWDIR"
+fi
+
+mkdir -p "$MINGWDIR"
+
+if ! [ -d "$TEMPDIR" ]; then
+       mkdir -p "$TEMPDIR"
+fi
+
+cd "$MINGWDIR"
+
+boldmsg "Building..."
+
+# mingw-runtime
+echo -n "Extracting mingw-runtime... "
+tar -xjf "$source_path/mingw-runtime.tar.bz2" >& "$TEMPDIR/build.log"
+check_run
+
+# w32api
+echo -n "Extracting w32api... "
+tar -xjf "$source_path/w32api.tar.bz2" >& "$TEMPDIR/build.log"
+check_run
+
+# Copy the same stuff to the target directory (needed for building gcc and 
later getting the files located properly)
+echo "Copying files... "
+cp -R $MINGWDIR/* "$INSTALLDIR/$TARGET"
+
+cd "$TEMPDIR"
+
+# binutils
+if $process_binutils; then
+       rm -rf "binutils"
+       rm -rf "binutils-build"
+
+       echo -n "Extracting binutils... "
+       tar -xjf "$source_path/binutils.tar.bz2" >& build.log
+       check_run
+
+       echo -n "Configuring binutils... "
+       mkdir "binutils-build"
+       cd "binutils-build"
+       ../binutils/configure --prefix="$INSTALLDIR" --disable-nls 
--disable-shared >& "$TEMPDIR/build.log"
+       check_run
+
+       echo -n "Building binutils... "
+       make CFLAGS="-O2 -fno-exceptions" LDFLAGS="-s" >& "$TEMPDIR/build.log"
+       check_run
+
+       echo -n "Installing binutils... "
+       make install >& "$TEMPDIR/build.log"
+       check_run
+
+       echo "Cleaning up binutils..."
+       cd "$TEMPDIR"
+       rm -rf "binutils-build"
+       rm -rf "binutils"
+fi
+
+# gcc
+if $process_gcc; then
+       rm -rf "gcc"
+       rm -rf "gcc-build"
+
+       echo -n "Extracting gcc... "
+       tar -xjf "$source_path/gcc.tar.bz2" >& build.log
+       check_run
+
+       echo -n "Configuring gcc... "
+       mkdir "gcc-build"
+       cd "gcc-build"
+       
+       ../gcc/configure --prefix="$WIN32_INSTALLDIR" --with-ld=/bin/ld \
+                       --enable-languages=c,c++ --enable-checking=release \
+                       --enable-threads=win32 --disable-win32-registry 
--disable-nls  \
+                       --disable-shared >& "$TEMPDIR/build.log"
+       check_run
+       
+       echo -n "Building gcc... "
+       make CFLAGS="-O2" CXXFLAGS="-O2" LDFLAGS="-s" >& "$TEMPDIR/build.log"
+       check_run
+
+       echo -n "Installing gcc... "
+       make install >& "$TEMPDIR/build.log"
+       check_run
+
+       echo "Cleaning up gcc..."
+       cd "$TEMPDIR"
+       rm -rf "gcc-build"
+       rm -rf "gcc"
+fi
+
+# Final actions
+echo
+boldmsg "Final actions"
+cd "$INSTALLDIR"
+
+echo "Removing unneeded files..."
+mv $TARGET/bin/* bin
+mv $TARGET/include/* include
+mv $TARGET/lib/* lib
+rm -rf $TARGET info man share
+rm -f bin/c++.exe bin/gccbug bin/$TARGET-*
+
+echo "Removing debugging symbols..."
+find -name "*.exe" -type f -exec strip -s {} ";"
+
+echo "Finished!"

Propchange: trunk/tools/RosBE/RosBE-Windows/buildtoolchain.sh
------------------------------------------------------------------------------
    svn:eol-style = native

Reply via email to