Hi,
I am working on the embedded linux system on bug endian mips (mips-linux).
As I understand, I need to get the cross-compiler work on my linux-i686 host
(redhat 7.2).
Following the Bradly's "Building a modern MIPS cross-toolchain for linux",
I download following packages:
binutils-2.11
gcc-2.95
glibc-2.2.5
glibc-linuxthreads-2.2.5
And following the procedue:
1. build the cross-binutils
tar -xzf binutils-2.11.tar.gz
mkdir mips-binutils-2.11
cd mips-binutils-2.11
../binutils-2.11/configure --target=mips-linux \
--prefix=/usr/toolchain-mips
--libdir='${exec_prefix}'/mips-linux/i386-linux-lib
make
make install
cd ..
Everything is fine.
2. build the C cross-compiler
tar -xzf gcc-2.95.tar.gz
mkdir mips-gcc-2.95
cd mips-gcc-2.95
../gcc-2.95/configure --target=mips-linux
--prefix=/usr/toolchain-mips --enable-languages=c \
--disable-shared --with-headers=/usr/include
make
make install
cd ..
As thw warning, The --with-headers causes configure to make a copy of the
headers at the specified location into /usr/local/mipsel-linux/sys-includes
and to run fixincludes on them. These headers are then used by xgcc during
the cross-building of libgcc.a (which is part of building the static C
compiler). This means that you'll need some MIPS host headers laying around
somewhere, including the linux and asm subdirectories from the Linux kernel.
Maybe you have them from your previous cross-compiler installation. If not,
there are various creative ways of obtaining them, including grabbing them
from some MIPS distribution. There is also the dubious hack of using your
hosts's headers (--with-headers=/usr/include) instead. The key word here is
"dubious"; you have been warned.
Since I can not get "some MIPS host headers", I use the dubious hack.
And it seems get the build of C cross-compiler work.
3. Cross-build glibc
tar -xzf glibc.tar.gz
cd glibc
patch -i ../glibc-2.2.5-mips-build-gmon.diff
tar -xzf ../glibc-linuxthreads.tar.gz
cd ..
mkdir mipsel-glibc
cd mipsel-glibc
CFLAGS="-O2 -g -finline-limit=10000" ../glibc/configure
--host=i686-linux\
--enable-add-ons --prefix=/usr
make
make install install_root=/usr/local/mips-linux/glibc
cd ..
cp -a /usr/local/mips-linux/glibc/lib/*
/usr/toolchain/mips-linux/lib/
cp -a /usr/local/mips-linux/glibc/usr/include/*
/usr/toolchain/mips-linux/include/
cp -a /usr/local/mips-linux/glibc/usr/lib/*
/usr/toolchain/mips-linux/lib/
GROUP ( /usr/toolchain/mips-linux/lib/libc.so.6
/usr/toolchain/mipsel-linux/lib/libc_nonshared.a )
It works fine!
4. Build the final C and C++ cross-compilers
cd mipsel-gcc
../gcc/configure --target=mipsel-linux prefic=/usr/toolchain
--enable-languages=c,c++
make
make install
However, I got the error_message:
home/cross-compiler1/mips-gcc-2.95/gcc/xgcc
-B/home/cross-compiler1/mips-gcc-2.95/gcc/
-B/usr/toolchain1-mips/mips-linux/bin/ -c -g -O2 -fvtable-thunks
-D_GNU_SOURCE
-fno-implicit-templates -I../../../gcc-2.95/libstdc++
-I../../../gcc-2.95/libstdc++/stl -I../libio
-I../../../gcc-2.95/libstdc++/../libio -nostdinc++ -D_IO_MTSAFE_IO
../../../gcc-2.95/libstdc++/cmathi.cc
In file included from
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/math.h:350,
from ../../../gcc-2.95/libstdc++/cmath:7,
from ../../../gcc-2.95/libstdc++/cmathi.cc:7:
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `double atan2(double, double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:426:
unknown register name `st(1)' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `float atan2f(float, float)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:426:
unknown register name `st(1)' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `long double atan2l(long double, long double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:426:
unknown register name `st(1)' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `long double __atan2l(long double, long double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:427:
unknown register name `st(1)' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `double fmod(double, double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:430:
unknown register name `ax' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `float fmodf(float, float)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:430:
unknown register name `ax' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `long double fmodl(long double, long double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:430:
unknown register name `ax' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `double atan(double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:467:
unknown register name `st(1)' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `float atanf(float)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:467:
unknown register name `st(1)' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `long double atanl(long double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:467:
unknown register name `st(1)' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `double log1p(double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:540:
unknown register name `st(1)' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `float log1pf(float)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:540:
unknown register name `st(1)' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `long double log1pl(long double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:540:
unknown register name `st(1)' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `long int lrintf(float)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:611:
unknown register name `st' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `long int lrint(double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:616:
unknown register name `st' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `long int lrintl(long double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:621:
unknown register name `st' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `long long int llrintf(float)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:634:
unknown register name `st' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `long long int llrint(double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:639:
unknown register name `st' in `asm'
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:
In function `long long int llrintl(long double)':
/usr/toolchain1-mips/lib/gcc-lib/mips-linux/2.95/../../../../mips-linux/sys-
include/bits/mathinline.h:644:
unknown register name `st' in `asm'
make[1]: *** [cmathi.o] Error 1
make[1]: Leaving directory
`/home/cross-compiler1/mips-gcc-2.95/mips-linux/libstdc++'
make: *** [all-target-libstdc++] Error 2
Does any have any idea to fix this error?
When I build the C cross-compiler, I use the "dubious hack"
--with-headers=/usr/include copy the "MIPS host header files". Are there any
other ways to copy the MIPS-host headers?
Thanks for your help.
Chien-Lung
|