public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
* Cross build gcc failed.build=x86_64-freebsd target=x86_64-solaris
@ 2020-09-22 14:41 papadave
  2020-09-22 15:37 ` Kai Ruottu
  0 siblings, 1 reply; 3+ messages in thread
From: papadave @ 2020-09-22 14:41 UTC (permalink / raw)
  To: gcc-help

Hello,
Recently I was trying to cross build a latest gcc on FreeBSD amd64 ,and
target is x86_64 Solaris. I built the binutils with following configure:

../configure --build=x86_64-unknown-freebsd12
--target=x86_64-unknown-solaris2.11 --prefix=/opt/toolchains
--sysconfdir=/etc --localstatedir=/var --libexecdir='${prefix}/lib'
--with-system-zlib --with-gmp=/usr/local --with-mpfr=/usr/local
--disable-rpath --enable-deterministic-archives --enable-nls --enable-gold
--enable-ld --enable-plugins

Later I configured the gcc in a new subdirectory as follows:

../gcc-10.2.0/configure --build=x86_64-unknown-freebsd12
--target=x86_64-unknown-solaris2.11 --disable-bootstrap
--enable-gnu-indirect-function --prefix=/opt/toolchains --sysconfdir=/etc
--localstatedir=/var --libexecdir='${prefix}/lib/gcc' --disable-rpath
--program-prefix=x86_64-unknown-solaris2.11- --program-suffix=-10.2
--with-gnu-as --with-gnu-ld --with-gmp=/usr/local --with-pkgversion=Rivoreo
--with-system-zlib --enable-languages=c,c++,objc,fortran,obj-c++,go
--enable-multilib

Then I start to run build. but it report error later:

# @multilib_dir@ is not really necessary, but sometimes it has
# more uses than just a directory name.
/bin/sh ../../../gcc-10.2.0/libgcc/../mkinstalldirs .
/usr/home/papadave/src/solaris-cross-build-gcc/gcc-10.2.0-build-x86_64-unknown-solaris2.11/./gcc/xgcc
-B/usr/home/papadave/src/solaris-cross-build-gcc/gcc-10.2.0-build-x86_64-unknown-solaris2.11/./gcc/
-B/opt/toolchains/x86_64-unknown-solaris2.11/bin/
-B/opt/toolchains/x86_64-unknown-solaris2.11/lib/ -isystem
/opt/toolchains/x86_64-unknown-solaris2.11/include -isystem
/opt/toolchains/x86_64-unknown-solaris2.11/sys-include    -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 -g -DIN_LIBGCC2
-fbuilding-libgcc -fno-stack-protector -Dinhibit_libc -shared
-nodefaultlibs -Wl,--soname=libgcc_s.so.1 -Wl,--version-script=libgcc.map
-o ./libgcc_s.so.1.tmp -g -O2 -B./ _muldi3_s.o _negdi2_s.o _lshrdi3_s.o
_ashldi3_s.o _ashrdi3_s.o _cmpdi2_s.o _ucmpdi2_s.o _clear_cache_s.o
_trampoline_s.o __main_s.o _absvsi2_s.o _absvdi2_s.o _addvsi3_s.o
_addvdi3_s.o _subvsi3_s.o _subvdi3_s.o _mulvsi3_s.o _mulvdi3_s.o
_negvsi2_s.o _negvdi2_s.o _ctors_s.o _ffssi2_s.o _ffsdi2_s.o _clz_s.o
_clzsi2_s.o _clzdi2_s.o _ctzsi2_s.o _ctzdi2_s.o _popcount_tab_s.o
_popcountsi2_s.o _popcountdi2_s.o _paritysi2_s.o _paritydi2_s.o
_powisf2_s.o _powidf2_s.o _powixf2_s.o _powitf2_s.o _mulhc3_s.o _mulsc3_s.o
_muldc3_s.o _mulxc3_s.o _multc3_s.o _divhc3_s.o _divsc3_s.o _divdc3_s.o
_divxc3_s.o _divtc3_s.o _bswapsi2_s.o _bswapdi2_s.o _clrsbsi2_s.o
_clrsbdi2_s.o _fixunssfsi_s.o _fixunsdfsi_s.o _fixunsxfsi_s.o _fixsfdi_s.o
_fixdfdi_s.o _fixxfdi_s.o _fixunssfdi_s.o _fixunsdfdi_s.o _fixunsxfdi_s.o
_floatdisf_s.o _floatdidf_s.o _floatdixf_s.o _floatundisf_s.o
_floatundidf_s.o _floatundixf_s.o _divdi3_s.o _moddi3_s.o _divmoddi4_s.o
_udivdi3_s.o _umoddi3_s.o _udivmoddi4_s.o _udiv_w_sdiv_s.o cpuinfo_s.o
sfp-exceptions_s.o addtf3_s.o divtf3_s.o eqtf2_s.o getf2_s.o letf2_s.o
multf3_s.o negtf2_s.o subtf3_s.o unordtf2_s.o fixtfsi_s.o fixunstfsi_s.o
floatsitf_s.o floatunsitf_s.o fixtfdi_s.o fixunstfdi_s.o floatditf_s.o
floatunditf_s.o fixtfti_s.o fixunstfti_s.o floattitf_s.o floatuntitf_s.o
extendsftf2_s.o extenddftf2_s.o extendxftf2_s.o trunctfsf2_s.o
trunctfdf2_s.o trunctfxf2_s.o enable-execute-stack_s.o unwind-dw2_s.o
unwind-dw2-fde-dip_s.o unwind-sjlj_s.o unwind-c_s.o emutls_s.o libgcc.a -lc
&& rm -f ./libgcc_s.so && if [ -f ./libgcc_s.so.1 ]; then mv -f
./libgcc_s.so.1 ./libgcc_s.so.1.backup; else true; fi && mv
./libgcc_s.so.1.tmp ./libgcc_s.so.1 && ln -s libgcc_s.so.1 ./libgcc_s.so
/opt/toolchains/x86_64-unknown-solaris2.11/bin/ld: skipping incompatible
/opt/toolchains/x86_64-unknown-solaris2.11/lib/libc.so when searching for
-lc
/opt/toolchains/x86_64-unknown-solaris2.11/bin/ld: i386 architecture of
input file `/opt/toolchains/x86_64-unknown-solaris2.11/lib/crti.o' is
incompatible with i386:x86-64 output
/opt/toolchains/x86_64-unknown-solaris2.11/bin/ld: i386 architecture of
input file `/opt/toolchains/x86_64-unknown-solaris2.11/lib/crtn.o' is
incompatible with i386:x86-64 output
collect2: error: ld returned 1 exit status
gmake[2]: *** [Makefile:994: libgcc_s.so] Error 1
gmake[2]: Leaving directory
'/usr/home/papadave/src/solaris-cross-build-gcc/gcc-10.2.0-build-x86_64-unknown-solaris2.11/x86_64-unknown-solaris2.11/libgcc'
gmake[1]: *** [Makefile:13433: all-target-libgcc] Error 2
gmake[1]: Leaving directory
'/usr/home/papadave/src/solaris-cross-build-gcc/gcc-10.2.0-build-x86_64-unknown-solaris2.11'
gmake: *** [Makefile:960: all] Error 2

So how should I fix it . Thanks.

Best regards,
papadave

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Cross build gcc failed.build=x86_64-freebsd target=x86_64-solaris
  2020-09-22 14:41 Cross build gcc failed.build=x86_64-freebsd target=x86_64-solaris papadave
@ 2020-09-22 15:37 ` Kai Ruottu
  2020-09-22 16:07   ` papadave
  0 siblings, 1 reply; 3+ messages in thread
From: Kai Ruottu @ 2020-09-22 15:37 UTC (permalink / raw)
  To: papadave, gcc-help

papadave via Gcc-help kirjoitti 22.9.2020 klo 17.41:
> Hello,
> Recently I was trying to cross build a latest gcc on FreeBSD amd64 ,and
> target is x86_64 Solaris. I built the binutils with following configure:
>
> ../configure --build=x86_64-unknown-freebsd12
> --target=x86_64-unknown-solaris2.11 --prefix=/opt/toolchains
> --sysconfdir=/etc --localstatedir=/var --libexecdir='${prefix}/lib'
> --with-system-zlib --with-gmp=/usr/local --with-mpfr=/usr/local
> --disable-rpath --enable-deterministic-archives --enable-nls --enable-gold
> --enable-ld --enable-plugins
>
> Later I configured the gcc in a new subdirectory as follows:
>
> ../gcc-10.2.0/configure --build=x86_64-unknown-freebsd12
> --target=x86_64-unknown-solaris2.11 --disable-bootstrap
> --enable-gnu-indirect-function --prefix=/opt/toolchains --sysconfdir=/etc
> --localstatedir=/var --libexecdir='${prefix}/lib/gcc' --disable-rpath
> --program-prefix=x86_64-unknown-solaris2.11- --program-suffix=-10.2
> --with-gnu-as --with-gnu-ld --with-gmp=/usr/local --with-pkgversion=Rivoreo
> --with-system-zlib --enable-languages=c,c++,objc,fortran,obj-c++,go
> --enable-multilib


Ok, for a crosscompiler one needs just the same target C library stuff 
(here for
x86_64-unknown-solaris2.11) as is needed in a native GCC build for the 
target.
Usually it will be copied/unpacked into a chosen $sysroot on the host 
machine
(here x86_64-unknown-freebsd12).  And a "--with-sysroot=$sysroot" option is
given both in binutils and GCC configure commands to tell to "ld" and "gcc"
where the target libraries and headers are.  In your case choosing the
"/opt/toolchains/host-x86_64-unknown-solaris2.11" as the $sysroot could be
one choice if your aim is to put more crosstoolchains for all kind of 
targets into
the "/opt/toolchains".  And use the "/opt/toolchains/host-$target" as the
standard for the install places for their C libraries.

I remember the "native install" for Solaris2.x C library being quite 
complicated so using
the default "$prefix/$target/include" and "$prefix/$target/lib" would 
need some
scratching of one's head to get everything in the Solaris2.x C library 
being found
there.  Much easier is to let it be similar to the native scheme in the 
$sysroot
(the cross "/" is the $sysroot on the host system).

> -B/opt/toolchains/x86_64-unknown-solaris2.11/bin/
> -B/opt/toolchains/x86_64-unknown-solaris2.11/lib/
> -isystem /opt/toolchains/x86_64-unknown-solaris2.11/include
> -isystem /opt/toolchains/x86_64-unknown-solaris2.11/sys-include

These tell where the target C library will be searched now. Please don't 
ask for what
purpose the "sys-include" is there.  Just take it as a relic from the 
ancient time when
someone maybe knew why he/she needed it :) The funny thing is that it 
will be searched
before the "include" unless the order is the same as given in the 
"-isystem <dir>" options
(the old order was changed in the 'gcc/cppdefaults.c' or something).


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Cross build gcc failed.build=x86_64-freebsd target=x86_64-solaris
  2020-09-22 15:37 ` Kai Ruottu
