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....@gmail.com> writes:
> >> On 12 June 2013 20:20:50 Richard Sandiford <rdsandif...@googlemail.com> 
> >> wrote:
> >>> Matthias Klose <d...@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))
+endif

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

Reply via email to