Hello,

This patch intends to implement a convenient interface for user to customize
the final Multilibs according to their real requirements. There is no
intention to override the default Multilib set, instead it only build
"extra" libraries besides them. Specifically the extra Multilibs can be
selected by user through a new configure option
"--with-extra-multilibs=A-COMMA-SEPARATED-TARGET-LIST". For example if user
want to build extra library for cortex-m0, cortex-m3 and cortex-m4, the
configure option would be
"--with-extra-multilibs=armv6s-m,armv7-m,armv7e-m".

This patch has been in ARM/embedded-4_6-branch. Any comments for applying it
on trunk?

BR,
Terry

2011-09-08  Terry Guo  <terry....@arm.com>
 
        * config.gcc: Support --with-extra-multilibs option for ARM EABI.
        * configure.ac: Handle --with-extra-multilibs option.
        * configure: Add help message and support for that option. 
        * doc/install.texi: Document that option.
        * config/arm/t-arm-elf (MULTILIB_OSDIRNAMES): Added to support
        build extra multilibs with user-specified directory name.
        * config/arm/t-armv6s-m: New fragment for building extra multilib
for
        ARM armv6s-m architecture.
        * config/arm/t-armv7-m: New fragment for building extra multilib for
        ARM armv7-m architecture.
        * config/arm/t-armv7e-m: New fragment for building extra multilib
for
        ARM armv7e-m architecture.
        * config/arm/t-thumb1: New fragment for building extra multilib for
        ARM Thumb-1.
        * config/arm/t-thumb2: New fragment for building extra multilib for
        ARM Thumb-2.


Index: gcc/doc/install.texi
===================================================================
--- gcc/doc/install.texi        (revision 178754)
+++ gcc/doc/install.texi        (working copy)
@@ -1068,6 +1068,24 @@
 --with-multilib-list=sh4al,!mb/m4al
 @end smallexample
 
+@item --with-extra-multilibs=@var{list} @itemx 
+--without-extra-multilibs Specify what extra multilibs to build besides 
+the default library set.
+Currently only implemented for arm*-*-eabi.
+
+@var{list} is a comma separated list of ARM architecture names.
+Currently the available names are thumb1, thumb2, armv6s-m, armv7-m and 
+armv7e-m.
+
+If @option{--with-extra-multilibs} or @var{list} is not given, then no 
+extra multilibs will be built.
+
+Example: to configure a compiler for arm-none-eabi with additional 
+multilib support for thumb1, thumb2 and armv6s-m:
+@smallexample
+--target=arm-none-eabi --with-extra-multilibs=thumb1,thumb2,armv6s-m
+@end smallexample
+
 @item --with-endian=@var{endians}
 Specify what endians to use.
 Currently only implemented for sh*-*-*.
Index: gcc/configure
===================================================================
--- gcc/configure       (revision 178754)
+++ gcc/configure       (working copy)
@@ -1650,6 +1650,7 @@
   --with-pkgversion=PKG   Use PKG in the version string in place of "GCC"
   --with-bugurl=URL       Direct users to URL to report a bug
   --with-multilib-list    Select multilibs (SH only)
+  --with-extra-multilibs  Select extra multilibs (ARM only)
   --with-gnu-ld           assume the C compiler uses GNU ld default=no
   --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and
DIR/lib
   --without-libiconv-prefix     don't search for libiconv in includedir and
libdir
@@ -7198,6 +7199,12 @@
   with_multilib_list=default
 fi
 
+# Check whether --with-extra-multilibs was given.
+if test "${with_extra_multilibs+set}" = set; then :
+  withval=$with_extra_multilibs; :
+else
+  with_extra_multilibs=default
+fi
 
 # -------------------------
 # Checks for other programs
Index: gcc/configure.ac
===================================================================
--- gcc/configure.ac    (revision 178754)
+++ gcc/configure.ac    (working copy)
@@ -790,6 +790,11 @@
 :,
 with_multilib_list=default)
 
+AC_ARG_WITH(extra-multilibs,
+[  --with-extra-multilibs    Select extra multilibs (ARM only)],
+:,
+with_extra_multilibs=default)
+
 # -------------------------
 # Checks for other programs
 # -------------------------
Index: gcc/config.gcc
===================================================================
--- gcc/config.gcc      (revision 178754)
+++ gcc/config.gcc      (working copy)
@@ -883,6 +883,32 @@
        arm*-*-eabi*)
          tm_file="$tm_file newlib-stdint.h"
          tmake_file="${tmake_file} arm/t-bpabi"
