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