Author Topic: gcc 3.2  (Read 23132 times)

ced

  • Full Member
  • ***
  • Posts: 225
    • View Profile
    • http://
gcc 3.2
« on: January 13, 2004, 04:05:02 am »
Hi,

Where can I find a FAQ/HOWTO to setup an ARM cross-compiler using gcc 3.2.x?

Ced.
SL-5600, kernel 2.6.16 + GPE from .dev
Ethernet Socket LP-E
Viking 256M SD

lardman

  • Hero Member
  • *****
  • Posts: 4512
    • View Profile
    • http://people.bath.ac.uk/enpsgp/Zaurus/
gcc 3.2
« Reply #1 on: January 13, 2004, 06:07:12 am »
I\'ve just set one up (partially at least, I didn\'t compile my own binutils but used the ones from an existing OZ GCC 3.x cross-toolchain to save me the effort, and my toolchain\'s working fine), what do you want to know?


Si
C750 OZ3.5.4 (GPE, 2.6.x kernel)
SL5500 OZ3.5.4 (Opie)
Nokia 770
Serial GPS, WCF-12, Socket Ethernet & BT, Ratoc USB
WinXP, Mandriva

ced

  • Full Member
  • ***
  • Posts: 225
    • View Profile
    • http://
gcc 3.2
« Reply #2 on: January 13, 2004, 06:24:38 am »
just installation instructions step by step... :-)
SL-5600, kernel 2.6.16 + GPE from .dev
Ethernet Socket LP-E
Viking 256M SD

Richjn

  • Full Member
  • ***
  • Posts: 121
    • View Profile
    • http://
gcc 3.2
« Reply #3 on: January 13, 2004, 07:40:54 am »
ced

I am in the process of setting up a gcc 3.3.2 cross compiler and am trying to follow the instructions here

http://paipai.org/~humorum/pukiwiki/pukiwi...php?ZaurusSelf2

Hope this proves of some help

Richard

lardman

  • Hero Member
  • *****
  • Posts: 4512
    • View Profile
    • http://people.bath.ac.uk/enpsgp/Zaurus/
gcc 3.2
« Reply #4 on: January 13, 2004, 07:50:51 am »
Right this is what I did for my toolchain:

Get the one on which I was going to base it (for the headers, various libs and binutils)

http://www.openzaurus.org/official/toolcha...s-3.3.2.tar.bz2

