Hello, This patch adds a little bit extension to current GCC configure system to make it more convenient for user to select and build extra libraries for ARM embedded targets. Typically a comma-separated target list is supported. Extra libraries will be built for targets in that list. Committed into ARM/embedded-4_6-branch.
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*