This is the mail archive of the gcc-patches@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: [patch] set MULTIARCH_DIRNAME for multilib architectures


On Wed, Nov 27, 2013 at 12:55:54PM +0100, Bernhard Reutner-Fischer wrote:
> On 27 November 2013 11:10, Aurelien Jarno <aurel32@debian.org> wrote:
> > On Thu, Jun 20, 2013 at 02:26:12PM +0200, Matthias Klose wrote:
> >> Am 13.06.2013 11:42, schrieb Richard Sandiford:
> >> > "Bernhard Reutner-Fischer" <rep.dot.nop@gmail.com> writes:
> >> >> On 12 June 2013 20:20:50 Richard Sandiford <rdsandiford@googlemail.com> wrote:
> >> >>> Matthias Klose <doko@ubuntu.com> writes:
> >> >>>> Index: config/mips/t-linux64
> >> >>>> ===================================================================
> >> >>>> --- config/mips/t-linux64        (revision 200012)
> >> >>>> +++ config/mips/t-linux64        (working copy)
> >> >>>> @@ -24,3 +24,13 @@
> >> >>>>          ../lib32$(call
> >> >>> if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
> >> >>>>          ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
> >> >>>>          ../lib64$(call
> >> >>>> if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
> >> >>>> +
> >> >>>> +ifneq (,$(findstring abin32,$(target)))
> >> >>>> +MULTIARCH_DIRNAME = $(call
> >> >>> if_multiarch,mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT))
> >> >>>> +else
> >> >>>> +ifneq (,$(findstring abi64,$(target)))
> >> >>>> +MULTIARCH_DIRNAME = $(call
> >> >>> if_multiarch,mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
> >> >>>> +else
> >> >>>> +MULTIARCH_DIRNAME = $(call
> >> >>> if_multiarch,mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT))
> >> >>>> +endif
> >> >>>> +endif
> >> >>>
> >> >>> findstring seems a bit fragile for a full triple.  I think it would
> >> >>> be better to have something similar to the current MIPS_SOFT definition:
> >> >>>
> >> >>> MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI,
> >> >>> $(target_cpu_default)) $(filter soft, $(with_float))),soft)
> >> >>>
> >> >>> but for ABIs.  It could then also take with_abi into account.
> >> >>> Maybe something like:
> >> >>>
> >> >>> MIPS_ABI = $(or $(with_abi), \
> >> >>>                 $(if $(filter MIPS_ABI_DEFAULT=ABI_N32, \
> >> >>>                         $(target_cpu_default)), n32), \
> >> >>>                 o32)
> >> >>>
> >> >>> (completely untested).
> >> >>
> >> >> Bikeshedding:
> >> >> Doko would know, but ISTR that $(or) did not exist in make-3.80 which is
> >> >> currently the minimum prerequisite, fwiw.
> >> >
> >> > Gah, that's a pity.  Thanks for the catch though.  Maybe firstword
> >> > would be OK instead.
> >> >
> >> > I see I also fell into the usual ABI trap.  It wouldn't have affected
> >> > the use in this patch, but the default ought to be "32" rather than "o32".
> >>
> >> the define is in tm_defines, not target_cpu_default.
> >>
> >> MIPS_ABI = $(or $(with_abi), \
> >>                 $(if $(filter MIPS_ABI_DEFAULT=ABI_N32, \
> >>                             $(tm_defines)), n32), \
> >>                  32)
> >>
> >> However I can't see yet how this should be used. Maybe Aurelian could come up
> >> with a tested version of this patch?
> >>
> >
> > How about the patch below?
> >
> > It first determines the ABI without using $(or), by looking (in this
> > order) for $(with_abi), $(tm_defines) and $(target), defaulting to 32
> > if none of the previous matches.
> >
> > Then the multiarch path is constructed from the ABI.
> >
> > Index: gcc/config/mips/t-linux64
> > ===================================================================
> > --- gcc/config/mips/t-linux64   (révision 205437)
> > +++ gcc/config/mips/t-linux64   (copie de travail)
> > @@ -24,3 +24,22 @@
> >         ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
> >         ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
> >         ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
> > +
> > +ifneq ($(with_abi),)
> > +MIPS_ABI = $(with_abi)
> > +endif
> > +ifeq ($(MIPS_ABI),)
> > +MIPS_ABI=$(if $(strip $(filter MIPS_ABI_DEFAULT=ABI_N32, $(tm_defines))),n32)
> > +endif
> > +ifeq ($(MIPS_ABI),)
> > +MIPS_ABI = $(subst abi,,$(subst gnu,,$(lastword $(subst -, ,$(target)))))
> > +endif
> > +ifeq ($(MIPS_ABI),)
> > +MIPS_ABI=32
> > +endif
> > +
> > +ifeq ($(MIPS_ABI),32)
> > +MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT))
> > +else
> > +MULTIARCH_DIRNAME = $(call if_multiarch,mips64$(MIPS_EL)-linux-gnuabi$(MIPS_ABI)$(MIPS_SOFT))
> 
> hm, shouldn't this be gnueabi with an 'e'  or is that implied for n64 anyway?
> just curious..
> thanks,

This is correct, the abis are n32 and 64. MIPS EABI is another ABI which
hasn't really existed in practice.

-- 
Aurelien Jarno	                        GPG: 1024D/F1BCDB73
aurelien@aurel32.net                 http://www.aurel32.net


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