@ 2020-09-22 16:07   ` papadave
  0 siblings, 0 replies; 3+ messages in thread
From: papadave @ 2020-09-22 16:07 UTC (permalink / raw)
  To: Kai Ruottu, gcc-help

Thanks for your reply. But I think it is more like a multilib issue. GCC
build system failed to find amd64 objects in 'amd64' subdirectory.

Kai Ruottu <kai.ruottu@wippies.com> 于2020年9月22日周二 下午11:37写道:

> papadave via Gcc-help kirjoitti 22.9.2020 klo 17.41:
> > Hello,
> > Recently I was trying to cross build a latest gcc on FreeBSD amd64 ,and
> > target is x86_64 Solaris. I built the binutils with following configure:
> >
> > ../configure --build=x86_64-unknown-freebsd12
> > --target=x86_64-unknown-solaris2.11 --prefix=/opt/toolchains
> > --sysconfdir=/etc --localstatedir=/var --libexecdir='${prefix}/lib'
> > --with-system-zlib --with-gmp=/usr/local --with-mpfr=/usr/local
> > --disable-rpath --enable-deterministic-archives --enable-nls
> --enable-gold
> > --enable-ld --enable-plugins
> >
> > Later I configured the gcc in a new subdirectory as follows:
> >
> > ../gcc-10.2.0/configure --build=x86_64-unknown-freebsd12
> > --target=x86_64-unknown-solaris2.11 --disable-bootstrap
> > --enable-gnu-indirect-function --prefix=/opt/toolchains --sysconfdir=/etc
> > --localstatedir=/var --libexecdir='${prefix}/lib/gcc' --disable-rpath
> > --program-prefix=x86_64-unknown-solaris2.11- --program-suffix=-10.2
> > --with-gnu-as --with-gnu-ld --with-gmp=/usr/local
> --with-pkgversion=Rivoreo
> > --with-system-zlib --enable-languages=c,c++,objc,fortran,obj-c++,go
> > --enable-multilib
>
>
> Ok, for a crosscompiler one needs just the same target C library stuff
> (here for
> x86_64-unknown-solaris2.11) as is needed in a native GCC build for the
> target.
> Usually it will be copied/unpacked into a chosen $sysroot on the host
> machine
> (here x86_64-unknown-freebsd12).  And a "--with-sysroot=$sysroot" option is
> given both in binutils and GCC configure commands to tell to "ld" and "gcc"
> where the target libraries and headers are.  In your case choosing the
> "/opt/toolchains/host-x86_64-unknown-solaris2.11" as the $sysroot could be
> one choice if your aim is to put more crosstoolchains for all kind of
> targets into
> the "/opt/toolchains".  And use the "/opt/toolchains/host-$target" as the
> standard for the install places for their C libraries.
>
> I remember the "native install" for Solaris2.x C library being quite
> complicated so using
> the default "$prefix/$target/include" and "$prefix/$target/lib" would
> need some
> scratching of one's head to get everything in the Solaris2.x C library
> being found
> there.  Much easier is to let it be similar to the native scheme in the
> $sysroot
> (the cross "/" is the $sysroot on the host system).
>
> > -B/opt/toolchains/x86_64-unknown-solaris2.11/bin/
> > -B/opt/toolchains/x86_64-unknown-solaris2.11/lib/
> > -isystem /opt/toolchains/x86_64-unknown-solaris2.11/include
> > -isystem /opt/toolchains/x86_64-unknown-solaris2.11/sys-include
>
> These tell where the target C library will be searched now. Please don't
> ask for what
> purpose the "sys-include" is there.  Just take it as a relic from the
> ancient time when
> someone maybe knew why he/she needed it :) The funny thing is that it
> will be searched
> before the "include" unless the order is the same as given in the
> "-isystem <dir>" options
> (the old order was changed in the 'gcc/cppdefaults.c' or something).
>
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-09-22 16:07 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-22 14:41 Cross build gcc failed.build=x86_64-freebsd target=x86_64-solaris papadave
2020-09-22 15:37 ` Kai Ruottu
2020-09-22 16:07   ` papadave

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).