+         arm_multilibs="${with_extra_multilibs}"
+         if test $arm_multilibs != "default"; then
+               arm_multilibs=`echo $arm_multilibs | sed -e 's/,/ /g'`
+               for arm_multilib in ${arm_multilibs}; do
+                   case ${arm_multilib} in
+                   thumb1)
+                       tmake_file="${tmake_file} arm/t-thumb1"
+                       ;;
+                   thumb2)
+                       tmake_file="${tmake_file} arm/t-thumb2"
+                       ;;
+                   armv6s-m)
+                       tmake_file="${tmake_file} arm/t-armv6s-m"
+                       ;;
+                   armv7-m)
+                       tmake_file="${tmake_file} arm/t-armv7-m"
+                       ;;
+                   armv7e-m)
+                       tmake_file="${tmake_file} arm/t-armv7e-m"
+                       ;;
+                   *)
+                       echo "--with-extra-multilibs=${arm_multilib} not
supported."
+                       exit 1
+                   esac
+               done
+         fi
          use_gcc_stdint=wrap
          ;;
        arm*-*-symbianelf*)
Index: gcc/config/arm/t-arm-elf
===================================================================
--- gcc/config/arm/t-arm-elf    (revision 178754)
+++ gcc/config/arm/t-arm-elf    (working copy)
@@ -35,6 +35,7 @@
 MULTILIB_DIRNAMES    = arm thumb
 MULTILIB_EXCEPTIONS  = 
 MULTILIB_MATCHES     =
+MULTILIB_OSDIRNAMES  = marm=!arm mthumb=!thumb
 
 #MULTILIB_OPTIONS     +=
mcpu=fa526/mcpu=fa626/mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te
 #MULTILIB_DIRNAMES    += fa526 fa626 fa606te fa626te fmp626 fa726te
