Added multilib support to SAT. Now floatingpoint support should work and we should...
authorPiotr Esden-Tempski <piotr@esden.net>
Thu, 17 Feb 2011 03:54:01 +0000 (19:54 -0800)
committerPiotr Esden-Tempski <piotr@esden.net>
Thu, 17 Feb 2011 03:54:01 +0000 (19:54 -0800)
README
patches/patch-gcc-config-arm-t-arm-elf.diff [new file with mode: 0644]
summon-arm-toolchain

diff --git a/README b/README
index db891fe..5e4bf55 100644 (file)
--- a/README
+++ b/README
@@ -42,6 +42,23 @@ apt-get build-dep gcc-4.5
 For xml support in gdb you may want to install libexpat1 and libexpat1-dev 
 too. 
 
+Usage notes:
+------------
+
+As we support multilib now in SAT thanks to Eric Parsonage's and Bernard
+Davison's amazing work. You want to use the following GCC flag combinations to
+generate full fledged floating point supporting code for some selected
+architectures.
+
+* stm32 (probably cortex-m3 in general): -mthumb -march=armv7 -mfix-cortex-m3-ldrd -msoft-float
+* lpc21 (thumb instruction set): -mthumb -msoft-float
+* lpc21 (arm instruction set): -mthumb -march=armv4t -msoft-float
+
+If you need support for some other arm mcu and know the parameters for it just drop us a line and we will add that combination to the multilibs.
+
+You can list available combinations by running:
+arm-none-eabi-gcc -print-multi-lib
+
 How to submit improvements and patches
 --------------------------------------
 As more and more people start to submit patches and improvements to
diff --git a/patches/patch-gcc-config-arm-t-arm-elf.diff b/patches/patch-gcc-config-arm-t-arm-elf.diff
new file mode 100644 (file)
index 0000000..6186518
--- /dev/null
@@ -0,0 +1,74 @@
+--- gcc/config/arm/t-arm-elf.orig      2011-02-03 10:41:08.000000000 +1100
++++ gcc/config/arm/t-arm-elf   2011-02-03 10:44:22.000000000 +1100
+@@ -31,10 +31,55 @@
+       _arm_floatdidf _arm_floatdisf _arm_floatundidf _arm_floatundisf \
+       _clzsi2 _clzdi2 
+-MULTILIB_OPTIONS     = marm/mthumb
+-MULTILIB_DIRNAMES    = arm thumb
+-MULTILIB_EXCEPTIONS  = 
++# We build 4 multilibs:
++#  ./            (default)
++#  thumb/        -mthumb
++#  thumb2/       -mthumb -march=armv7
++#  armv4t/      -mthumb -march=armv4t
++
++MULTILIB_OPTIONS     = mthumb
++MULTILIB_DIRNAMES    = thumb
++MULTILIB_EXCEPTIONS  =
+ MULTILIB_MATCHES     =
++MULTILIB_EXTRA_OPTS  += msoft-float
++
++MULTILIB_OPTIONS      += march=armv7/march=armv4t
++MULTILIB_DIRNAMES     += v7 v4t
++MULTILIB_EXCEPTIONS   += march=armv7*
++MULTILIB_MATCHES      += march?armv7=march?armv7-a
++MULTILIB_MATCHES      += march?armv7=march?armv7-r
++MULTILIB_MATCHES      += march?armv7=march?armv7-m
++MULTILIB_MATCHES      += march?armv7=march?armv7e-m
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a9
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a5
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4f
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m4
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3
++
++MULTILIB_EXCEPTIONS   += march=armv4t
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm7tdmi-s
++#MULTILIB_MATCHES      +=
++
++# FIXME: We need a sane way of doing this.
++# This isn't really a multilib, it's a hack to add an extra option
++# to the v7-m multilib.
++MULTILIB_OPTIONS      += mfix-cortex-m3-ldrd
++MULTILIB_DIRNAMES     += broken_ldrd
++
++MULTILIB_EXCEPTIONS   += mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += mthumb/mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += *march=armv4t*mfix-cortex-m3-ldrd
++
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7
++
++# As of at least 4.2, gcc passes the wrong -L options if some multilibs are
++# omitted from MULTILIB_OSDIRNAMES
++MULTILIB_OSDIRNAMES    = mthumb=!thumb
++MULTILIB_OSDIRNAMES   += mthumb/march.armv7/mfix-cortex-m3-ldrd=!thumb2
++MULTILIB_OSDIRNAMES   += mthumb/march.armv4t=!armv4t
++
+ #MULTILIB_OPTIONS      += march=armv7
+ #MULTILIB_DIRNAMES     += thumb2
+@@ -49,9 +94,9 @@
+ # Not quite true.  We can support hard-vfp calling in Thumb2, but how do we
+ # express that here?  Also, we really need architecture v5e or later
+ # (mcrr etc).
+-MULTILIB_OPTIONS       += mfloat-abi=hard
+-MULTILIB_DIRNAMES      += fpu
+-MULTILIB_EXCEPTIONS    += *mthumb/*mfloat-abi=hard*
++#MULTILIB_OPTIONS       += mfloat-abi=hard
++#MULTILIB_DIRNAMES      += fpu
++#MULTILIB_EXCEPTIONS    += *mthumb/*mfloat-abi=hard*
+ # MULTILIB_OPTIONS    += mcpu=ep9312
+ # MULTILIB_DIRNAMES   += ep9312
index aa08b01..d0050ef 100755 (executable)
@@ -285,10 +285,19 @@ fi
 if [ ! -e ${STAMPS}/${GCC}-${NEWLIB}.build ]; then
     unpack ${GCC}
     unpack ${NEWLIB}
+
     log "Adding newlib symlink to gcc"
-    ln -s `pwd`/${NEWLIB}/newlib ${GCC}
+    ln -f -s `pwd`/${NEWLIB}/newlib ${GCC}
     log "Adding libgloss symlink to gcc"
-    ln -s `pwd`/${NEWLIB}/libgloss ${GCC}
+    ln -f -s `pwd`/${NEWLIB}/libgloss ${GCC}
+
+    if [ ${DEFAULT_TO_CORTEX_M3} == 0 ] ; then
+       log "Patching gcc to add multilib support"
+       cd ${GCC}
+       patch -p0 -i ../patches/patch-gcc-config-arm-t-arm-elf.diff
+       cd ..
+    fi
+
     cd build
     log "Configuring ${GCC} and ${NEWLIB}"
     ../${GCC}/configure --target=${TARGET} \