[ros-diffs] [cfinck] 40697: 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

cfinck at svn.reactos.org cfinck at svn.reactos.org
Sat Apr 25 16:12:33 CEST 2009


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 <colin at reactos.org>
+#
+# 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 <colin at reactos.org>"
+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



More information about the Ros-diffs mailing list