Re: Cross compilation

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

 



RAVI DEWANGAN kirjoitti 10.11.2017 klo 4:56:
Hi GNU Team,

Could you please guide me regarding cross compilation.

I am trying to cross compile the toolchain for FreeBSD11(target) using
Ubuntu16.04(host).

The issue is
/home/rdewangan/freebsd/gcc-7.2.0/build/./gcc/xgcc
-B/home/rdewangan/freebsd/gcc-7.2.0/build/./gcc/
-B/opt/freebsd_toolchain/x86_64-pc-freebsd11/bin/
-B/opt/freebsd_toolchain/x86_64-pc-freebsd11/lib/ -isystem
/opt/freebsd_toolchain/x86_64-pc-freebsd11/include -isystem
/opt/freebsd_toolchain/x86_64-pc-freebsd11/sys-include    -g -O2 -O2  -g
-O2 -DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE  -W -Wall -Wno-narrowing
-Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes
-Wold-style-definition  -isystem ./include   -fpic -pthread -g -DIN_LIBGCC2
-fbuilding-libgcc -fno-stack-protector -Dinhibit_libc  -fpic -pthread -I.
-I. -I../.././gcc -I../../../libgcc -I../../../libgcc/.
-I../../../libgcc/../gcc -I../../../libgcc/../include  -DHAVE_CC_TLS  -o
_muldi3.o -MT _muldi3.o -MD -MP -MF _muldi3.dep -DL_muldi3 -c
../../../libgcc/libgcc2.c -fvisibility=hidden -DHIDE_EXPORTS
In file included from ../../../libgcc/../gcc/tsystem.h:44:0,
                  from ../../../libgcc/libgcc2.c:27:
/home/rdewangan/freebsd/gcc-7.2.0/build/gcc/include/stddef.h:56:10: fatal
error: sys/_types.h: No such file or directory
  #include <sys/_types.h>
           ^~~~~~~~~~~~~~
compilation terminated.
Makefile:491: recipe for target '_muldi3.o' failed

For a "working compiler" one needs also the target C library. Prebuilt and pretested in your case when your FreeBSD system is already made.  There isn't much difference between a native and a cross compiler in this issue, both require the target C library during the GCC build when the extra libraries : libgcc, libstdc++, libssp etc will be built.

A cross compiler needs also the binutils made for the "host-to-target" use but a native build usually already has also them prebuilt, sometimes as non-GNU "native ones".

Furthermore the target C library must be put into a separate $SYSROOT on the host. Not in it's "native" place (usually '/lib*', '/usr/include' and '/usr/lib*' like in Linux) but in a sysroot like '/opt/freebsd_toolchain/sysroot' in your case, the native FreeBSD
sysroot '/' being replaced with this.

As you can see, you already have the cross compiler binaries made. Those which run on your Linux host : the '/home/rdewangan/freebsd/gcc-7.2.0/build/./gcc/xgcc' is the compiler driver ("x86_64-pc-freebsd11-gcc" after its installation), the "cc1", "cc1plus" etc. also in the '/home/rdewangan/freebsd/gcc-7.2.0/build/gcc'.  But after this the new GCC needs the target C library stuff like its headers when compiling 'libgcc' etc for the
target.

  1283  sudo ../configure --without-headers --with-gnu-as --with-gnu-ld
--enable-languages=c,c++ --disable-nls --enable-libssp --enable-gold
--enable-ld --target=x86_64-pc-freebsd11 --prefix=/opt/freebsd_toolchain
--with-gmp=/opt/freebsd_toolchain --with-mpc=/opt/freebsd_toolchain
--with-mpfr=/opt/freebsd_toolchain --disable-libgomp
  1284  sudo LD_LIBRARY_PATH=/opt/freebsd_toolchain/lib make

A configure like this could be enough for making a "kernel compiler", for compiling an Unix or Linux kernel from its sources. But not user-level libraries and applications.

The target C libraries used to be inside the FreeBSD install packages, 'base.txz' and 'lib32.txz' or something. You must unpack them into some temporary place and copy
the needed parts from there into your chosen $SYSROOT. Or copy them from the
installed target system.  Then in the binutils and GCC configure use the :
--with-sysroot=$SYSROOT
to tell where the target C library stuff is....




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux