From 3af9fbbd14e83242ac2acb54bbb4bb726845fd34 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Fri, 29 Mar 2013 09:10:06 +0400 Subject: [PATCH 12/47] 64-bit multilib hack. GCC has internal multilib handling code but it assumes a very specific rigid directory layout. The build system implementation of multilib layout is very generic and allows complete customisation of the library directories. This patch is a partial solution to allow any custom directories to be passed into gcc and handled correctly. It forces gcc to use the base_libdir (which is the current directory, "."). We need to do this for each multilib that is configured as we don't know which compiler options may be being passed into the compiler. Since we have a compiler per mulitlib at this point that isn't an issue. The one problem is the target compiler is only going to work for the default multlilib at this point. Ideally we'd figure out which multilibs were being enabled with which paths and be able to patch these entries with a complete set of correct paths but this we don't have such code at this point. This is something the target gcc recipe should do and override these platform defaults in its build config. RP 15/8/11 Signed-off-by: Khem Raj Signed-off-by: Elvis Dowson Upstream-Status: Pending --- gcc/config/i386/t-linux64 | 6 ++---- gcc/config/mips/t-linux64 | 10 +++------- gcc/config/rs6000/t-linux64 | 5 ++--- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/gcc/config/i386/t-linux64 b/gcc/config/i386/t-linux64 index e422c442dae..cc885e24457 100644 --- a/gcc/config/i386/t-linux64 +++ b/gcc/config/i386/t-linux64 @@ -32,7 +32,5 @@ # comma=, MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG)) -MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS))) -MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu) -MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu) -MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32) +MULTILIB_DIRNAMES = . . +MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64 index 100f9da5e14..601cdf08d05 100644 --- a/gcc/config/mips/t-linux64 +++ b/gcc/config/mips/t-linux64 @@ -17,10 +17,6 @@ # . MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64 -MULTILIB_DIRNAMES = n32 32 64 -MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el) -MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft) -MULTILIB_OSDIRNAMES = \ - ../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)) +MULTILIB_DIRNAMES = . . . +MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) + diff --git a/gcc/config/rs6000/t-linux64 b/gcc/config/rs6000/t-linux64 index 2830ed0d861..d057facd2fd 100644 --- a/gcc/config/rs6000/t-linux64 +++ b/gcc/config/rs6000/t-linux64 @@ -26,10 +26,9 @@ # MULTILIB_OSDIRNAMES according to what is found on the target. MULTILIB_OPTIONS := m64/m32 -MULTILIB_DIRNAMES := 64 32 +MULTILIB_DIRNAMES := . . MULTILIB_EXTRA_OPTS := -MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu) -MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu) +MULTILIB_OSDIRNAMES := ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.c $(COMPILE) $< -- 2.12.2