This is the mail archive of the
mailing list for the GCC project.
Re: Fwd: Re: [PATCH]. Fix HAVE_SYS_SDT_H for cross-compilation
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: Christian Bruel <christian dot bruel at st dot com>
- Cc: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 30 Aug 2013 15:50:40 +0000
- Subject: Re: Fwd: Re: [PATCH]. Fix HAVE_SYS_SDT_H for cross-compilation
- Authentication-results: sourceware.org; auth=none
- References: <52209AA8 dot 1080607 at st dot com> <52209CAD dot 9060402 at st dot com>
On Fri, 30 Aug 2013, Christian Bruel wrote:
> So to cross build a target library |
> --with-build-sysroot=|dir looks appropriate to specify the alternative
> host root path.
> --with-sysroot looks not appropriate because it changes the search paths
> (that should still be /usr/include on the target tree).
If you are building a cross compiler to a target such as GNU/Linux for
which the concept of native directory arrangements makes sense, then you
need --with-sysroot. That specifies the directory that the final
installed compiler will use to find headers and libraries (as modified by
sysroot suffixes and the usual relocation if the compiler is installed
somewhere other than its configured prefix).
If, when you are building such a compiler, the sysroot is located
somewhere other than the location specified with --with-sysroot, then you
need --with-build-sysroot as well. That's the entire purpose of
--with-build-sysroot: the case where the build-time location of the
sysroot for a sysrooted compiler you are building differs from the
configured location given with --with-sysroot.
I don't see what your use is for a cross compiler without --with-sysroot.
It's simply not correct for the installed cross compiler to search
/usr/include, and if you don't specify a sysroot at all then it will just
search directories such as <target>/include and <target>/lib under the
installation (which cannot represent the complexity of standard GNU/Linux
directory arrangements; note the absolute paths, intended to be
interpreted relative to a sysroot, in the libc.so linker script from
glibc, for example), so that compiler needs a sysroot.
All the above is about cross compilers - compilers with $host != $target.
Your patch suggests you are actually using a cross compiler to build a
native compiler - $build != $host == $target. In that case, it's best not
to build target libraries at all, as they will already have been built
with the $build-x-$target cross compiler that must have previously been
built from the same GCC sources, with the same configuration. That is,
"make all-host" and "make install-host", and copy the libraries from the
previous build. And since you already have such a $build-x-$target
compiler, it would seem best to determine what directory that compiler
actually searches for headers and compute target_header_dir that way, to
the extent that the target headers need examining to determine
configuration of the compiler proper.
Joseph S. Myers