Hi Vincent,

On Tue, 3 Feb 2009 00:26:55 +0100 (CET), Vincent Torri
<vto...@univ-evry.fr>
wrote:
> On Mon, 2 Feb 2009, Danny Backx wrote:
> 
>> I'm inclined to put this work (based on the current gcc from their svn)
>> in our repository.
>>
>> Upgrading to 4.4.0 once it's out shouldn't be hard.
>>
>> Does anyone have ideas (objections or hurrays) about that ?
> 
> going to 4.4.0 would be nice. Just some remarks:
> 
> 1) I've answered on the mailing list of mingw about the status of gcc 
> 4.3.0 but i've not received any answer from the dev. But a guy, who
wanted 
> also such information, mentioned a post where the mingw gcc maintainer 
> filed a bug in gcc bugzilla. Do you know if it would be the thing to do, 
> that is patching directly gcc instead of having your own tree ?
>
I have already generated a mingw from gcc trunk using mingw-w64 repository
and 
you could find attached the script I use.

> 2) I've also read on the gcc main site that there is (will be) a support 
> of plugins for gcc (finally, it stops being monolythic). Does it mean
that 
> the port of cegcc could use that plugin framework ?
> 
Don't know very well but plugin architecture seems a bit young for now and
I wouldn't go there until gcc4.5.





> Vincent Torri
> 
#! /usr/bin/env bash

# This script can be use to generate a mingw cross-compiler targeting x86
# It uses mingw-w64 repository because projects seems more active and people
# mainteners are more windows oriented and  nicer ;-)
# To use it :
# mkdir -p x86mingw/src; cd x86mingw/src
# Copy this script in it
# Downloads binutils  : wget 
ftp://sourceware.org/pub/binutils/snapshots/binutils-2.19.51.tar.bz2
# Decompress binutils : tar xvf binutils-2.19.51.tar.bz2
# if decompressed archive name != binutils create a symlink : ln -s 
binutils-2.19.51 binutils 
# svn co https://mingw-w64.svn.sourceforge.net/svnroot/mingw-w64 mingw-w64 
# svn checkout svn://gcc.gnu.org/svn/gcc/trunk gcc
# mkdir build-mingw32; cd build-mingw32
# ../build-mingw32-sysroot.sh -j2
# Take a coffee !
# you should have a mingw toolchain
# TODO : HANDLE x64 and ce


BASE_DIRECTORY=`dirname $0`
BASE_DIRECTORY=`(cd ${BASE_DIRECTORY}; pwd)`
ME=`basename $0`

# FIXME: some components need this (mingwdll), but they shouldn't.
export BASE_DIRECTORY

#
# Initializations.
#
export BUILD_DIR=`pwd`

ac_default_prefix="/opt/mingw32-4.4.0"

gcc_src=gcc

