This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

simple multilib option


Appended is a patch that adds simple glibc multilib capability.

 scripts/build/libc/glibc-eglibc.sh-common
  main part: do_libc_backend_multilib():
   calls "do_libc_backend" multilib-times with 2 options
   extra_dir="/${dir}" extra_flags="${flags}"
   at the end do_libc_backend_rearrange is called to rearange
   the sysroot directories.
 config/cc/gcc.in.2
   Add CC_MULTILIB option
 patches/gcc/4.6.0/200-sparc-leon.patch
   Multilibbed sparc-leon compile. The multilibbed gcc is
   compiled with Vendor set to "leon3"
 patches/glibc/2.14/400-sparc-leon.patch
   Some fixes to get glibc-2.14 compiled with soft-float
 patches/glibc/2.14/401-s_fma_f.patch
   Some fixes to get glibc-2.14 compiled with soft-float
 scripts/build/binutils/binutils.sh
   add multilib
 scripts/build/cc/gcc.sh
   add multilib

-- Konrad
>From 4852e498b05e4c68f8a2170939a0572bdd45cd6b Mon Sep 17 00:00:00 2001
From: Konrad Eisele <konrad@gaisler.com>
Date: Thu, 10 Nov 2011 15:01:45 +0100
Subject: [PATCH] add multilib option

---

