diff options
author | Terry Guo <terry.guo@arm.com> | 2012-05-09 11:38:47 +0000 |
---|---|---|
committer | Xuepeng Guo <xguo@gcc.gnu.org> | 2012-05-09 11:38:47 +0000 |
commit | 43661dc4d17b689c102de15fea2f3611998cfb88 (patch) | |
tree | 3ec1335b8f6ac6a83d76f34c9914dbf08e52b5f5 /gcc | |
parent | 368117e868b67d8e7daa2b3a2d27249bdf2e207f (diff) | |
download | gcc-43661dc4d17b689c102de15fea2f3611998cfb88.zip gcc-43661dc4d17b689c102de15fea2f3611998cfb88.tar.gz gcc-43661dc4d17b689c102de15fea2f3611998cfb88.tar.bz2 |
Makefile.in (s-mlib): Add new argument MULTILIB_REQUIRED.
* Makefile.in (s-mlib): Add new argument MULTILIB_REQUIRED.
* genmultilib (MULTILIB_REQUIRED): New.
* doc/fragments.texi: Document the MULTILIB_REQUIRED.
From-SVN: r187325
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/Makefile.in | 3 | ||||
-rw-r--r-- | gcc/doc/fragments.texi | 23 | ||||
-rw-r--r-- | gcc/genmultilib | 43 |
4 files changed, 72 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b69e8c9..7a40325 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-05-09 Terry Guo <terry.guo@arm.com> + + * Makefile.in (s-mlib): Add new argument MULTILIB_REQUIRED. + * genmultilib (MULTILIB_REQUIRED): New. + * doc/fragments.texi: Document the MULTILIB_REQUIRED. + 2012-05-09 Richard Guenther <rguenther@suse.de> * tree-vectorizer.h (vect_loop_versioning): Adjust prototype. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 98f83d9..716823b 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1831,10 +1831,11 @@ s-mlib: $(srcdir)/genmultilib Makefile "$(MULTILIB_EXTRA_OPTS)" \ "$(MULTILIB_EXCLUSIONS)" \ "$(MULTILIB_OSDIRNAMES)" \ + "$(MULTILIB_REQUIRED)" \ "@enable_multilib@" \ > tmp-mlib.h; \ else \ - $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' no \ + $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' '' no\ > tmp-mlib.h; \ fi $(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h diff --git a/gcc/doc/fragments.texi b/gcc/doc/fragments.texi index 31674f9..b184cc0 100644 --- a/gcc/doc/fragments.texi +++ b/gcc/doc/fragments.texi @@ -121,6 +121,29 @@ options enabled. Therefore @code{MULTILIB_EXCEPTIONS} is set to: *mthumb/*mhard-float* @end smallexample +@findex MULTILIB_REQUIRED +@item MULTILIB_REQUIRED +Sometimes when there are only a few combinations are required, it would +be a big effort to come up with a @code{MULTILIB_EXCEPTIONS} list to +cover all undesired ones. In such a case, just listing all the required +combinations in @code{MULTILIB_REQUIRED} would be more straightforward. + +The way to specify the entries in @code{MULTILIB_REQUIRED} is same with +the way used for @code{MULTILIB_EXCEPTIONS}, only this time what are +required will be specified. Suppose there are multiple sets of +@code{MULTILIB_OPTIONS} and only two combinations are required, one +for ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU, the +@code{MULTILIB_REQUIRED} can be set to: +@smallexample +@code{MULTILIB_REQUIRED} = mthumb/march=armv7-m +@code{MULTILIB_REQUIRED} += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16 +@end smallexample + +The @code{MULTILIB_REQUIRED} can be used together with +@code{MULTILIB_EXCEPTIONS}. The option combinations generated from +@code{MULTILIB_OPTIONS} will be filtered by @code{MULTILIB_EXCEPTIONS} +and then by @code{MULTILIB_REQUIRED}. + @findex MULTILIB_EXTRA_OPTS @item MULTILIB_EXTRA_OPTS Sometimes it is desirable that when building multiple versions of diff --git a/gcc/genmultilib b/gcc/genmultilib index 270de2b..02fc276 100644 --- a/gcc/genmultilib +++ b/gcc/genmultilib @@ -73,6 +73,17 @@ # the os directory names are used exclusively. Use the mapping when # there is no one-to-one equivalence between GCC levels and the OS. +# The optional eighth argument which intends to reduce the effort to write +# so many MULTILIB_EXCEPTIONS rules. This option defines a series of option +# combinations that we actually required. +# For some cases, the generated option combinations are far more than what +# we need, we have to write a lot of rules to screen out combinations we +# don't need. If we missed some rules, the unexpected libraries will be built. +# Now with this argument, one can simply give what combinations are needed. +# It is pretty straigtforward. +# This argument can be used together with MULTILIB_EXCEPTIONS and will take +# effect after the MULTILIB_EXCEPTIONS. + # The last option should be "yes" if multilibs are enabled. If it is not # "yes", all GCC multilib dir names will be ".". @@ -93,7 +104,7 @@ # genmultilib 'm64/m32 mno-app-regs|mcmodel=medany' '64 32 alt' # 'mcmodel?medany=mcmodel?medmid' 'm32/mno-app-regs* m32/mcmodel=*' # '' 'm32/!m64/mno-app-regs m32/!m64/mcmodel=medany' -# '../lib64 ../lib32 alt' yes +# '../lib64 ../lib32 alt' '' yes # This produces: # ". !m64 !m32 !mno-app-regs !mcmodel=medany;", # "64:../lib64 m64 !m32 !mno-app-regs !mcmodel=medany;", @@ -121,7 +132,8 @@ exceptions=$4 extra=$5 exclusions=$6 osdirnames=$7 -enable_multilib=$8 +multilib_required=$8 +enable_multilib=$9 echo "static const char *const multilib_raw[] = {" @@ -195,6 +207,33 @@ EOF combinations=`./tmpmultilib2 ${combinations}` fi +# If the MULTILIB_REQUIRED list are provided, +# filter out combinations not in this list. +if [ -n "${multilib_required}" ]; then + cat >tmpmultilib2 <<\EOF +#!/bin/sh +# This recursive script weeds out any combination of multilib +# switches that not in the expected list. + + for opt in $@; do + case "$opt" in +EOF + + for expect in ${multilib_required}; do + echo " /${expect}/) echo \${opt};;" >> tmpmultilib2 + done + +cat >>tmpmultilib2 <<\EOF + *) ;; + esac + done +EOF + + chmod +x tmpmultilib2 + combinations=`./tmpmultilib2 ${combinations}` + +fi + # Construct a sed pattern which will convert option names to directory # names. todirnames= |