This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
RE: More questions on sysroots
- From: "Kaz Kylheku" <kaz at zeugmasystems dot com>
- To: "NightStrike" <nightstrike at gmail dot com>, "gcc-help" <gcc-help at gcc dot gnu dot org>
- Date: Thu, 20 Dec 2007 13:22:51 -0800
- Subject: RE: More questions on sysroots
gcc-help-owner@gcc.gnu.org wrote:
> I thought I was doing the right thing for a while, but apparently
> there are still issues. If I want to build a complete toolchain as a
> canadian cross, tar it up, and give it to someone else, I have been
> doing the following for configuring binutils/gcc:
>
> ../gcc-svn/gcc/configure --prefix=/tmp/rt/root
> --with-sysroot=/tmp/rt/root --target=$TARGET
Using the same value for sysroot and prefix is not such a hot idea.
The sysroot corresponds to the root of the target filesystem that you
are building, or a least its toolchain materials, like usr/include and
usr/lib.
This is not where you are installing the cross-compiler (which isn't
even compiled to run on that architecture).
> Will this combinations of options, after tarring up /tmp/rt/root,
> allow that tar to be distributed anywhere, untarred into any
> directory, and run as normal with nothing but a simple change to PATH?
To build a relocatable toolchain (runs in any directory), the sysroot
has to be a subdirectory of the prefix. It doesn't have to correspond to
the prefix itself. It can be anywhere underneath. Exactly where, that's
up to you.
You can just make up some subdirectory and stick it there.
I use the scheme $prefix/$arch_string/root
The reason for adding the architecture to the path is that the toolchain
can, in principle, be built for multiple targets, all installing to the
same prefix. (This is is supported). Yet each target needs a distinct
sysroot under there.
So say you built for arm and mips. You'd end up with
$prefix/bin/mips-*-gcc and $prefix/bin/arm-*-gcc. Your sysroots in this
combo toolchain would be $prefix/arm-*/root and $prefix/mips-*/root.
Here * represents some additional components of the architecture tuple.
In my case this is ``linux'', since that's the target OS; the toolchain
is coupled with a Linux distro. So my C compiler would be:
/path/to/toolchain/bin/mips64-linux-gcc
or alternately:
/path/to/toolchain/mips64-linux/bin/gcc
the sysroot is
/path/to/toolchain/mips64-linux/root
where we find
/path/to/toolchain/mips64-linux/root/usr/include
/path/to/toolchain/mips64-linux/root/usr/lib32
etc. Note that the toolchain itself has lib and include directories:
/path/to/toolchain/{include,lib}
If we made that the sysroot, these would get mixed into the root.