diff --git a/build/lib/ct-ng-/scripts/build/libc/glibc-eglibc.sh-common b/build/lib/ct-ng-/scripts/build/libc/glibc-eglibc.sh-common
index 2af3a9a..3218656 100644
--- a/scripts/build/libc/glibc-eglibc.sh-common
+++ b/scripts/build/libc/glibc-eglibc.sh-common
@@ -57,18 +57,99 @@ do_libc_extract() {
 do_libc_start_files() {
     # Start files and Headers should be configured the same way as the
     # final libc, but built and installed differently.
-    do_libc_backend libc_mode=startfiles
+    do_libc_backend_multilib libc_mode=startfiles
 }
 
 # This function builds and install the full C library
 do_libc() {
-    do_libc_backend libc_mode=final
+    do_libc_backend_multilib libc_mode=final
 }
 
+# installation is done into ${CT_SYSROOT_DIR}/${dir}. The multilib prefix has to be included
+# to reflect the runtime setting.
+do_libc_backend_rearrange() {
+
+    local libc_mode=final
+    
+    while [ $# -ne 0 ]; do
+        eval "${1// /\\ }"
+        shift
+    done
+    
+    if [ "${libc_mode}" = "final" ]; then
+        cross_cc=$(CT_Which "${CT_TARGET}-gcc")
+        for i in `${cross_cc} --print-multi-lib 2>/dev/null`; do
+            dir=`echo $i | sed -e 's/;.*$//'`; 
+           bdir=`echo ${dir} | sed -e 's/\//\\\\\//g'`
+           if [ "${dir}" = "." ]; then 
+               true; 
+           else 
+               flags=`echo $i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
+               CT_DoStep INFO "Fixing up multilib location ${CT_SYSROOT_DIR}/${dir}/lib to ${CT_SYSROOT_DIR}/lib/${dir}"
+               mkdir -p ${CT_SYSROOT_DIR}/lib/${dir}
+               mkdir -p ${CT_SYSROOT_DIR}/usr/lib/${dir}
+           
+               # recreate the symbolic links for multilib 
+               find ${CT_SYSROOT_DIR}/usr/lib/${dir}/ -type l -maxdepth 1 > ${CT_SYSROOT_DIR}/usr/lib/${dir}/links
+               for f in `cat ${CT_SYSROOT_DIR}/usr/lib/${dir}/links`; do
+                   fn=`basename $f`
+                   ln=`readlink $f`
+                   ln=`basename $ln`
+                   pre=`echo ${dir} | awk '{r="";c=split($0,b,"/");for(i=0;i<c;i++){if(i!=0){r=r "/";}r=r "..";}; printf("%s",r); }'`
+                   (cd ${CT_SYSROOT_DIR}/usr/lib/${dir}/; ln -sf ../../${pre}/lib/${dir}/$ln $fn)
+               done
+
+                # rewrite the library multiplexers
+               for l in libc libpthread libgcc_s; do
+                   for d in lib/${dir} usr/lib/${dir}; do
+                       if [ -f "${CT_SYSROOT_DIR}/${d}/${l}.so" -a ! -L ${CT_SYSROOT_DIR}/${d}/${l}.so ]; then
+                           if [ ! -f "${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i" ]; then
+                               cp ${CT_SYSROOT_DIR}/${d}/${l}.so ${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i
+                               cat ${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i | sed -e "s/\/lib\/$l/\/lib\/$bdir\/$l/g" > ${CT_SYSROOT_DIR}/${d}/${l}.so
+                           fi
+                       fi
+                   done
+               done
+               CT_EndStep
+           fi
+        done;
+    fi
+}
+
+# call do_libc_backend <multilib> times with varying <extra_dir> and <extra_flags> options
+do_libc_backend_multilib() {
+    local flags=""; local i; local dir;
+    cross_cc=$(CT_Which "${CT_TARGET}-gcc")
+    if [ "${CT_CC_MULTILIB}" = "y" ]; then
+       CT_DoStep INFO "C Library with multilib"
+       CT_DoStep INFO "C Library with multilib. Flags: \"\" Dir: \"\""
+       # first create <non-multilib> to create ${CT_HEADERS_DIR} dir
+       do_libc_backend "$@"
+       CT_EndStep
+       for i in `${cross_cc} --print-multi-lib 2>/dev/null`; do
+           dir=`echo $i | sed -e 's/;.*$//'`; 
+           if [ "${dir}" = "." ]; then 
+               true; 
+           else 
+               flags=`echo $i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
+               CT_DoStep INFO "C Library with multilib. Flags: \"${flags}\" Dir: \"${dir}\""
+               do_libc_backend "$@" extra_dir="/${dir}" extra_flags="${flags}" 
+               CT_EndStep
+           fi
+       done;
+       do_libc_backend_rearrange
+       CT_EndStep
+    else
+       do_libc_backend "$@"
+    fi
+}		       
+
 do_libc_backend() {
     local src_dir="${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}"
     local libc_mode=final
     local extra_cc_args
+    local extra_dir=""; local extra_dir_p;
+    local extra_flags=""
     local -a extra_config
     local -a extra_make_args
     local glibc_cflags
@@ -77,15 +158,16 @@ do_libc_backend() {
         eval "${1// /\\ }"
         shift
     done
-
+    extra_dir_p=`echo ${extra_dir} | sed -e 's/\///g'`
+	
     if [ "${libc_mode}" = "startfiles" ]; then
         CT_DoStep INFO "Installing C library headers & start files"
-        mkdir -p "${CT_BUILD_DIR}/build-libc-start-files"
-        cd "${CT_BUILD_DIR}/build-libc-start-files"
+        mkdir -p "${CT_BUILD_DIR}/build-libc-start-files${extra_dir_p}"
+        cd "${CT_BUILD_DIR}/build-libc-start-files${extra_dir_p}"
     else # libc_mode = final
         CT_DoStep INFO "Installing C library"
-        mkdir -p "${CT_BUILD_DIR}/build-libc"
-        cd "${CT_BUILD_DIR}/build-libc"
+        mkdir -p "${CT_BUILD_DIR}/build-libc${extra_dir_p}"
+        cd "${CT_BUILD_DIR}/build-libc${extra_dir_p}"
     fi
 
     CT_DoLog EXTRA "Configuring C library"
@@ -133,7 +215,13 @@ do_libc_backend() {
     esac
 
     case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
-        y,) extra_config+=("--with-fp");;
+        y,) # if it is a <multilib> build then check if -msoft-float is given
+	    if [ "x`expr "${extra_flags}" : '.*-msoft-float.*'`" != "x0" ]; then
+	    	extra_config+=("--with-fp=no");
+	    else
+	    	extra_config+=("--with-fp");
+	    fi
+	    ;;
         ,y) extra_config+=("--without-fp");;
     esac
 
@@ -173,7 +261,7 @@ do_libc_backend() {
     CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'"
     CT_DoLog DEBUG "Extra CC args passed    : '${extra_cc_args}'"
 
-    glibc_cflags="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} ${OPTIMIZE}"
+    glibc_cflags="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} ${OPTIMIZE} ${extra_flags}"
     case "${CT_LIBC_ENABLE_FORTIFIED_BUILD}" in
         y)  ;;
         *)  glibc_cflags+=" -U_FORTIFY_SOURCE";;
@@ -236,7 +324,7 @@ do_libc_backend() {
         # use the 'install-headers' makefile target to install the
         # headers
         CT_DoExecLog ALL make ${JOBSFLAGS}              \
-                         install_root=${CT_SYSROOT_DIR} \
+                         install_root=${CT_SYSROOT_DIR}${extra_dir} \
                          install-bootstrap-headers=yes  \
                          "${extra_make_args[@]}"        \
                          install-headers
@@ -273,12 +361,12 @@ do_libc_backend() {
 
             # there are a few object files needed to link shared libraries,
             # which we build and install by hand
-            CT_DoExecLog ALL mkdir -p "${CT_SYSROOT_DIR}/usr/lib"
+            CT_DoExecLog ALL mkdir -p "${CT_SYSROOT_DIR}${extra_dir}/usr/lib"
             CT_DoExecLog ALL make ${JOBSFLAGS}  \
                         "${extra_make_args[@]}" \
                         csu/subdir_lib
             CT_DoExecLog ALL cp csu/crt1.o csu/crti.o csu/crtn.o \
-                                "${CT_SYSROOT_DIR}/usr/lib"
+                                "${CT_SYSROOT_DIR}${extra_dir}/usr/lib"
 
             # Finally, 'libgcc_s.so' requires a 'libc.so' to link against.
             # However, since we will never actually execute its code,
@@ -288,9 +376,13 @@ do_libc_backend() {
                                            -nostartfiles    \
                                            -shared          \
                                            -x c /dev/null   \
-                                           -o "${CT_SYSROOT_DIR}/usr/lib/libc.so"
+                                           -o "${CT_SYSROOT_DIR}${extra_dir}/usr/lib/libc.so"
         fi # threads == nptl
     else # libc_mode = final
+        CT_DoLog EXTRA "Prepare C library"
+        CT_DoExecLog ALL make ${JOBSFLAGS}                      \
+                              "${extra_make_args[@]}"           \
+                              clean
         CT_DoLog EXTRA "Building C library"
         CT_DoExecLog ALL make ${JOBSFLAGS}                      \
                               "${extra_make_args[@]}"           \
@@ -299,7 +391,7 @@ do_libc_backend() {
         CT_DoLog EXTRA "Installing C library"
         CT_DoExecLog ALL make ${JOBSFLAGS}                      \
                               "${extra_make_args[@]}"           \
-                              install_root="${CT_SYSROOT_DIR}"  \
+                              install_root="${CT_SYSROOT_DIR}${extra_dir}"  \
                               install
 
         if [ "${CT_LIBC_LOCALES}" = "y" ]; then
diff --git a/config/cc/gcc.in.2 b/config/cc/gcc.in.2
index 35a1070..8fe3a2e 100644
--- a/config/cc/gcc.in.2
+++ b/config/cc/gcc.in.2
@@ -1,4 +1,10 @@
 # gcc configuration options
+config CC_MULTILIB
+    bool
+    prompt "enable multilib"
+    default n
+    help
+      Enable multilib build of libc
 
 config CC_ENABLE_CXX_FLAGS
     string
@@ -11,6 +17,7 @@ config CC_ENABLE_CXX_FLAGS
       Note: just pass in the option _value_, that is only the part that goes
       after the '=' sign.
 
+      
 config CC_CORE_EXTRA_CONFIG_ARRAY
     string
     prompt "Core gcc extra config"
diff --git a/patches/gcc/4.6.0/200-sparc-leon.patch b/patches/gcc/4.6.0/200-sparc-leon.patch
index 5a92838..1d97105 100644
--- a/patches/gcc/4.6.0/200-sparc-leon.patch
+++ b/patches/gcc/4.6.0/200-sparc-leon.patch
@@ -105,10 +105,10 @@ index 1c2ba93..5aadff6 100644
      { TARGET_CPU_ultrasparc3, "ultrasparc3" },
      { TARGET_CPU_niagara, "niagara" },
      { TARGET_CPU_niagara2, "niagara2" },
-+    { TARGET_CPU_sparchfleon, "sparchfleon" },
-+    { TARGET_CPU_sparchfleonv8, "sparchfleonv8" },
-+    { TARGET_CPU_sparcsfleon, "sparcsfleon" },
-+    { TARGET_CPU_sparcsfleonv8, "sparcsfleonv8" },
++    { TARGET_CPU_sparchfleon, "hfleon" },
++    { TARGET_CPU_sparchfleonv8, "hfleonv8" },
++    { TARGET_CPU_sparcsfleon, "sfleon" },
++    { TARGET_CPU_sparcsfleonv8, "sfleonv8" },
      { 0, 0 }
    };
    const struct cpu_default *def;
@@ -119,10 +119,10 @@ index 1c2ba93..5aadff6 100644
 -    { "leon",       PROCESSOR_LEON, MASK_ISA, MASK_V8|MASK_FPU },
 +    { "leon",       PROCESSOR_LEON, MASK_ISA, MASK_FPU },
      { "sparclite",  PROCESSOR_SPARCLITE, MASK_ISA, MASK_SPARCLITE },
-+    { "sparchfleon",   PROCESSOR_LEON, MASK_ISA, MASK_FPU },
-+    { "sparchfleonv8", PROCESSOR_LEON, MASK_ISA & ~(MASK_V8), MASK_V8|MASK_FPU },
-+    { "sparcsfleon",   PROCESSOR_LEON, MASK_ISA | MASK_FPU, 0 },
-+    { "sparcsfleonv8", PROCESSOR_LEON, (MASK_ISA | MASK_FPU) & ~(MASK_V8), MASK_V8 },
++    { "hfleon",   PROCESSOR_LEON, MASK_ISA, MASK_FPU },
++    { "hfleonv8", PROCESSOR_LEON, MASK_ISA & ~(MASK_V8), MASK_V8|MASK_FPU },
++    { "sfleon",   PROCESSOR_LEON, MASK_ISA | MASK_FPU, 0 },
++    { "sfleonv8", PROCESSOR_LEON, (MASK_ISA | MASK_FPU) & ~(MASK_V8), MASK_V8 },
      /* The Fujitsu MB86930 is the original sparclite chip, with no FPU.  */
      { "f930",       PROCESSOR_F930, MASK_ISA|MASK_FPU, MASK_SPARCLITE },
      /* The Fujitsu MB86934 is the recent sparclite chip, with an FPU.  */
@@ -197,10 +197,10 @@ index 297844f..5e28646 100644
  %{mcpu=ultrasparc3:-D__sparc_v9__} \
  %{mcpu=niagara:-D__sparc_v9__} \
  %{mcpu=niagara2:-D__sparc_v9__} \
-+%{mcpu=sparchfleon:-D__leon__} \
-+%{mcpu=sparchfleonv8:-D__leon__ -D__sparc_v8__} \
-+%{mcpu=sparcsfleon:-D__leon__ -D_SOFT_FLOAT} \
-+%{mcpu=sparcsfleonv8:-D__leon__ -D_SOFT_FLOAT -D__sparc_v8__} \
++%{mcpu=hfleon:-D__leon__} \
++%{mcpu=hfleonv8:-D__leon__ -D__sparc_v8__} \
++%{mcpu=sfleon:-D__leon__ -D_SOFT_FLOAT} \
++%{mcpu=sfleonv8:-D__leon__ -D_SOFT_FLOAT -D__sparc_v8__} \
  %{!mcpu*:%(cpp_cpu_default)} \
  "
  #define CPP_ARCH32_SPEC ""
@@ -209,10 +209,10 @@ index 297844f..5e28646 100644
  %{mcpu=f930:-Asparclite} %{mcpu=f934:-Asparclite} \
  %{mv8plus:-Av8plus} \
 +%{mcpu=leon:-Aleon} \
-+%{mcpu=sparchfleon:-Aleon} \
-+%{mcpu=sparchfleonv8:-Aleon} \
-+%{mcpu=sparcsfleon:-Aleon} \
-+%{mcpu=sparcsfleonv8:-Aleon} \
++%{mcpu=hfleon:-Aleon} \
++%{mcpu=hfleonv8:-Aleon} \
++%{mcpu=sfleon:-Aleon} \
++%{mcpu=sfleonv8:-Aleon} \
  %{mcpu=v9:-Av9} \
  %{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
  %{mcpu=ultrasparc3:%{!mv8plus:-Av9b}} \
diff --git a/patches/glibc/2.14/400-sparc-leon.patch b/patches/glibc/2.14/400-sparc-leon.patch
new file mode 100644
index 0000000..dcf8219
--- /dev/null
+++ b/patches/glibc/2.14/400-sparc-leon.patch
@@ -0,0 +1,85 @@
+diff -Naur glibc-2.14.ori/math/math.h glibc-2.14.p2/math/math.h
+--- glibc-2.14.ori/math/math.h	2011-05-31 06:12:33.000000000 +0200
++++ glibc-2.14.p2/math/math.h	2011-11-10 17:03:08.000000000 +0100
+@@ -396,7 +396,7 @@
+ # define __NO_MATH_INLINES	1
+ #endif
+ 
+-#if defined __USE_ISOC99 && __GNUC_PREREQ(2,97)
++#if (!(defined(__sparc__) &&  defined(_SOFT_FLOAT))) && defined __USE_ISOC99 && __GNUC_PREREQ(2,97)
+ /* ISO C99 defines some macros to compare number while taking care for
+    unordered numbers.  Many FPUs provide special instructions to support
+    these operations.  Generic support in GCC for these as builtins went
+diff -Naur glibc-2.14.ori/sysdeps/sparc/fpu/bits/mathinline.h glibc-2.14.p2/sysdeps/sparc/fpu/bits/mathinline.h
+--- glibc-2.14.ori/sysdeps/sparc/fpu/bits/mathinline.h	2011-05-31 06:12:33.000000000 +0200
++++ glibc-2.14.p2/sysdeps/sparc/fpu/bits/mathinline.h	2011-11-10 17:03:35.000000000 +0100
+@@ -232,6 +232,9 @@
+ 
+ /* This code is used internally in the GNU libc.  */
+ #  ifdef __LIBC_INTERNAL_MATH_INLINES
++
++#ifndef _SOFT_FLOAT
++
+ __MATH_INLINE double
+ __ieee754_sqrt (double __x)
+ {
+@@ -248,6 +251,8 @@
+   return __r;
+ }
+ 
++#endif
++
+ #   if __WORDSIZE == 64
+ __MATH_INLINE long double
+ __ieee754_sqrtl (long double __x)
+diff -Naur glibc-2.14.ori/sysdeps/sparc/fpu/fraiseexcpt.c glibc-2.14.p2/sysdeps/sparc/fpu/fraiseexcpt.c
+--- glibc-2.14.ori/sysdeps/sparc/fpu/fraiseexcpt.c	2011-05-31 06:12:33.000000000 +0200
++++ glibc-2.14.p2/sysdeps/sparc/fpu/fraiseexcpt.c	2011-11-10 17:03:58.000000000 +0100
+@@ -32,6 +32,10 @@
+   };
+   double d;
+ 
++#ifdef _SOFT_FLOAT
++#define __asm(...)
++#endif
++  
+   /* Raise exceptions represented by EXPECTS.  But we must raise only
+      one signal at a time.  It is important the if the overflow/underflow
+      exception and the inexact exception are given at the same time,
+diff -Naur glibc-2.14.ori/sysdeps/sparc/sparc32/Makefile glibc-2.14.p2/sysdeps/sparc/sparc32/Makefile
+--- glibc-2.14.ori/sysdeps/sparc/sparc32/Makefile	2011-05-31 06:12:33.000000000 +0200
++++ glibc-2.14.p2/sysdeps/sparc/sparc32/Makefile	2011-11-10 17:04:56.000000000 +0100
+@@ -24,6 +24,11 @@
+ CFLAGS-initfini.s += -mcpu=v7
+ endif
+ 
++ifeq ($(with-fp),no)
+++cflags += -msoft-float -D_SOFT_FLOAT
++sysdep-LDFLAGS += -msoft-float
++endif
++
+ # We distribute these files, even though they are generated,
+ # so as to avoid the need for a functioning m4 to build the library.
+ divrem := sdiv udiv rem urem
+diff -Naur glibc-2.14.ori/sysdeps/sparc/sparc32/e_sqrt.c glibc-2.14.p2/sysdeps/sparc/sparc32/e_sqrt.c
+--- glibc-2.14.ori/sysdeps/sparc/sparc32/e_sqrt.c	2011-05-31 06:12:33.000000000 +0200
++++ glibc-2.14.p2/sysdeps/sparc/sparc32/e_sqrt.c	2011-11-10 17:04:24.000000000 +0100
+@@ -23,6 +23,8 @@
+   #error This file uses GNU C extensions; you must compile with GCC.
+ #endif
+ 
++#ifndef _SOFT_FLOAT
++
+ /* Return the square root of X.  */
+ double
+ __ieee754_sqrt (x)
+@@ -32,3 +34,9 @@
+   asm ("fsqrtd %1, %0" : "=f" (result) : "f" (x));
+   return result;
+ }
++#else 
++
++#include <sysdeps/ieee754/dbl-64/e_sqrt.c>
++
++#endif
++
diff --git a/patches/glibc/2.14/401-s_fma_f.patch b/patches/glibc/2.14/401-s_fma_f.patch
new file mode 100644
index 0000000..071dd9c
--- /dev/null
+++ b/patches/glibc/2.14/401-s_fma_f.patch
@@ -0,0 +1,52 @@
+diff -Naur glibc-2.14.base/sysdeps/ieee754/dbl-64/s_fmaf.c glibc-2.14/sysdeps/ieee754/dbl-64/s_fmaf.c
+--- glibc-2.14.base/sysdeps/ieee754/dbl-64/s_fmaf.c	2011-11-11 09:48:40.000000000 +0100
++++ glibc-2.14/sysdeps/ieee754/dbl-64/s_fmaf.c	2011-11-11 10:03:51.000000000 +0100
+@@ -18,6 +18,10 @@
+    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.  */
+ 
++#ifdef _SOFT_FLOAT
++#include <math/s_fmaf.c>
++#else
++
+ #include <math.h>
+ #include <fenv.h>
+ #include <ieee754.h>
+@@ -48,3 +52,4 @@
+ #ifndef __fmaf
+ weak_alias (__fmaf, fmaf)
+ #endif
++#endif
+diff -Naur glibc-2.14.base/sysdeps/ieee754/ldbl-opt/s_fma.c glibc-2.14/sysdeps/ieee754/ldbl-opt/s_fma.c
+--- glibc-2.14.base/sysdeps/ieee754/ldbl-opt/s_fma.c	2011-11-11 09:48:40.000000000 +0100
++++ glibc-2.14/sysdeps/ieee754/ldbl-opt/s_fma.c	2011-11-11 10:00:13.000000000 +0100
+@@ -1,5 +1,9 @@
+ #include <math_ldbl_opt.h>
++#ifdef _SOFT_FLOAT
++#include <math/s_fma.c>
++#else
+ #include <sysdeps/ieee754/dbl-64/s_fma.c>
++#endif
+ #if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+ compat_symbol (libm, __fma, fmal, GLIBC_2_1);
+ #endif
+diff -Naur glibc-2.14.ori/sysdeps/ieee754/ldbl-128/s_fmal.c glibc-2.14/sysdeps/ieee754/ldbl-128/s_fmal.c
+--- glibc-2.14.ori/sysdeps/ieee754/ldbl-128/s_fmal.c    2011-11-11 11:03:30.000000000 +0100
++++ glibc-2.14/sysdeps/ieee754/ldbl-128/s_fmal.c        2011-11-11 11:07:32.000000000 +0100
+@@ -18,6 +18,10 @@
+    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.  */
+
++#ifdef _SOFT_FLOAT
++#include <math/s_fmal.c>
++#else
++
+ #include <float.h>
+ #include <math.h>
+ #include <fenv.h>
+@@ -221,3 +225,5 @@
+     }
+ }
+ weak_alias (__fmal, fmal)
++
++#endif
diff --git a/scripts/build/binutils/binutils.sh b/scripts/build/binutils/binutils.sh
index e082590..7969b13 100644
--- a/scripts/build/binutils/binutils.sh
+++ b/scripts/build/binutils/binutils.sh
@@ -60,6 +60,12 @@ do_binutils() {
         [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
     fi
 
+    if [ "${CT_CC_MULTILIB}" = "n" ]; then
+        extra_config+=("--disable-multilib")
+    else
+        extra_config+=("--enable-multilib")
+    fi
+    
     CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
 
     CT_DoExecLog CFG                                            \
@@ -71,7 +77,6 @@ do_binutils() {
         --target=${CT_TARGET}                                   \
         --prefix=${CT_PREFIX_DIR}                               \
         --disable-nls                                           \
-        --disable-multilib                                      \
         --disable-werror                                        \
         "${extra_config[@]}"                                    \
         ${CT_ARCH_WITH_FLOAT}                                   \
@@ -151,7 +156,13 @@ do_binutils_target() {
             extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
             [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
         fi
-
+	
+	if [ "${CT_CC_MULTILIB}" = "n" ]; then
+            extra_config+=("--disable-multilib")
+	else
+            extra_config+=("--enable-multilib")
+	fi
+    
         CT_DoExecLog CFG                                            \
         "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
             --build=${CT_BUILD}                                     \
@@ -162,7 +173,6 @@ do_binutils_target() {
             --enable-shared                                         \
             --enable-static                                         \
             --disable-nls                                           \
-            --disable-multilib                                      \
             "${extra_config[@]}"                                    \
             ${CT_ARCH_WITH_FLOAT}                                   \
             "${CT_BINUTILS_EXTRA_CONFIG[@]}"
diff --git a/scripts/build/cc/gcc.sh b/scripts/build/cc/gcc.sh
index 05df729..e496803 100644
--- a/scripts/build/cc/gcc.sh
+++ b/scripts/build/cc/gcc.sh
@@ -288,6 +288,12 @@ do_cc_core() {
     extra_config+=(--disable-libgomp)
     extra_config+=(--disable-libmudflap)
 
+   if [ "${CT_CC_MULTILIB}" = "n" ]; then
+        extra_config+=("--disable-multilib")
+    else
+        extra_config+=("--enable-multilib")
+    fi
+     
     CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
 
     # Use --with-local-prefix so older gccs don't look in /usr/local (http://gcc.gnu.org/PR10532)
@@ -301,7 +307,6 @@ do_cc_core() {
         --target=${CT_TARGET}                       \
         --prefix="${core_prefix_dir}"               \
         --with-local-prefix="${CT_SYSROOT_DIR}"     \
-        --disable-multilib                          \
         --disable-libmudflap                        \
         ${CC_CORE_SYSROOT_ARG}                      \
         "${extra_config[@]}"                        \
@@ -424,7 +429,13 @@ do_cc() {
     lang_opt=$(echo "${lang_opt},${CT_CC_LANG_OTHERS}" |sed -r -e 's/,+/,/g; s/,*$//;')
 
     extra_config+=("--enable-languages=${lang_opt}")
-    extra_config+=("--disable-multilib")
+    
+    if [ "${CT_CC_MULTILIB}" = "n" ]; then
+        extra_config+=("--disable-multilib")
+    else
+        extra_config+=("--enable-multilib")
+    fi
+ 
     for tmp in ARCH ABI CPU TUNE FPU FLOAT; do
         eval tmp="\${CT_ARCH_WITH_${tmp}}"
         if [ -n "${tmp}" ]; then
-- 
1.6.5.4


--
For unsubscribe information see http://sourceware.org/lists.html#faq

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