[J-core] [musl] musl-cross-make / litecross improvements

Rich Felker dalias at libc.org
Fri May 6 01:14:29 EDT 2016


On Tue, May 03, 2016 at 11:57:05PM +0200, Szabolcs Nagy wrote:
> * Szabolcs Nagy <nsz at port70.net> [2016-05-03 22:16:22 +0200]:
> > * Rich Felker <dalias at libc.org> [2016-05-03 14:02:30 -0400]:
> > > On Tue, May 03, 2016 at 01:39:43PM +0200, Szabolcs Nagy wrote:
> > > > i think the usr/ and lib64/ symlinks are useful
> > > > (so it can be used as rootfs without fiddling
> > > > with etc/ld-musl*.path).
> > > 
> > > Yes. Is there a good way to override that in gcc or should we just
> > > make the symlinks?
> > > 
> > 
> > output/lib64 can be eliminated by
> > COMMON_CONFIG += --libdir=/lib
> > 
> > output/x86_64-linux-musl/lib64 install path is trickier:
> > it is controlled by the $toolexeclibdir make variable.
> > which is set according to $CC -print-multi-os-directory
> > which is controlled by multilib and multilib_defaults from
> > $CC -dumpspecs which comes from multilib.h generated by
> > genmultilib based on parameters from config/i386/t-linux64
> > 
> 
> it was not clear if the t-linux64 thing could be overridden, but
> 
> GCC_CONFIG += --with-multilib-list=
> 
> fixes it (the lib dir is lib/ then).

I've looked into this more, and while I think your approach works in
practice, I'm a bit concerned that --with-multilib-list= is processed
per-target and in theory the blank list might break something. I tried
x86_64, sh, and aarch64, but several other archs remain, I think.

The root cause of this bug seems to be a broken conditional in
gcc/Makefile.in; for the s-mlib rule, the condition for building
multilib layout is:

	if test @enable_multilib@ = yes \
	   || test -n "$(MULTILIB_OSDIRNAMES)"; then \

I believe the || should have been &&.

In any case, forcing MULTILIB_OSDIRNAMES= on the make command line
seems like a viable solution. I'm testing it now and I'll probably
commit as long as it works.

Rich


More information about the J-core mailing list