mirror of
https://github.com/reactos/RosBE.git
synced 2024-11-27 05:10:27 +00:00
- Rename the toolchain packages for RosBE-Windows to the more appropriate names "rosbe_1.4" and "rosbe_1.5".
Packages for them can be downloaded from http://svn.reactos.org/RosBE-Sources. - Use "setuplibrary.sh" for the current "buildtoolchain.sh" script and share as much code as possible between this file and RosBE-Unix' "RosBE-Builder.sh". - Add a new parameter to this script for specifying the work/output directory. - Add the cpucount tool to speed up the build process. svn path=/trunk/tools/RosBE/; revision=1131
This commit is contained in:
parent
48b49abb63
commit
9dec6d0dc7
@ -1,316 +0,0 @@
|
||||
#!/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@reactos.org>
|
||||
#
|
||||
# Released under GNU GPL v2 or any later version.
|
||||
|
||||
########################################################################################################################
|
||||
# This script was built for the following toolchain versions:
|
||||
# - binutils 2.20.51-20091017 (snapshot)
|
||||
# - gcc 4.4.2
|
||||
# patched with:
|
||||
# * http://gcc.gnu.org/bugzilla/attachment.cgi?id=18882&action=view (committed in GCC r153606)
|
||||
# - gmp 4.3.1
|
||||
# - mingw-runtime 3.16
|
||||
# - mpfr 2.4.2-rc1
|
||||
# - w32api 3.13
|
||||
#
|
||||
# These tools were compiled under MSYS with "gcc version 3.4.5 (mingw-vista special r3)"
|
||||
#
|
||||
# These versions are used in RosBE-Windows 1.5 and RosBE-Unix 1.5.
|
||||
# Get the toolchain packages from this RosBE-Unix version.
|
||||
########################################################################################################################
|
||||
|
||||
|
||||
#
|
||||
# Constants
|
||||
#
|
||||
WORKDIR="/c/buildtoolchain"
|
||||
|
||||
HOST_CFLAGS="-pipe -fno-common -O3 -march=pentium3 -mfpmath=sse"
|
||||
HOST_GCC_VERSION="gcc version 3.4.5 (mingw-vista special r3)"
|
||||
INSTALLDIR="$WORKDIR/mingw"
|
||||
NEEDED_TOOLS="bison flex gcc g++ grep make makeinfo"
|
||||
SUPPORTDIR="$WORKDIR/support"
|
||||
SYSHEADERDIR="/mingw/include"
|
||||
TARGET="mingw32"
|
||||
TARGET_CFLAGS="-pipe -gstabs+ -O3 -march=pentium -mtune=i686"
|
||||
|
||||
|
||||
#
|
||||
# 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 \"$WORKDIR/build.log\""
|
||||
echo "Aborted!"
|
||||
exit 1
|
||||
else
|
||||
greenmsg "OK"
|
||||
rm "$WORKDIR/build.log"
|
||||
fi
|
||||
}
|
||||
|
||||
mkdir_if_not_exists()
|
||||
{
|
||||
if ! [ -d "$1" ]; then
|
||||
mkdir -p "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
mkdir_empty()
|
||||
{
|
||||
if [ -d "$1" ]; then
|
||||
rm -rf "$1"
|
||||
fi
|
||||
|
||||
mkdir -p "$1"
|
||||
}
|
||||
|
||||
prepare_module()
|
||||
{
|
||||
# Check if the module shall be built and extract it then
|
||||
process_it=$1
|
||||
module=$2
|
||||
|
||||
if [ "$process_it" = "0" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
cd "$WORKDIR"
|
||||
rm -rf "$module"
|
||||
rm -rf "$module-build"
|
||||
|
||||
echo -n "Extracting $module... "
|
||||
tar -xjf "$source_path/$module.tar.bz2" >& build.log
|
||||
check_run
|
||||
|
||||
mkdir "$module-build"
|
||||
cd "$module-build"
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
do_command()
|
||||
{
|
||||
echo -n "Running \"$*\"... "
|
||||
$* >& "$WORKDIR/build.log"
|
||||
check_run
|
||||
}
|
||||
|
||||
clean_module()
|
||||
{
|
||||
echo "Cleaning up $1..."
|
||||
cd "$WORKDIR"
|
||||
rm -rf "$1-build"
|
||||
rm -rf "$1"
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# Entry point
|
||||
#
|
||||
echo "buildtoolchain - Build a binutils/GCC/mingw-runtime/w32api toolchain for Windows"
|
||||
echo "Script for gcc_4.4.2 (see script header for details)"
|
||||
echo "by Colin Finck <colin@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 parameters
|
||||
if [ "$1" == "" ]; then
|
||||
echo "Syntax: ./buildtoolchain.sh <sources> [w32api] [mingw-runtime] [gmp] [mpfr] [binutils] [gcc]"
|
||||
echo
|
||||
echo " sources - Path to the directory containing RosBE-Unix toolchain packages (.tar.bz2 files)"
|
||||
echo
|
||||
echo "The rest of the arguments are optional. You specify them if you want to prevent a component"
|
||||
echo "from being (re)built. Do this by passing 0 as the argument of the appropriate component."
|
||||
echo "Pass 1 if you want them to be built."
|
||||
echo "By default, all of these components are built, so you don't need to pass any of these parameters."
|
||||
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
|
||||
|
||||
# Check for the correct GCC version
|
||||
echo -n "Checking for the correct GCC version... "
|
||||
|
||||
if gcc -v 2>&1 | grep "$HOST_GCC_VERSION" >& /dev/null; then
|
||||
greenmsg "OK"
|
||||
else
|
||||
redmsg "MISSING"
|
||||
toolmissing=true
|
||||
fi
|
||||
|
||||
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"
|
||||
|
||||
# Create all necessary directories
|
||||
mkdir_if_not_exists "$INSTALLDIR/$TARGET"
|
||||
mkdir_empty "$SYSHEADERDIR"
|
||||
mkdir_if_not_exists "$SUPPORTDIR"
|
||||
|
||||
# Process each module
|
||||
boldmsg "Building..."
|
||||
|
||||
|
||||
if [ "$2" != "0" ]; then
|
||||
echo -n "Extracting w32api... "
|
||||
|
||||
cd "$INSTALLDIR/$TARGET"
|
||||
tar -xjf "$source_path/w32api.tar.bz2" >& "$WORKDIR/build.log"
|
||||
check_run
|
||||
fi
|
||||
|
||||
if prepare_module "$3" "mingw-runtime"; then
|
||||
export CFLAGS="$TARGET_CFLAGS"
|
||||
export C_INCLUDE_PATH="$INSTALLDIR/$TARGET/include"
|
||||
|
||||
do_command ../mingw-runtime/configure --prefix="$INSTALLDIR/$TARGET" --host="$TARGET" --build="$TARGET"
|
||||
do_command make
|
||||
do_command make install
|
||||
|
||||
# libmingwex.a of the MinGW Runtime 3.15 and later references to _get_output_format, which is exported by msvcr80.dll and later.
|
||||
# For older Runtime DLLs (such as the msvcrt.dll we primarily use for ReactOS), MinGW adds a _get_output_format function returning 0 to libmsvcrt.a.
|
||||
# As we use MinGW's libmingwex.a, but our own libmsvcrt.a, linking to MinGW's libmingwex.a will fail by default. Therefore we have to create an archive for the compiled
|
||||
# _get_output_format stub, copy it to our "lib" directory and include it when linking to libmingwex.a.
|
||||
ar r ofmt_stub.a ofmt_stub.o >& /dev/null
|
||||
cp ofmt_stub.a "$INSTALLDIR/$TARGET/lib"
|
||||
|
||||
clean_module mingw-runtime
|
||||
|
||||
export CFLAGS=""
|
||||
export C_INCLUDE_PATH=""
|
||||
fi
|
||||
|
||||
if prepare_module "$4" "gmp"; then
|
||||
export CFLAGS="$HOST_CFLAGS"
|
||||
|
||||
do_command ../gmp/configure ABI=32 --prefix="$SUPPORTDIR" --host="$TARGET" --build="$TARGET" --disable-shared
|
||||
do_command make
|
||||
do_command make check
|
||||
do_command make install
|
||||
clean_module gmp
|
||||
|
||||
export CFLAGS=""
|
||||
fi
|
||||
|
||||
if prepare_module "$5" "mpfr"; then
|
||||
export CFLAGS="$HOST_CFLAGS"
|
||||
|
||||
do_command ../mpfr/configure --prefix="$SUPPORTDIR" --host="$TARGET" --build="$TARGET" --with-gmp="$SUPPORTDIR" --disable-shared
|
||||
do_command make
|
||||
do_command make check
|
||||
do_command make install
|
||||
clean_module mpfr
|
||||
|
||||
export CFLAGS=""
|
||||
fi
|
||||
|
||||
if prepare_module "$6" "binutils"; then
|
||||
export CFLAGS="$HOST_CFLAGS"
|
||||
|
||||
do_command ../binutils/configure --prefix="$INSTALLDIR" --host="$TARGET" --build="$TARGET" --target="$TARGET" --disable-nls
|
||||
do_command make
|
||||
do_command make install
|
||||
clean_module binutils
|
||||
|
||||
export CFLAGS=""
|
||||
fi
|
||||
|
||||
if prepare_module "$7" "gcc"; then
|
||||
export STAGE1_CFLAGS="$HOST_CFLAGS"
|
||||
export BOOT_CFLAGS="$HOST_CFLAGS"
|
||||
export CFLAGS_FOR_TARGET="$TARGET_CFLAGS"
|
||||
export CXXFLAGS_FOR_TARGET="$TARGET_CFLAGS"
|
||||
export C_INCLUDE_PATH="$INSTALLDIR/$TARGET/include"
|
||||
export LIBRARY_PATH="$INSTALLDIR/$TARGET/lib"
|
||||
|
||||
do_command ../gcc/configure --prefix="$INSTALLDIR" --host="$TARGET" --build="$TARGET" --target="$TARGET" --with-gmp="$SUPPORTDIR" --with-mpfr="$SUPPORTDIR" --enable-languages=c,c++ --enable-checking=release --enable-version-specific-runtime-libs --enable-threads=win32 --disable-win32-registry --disable-shared --disable-nls
|
||||
do_command make profiledbootstrap
|
||||
do_command make install
|
||||
clean_module gcc
|
||||
|
||||
export STAGE1_CFLAGS=""
|
||||
export BOOT_CFLAGS=""
|
||||
export CFLAGS_FOR_TARGET=""
|
||||
export CXXFLAGS_FOR_TARGET=""
|
||||
export C_INCLUDE_PATH=""
|
||||
export LIBRARY_PATH=""
|
||||
fi
|
||||
|
||||
|
||||
# Final actions
|
||||
echo
|
||||
boldmsg "Final actions"
|
||||
cd "$INSTALLDIR"
|
||||
|
||||
echo "Removing unneeded files..."
|
||||
rm -rf $TARGET/bin $TARGET/doc $TARGET/share include info man share
|
||||
rm -f lib/* >& /dev/null
|
||||
rm -f bin/c++.exe bin/gccbug bin/$TARGET-*
|
||||
|
||||
echo "Removing debugging symbols..."
|
||||
find -name "*.exe" -type f -exec strip -s {} ";"
|
||||
find -name "*.a" -type f -exec strip -d {} ";"
|
||||
find -name "*.o" -type f -exec strip -d {} ";"
|
||||
|
||||
echo "Finished!"
|
@ -7,6 +7,8 @@
|
||||
# Released under GNU GPL v2 or any later version.
|
||||
|
||||
##################################################################################
|
||||
# Package "rosbe_1.4"
|
||||
#
|
||||
# This script was built for the following toolchain versions:
|
||||
# - binutils v2.19.51-20090127 (snapshot)
|
||||
# patched with:
|
||||
@ -20,7 +22,7 @@
|
||||
# - w32api 3.10
|
||||
#
|
||||
# These versions are used in RosBE-Windows 1.4.2-1.4.5 and RosBE-Unix 1.4-1.4.2.
|
||||
# Get the toolchain packages from one of these RosBE-Unix versions.
|
||||
# Get the toolchain packages from http://svn.reactos.org/RosBE-Sources/rosbe_1.4
|
||||
##################################################################################
|
||||
|
||||
#
|
||||
@ -80,7 +82,7 @@ check_run()
|
||||
# Entry point
|
||||
#
|
||||
echo "buildtoolchain - Build a binutils/GCC/mingw-runtime/w32api toolchain for Windows"
|
||||
echo "Script for gcc_4.1.3 (see script header for details)"
|
||||
echo "Script for rosbe_1.4 (see script header for details)"
|
||||
echo "by Colin Finck <colin@reactos.org>"
|
||||
echo
|
||||
|
231
RosBE-Windows/Buildtoolchain/rosbe_1.5/buildtoolchain.sh
Normal file
231
RosBE-Windows/Buildtoolchain/rosbe_1.5/buildtoolchain.sh
Normal file
@ -0,0 +1,231 @@
|
||||
#!/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@reactos.org>
|
||||
#
|
||||
# Released under GNU GPL v2 or any later version.
|
||||
|
||||
########################################################################################################################
|
||||
# Package "rosbe_1.5"
|
||||
#
|
||||
# This script was built for the following toolchain versions:
|
||||
# - binutils 2.20.51-20091017 (snapshot)
|
||||
# - gcc 4.4.2
|
||||
# patched with:
|
||||
# * http://gcc.gnu.org/bugzilla/attachment.cgi?id=18882&action=view (committed in GCC r153606)
|
||||
# - gmp 4.3.1
|
||||
# - mingw-runtime 3.16
|
||||
# - mpfr 2.4.2-rc1
|
||||
# - w32api 3.13
|
||||
#
|
||||
# These tools have to be compiled under MSYS with "gcc version 3.4.5 (mingw-vista special r3)"
|
||||
#
|
||||
# These versions are used in RosBE-Windows 1.5 and RosBE-Unix 1.5.
|
||||
# Get the toolchain packages from http://svn.reactos.org/RosBE-Sources/rosbe_1.5
|
||||
########################################################################################################################
|
||||
|
||||
|
||||
# RosBE Setup Variables
|
||||
rs_host_cflags="-pipe -fno-common -O3 -march=pentium3 -mfpmath=sse"
|
||||
rs_needed_tools="bison flex gcc g++ grep makeinfo" # GNU Make has a special check
|
||||
rs_target="mingw32"
|
||||
rs_target_cflags="-pipe -gstabs+ -O3 -march=pentium -mtune=i686"
|
||||
|
||||
# Get the absolute path to the script directory
|
||||
cd `dirname $0`
|
||||
rs_scriptdir="$PWD"
|
||||
|
||||
# buildtoolchain Constants
|
||||
HOST_GCC_VERSION="gcc version 3.4.5 (mingw-vista special r3)"
|
||||
MODULES="w32api mingw_runtime gmp mpfr binutils gcc"
|
||||
SYSHEADERDIR="/mingw/include"
|
||||
|
||||
source "$rs_scriptdir/scripts/setuplibrary.sh"
|
||||
|
||||
|
||||
echo "*******************************************************************************"
|
||||
echo "* Buildtoolchain script for the ReactOS Build Environment for Windows *"
|
||||
echo "* Package \"rosbe_1.5\" *"
|
||||
echo "* by Colin Finck <colin@reactos.org> *"
|
||||
echo "*******************************************************************************"
|
||||
|
||||
echo
|
||||
echo "This script builds a binutils/GCC/mingw-runtime/w32api toolchain for Windows."
|
||||
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 parameters
|
||||
if [ "$2" == "" ]; then
|
||||
echo -n "Syntax: ./buildtoolchain.sh <sources> <workdir>"
|
||||
|
||||
for module in $MODULES; do
|
||||
echo -n " [$module]"
|
||||
done
|
||||
|
||||
echo
|
||||
echo
|
||||
echo " sources - Path to the directory containing RosBE-Unix toolchain packages (.tar.bz2 files)"
|
||||
echo " workdir - Path to the directory used for building. Will contain the final executables and"
|
||||
echo " temporary files."
|
||||
echo
|
||||
echo "The rest of the arguments are optional. You specify them if you want to prevent a component"
|
||||
echo "from being (re)built. Do this by passing 0 as the argument of the appropriate component."
|
||||
echo "Pass 1 if you want them to be built."
|
||||
echo "By default, all of these components are built, so you don't need to pass any of these parameters."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rs_check_requirements
|
||||
|
||||
# Check for the correct GCC version
|
||||
echo -n "Checking for the correct GCC version... "
|
||||
|
||||
if gcc -v 2>&1 | grep "$HOST_GCC_VERSION" >& /dev/null; then
|
||||
rs_greenmsg "OK"
|
||||
else
|
||||
rs_redmsg "MISSING"
|
||||
echo "Correct GCC version is missing, aborted!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo
|
||||
|
||||
# Get the absolute path to the source directory
|
||||
cd "$1"
|
||||
rs_sourcedir="$PWD"
|
||||
shift
|
||||
|
||||
# As the work directory might not yet exist, we cannot "cd" here
|
||||
rs_workdir="$1"
|
||||
shift
|
||||
|
||||
rs_prefixdir="$rs_workdir/mingw"
|
||||
rs_supportprefixdir="$rs_workdir/support"
|
||||
|
||||
# Set the rs_process_* variables based on the parameters
|
||||
for module in $MODULES; do
|
||||
if [ "$1" = "0" ]; then
|
||||
eval "rs_process_$module=false"
|
||||
else
|
||||
eval "rs_process_$module=true"
|
||||
fi
|
||||
|
||||
shift
|
||||
done
|
||||
|
||||
rs_mkdir_empty "$SYSHEADERDIR"
|
||||
|
||||
|
||||
##### BEGIN almost shared buildtoolchain/RosBE-Unix building part #############
|
||||
rs_boldmsg "Building..."
|
||||
|
||||
rs_mkdir_if_not_exists "$rs_prefixdir/$rs_target"
|
||||
rs_mkdir_if_not_exists "$rs_supportprefixdir"
|
||||
|
||||
rs_extract_module "w32api" "$rs_prefixdir/$rs_target"
|
||||
|
||||
rs_do_command gcc -s -o "$rs_supportprefixdir/cpucount.exe" "$rs_scriptdir/tools/cpucount.c"
|
||||
rs_cpucount=`$rs_supportprefixdir/cpucount.exe -x1`
|
||||
|
||||
if rs_prepare_module "mingw_runtime"; then
|
||||
export CFLAGS="$rs_target_cflags"
|
||||
export C_INCLUDE_PATH="$rs_prefixdir/$rs_target/include"
|
||||
|
||||
rs_do_command ../mingw_runtime/configure --prefix="$rs_prefixdir/$rs_target" --host="$rs_target" --build="$rs_target"
|
||||
rs_do_command $rs_makecmd -j $rs_cpucount
|
||||
rs_do_command $rs_makecmd install
|
||||
|
||||
# libmingwex.a of the MinGW Runtime 3.15 and later references to _get_output_format, which is exported by msvcr80.dll and later.
|
||||
# For older Runtime DLLs (such as the msvcrt.dll we primarily use for ReactOS), MinGW adds a _get_output_format function returning 0 to libmsvcrt.a.
|
||||
# As we use MinGW's libmingwex.a, but our own libmsvcrt.a, linking to MinGW's libmingwex.a will fail by default. Therefore we have to create an archive for the compiled
|
||||
# _get_output_format stub, copy it to our "lib" directory and include it when linking to libmingwex.a.
|
||||
ar r ofmt_stub.a ofmt_stub.o >& /dev/null
|
||||
cp ofmt_stub.a "$rs_prefixdir/$rs_target/lib"
|
||||
|
||||
rs_clean_module "mingw_runtime"
|
||||
|
||||
# The "mingw_runtime_dev" package needed for RosBE-Unix is manually created from the result of this build.
|
||||
|
||||
export CFLAGS=""
|
||||
export C_INCLUDE_PATH=""
|
||||
fi
|
||||
|
||||
if rs_prepare_module "gmp"; then
|
||||
export CFLAGS="$rs_host_cflags"
|
||||
|
||||
rs_do_command ../gmp/configure ABI=32 --prefix="$rs_supportprefixdir" --host="$rs_target" --build="$rs_target" --disable-shared
|
||||
rs_do_command $rs_makecmd -j $rs_cpucount
|
||||
rs_do_command $rs_makecmd check
|
||||
rs_do_command $rs_makecmd install
|
||||
rs_clean_module "gmp"
|
||||
|
||||
export CFLAGS=""
|
||||
fi
|
||||
|
||||
if rs_prepare_module "mpfr"; then
|
||||
export CFLAGS="$rs_host_cflags"
|
||||
|
||||
rs_do_command ../mpfr/configure --prefix="$rs_supportprefixdir" --host="$rs_target" --build="$rs_target" --with-gmp="$rs_supportprefixdir" --disable-shared
|
||||
rs_do_command $rs_makecmd -j $rs_cpucount
|
||||
rs_do_command $rs_makecmd check
|
||||
rs_do_command $rs_makecmd install
|
||||
rs_clean_module "mpfr"
|
||||
|
||||
export CFLAGS=""
|
||||
fi
|
||||
|
||||
if rs_prepare_module "binutils"; then
|
||||
export CFLAGS="$rs_host_cflags"
|
||||
|
||||
rs_do_command ../binutils/configure --prefix="$rs_prefixdir" --host="$rs_target" --build="$rs_target" --target="$rs_target" --disable-nls
|
||||
rs_do_command $rs_makecmd -j $rs_cpucount
|
||||
rs_do_command $rs_makecmd install
|
||||
rs_clean_module "binutils"
|
||||
|
||||
export CFLAGS=""
|
||||
fi
|
||||
|
||||
if rs_prepare_module "gcc"; then
|
||||
export STAGE1_CFLAGS="$rs_host_cflags"
|
||||
export BOOT_CFLAGS="$rs_host_cflags"
|
||||
export CFLAGS_FOR_TARGET="$rs_target_cflags"
|
||||
export CXXFLAGS_FOR_TARGET="$rs_target_cflags"
|
||||
export C_INCLUDE_PATH="$rs_prefixdir/$rs_target/include"
|
||||
export LIBRARY_PATH="$rs_prefixdir/$rs_target/lib"
|
||||
|
||||
rs_do_command ../gcc/configure --prefix="$rs_prefixdir" --host="$rs_target" --build="$rs_target" --target="$rs_target" --with-gmp="$rs_supportprefixdir" --with-mpfr="$rs_supportprefixdir" --enable-languages=c,c++ --enable-checking=release --enable-version-specific-runtime-libs --enable-threads=win32 --disable-win32-registry --disable-shared --disable-nls
|
||||
rs_do_command $rs_makecmd profiledbootstrap
|
||||
rs_do_command $rs_makecmd install
|
||||
rs_clean_module "gcc"
|
||||
|
||||
export STAGE1_CFLAGS=""
|
||||
export BOOT_CFLAGS=""
|
||||
export CFLAGS_FOR_TARGET=""
|
||||
export CXXFLAGS_FOR_TARGET=""
|
||||
export C_INCLUDE_PATH=""
|
||||
export LIBRARY_PATH=""
|
||||
fi
|
||||
|
||||
# Final actions
|
||||
echo
|
||||
rs_boldmsg "Final actions"
|
||||
cd "$rs_prefixdir"
|
||||
|
||||
echo "Removing unneeded files..."
|
||||
rm -rf $rs_target/bin $rs_target/doc $rs_target/share include info man share
|
||||
rm -f lib/* >& /dev/null
|
||||
rm -f bin/c++.exe bin/gccbug bin/$rs_target-*
|
||||
|
||||
echo "Removing debugging symbols..."
|
||||
find -executable -type f -exec strip -s {} ";" >& /dev/null
|
||||
find -name "*.a" -type f -exec strip -d {} ";"
|
||||
find -name "*.o" -type f -exec strip -d {} ";"
|
||||
##### END almost shared buildtoolchain/RosBE-Unix building part ###############
|
||||
|
||||
|
||||
echo "Finished!"
|
230
RosBE-Windows/Buildtoolchain/rosbe_1.5/scripts/setuplibrary.sh
Normal file
230
RosBE-Windows/Buildtoolchain/rosbe_1.5/scripts/setuplibrary.sh
Normal file
@ -0,0 +1,230 @@
|
||||
###############################################################################
|
||||
# Shared setup functions for RosBE-Windows' buildtoolchain and RosBE-Unix
|
||||
# Copyright 2009 Colin Finck <colin@reactos.org>
|
||||
#
|
||||
# Released under GNU GPL v2 or any later version.
|
||||
###############################################################################
|
||||
# Conventions:
|
||||
# - Prepend all functions of this library with "rs_" (RosBE Setup)
|
||||
# - Also prepend all variables used here and variables which are shared
|
||||
# between buildtoolchain and RosBE-Unix and are used in conjunction with
|
||||
# these functions in the calling script with "rs_"
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Print a message in a bold font
|
||||
# Parameter 1: The message
|
||||
# Parameter 2: Optional additional parameters for "echo"
|
||||
rs_boldmsg()
|
||||
{
|
||||
echo -e $2 "\e[1m$1\e[0m"
|
||||
}
|
||||
|
||||
# Check for several requirements, which need to be met in order to run the installation script properly
|
||||
rs_check_requirements()
|
||||
{
|
||||
# Test if the script directory is writable
|
||||
if [ ! -w "$rs_scriptdir" ]; then
|
||||
rs_redmsg "The script directory \"$rs_scriptdir\" is not writable, aborted!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Test if the script directory contains spaces
|
||||
case "$rs_scriptdir" in
|
||||
*" "*)
|
||||
rs_redmsg "The script directory \"$rs_scriptdir\" contains spaces!"
|
||||
rs_redmsg "Therefore some build tools cannot be compiled properly."
|
||||
echo
|
||||
rs_redmsg "Please move \"$rs_scriptdir\" to a directory, which does not contain spaces."
|
||||
|
||||
exit 1;;
|
||||
esac
|
||||
|
||||
# Check if all necessary tools exist
|
||||
rs_boldmsg "Checking for the needed tools..."
|
||||
|
||||
local toolmissing=false
|
||||
for tool in $rs_needed_tools; do
|
||||
echo -n "Checking for $tool... "
|
||||
|
||||
if which "$tool" >& /dev/null; then
|
||||
rs_greenmsg "OK"
|
||||
else
|
||||
rs_redmsg "MISSING"
|
||||
toolmissing=true
|
||||
fi
|
||||
done
|
||||
|
||||
# Special check for GNU Make
|
||||
# For example FreeBSD's "make" is not GNU Make, so we have to define a variable
|
||||
echo -n "Checking for GNU Make... "
|
||||
|
||||
local app
|
||||
local checkapps="make gmake"
|
||||
rs_makecmd=""
|
||||
|
||||
for app in $checkapps; do
|
||||
if $app -v 2>&1 | grep "GNU Make" >& /dev/null; then
|
||||
rs_makecmd="$app"
|
||||
rs_greenmsg "OK"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$rs_makecmd" = "" ]; then
|
||||
rs_redmsg "MISSING"
|
||||
toolmissing=true
|
||||
fi
|
||||
|
||||
|
||||
if $toolmissing; then
|
||||
echo "At least one needed tool is missing, aborted!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo
|
||||
}
|
||||
|
||||
# Check whether the previous command finished with errorlevel 0
|
||||
# If it did so, print a green "OK" and delete the debug logfile for the command.
|
||||
# If that wasn't the case, print a red "FAILED" and give information about the debug logfile.
|
||||
rs_check_run()
|
||||
{
|
||||
if [ $? -ne 0 ]; then
|
||||
rs_redmsg "FAILED"
|
||||
echo "Please take a look at the log file \"$rs_workdir/build.log\""
|
||||
echo "If you did not do something wrong, please save the log file and contact the ReactOS Team."
|
||||
|
||||
echo "Aborted!"
|
||||
exit 1
|
||||
else
|
||||
rs_greenmsg "OK"
|
||||
rm "$rs_workdir/build.log"
|
||||
fi
|
||||
}
|
||||
|
||||
# Cleans a module prepared with rs_prepare_module.
|
||||
# Parameter 1: The module name
|
||||
rs_clean_module()
|
||||
{
|
||||
echo "Cleaning up $1..."
|
||||
cd "$rs_workdir"
|
||||
rm -rf "$1-build"
|
||||
rm -rf "$1"
|
||||
}
|
||||
|
||||
# Executes a building command and checks whether it succeeded.
|
||||
# Terminates the building process in case of failure.
|
||||
# Parameters: The command to execute including parameters
|
||||
rs_do_command()
|
||||
{
|
||||
echo -n "Running \"$*\"... "
|
||||
$* >& "$rs_workdir/build.log"
|
||||
rs_check_run
|
||||
}
|
||||
|
||||
# Checks whether the given module needs to be processed and if so, extracts it.
|
||||
# Returns 0 if it needs to be processed, otherwise 1.
|
||||
# Parameter 1: The module name
|
||||
# Parameter 2: The directory to extract the module to
|
||||
rs_extract_module()
|
||||
{
|
||||
local module=$1
|
||||
local target_dir=$2
|
||||
|
||||
if ! `eval echo \\$rs_process_$module`; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
cd "$target_dir"
|
||||
|
||||
echo -n "Extracting $module... "
|
||||
tar -xjf "$rs_sourcedir/$module.tar.bz2" >& "$rs_workdir/build.log"
|
||||
rs_check_run
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Print a message in green color
|
||||
# Parameter 1: The message
|
||||
# Parameter 2: Optional additional parameters for "echo"
|
||||
rs_greenmsg()
|
||||
{
|
||||
echo -e $2 "\e[32m$1\e[0m"
|
||||
}
|
||||
|
||||
# Creates the given directory if it does not exist and cleans it if it does.
|
||||
# Parameter 1: The directory
|
||||
rs_mkdir_empty()
|
||||
{
|
||||
if [ -d "$1" ]; then
|
||||
rm -rf "$1"
|
||||
fi
|
||||
|
||||
mkdir -p "$1"
|
||||
}
|
||||
|
||||
# Creates a directory if it does not exist.
|
||||
# Parameter 1: The directory
|
||||
rs_mkdir_if_not_exists()
|
||||
{
|
||||
if ! [ -d "$1" ]; then
|
||||
mkdir -p "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
# Checks whether the given module needs to be processed and if so, extracts it into a dedicated build directory
|
||||
# Returns 0 if it needs to be built, otherwise 1.
|
||||
# Parameter 1: The module name
|
||||
rs_prepare_module()
|
||||
{
|
||||
local module=$1
|
||||
|
||||
rm -rf "$rs_workdir/$module"
|
||||
|
||||
if ! rs_extract_module "$module" "$rs_workdir"; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
rm -rf "$module-build"
|
||||
mkdir "$module-build"
|
||||
cd "$module-build"
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Print a message in red color
|
||||
# Parameter 1: The message
|
||||
# Parameter 2: Optional additional parameters for "echo"
|
||||
rs_redmsg()
|
||||
{
|
||||
echo -e $2 "\e[31m$1\e[0m"
|
||||
}
|
||||
|
||||
# Allow a choice between several options
|
||||
# If a valid choice was done, the result is stored in $choice
|
||||
# Parameter 1 - The default value
|
||||
# Parameter 2 - All possible values
|
||||
rs_showchoice()
|
||||
{
|
||||
local default_value="$1"
|
||||
local valid_choices="$2"
|
||||
|
||||
local breakloop=false
|
||||
choice=""
|
||||
|
||||
while ! $breakloop; do
|
||||
read -p "Your choice [$default_value]: " choice
|
||||
|
||||
if [ "$choice" = "" ]; then
|
||||
choice="$default_value"
|
||||
break
|
||||
fi
|
||||
|
||||
for valid_choice in $valid_choices; do
|
||||
if [ "$choice" = "$valid_choice" ]; then
|
||||
breakloop=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
100
RosBE-Windows/Buildtoolchain/rosbe_1.5/tools/cpucount.c
Normal file
100
RosBE-Windows/Buildtoolchain/rosbe_1.5/tools/cpucount.c
Normal file
@ -0,0 +1,100 @@
|
||||
/*
|
||||
* PROJECT: ReactOS Build Environment Tools
|
||||
* LICENSE: GNU General Public License v2. (see LICENSE.txt)
|
||||
* FILE: Tools/cpucount.c
|
||||
* PURPOSE: CPU Core Counter
|
||||
* COPYRIGHT: Copyright 2007 Christoph von Wittich <Christoph_vW@reactos.org>
|
||||
* Copyright 2007 Colin Finck <mail@colinfinck.de>
|
||||
* Copyright 2007 Peter Ward <dralnix@gmail.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#if defined(WIN32)
|
||||
# include <windows.h>
|
||||
#elif defined(__APPLE__)
|
||||
# include <sys/sysctl.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int cpuCount = 0;
|
||||
|
||||
#if defined(WIN32)
|
||||
if(argc > 3)
|
||||
#else
|
||||
if(argc > 2)
|
||||
#endif
|
||||
{
|
||||
fprintf(stderr, "%s: Error too many parameters specified.\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if defined(WIN32)
|
||||
if (argc != 1 && !strncmp(argv[argc - 1], "-a", 2))
|
||||
{
|
||||
DWORD_PTR ProcessAffinityMask, SystemAffinityMask;
|
||||
|
||||
if (GetProcessAffinityMask(GetCurrentProcess(), &ProcessAffinityMask, &SystemAffinityMask))
|
||||
{
|
||||
while (ProcessAffinityMask != 0)
|
||||
{
|
||||
if (ProcessAffinityMask & 0x1)
|
||||
cpuCount++;
|
||||
|
||||
ProcessAffinityMask >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
argc--; /* don't look at this argument again */
|
||||
}
|
||||
else
|
||||
{
|
||||
SYSTEM_INFO SystemInformation;
|
||||
|
||||
GetSystemInfo(&SystemInformation);
|
||||
cpuCount = SystemInformation.dwNumberOfProcessors;
|
||||
}
|
||||
#elif defined(__APPLE__)
|
||||
size_t countSize = sizeof(cpuCount);
|
||||
|
||||
sysctlbyname("hw.logicalcpu", &cpuCount, &countSize, NULL, 0);
|
||||
#else
|
||||
cpuCount = sysconf(_SC_NPROCESSORS_ONLN);
|
||||
#endif
|
||||
|
||||
if (argc != 1)
|
||||
{
|
||||
if(!strncmp(argv[1], "-x1", 3))
|
||||
{
|
||||
cpuCount++;
|
||||
}
|
||||
else if(!strncmp(argv[1], "-x2", 3))
|
||||
{
|
||||
cpuCount += cpuCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
#if defined(WIN32)
|
||||
printf("Usage: %s [-x1|-x2] [-a]\n", argv[0]);
|
||||
#else
|
||||
printf("Usage: %s [-x1|-x2]\n", argv[0]);
|
||||
#endif
|
||||
printf("Running cpucount without options returns the number of\n");
|
||||
printf("processors in the system.\n");
|
||||
printf("-x1 - Number of processors in the system, plus 1.\n");
|
||||
printf("-x2 - Number of processors in the system, doubled.\n");
|
||||
#if defined(WIN32)
|
||||
printf("-a - Use the affinity mask to determine number of processors\n");
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
printf("%u\n", cpuCount);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user