@@ -56,6 +57,7 @@
 MULTILIB_OPTIONS       += mfloat-abi=hard
 MULTILIB_DIRNAMES      += fpu
 MULTILIB_EXCEPTIONS    += *mthumb/*mfloat-abi=hard*
+MULTILIB_OSDIRNAMES    += mfloat-abi.hard=!fpu
marm/mfloat-abi.hard=!arm/fpu
 #MULTILIB_EXCEPTIONS    += *mcpu=fa526/*mfloat-abi=hard*
 #MULTILIB_EXCEPTIONS    += *mcpu=fa626/*mfloat-abi=hard*
Index: gcc/config/arm/t-armv7e-m
===================================================================
--- gcc/config/arm/t-armv7e-m   (revision 0)
+++ gcc/config/arm/t-armv7e-m   (revision 0)
@@ -0,0 +1,16 @@
+#Build below library for ARM armv7e-m architecture.
+#  armv7e-m/     -mthumb -march=armv7e-m
+
+MULTILIB_OPTIONS      += march=armv7e-m
+
+MULTILIB_DIRNAMES     += armv7e-m
+
+MULTILIB_EXCEPTIONS   += march=armv7e-m*
+MULTILIB_EXCEPTIONS   += marm*/march=armv7e-m*
+MULTILIB_EXCEPTIONS   += mfloat-abi=hard/march=armv7e-m*
+MULTILIB_EXCEPTIONS   += mthumb/mfloat-abi=hard/march=armv7e-m*
+MULTILIB_EXCEPTIONS   += m*/march=armv7e-m/march*
+
+MULTILIB_MATCHES      += march?armv7e-m=mcpu?cortex-m4
+
+MULTILIB_OSDIRNAMES   += mthumb/march.armv7e-m=!armv7e-m
Index: gcc/config/arm/t-thumb1
===================================================================
--- gcc/config/arm/t-thumb1     (revision 0)
+++ gcc/config/arm/t-thumb1     (revision 0)
@@ -0,0 +1,56 @@
+#Build below library for ARM Thumb-1.
+#  thumb1/      -mthumb -march=armv4t
+
+MULTILIB_OPTIONS      += march=armv4t
+
+MULTILIB_DIRNAMES     += thumb1
+
+MULTILIB_EXCEPTIONS   += march=armv4t*
+MULTILIB_EXCEPTIONS   += marm*/march=armv4t*
+MULTILIB_EXCEPTIONS   += mfloat-abi=hard/march=armv4t*
+MULTILIB_EXCEPTIONS   += mthumb/mfloat-abi=hard/march=armv4t*
+MULTILIB_EXCEPTIONS   += m*/march=armv4t/march*
+
+MULTILIB_MATCHES      += march?armv4t=march?armv5
+MULTILIB_MATCHES      += march?armv4t=march?armv5t
+MULTILIB_MATCHES      += march?armv4t=march?armv5e
+MULTILIB_MATCHES      += march?armv4t=march?armv5te
+MULTILIB_MATCHES      += march?armv4t=march?armv6
+MULTILIB_MATCHES      += march?armv4t=march?armv6j
+MULTILIB_MATCHES      += march?armv4t=march?armv6z
+MULTILIB_MATCHES      += march?armv4t=march?armv6zk
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm7tdmi
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm7tdmi-s
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm710t
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm720t
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm740t
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm9
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm9tdmi
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm920
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm920t
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm922t
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm940t
+MULTILIB_MATCHES      += march?armv4t=mcpu?ep9312
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm10tdmi
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm1020t
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm9e
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm946e-s
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm966e-s
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm968e-s
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm10e
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm1020e
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm1022e
+MULTILIB_MATCHES      += march?armv4t=mcpu?xscale
+MULTILIB_MATCHES      += march?armv4t=mcpu?iwmmxt
+MULTILIB_MATCHES      += march?armv4t=mcpu?iwmmxt2
+MULTILIB_MATCHES      += march?armv4t=mcpu?fa606te
+MULTILIB_MATCHES      += march?armv4t=mcpu?fa626te
+MULTILIB_MATCHES      += march?armv4t=mcpu?fmp626
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm926ej-s
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm1026ej-s
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm1136j-s
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm1136jf-s
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm1176jz-s
+MULTILIB_MATCHES      += march?armv4t=mcpu?arm1176jzf-s
+
+MULTILIB_OSDIRNAMES   += mthumb/march.armv4t=!thumb1
Index: gcc/config/arm/t-thumb2
===================================================================
--- gcc/config/arm/t-thumb2     (revision 0)
+++ gcc/config/arm/t-thumb2     (revision 0)
@@ -0,0 +1,25 @@
+#Build below library for ARM Thumb-2.
+#  thumb2/      -mthumb -march=armv6t2
+
+MULTILIB_OPTIONS      += march=armv6t2
+
+MULTILIB_DIRNAMES     += thumb2
+
+MULTILIB_EXCEPTIONS   += march=armv6t2*
+MULTILIB_EXCEPTIONS   += marm*/march=armv6t2*
+MULTILIB_EXCEPTIONS   += mfloat-abi=hard/march=armv6t2*
+MULTILIB_EXCEPTIONS   += mthumb/mfloat-abi=hard/march=armv6t2*
+MULTILIB_EXCEPTIONS   += m*/march=armv6t2/march*
+
+MULTILIB_MATCHES      += march?armv6t2=march?armv7
+MULTILIB_MATCHES      += march?armv6t2=march?armv7-a
+MULTILIB_MATCHES      += march?armv6t2=march?armv7-r
+MULTILIB_MATCHES      += march?armv6t2=mcpu?arm1156t2-s
+MULTILIB_MATCHES      += march?armv6t2=mcpu?arm1156t2f-s
+MULTILIB_MATCHES      += march?armv6t2=mcpu?cortex-a5
+MULTILIB_MATCHES      += march?armv6t2=mcpu?cortex-a8
+MULTILIB_MATCHES      += march?armv6t2=mcpu?cortex-a9
+MULTILIB_MATCHES      += march?armv6t2=mcpu?cortex-r4
+MULTILIB_MATCHES      += march?armv6t2=mcpu?cortex-r4f
+
+MULTILIB_OSDIRNAMES   += mthumb/march.armv6t2=!thumb2
Index: gcc/config/arm/t-armv7-m
===================================================================
--- gcc/config/arm/t-armv7-m    (revision 0)
+++ gcc/config/arm/t-armv7-m    (revision 0)
@@ -0,0 +1,16 @@
+#Build below library for ARM armv7-m architecture.
+#  armv7-m/     -mthumb -march=armv7-m
+
+MULTILIB_OPTIONS      += march=armv7-m
+
+MULTILIB_DIRNAMES     += armv7-m
+
+MULTILIB_EXCEPTIONS   += march=armv7-m*
+MULTILIB_EXCEPTIONS   += marm*/march=armv7-m*
+MULTILIB_EXCEPTIONS   += mfloat-abi=hard/march=armv7-m*
+MULTILIB_EXCEPTIONS   += mthumb/mfloat-abi=hard/march=armv7-m*
+MULTILIB_EXCEPTIONS   += m*/march=armv7-m/march*
+
+MULTILIB_MATCHES      += march?armv7-m=mcpu?cortex-m3
+
+MULTILIB_OSDIRNAMES   += mthumb/march.armv7-m=!armv7-m
Index: gcc/config/arm/t-armv6s-m
===================================================================
--- gcc/config/arm/t-armv6s-m   (revision 0)
+++ gcc/config/arm/t-armv6s-m   (revision 0)
@@ -0,0 +1,18 @@
+#Build below library for ARM armv6s-m architecture.
+#  armv6s-m/    -mthumb -march=armv6s-m
+
+MULTILIB_OPTIONS      += march=armv6s-m
+
+MULTILIB_DIRNAMES     += armv6s-m
+
+MULTILIB_EXCEPTIONS   += march=armv6s-m*
+MULTILIB_EXCEPTIONS   += marm*/march=armv6s-m*
+MULTILIB_EXCEPTIONS   += mfloat-abi=hard/march=armv6s-m*
+MULTILIB_EXCEPTIONS   += mthumb/mfloat-abi=hard/march=armv6s-m*
+MULTILIB_EXCEPTIONS   += m*/march=armv6s-m/march*
+
+MULTILIB_MATCHES      += march?armv6s-m=march?armv6-m
+MULTILIB_MATCHES      += march?armv6s-m=mcpu?cortex-m1
+MULTILIB_MATCHES      += march?armv6s-m=mcpu?cortex-m0
+
+MULTILIB_OSDIRNAMES   += mthumb/march.armv6s-m=!armv6s-m



Reply via email to