Help in cross-compiler

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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







[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux