Cross compile build problems
Yew-Koon Tan
ytan@broadcom.com
Thu Sep 30 22:08:00 GMT 2004
I noticed that you didn't specify --enable-languages=c etc flags in
your cross-compilation, the configure script is going to try to build
c++, java, etc. compilers. This would fail because building these
"higher" level language need the headers/libs from newlib which you
haven't build yet (chicken and egg problem). Therefore, you can only
build a C-only compiler at the beginning, build the newlib, and then
if you need other languages, you can use the C-only gcc with the
newlib to compile c++, java, etc.
I recently got a C-only cross-compiler built and tested using
binutils-2.14, gcc-3.3.3 and newlib-1.12.0 for MIPS32 in Cygwin
on Window XP. I attach the sh script below. You can edit it
to whatever directory structure and target you need. I also
use a similar version of the script to cross-compile in Sun
for MIPS32.
If this build successfully, you would still need to supply the proper
initialization file for your embedded development hardware/simulator,
this is typically called crt0.S (otherwise, you would get a error
when you link your Coldfile program). If you cannot get crt0.S
from your supplier, you can start from newlib-1.12.0/libgloss/m68k/crt0.S
and hack this file to properly init your CPU. You can go to newlib
website http://sources.redhat.com/newlib for more details.
Hope this helps.
PS: There used to be a discussion group called cross-gcc, anybody
know what happen to it?
YK.
=============================================================
Here is the cross-compile shell script:
#!/bin/sh
PF="/cygdrive/d/tools/test"
TG="mipsisa32-mips-elf"
SD="--enable-multilib=no --program-prefix=bcmx --with-gnu-as --with-gnu-ld
-v"
BD="$PF/$TG/bin"
BM="build"
PATH="$PF/bin:$PATH"
if test "$1" != special
then
echo "cross-build: configure binutils"
BDIR=$BM-binutils
rm -rf $BDIR
mkdir $BDIR
cd $BDIR
../binutils-2.14/configure --prefix=$PF --target=$TG $SD
echo "cross-build: compile binutils"
make all
echo "cross-build: install binutils"
make install
cd ..
fi
if test "$1" != special
then
echo "cross-build: configure gcc"
BDIR=$BM-gcc
rm -rf $BDIR
mkdir $BDIR
cd $BDIR
../gcc-3.3.3/configure --enable-languages=c --with-newlib --prefix=$PF
--target=$TG $SD
echo "cross-build: compile gcc"
make all
echo "cross-build: install gcc"
make install
cd ..
fi
if test "$1" != special
then
echo "cross-build: configure newlib"
BDIR=$BM-newlib
rm -rf $BDIR
mkdir $BDIR
cd $BDIR
../newlib-1.12.0/configure --with-newlib --host=$TG --prefix=$PF $SD
echo "cross-build: compile newlib"
make all CC_FOR_TARGET=$BD/gcc \
AS_FOR_TARGET=$BD/as \
LD_FOR_TARGET=$BD/ld \
AR_FOR_TARGET=$BD/ar \
RANLIB_FOR_TARGET=$BD/ranlib
echo "cross-build: install newlib"
make install
cd ..
fi
# Bug in gcc-3.3.3? doesn't link/copy automatically.
if test "$1" != special
then
cd $PF/bin
ln -s $TG-gcc bcmxgcc
fi
-----Original Message-----
From: gcc-help-owner@gcc.gnu.org [mailto:gcc-help-owner@gcc.gnu.org] On
Behalf Of Brian Rose
Sent: Saturday, September 25, 2004 6:26 PM
To: GCC
Subject: Cross compile build problems
I am trying to put together some GNU tools for embedded development. We are
working on a Motorola coldfire 5206e (among others) and I'd like to use
non-commercial tools for development. The target is a microcontroller
without an OS.
I am on a WindowsXP system with the Cygwin library installed. I am using the
following process to build the tools. All of this is done in my
/cygwin/home/brose directory
1) Download the source tarballs into coldfire/archive
2) Extract the sources into coldfire/src
3) Build and install binutils (works fine) like this
cd $HOME/coldfire
mkdir builds
mkdir builds/binutils
mkdir bins
mkdir bins/binutils
cd builds/binutils
../../src/binutils-2.15/configure --target=m68k-elf
--prefix=$HOME/coldfire/bins/binutils/ -v
make all install
4) Attempt to build and install gcc like this
cd $HOME/coldfire
mkdir builds/gcc
mkdir bins/gcc
cd builds/gcc
../../src/gcc-3.4.2/configure --target=m68k-elf
--prefix=$HOME/coldfire/bins/gcc/ -v
make all install
And I get this...
--snip--
/home/brose/coldfire/tools/build/gcc/gcc/xgcc
-B/home/brose/coldfire/tools/build/gcc/gcc/
-B/home/brose/coldfire/tools/bins/gcc//m68k-elf/bin/
-B/home/brose/coldfire/tools/bins/gcc//m68k-elf/lib/ -isystem
/home/brose/coldfire/tools/bins/gcc//m68k-elf/include -isystem
/home/brose/coldfire/tools/bins/gcc//m68k-elf/sys-include -O2 -DIN_GCC
-DCROSS_COMPILE -W -Wall -Wwrite-strings -Wstrict-prototypes
-Wmissing-prototypes -Wold-style-definition -isystem ./include -I. -I.
-I../../../src/gcc-3.4.2/gcc -I../../../src/gcc-3.4.2/gcc/.
-I../../../src/gcc-3.4.2/gcc/../include -g0 -finhibit-size-directive
-fno-inline-functions -fno-exceptions -fno-zero-initialized-in-bss
-fno-unit-at-a-time \
-Dinhibit_libc -c ../../../src/gcc-3.4.2/gcc/crtstuff.c -DCRT_BEGIN \
-o crtbegin.o
as: unrecognized option `-mc68020'
make[1]: *** [crtbegin.o] Error 1
make[1]: Leaving directory `/home/brose/coldfire/tools/build/gcc/gcc'
make: *** [all-gcc] Error 2
I've tried the --with-as=$HOME/coldfire/tools/bins/bintuils/bin/m68k-elf-as
with no luck.
Has anyone built the current compiler on/for Windows with a m68k target in
mind? Pray tell, what was the procedure?
Thanks in advance,
--
Brian Rose
More information about the Gcc-help
mailing list