I extracted this toolchain so that it sits in /usr/local/arm/3.3.2 (note that it won\'t work from here, it should be placed in /opt/cross I think - there\'s a readme in the parent dir, but this is where I wanted mine to end up.

Copy /usr/local/arm/3.3.2/arm-linux/sys-include to /usr/local/arm/3.3.2/sys-include (this is what GCC expects I think, or perhaps I just did it for the hell of it, can\'t remember)

Extract gcc-3.3.2.tar.gz somewhere, make a build dir which is not in the source tree as it recommends then use the following configure (alter the languages to your particular liking - read the /INSTALL/ files, it tells you quite a bit, including working out which are available):

../gcc-3.3.2/configure --disable-shared --enable-languages=\'c,c++,f77\' --target=arm-linux --prefix=\'/usr/local/arm/3.3.2\' --with-headers=/usr/local/arm/3.3.2/arm-linux/sys-include --with-libs=\' \'/usr/local/arm/3.3.2/arm-linux/lib /usr/local/arm/3.3.2/lib\' \'

After that finishes, make, then make install and there you go.


Si

P.S. I\'m sure I didn\'t need to specify everything as I did but it worked for me. A couple of things to note, use a fresh extract of GCC if it all goes wrong and you have to ./configure again. I don\'t think make distclean actually does what it says on the tin, probably also worth using a fresh


BTW for my toolchain this is what I use in my dev-arm-OZ.sh script:

=======================================
#!/bin/bash

CC=arm-linux-gcc
CXX=arm-linux-g++
CCX=arm-linux-gcc
CXXX=arm-linux-g++
COMPILER=arm-linux-gcc
LINKER=arm-linux-g++
G77=arm-linux-g77
F77=arm-linux-g77

PATH=/usr/local/arm/3.3.2/bin:/usr/local/arm/3.3.2/arm-linux/bin:$PATH

PS1=\'!OZ-dev-armu@h:w$ \'

export PATH CC CXX CCX CXXX COMPILER LINKER G77 F77
echo \"Altered environment for OZ 3.3.2 Development\"
========================================
C750 OZ3.5.4 (GPE, 2.6.x kernel)
SL5500 OZ3.5.4 (Opie)
Nokia 770
Serial GPS, WCF-12, Socket Ethernet & BT, Ratoc USB
WinXP, Mandriva

ced

  • Full Member
  • ***
  • Posts: 225
    • View Profile
    • http://
gcc 3.2
« Reply #5 on: January 13, 2004, 08:37:51 am »
thx dude, I\'ll try that later... :-)
SL-5600, kernel 2.6.16 + GPE from .dev
Ethernet Socket LP-E
Viking 256M SD

ced

  • Full Member
  • ***
  • Posts: 225
    • View Profile
    • http://
gcc 3.2
« Reply #6 on: January 13, 2004, 10:36:16 am »
what I done so far:

- untar http://www.openzaurus.org/official/toolcha...s-3.3.2.tar.bz2 to / (unpack it in /op/cross)

- untar ftp://ftp.mirror.ac.uk/sites/ftp.gnu.org/...cc-3.3.2.tar.gz somewhere

- I didn\'t specify the language option because I want all the languages

CC=/opt/cross/bin/arm-linux-gcc ../gcc-3.3.2/configure --disable-shared --target=arm-linux --prefix=/opt/cross --with-headers=/opt/cross/arm-linux/sys-include --with-libs=/opt/cross/arm-linux/lib

- if I specify --with-libs=\"/op/cross/arm-linux/lib /opt/cross/lib\" then it complained about:

Code: [Select]
Configuring zlib...

configure: warning: /opt/cross/lib: invalid host type

loading cache ../config.cache

configure: error: can only configure for one host and one target at a time

Configure in /home/cedric/upload/compiler/bluid/zlib failed, exiting.

- I get this during the make

Code: [Select]
make[1]: Entering directory `/home/cedric/upload/compiler/bluid/libiberty\'

make[2]: Entering directory `/home/cedric/upload/compiler/bluid/libiberty/testsuite\'

make[2]: Nothing to be done for `all\'.

make[2]: Leaving directory `/home/cedric/upload/compiler/bluid/libiberty/testsuite\'

make[1]: Leaving directory `/home/cedric/upload/compiler/bluid/libiberty\'

make[1]: Entering directory `/home/cedric/upload/compiler/bluid/zlib\'

: make; exec true "AR_FLAGS=rc" "CC_FOR_BUILD=/opt/cross/bin/arm-linux-gcc" "CFLAGS=-O2 -Wa,-mfpu=fpa11 -mcpu=xscale" "CXXFLAGS=-g -O2" "CFLAGS_FOR_BUILD=" "CFLAGS_FOR_TARGET=-O2 -O2 -Wa,-mfpu=fpa11 -mcpu=xscale" "INSTALL=/bin/sh /home/cedric/upload/compiler/gcc-3.3.2/install-sh -c" "INSTALL_DATA=/bin/sh /home/cedric/upload/compiler/gcc-3.3.2/install-sh -c -m 644" "INSTALL_PROGRAM=/bin/sh /home/cedric/upload/compiler/gcc-3.3.2/install-sh -c " "INSTALL_SCRIPT=/bin/sh /home/cedric/upload/compiler/gcc-3.3.2/install-sh -c" "LDFLAGS=" "LIBCFLAGS=-O2 -Wa,-mfpu=fpa11 -mcpu=xscale" "LIBCFLAGS_FOR_TARGET=-O2 -O2 -Wa,-mfpu=fpa11 -mcpu=xscale" "MAKE=make" "MAKEINFO=makeinfo --no-split " "PICFLAG=" "PICFLAG_FOR_TARGET=" "SHELL=/bin/sh" "EXPECT=expect" "RUNTEST=runtest" "RUNTESTFLAGS=" "exec_prefix=/opt/cross" "infodir=/opt/cross/info" "libdir=/opt/cross/lib" "prefix=/opt/cross" "tooldir=/opt/cross/arm-linux" "AR=ar" "AS=as" "CC=/opt/cross/bin/arm-linux-gcc" "CXX=c++" "LD=ld" "LIBCFLAGS=-O2 -Wa,-mfpu=fpa11 -mcpu=xscale" "NM=nm" "PICFLAG=" "RANLIB=ranlib" "DESTDIR=" DO=all multi-do

make[1]: Leaving directory `/home/cedric/upload/compiler/bluid/zlib\'

make[1]: Entering directory `/home/cedric/upload/compiler/bluid/fastjar\'

make[1]: Leaving directory `/home/cedric/upload/compiler/bluid/fastjar\'

make[1]: Entering directory `/home/cedric/upload/compiler/bluid/gcc\'

./gengenrtl -h > tmp-genrtl.h

/bin/sh: line 1: ./gengenrtl: cannot execute binary file

make[1]: *** [s-genrtl] Error 126

make[1]: Leaving directory `/home/cedric/upload/compiler/bluid/gcc\'

make: *** [all-gcc] Error 2



PS: I\'m using RedHat 9 for my cross compile host
SL-5600, kernel 2.6.16 + GPE from .dev
Ethernet Socket LP-E
Viking 256M SD

lardman

  • Hero Member
  • *****
  • Posts: 4512
    • View Profile
    • http://people.bath.ac.uk/enpsgp/Zaurus/
gcc 3.2
« Reply #7 on: January 14, 2004, 11:59:40 am »
Quote
CC=/opt/cross/bin/arm-linux-gcc ../gcc-3.3.2/configure --disable-shared --target=arm-linux --prefix=/opt/cross --with-headers=/opt/cross/arm-linux/sys-include --with-libs=/opt/cross/arm-linux/lib 

Are you trying to create a native ARM GCC toolchain?? Because that\'s what the above will try to do (unfortunatley as you\'ve only specificed that the arm-linux-gcc should be used to compile it\'s probably pretty confused).

If you plan to make a native arm toolchain (not a cross toolchain), then you need to modify the script I posted above, source it before running configure, and also use --host=arm-linux probably...

If you want to make a cross-toolchain (which runs on you desktop box and creates ARM code), then get rid of the CC=.... stuff and make sure you\'ve not sourced the script at all.


Si
C750 OZ3.5.4 (GPE, 2.6.x kernel)
SL5500 OZ3.5.4 (Opie)
Nokia 770
Serial GPS, WCF-12, Socket Ethernet & BT, Ratoc USB
WinXP, Mandriva

ced

  • Full Member
  • ***
  • Posts: 225
    • View Profile
    • http://
gcc 3.2
« Reply #8 on: January 15, 2004, 08:18:01 am »
I\'m trying to create cross-toolchain, I\'m a bit confused...

$ gcc --version
Code: [Select]
gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)

$ ../gcc-3.3.2/configure --disable-shared --target=arm-linux --prefix=/opt/cross --with-headers=/opt/cross/arm-linux/sys-include --with-libs=/opt/cross/arm-linux/lib
Code: [Select]
Configuring for a i686-pc-linux-gnu host.

Created "Makefile" in /home/cedric/upload/compiler/build using "mt-frag"

../gcc-3.3.2/configure: line 8: arm-linux-gcc: command not found

*** The command \'arm-linux-gcc -o conftest -g -O2   conftest.c\' failed.

*** You must set the environment variable CC to a working compiler.
SL-5600, kernel 2.6.16 + GPE from .dev
Ethernet Socket LP-E
Viking 256M SD

lardman

  • Hero Member
  • *****
  • Posts: 4512
    • View Profile
    • http://people.bath.ac.uk/enpsgp/Zaurus/
gcc 3.2
« Reply #9 on: January 15, 2004, 08:54:26 am »
It looks like you still have CC exported (and pointing to the arm version of GCC).

See whether \'export\' indicates a CC variable.

Try opening up a new terminal and running configure again.

Another thing which may have happened is that configure has cached CC and you would therefore need to run \'make distclean\' to get rid of the cache.

Try this (are you sure that not specifying the languages defaults to all, it may do but I\'d check):

../gcc-3.3.2/configure --disable-shared --target=arm-linux --prefix=\'/opt/cross\' --with-headers=/opt/cross/arm-linux/sys-include --with-libs=\' \'/opt/cross/arm-linux/lib /opt/cross/lib\' \'


Si
C750 OZ3.5.4 (GPE, 2.6.x kernel)
SL5500 OZ3.5.4 (Opie)
Nokia 770
Serial GPS, WCF-12, Socket Ethernet & BT, Ratoc USB
WinXP, Mandriva

ced

  • Full Member
  • ***
  • Posts: 225
    • View Profile
    • http://
gcc 3.2
« Reply #10 on: January 15, 2004, 09:52:57 am »
the language stuff it\'s stated in the readme/install file

I\'ve started again from fresh...

unpack the cross-3.3.2
uppack the gcc3.3.2

Code: [Select]
../gcc-3.3.2/configure --disable-shared --target=arm-linux --prefix=/opt/cross --with-headers=/opt/cross/arm-linux/sys-include --with-libs=/opt/cross/arm-linux/lib

after 1/2h of compilation I get this...

Code: [Select]
make GCC_FOR_TARGET="/home/cedric/upload/compiler/build/gcc/xgcc -B/home/cedric/upload/compiler/build/gcc/ -B/opt/cross/arm-linux/bin/ -B/opt/cross/arm-linux/lib/ -isystem /opt/cross/arm-linux/include"

  BUILD_PREFIX="" BUILD_PREFIX_1="loser-"

  AR_FOR_TARGET="arm-linux-ar"

  AR_CREATE_FOR_TARGET="arm-linux-ar  rc"

  AR_FLAGS_FOR_TARGET=""

  CFLAGS="-g -O2 -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wtraditional -pedantic -Wno-long-long "

  RANLIB_FOR_TARGET="arm-linux-ranlib"

  RANLIB_TEST_FOR_TARGET="[ -f arm-linux-ranlib ] || ( [ "i686-pc-linux-gnu" = "arm-unknown-linux-gnu" ] && [ -f /usr/bin/ranlib -o -f /bin/ranlib ] )"

  NM_FOR_TARGET="/opt/cross/arm-linux/bin/nm" AWK="gawk"

  LIBGCC2_CFLAGS="-O2  -DIN_GCC -DCROSS_COMPILE   -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -isystem ./include  -fomit-frame-pointer -fPIC -g0 -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED "

  INCLUDES="-I. -I. -I../../gcc-3.3.2/gcc -I../../gcc-3.3.2/gcc/. -I../../gcc-3.3.2/gcc/config -I../../gcc-3.3.2/gcc/../include"

  CONFIG_H="tconfig.h " MACHMODE_H="machmode.h machmode.def ../../gcc-3.3.2/gcc/config/arm/arm-modes.def"

  LIB1ASMSRC=\'arm/lib1funcs.asm\'

  MAKEOVERRIDES=

  -f libgcc.mk all

make[2]: Entering directory `/home/cedric/upload/compiler/build/gcc\'

for d in libgcc; do

  if [ -d $d ]; then true; else /bin/sh ../../gcc-3.3.2/gcc/mkinstalldirs $d; fi;

done

if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi

rm -rf ./libgcc.a

arm-linux-ar  rc ./libgcc.a libgcc/./_udivsi3.o libgcc/./_divsi3.o libgcc/./_umodsi3.o libgcc/./_modsi3.o libgcc/./_dvmd_lnx.o libgcc/./_muldi3.o libgcc/./_negdi2.o libgcc/./_lshrdi3.o libgcc/./_ashldi3.o libgcc/./_ashrdi3.o libgcc/./_ffsdi2.o libgcc/./_clz.o libgcc/./_cmpdi2.o libgcc/./_ucmpdi2.o libgcc/./_floatdidf.o libgcc/./_floatdisf.o libgcc/./_fixunsdfsi.o libgcc/./_fixunssfsi.o libgcc/./_fixunsdfdi.o libgcc/./_fixdfdi.o libgcc/./_fixunssfdi.o libgcc/./_fixsfdi.o libgcc/./_fixxfdi.o libgcc/./_fixunsxfdi.o libgcc/./_floatdixf.o libgcc/./_fixunsxfsi.o libgcc/./_fixtfdi.o libgcc/./_fixunstfdi.o libgcc/./_floatditf.o libgcc/./_clear_cache.o libgcc/./_trampoline.o libgcc/./__main.o libgcc/./_exit.o libgcc/./_absvsi2.o libgcc/./_absvdi2.o libgcc/./_addvsi3.o libgcc/./_addvdi3.o libgcc/./_subvsi3.o libgcc/./_subvdi3.o libgcc/./_mulvsi3.o libgcc/./_mulvdi3.o libgcc/./_negvsi2.o libgcc/./_negvdi2.o libgcc/./_ctors.o libgcc/./_divdi3.o libgcc/./_moddi3.o libgcc/./_udivdi3.o libgcc/./_umoddi3.o libgcc/./_udiv_w_sdiv.o libgcc/./_udivmoddi4.o libgcc/./unwind-dw2.o libgcc/./unwind-dw2-fde-glibc.o libgcc/./unwind-sjlj.o libgcc/./unwind-c.o libgcc/./_eprintf.o libgcc/./_bb.o libgcc/./__gcc_bcmp.o

make[2]: arm-linux-ar: Command not found

make[2]: *** [libgcc.a] Error 127

make[2]: Leaving directory `/home/cedric/upload/compiler/build/gcc\'

make[1]: *** [libgcc.a] Error 2

make[1]: Leaving directory `/home/cedric/upload/compiler/build/gcc\'

make: *** [all-gcc] Error 2
SL-5600, kernel 2.6.16 + GPE from .dev
Ethernet Socket LP-E
Viking 256M SD

lardman

  • Hero Member
  • *****
  • Posts: 4512
    • View Profile
    • http://people.bath.ac.uk/enpsgp/Zaurus/
gcc 3.2
« Reply #11 on: January 15, 2004, 10:56:30 am »
Oops, yes that\'s normal. I forgot about it.

In the command below make sure you only add the path to the bin directory which holds the files which are called arm-linux-*, otherwise the compilation will break.

So do something like:

\'export PATH=$PATH:/opt/cross/arm-linux/bin\'

Though it might be:

\'export PATH=$PATH:/opt/cross/bin\'

I\'m not in front of my Linux box at the moment so I can\'t tell you. After you\'ve done this just run \'make\' again and it will pick off where it left off.

Sorry,


Si
C750 OZ3.5.4 (GPE, 2.6.x kernel)
SL5500 OZ3.5.4 (Opie)
Nokia 770
Serial GPS, WCF-12, Socket Ethernet & BT, Ratoc USB
WinXP, Mandriva

ced

  • Full Member
  • ***
  • Posts: 225
    • View Profile
    • http://
gcc 3.2
« Reply #12 on: January 16, 2004, 03:28:00 am »
export PATH=$PATH:/opt/cross/bin   did the trick!

Thanks a lot.
Ced.
SL-5600, kernel 2.6.16 + GPE from .dev
Ethernet Socket LP-E
Viking 256M SD

ced

  • Full Member
  • ***
  • Posts: 225
    • View Profile
    • http://
gcc 3.2
« Reply #13 on: January 16, 2004, 04:51:46 am »
I\'ve try to compile a simple Qtopia example with my new cross-compiler and it failed to find the qtopia library (undefined reference to <widget name>)

the only thing I\'ve changed is my PATH:

from -> PATH=/opt/Embedix/tools/bin:$PATH
to -> PATH=/opt/cross/bin:$PATH

It\'s ok to compile an ARM binary using the old cross-compiler (gcc 2.95).
Do I need to re-compile the qtopia library using gcc3? or do I need to do something else?


Is it possible to upgrade the default Sharp ROM (1.32) with the glibc 2.3.2? (like the openzaurus 3.3.6 version). To do that, do I need to create a custom rom by recompiling every thing with gcc3?
SL-5600, kernel 2.6.16 + GPE from .dev
Ethernet Socket LP-E
Viking 256M SD

lardman

  • Hero Member
  • *****
  • Posts: 4512
    • View Profile
    • http://people.bath.ac.uk/enpsgp/Zaurus/
gcc 3.2
« Reply #14 on: January 16, 2004, 05:53:55 am »
Glad you\'ve got it all working.

Quote
I\'ve try to compile a simple Qtopia example with my new cross-compiler and it failed to find the qtopia library (undefined reference to <widget name>) 

I presume it\'s complaining that it can\'t find the qtopia related (libqpe, libopie, whatever) arm libs. You\'ll probably need to either compile it all yourself (with gcc 3.x) or copy the libs over from your Z (which have already been compiled with gcc 3.x). I don\'t know much about this, I generally only do command line stuff. Perhaps drop Mickeyl a line?

Quote
It\'s ok to compile an ARM binary using the old cross-compiler (gcc 2.95). 

You shouldn\'t compile with 2.95 unless you want to use compat libs.

Quote
Is it possible to upgrade the default Sharp ROM (1.32) with the glibc 2.3.2? (like the openzaurus 3.3.6 version). To do that, do I need to create a custom rom by recompiling every thing with gcc3?

You would have to make a new ROM as libc can\'t be changed on the fly. All of the C++ stuff would bneed to be recompiled due to name-mangling issues, but the commandline stuff would probably be okay as libc seems to be backwards compatible.


Si
C750 OZ3.5.4 (GPE, 2.6.x kernel)
SL5500 OZ3.5.4 (Opie)
Nokia 770
Serial GPS, WCF-12, Socket Ethernet & BT, Ratoc USB
WinXP, Mandriva