Re: Trying to build gcc cross compiler from linux to freebsd‏

Kai Ruottu kai.ruottu@wippies.com
Tue Mar 17 22:28:00 GMT 2015


17.3.2015, 21:14, Niccolò Ferrari kirjoitti:
> Hello,
>   
> I was trying to compile a gcc cross compiler for linux x86_64 (build and host) to freebsd x86_64. I tried to follow this http://marcelog.github.io/articles/articles.html and then some other guides around the web, but I continue to get this log at the end of make:
>   
> ...
> make[3]: Leaving directory '/home/nick/Scaricati/build-gcc/x86_64-freebsd10.1/libgcc'
> DEFINES='' HEADERS='' \
>     ../../../gcc-4.9.2/libgcc/mkheader.sh> tmp-libgcc_tm.h
> /bin/bash ../../../gcc-4.9.2/libgcc/../move-if-change tmp-libgcc_tm.h libgcc_tm.h
> echo timestamp> libgcc_tm.stamp
> /home/nick/Scaricati/build-gcc/./gcc/xgcc -B/home/nick/Scaricati/build-gcc/./gcc/ -B/usr/local/cross/x86_64-freebsd10.1/bin/ -B/usr/local/cross/x86_64-freebsd10.1/lib/ -isystem /usr/local/cross/x86_64-freebsd10.1/include -isystem /usr/local/cross/x86_64-freebsd10.1/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../../../gcc-4.9.2/libgcc -I../../../gcc-4.9.2/libgcc/. -I../../../gcc-4.9.2/libgcc/../gcc -I../../../gcc-4.9.2/libgcc/../include  -DHAVE_CC_TLS  -o _muldi3.o -MT _muldi3.o -MD -MP -MF _muldi3.dep -DL_muldi3 -c ../../../gcc-4.9.2/libgcc/libgcc2.c -fvisibility=hidden -DHIDE_EXPORTS
> In file included from ../../../gcc-4.9.2/libgcc/../gcc/tsystem.h:44:0,
>    from ../../../gcc-4.9.2/libgcc/libgcc2.c:27:
> /home/nick/Scaricati/build-gcc/gcc/include/stddef.h:56:24: fatal error: sys/_types.h: No such file or directory

Doesn't the 'x86_64-freebsd 10.1' target system have this 'sys/_types.h' 
in its standard C headers?

>   
> this is the lasts logs of make process of gcc-4.9.2 sources with TARGET=x86_64-freebsd10.1
> what I'm doing wrong? Any ideas?
>   
>   
> P.S. I configured gcc as follows:
>   
>   
> ../gcc-4.9.2/configure --without-headers --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --disable-nls --enable-libssp --enable-gold --enable-ld --target=$TARGET --prefix="$PREFIX" --disable-libgomp
>

The '--without-headers' is insane with a system target like FreeBSD 
which has its own standard C library with
headers and library binaries.  Making a crosscompiler to a system target 
is nowadays a process where the
(earlier existing) native GCC is reproduced on some other host. The 
steps are :

1. choose a sysroot where to put the C headers and libraries for the 
target (usually in '/usr/include' and '/usr/lib'
     on the native target system)

2. copy them onto the sysroot, for example '$sysroot/usr/include' and 
'$sysroot/usr/lib' on the cross host

3. configure the GNU binutils and GCC using '--with-sysroot=$sysroot' to 
tell where the target stuff is on the
     cross host system. Build and install them, binutils first, GCC then...

4. be happy and try making a "Hello World" app for the target, compiling 
it on the cross host...

It may be 15 years since I myself made a crosscompiler to FreeBSD. At 
least for the Windoze host I'm using just
now :

F:\usr\local\bin>gcc-i486-freebsdelf -v
Reading specs from ..\lib\gcc-lib\i486-freebsdelf\2_95.3-1\specs
gcc version 2.95.3-1 20010315 (release)

But the "making a crosscompiler" process hasn't changed much from those 
days, the use of a sysroot is quite
new though...




More information about the Gcc-help mailing list