How to build libgcc with ARM, MULTILIB and soft-float?
ola.billstein@phasein.se
ola.billstein@phasein.se
Mon Sep 12 09:24:00 GMT 2005
Hi!
I want to build GCC for ARM target and compile libgcc with thumb-interwork,
big-endian and soft-float for both arm and thumb versions.
After browsing Internet (thank you all) I enable options in configuration
file t-arm-elf, hoping for multilib to build my desired combination.
But my simple float-test application does not link. It looks like the
msoft-float option is forgotten in the multilib configurations where the
mhard-float is not included???
Is the multilib logic assuming soft-float as default (which it is not) or
am I doing something wrong?
If I build the complete GCC with configuration option "--with-float=soft",
the linker is not complaining when compiling my application, but what does
all my multilibs contain? Are all soft-float?
My question is:
Can I build libgcc with soft-float in a multilib combination?
Building with:
Binutils 2.16.1
GCC 4.0.1
Newlib 1.13.0
Changes made in t-arm-elf:
---------
MULTILIB_OPTIONS = marm/mthumb
MULTILIB_DIRNAMES = arm thumb
MULTILIB_OPTIONS += mlittle-endian/mbig-endian
MULTILIB_DIRNAMES += le be
MULTILIB_MATCHES += mbig-endian=mbe mlittle-endian=mle
MULTILIB_OPTIONS += msoft-float/mhard-float
MULTILIB_DIRNAMES += soft fpu
MULTILIB_EXCEPTIONS += *mthumb/*mhard-float*
MULTILIB_OPTIONS += mno-thumb-interwork/mthumb-interwork
MULTILIB_DIRNAMES += normal interwork
---------
Building GCC with these options:
---------
export TARGET=arm-elf
export PREFIX=/usr/gcc-arm
export CFLAGS="-s -O3"
../gcc-4.0.1/configure --target=$TARGET --prefix=$PREFIX \
--with-newlib --with-gnu-as --with-gnu-ld \
--with-local-prefix=${PREFIX}/${TARGET}
--disable-shared \
--disable-nls --disable-win32-registry
--enable-interwork \
--enable-multilib --enable-languages="c,c++,f95"
--with-cpu=arm7tdmi \
--with-headers=../gcc-4.0.1/gcc/newlib/libc/include
make all-gcc install-gcc
---------
Checking build:
---------
$ /cygdrive/c/cygwin/usr/gcc-arm/bin/arm-elf-gcc.exe -print-multi-lib
.;
thumb;@mthumb
be;@mbig-endian
fpu;@mhard-float
interwork;@mthumb-interwork
fpu/interwork;@mhard-float@mthumb-interwork
be/fpu;@mbig-endian@mhard-float
be/interwork;@mbig-endian@mthumb-interwork
be/fpu/interwork;@mbig-endian@mhard-float@mthumb-interwork
thumb/be;@mthumb@mbig-endian
thumb/interwork;@mthumb@mthumb-interwork
thumb/be/interwork;@mthumb@mbig-endian@mthumb-interwork
---------
Compiling my application ("plus") with these arm-related flags:
---------
ARM_FLAGS := -march=armv4t -mcpu=arm7tdmi -gdwarf-2 -mapcs-frame
-mthumb-interwork -msoft-float -mbig-endian
---------
Linker error:
---------
/usr/gcc-arm/lib/gcc/arm-elf/4.0.1/../../../../arm-elf/bin/ld: ERROR:
/usr/gcc-arm/lib/gcc/arm-elf/4.0.1/be/interwork/libgcc.a(_addsubsf3.o) uses
hardware FP, whereas plus.elf uses software FP
---------
When adding configuration option "--with-float=soft" to the GCC build, the
linker is not complaining when linking the application...
---------
../gcc-4.0.1/configure --target=$TARGET --prefix=$PREFIX \
--with-newlib --with-gnu-as --with-gnu-ld \
--with-local-prefix=${PREFIX}/${TARGET}
--disable-shared \
--disable-nls --disable-win32-registry
--enable-interwork \
--enable-multilib --enable-languages="c,c++,f95"
--with-cpu=arm7tdmi \
--with-headers=../gcc-4.0.1/gcc/newlib/libc/include
\
--with-float=soft
---------
But what does my be/fpu libraries contain? Soft-float or hardware FP?
OLA BILLSTEIN / Senior R&D Engineer
------
Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
More information about the crossgcc
mailing list