# The list of components, in build order.  There's a build_FOO
# function for each of these components
COMPONENTS=( binutils headers bootstrap_gcc mingw gcc )
COMPONENTS_NUM=${#COMPONENTS[*]}

# Build comma separated list of components, for user display.
for ((i=0;i<$COMPONENTS_NUM;i++)); do
    if [ $i = 0 ]; then
        COMPONENTS_COMMA_LIST=${COMPONENTS[${i}]}
    else
        COMPONENTS_COMMA_LIST="${COMPONENTS_COMMA_LIST}, ${COMPONENTS[${i}]}"
    fi
done

usage()
{
    cat << _ACEOF

$ME builds the mingw32ce toolchain.

Usage: $0 [OPTIONS] ...

  -h, --help              print this help, then exit
  --prefix=PREFIX         install toolchain in PREFIX
                          [$ac_default_prefix]
  -j, --parallelism PARALLELISM  Pass PARALLELISM as -jPARALLELISM
                          to make invocations.
  --components=LIST       specify which components to build
                          valid components are: ${COMPONENTS_COMMA_LIST}
                          [all]

Report bugs to <cegcc-devel@lists.sourceforge.net>.
_ACEOF

}

ac_prev=
for ac_option
do
  # If the previous option needs an argument, assign it.
  if test -n "$ac_prev"; then
    eval "$ac_prev=\$ac_option"
    ac_prev=
    continue
  fi

  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`

  case $ac_option in

  -help | --help | --hel | --he | -h)
    usage; exit 0 ;;

  -j | --parallelism | --parallelis | --paralleli | --parallel \
      | --paralle | --parall | --paral | --para | --par \
      | --pa)
    ac_prev=parallelism ;;
  -j=* | --parallelism=* | --parallelis=* | --paralleli=* | --parallel=* \
      | --paralle=* | --parall=* | --paral=* | --para=* | --par=* \
      | --pa=*)
    parallelism=$ac_optarg ;;
  -j*)
    parallelism=`echo $ac_option | sed 's/-j//'` ;;

  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
    ac_prev=prefix ;;
  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
    prefix=$ac_optarg ;;

  -components | --components | --component | --componen | \
      --compone | --compon | --compo | --comp | --com \
      | --co | --c)
    ac_prev=components ;;
  -components=* | --components=* | --component=* | --componen=* \
      | --compone=* | --compon=* | --compo=* | --comp=* | --com=* \
      | --co=* | --c=*)
    components=$ac_optarg ;;

  -*) { echo "$as_me: error: unrecognized option: $ac_option
Try \`$0 --help' for more information." >&2
   { (exit 1); exit 1; }; }
    ;;

  *=*)
    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
    # Reject names that are not valid shell variable names.
    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
   { (exit 1); exit 1; }; }
    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
    eval "$ac_envvar='$ac_optarg'"
    export $ac_envvar ;;

  *)
    ;;
  esac
done

# We don't want no errors from here on.
set -e

if test -n "$ac_prev"; then
  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
  { echo "$as_me: error: missing argument to $ac_option" >&2
   { (exit 1); exit 1; }; }
fi

# Be sure to have absolute paths.
for ac_var in prefix
do
  eval ac_val=$`echo $ac_var`
  case $ac_val in
    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
    *)  { echo "$as_me: error: expected an absolute directory name for 
--$ac_var: $ac_val" >&2
   { (exit 1); exit 1; }; };;
  esac
done

if [ "x${prefix}" != "x" ]; then
    export PREFIX="${prefix}"
else
    export PREFIX=${ac_default_prefix}
fi

# Figure out what components where requested to be built.
if test x"${components+set}" != xset; then
    components=all
else
    if test x"${components}" = x ||
        test x"${components}" = xyes;
        then
        echo --components needs at least one argument 1>&2
        exit 1
    fi
fi

if [ "x${parallelism}" != "x" ]; then
    PARALLELISM="-j${parallelism}"
else
    PARALLELISM=
fi

# embedded tabs in the sed below -- do not untabify
components=`echo "${components}" | sed -e 's/[  ,][     ,]*/,/g' -e 's/,$//'`

# Don't build in source directory, it will clobber things and cleanup is hard.
if [ -d ${BUILD_DIR}/.svn ]; then
        echo "Don't build in a source directory, please create an empty 
directory and build there."
        echo "Example :"
        echo "  mkdir build-mingw32ce"
        echo "  cd build-mingw32ce"
        echo "  sh ../build-mingw32ce.sh $@"
        exit 1
fi

build_binutils()
{
    echo ""
    echo "BUILDING BINUTILS --------------------------"
    echo ""
    echo ""
    mkdir -p binutils
    cd binutils
    ${BASE_DIRECTORY}/binutils/configure \
        --prefix=${PREFIX}               \
        --target=${TARGET}               \
        --with-sysroot=${PREFIX}         \
        --disable-nls

    make ${PARALLELISM}
    make install

    cd ${BUILD_DIR}
}    

build_headers()
{
  mkdir -p "$PREFIX/include"
  test -e "$PREFIX/usr" || (
        cd "$PREFIX" && ln -s . usr )
  test -e "$PREFIX/usr/local" || (
            cd "$PREFIX/usr" && ln -s . local )
  test -e "$PREFIX/mingw" || (
            cd "$PREFIX" && ln -s "${TARGET}" mingw )
           cp -r ${BASE_DIRECTORY}/mingw-w64/trunk/mingw-w64-headers/include 
"${PREFIX}/${TARGET}" || die $? \
           "$unrecoverable installing mingw-runtime headers"
  
  cd ${BUILD_DIR}
}



build_bootstrap_gcc()
{
    mkdir -p gcc-bootstrap
    cd gcc-bootstrap

    ${BASE_DIRECTORY}/${gcc_src}/configure             \
        --prefix=${PREFIX}               \
        --target=${TARGET}               \
        --with-sysroot=${PREFIX}         \
        --disable-shared                 \
        --with-gcc                       \
        --with-gnu-as                    \
        --with-gnu-ld                  
    
    make ${PARALLELISM} all-gcc
    make install-gcc

    cd ${BUILD_DIR}
}

build_w32api()
{
    mkdir -p w32api
    cd w32api

    ${BASE_DIRECTORY}/w32api/configure \
        --host=${TARGET}               \
        --prefix=${PREFIX}             \
        --with-sysroot=${PREFIX} 

    make ${PARALLELISM}
    make install

    cd ${BUILD_DIR}
}

build_mingw()
{
    mkdir -p mingw
    cd mingw
    ${BASE_DIRECTORY}/mingw-w64/trunk/mingw-w64-crt/configure \
        --host=${TARGET}              \
        --prefix=${PREFIX}            \
        --with-sysroot=${PREFIX}      \
        --enable-lib32                \
        --disable-lib64 
        

    #make ${PARALLELISM}
    #make install
   
    # because of a bug with Makefile
    # when cross-compiling mingw32 we need to copy from lib32 to lib
    mv ${PREFIX}/${TARGET}/lib32/* ${PREFIX}/${TARGET}/lib/
    cd ${BUILD_DIR}
}

build_gcc()
{
    cd ${BASE_DIRECTORY}/${gcc_src}

if [ -e ${BASE_DIRECTORY}/${gcc_src}/winsup ]; then
   echo "winsup symbolic link already exists"           
else
   echo "Creating winsup symbolic link"
   ln -s ${PREFIX} winsup
fi

# Actually we start from boostrap-gcc to build full compiler - no need to 
reconfigure
    cd ${BUILD_DIR}
    ln -s gcc-bootstrap gcc
    cd gcc

    make ${PARALLELISM}
    make install

    cd ${BUILD_DIR}
}

build_gdb()
{
    echo ""
    echo "BUILDING GDB --------------------------"
    echo ""
    echo ""

    mkdir -p gdb
    cd gdb

    ${BASE_DIRECTORY}/gdb/configure  \
        --with-gcc                     \
        --with-gnu-ld                  \
        --with-gnu-as                  \
        --target=${TARGET}             \
        --prefix=${PREFIX}             \
        --disable-nls                  \
        --disable-win32-registry       \
        --disable-multilib             \
        --disable-interwork            \
        --enable-checking

    export CFLAGS=${PREV_CFLAGS}

    make ${PARALLELISM}
    make install

    cd ${BUILD_DIR}
}

build_gdbserver()
{
    echo ""
    echo "BUILDING gdbserver --------------------------"
    echo ""
    echo ""

    mkdir -p gdbserver
    cd gdbserver

    ${BASE_DIRECTORY}/gdb/gdbserver/configure  \
        --target=${TARGET}             \
        --host=${TARGET}               \
        --prefix=${PREFIX}             \

    make ${PARALLELISM}
    make install

    cd ${BUILD_DIR}
}

build_docs()
{
    echo ""
    echo "INSTALLING documentation --------------------------"
    echo ""
    echo ""

    mkdir -p ${PREFIX}/share/docs
    mkdir -p ${PREFIX}/share/images

    cd ${BASE_DIRECTORY}/../docs
    tar cf - . | (cd ${PREFIX}/share/docs; tar xf -)
    cd ${BASE_DIRECTORY}/../website
    tar cf - images | (cd ${PREFIX}/share; tar xf -)

    cd ${BASE_DIRECTORY}/..
    cp NEWS README ${PREFIX}
    cp src/binutils/COPYING ${PREFIX}
    cp src/binutils/COPYING.LIB ${PREFIX}
    cp src/newlib/COPYING.NEWLIB ${PREFIX}

    cd ${BUILD_DIR}
}

build_profile()
{
    echo ""
    echo "BUILDING profiling libraries --------------------------"
    echo ""
    echo ""

    mkdir -p profile
    cd profile

    ${BASE_DIRECTORY}/profile/configure  \
        --build=${BUILD}              \
        --host=${TARGET}              \
        --target=${TARGET}            \
        --prefix=${PREFIX}            \
        || exit

    make ${PARALLELISM}
    make install

    cd ${BUILD_DIR}
}

obuild_dlls()
{
    echo ""
    echo "BUILDING DLL libraries --------------------------"
    echo ""
    echo ""

    cd ${BUILD_DIR}

    mkdir -p dll
    cd dll

    cd ${BASE_DIRECTORY}
    ${BASE_DIRECTORY}/build-mingw32ce-dlls.sh

    cd ${BUILD_DIR}
}

build_dlls()
{
    echo ""
    echo "BUILDING DLL libraries --------------------------"
    echo ""
    echo ""

    cd ${BUILD_DIR}

    cd ${BASE_DIRECTORY}/mingwdll
    make
    make install

    cd ${BUILD_DIR}
}

build_all()
{
    for ((i=0;i<$COMPONENTS_NUM;i++)); do
        comp=${COMPONENTS[${i}]}
        build_$comp
    done
}

split_components=`echo "${components}" | sed -e 's/,/ /g'`

# check for valid options before trying to build them all.
eval "set -- $split_components"
while [ -n "$1" ]; do
    if [ "$1" != "all" ]; then
        found=false
        for ((i=0;i<$COMPONENTS_NUM;i++)); do
            if [ "${COMPONENTS[${i}]}" = "$1" ]; then
                found=true
            fi
        done
        if [ $found = false ] ; then
            echo "Please enter a valid build option."
            exit 1
        fi
    fi

    shift
done

export TARGET="i686-pc-mingw32"
export BUILD=`sh ${BASE_DIRECTORY}/gcc/config.guess`
export PATH=${PREFIX}/bin:${PATH}

echo "Building ${TARGET}:"
echo "source: ${BASE_DIRECTORY}"
echo "building in: ${BUILD_DIR}"
echo "prefix: ${PREFIX}"
echo "components: ${components}"

mkdir -p ${BUILD_DIR}
mkdir -p ${PREFIX}

# Now actually build them.
eval "set -- $split_components"
while [ -n "$1" ]; do
    build_${1}
    shift
done

echo ""
echo "DONE --------------------------"
echo ""
echo ""
------------------------------------------------------------------------------
Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM)
software. With Adobe AIR, Ajax developers can use existing skills and code to
build responsive, highly engaging applications that combine the power of local
resources and data with the reach of the web. Download the Adobe AIR SDK and
Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com
_______________________________________________
Cegcc-devel mailing list
Cegcc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cegcc-devel

Reply via email to