This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Cross compiling and multiple sysroot question


On Thu, 2015-01-08 at 22:12 +0000, Joseph Myers wrote:
> On Thu, 8 Jan 2015, Steve Ellcey  wrote:
> 
> > So I set these macros and SPECs:
> > 	# m32 and be are defaults
> > 	MULTILIB_OPTIONS = m64 mel		   # In makefile fragment
> > 	MULTILIB_DIRNAMES = 64 el		   # In makefile fragment
> > 	MULTILIB_OSDIRNAMES = m64=../lib64	   # In makefile fragment
> 
> In my experience, for such cases it's best to list all multilibs 
> explicitly in MULTILIB_OSDIRNAMES, and then to specify 
> STARTFILE_PREFIX_SPEC as well along the lines of:
> 
> #define STARTFILE_PREFIX_SPEC                           \
>   "%{mabi=32: /usr/local/lib/ /lib/ /usr/lib/}          \
>    %{mabi=n32: /usr/local/lib32/ /lib32/ /usr/lib32/}   \
>    %{mabi=64: /usr/local/lib64/ /lib64/ /usr/lib64/}"

Thanks for the help Joseph, this combination worked and I was able to
build a working GCC using this setup.

> GCC never installs anything inside the sysroot (it could be a read-only 
> mount of the target's root filesystem, for example).  Listing all 
> multilibs explicitly (multilib=dir or multilib=!dir) in 
> MULTILIB_OSDIRNAMES allows you to ensure they don't overwrite each other.

GCC never installs anything inside sysroot's but some tools that people
have developed to build cross compiler toolchains copy the shared libgcc
libraries (libgcc_s, libstdc++, etc) from the GCC install area into
sysroot as part of the build of a cross compiler toolchain.

I was wondering if I could use the explicit list of MULTILIB_OSDIRNAMES
entries to layout those libraries in a way that would make it easy to
copy them into a sysroot if I wanted to.  The only thing I am not sure
about if there is a way to specify where I want the default (no option)
libraries to go.

I.e. I can use:

MULTILIB_OSDIRNAMES += mips64r2=mipsr2/lib32
MULTILIB_OSDIRNAMES += mips64r2/mabi.64=mipsr2/lib64

To create a mipsr2/lib32 and mipsr2/lib64 directory under <target>/lib
for libgcc_s but I would like the default libraries in
<target>/lib/mipsr2/lib instead of directly in <target>/lib.  That way I
could use a single copy to put all of <target>/lib/mipsr2 into my
sysroot.  Do you know if either of these would work:

MULTILIB_OSDIRNAMES += mips32r2=mipsr2/lib
MULTILIB_OSDIRNAMES += .=mipsr2/lib

I don't think the first one would work because -mips32r2 is the default
architecture and is not explicitly listed in MULTILIB_OPTIONS and I
don't think the second form is supported at all, but maybe there is some
other way to specify the location of the default libraries?

Steve Ellcey
sellcey@imgtec.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]