Patchwork PATCH RFA: Permit languages to share target_libs

login
register
mail settings
Submitter Ian Taylor
Date Nov. 19, 2010, 11:01 p.m.
Message ID <mcr8w0o9auu.fsf@google.com>
Download mbox | patch
Permalink /patch/72325/
State New
Headers show

Comments

Ian Taylor - Nov. 19, 2010, 11:01 p.m.
OK, here is a different approach for the issue that target-libgo
requires target-libffi.  With this patch, we only add target_libs for
disabled languages to noconfigdirs if they are not in target_libs for
any enabled languages.

In order to make this work for Go, I had to prevent --disable-libgcj
from adding libffi to noconfigdirs.  This does mean that libffi will be
built for the case of --enable-languages=java --disable-libgcj, unless
libffi is disabled for the target.  I don't think that is a big deal.  I
doubt this is a widely used case, and libffi is a small library.

Bootstrapped on x86_64-unknown-linux-gnu.  I configured with the
following options and examined the generated Makefile to make sure that
it looked OK:

--enable-languages=c
--enable-languages=c,java
--enable-languages=c,go
--enable-languages=c,go,java
--enable-languages=c,go,java --enable-libgcj
--enable-languages=c,go,java --disable-libgcj

OK for mainline?

Ian


2010-11-19  Ian Lance Taylor  <iant@google.com>

	* configure.ac: Only disable a language library if no language needs
	it.  Don't let --disable-libgcj uncondtionally disable libffi.
Paolo Bonzini - Nov. 20, 2010, 1:21 p.m.
On 11/20/2010 12:01 AM, Ian Lance Taylor wrote:
> Bootstrapped on x86_64-unknown-linux-gnu.  I configured with the
> following options and examined the generated Makefile to make sure that
> it looked OK:
>
> --enable-languages=c
> --enable-languages=c,java
> --enable-languages=c,go
> --enable-languages=c,go,java
> --enable-languages=c,go,java --enable-libgcj
> --enable-languages=c,go,java --disable-libgcj
>
> OK for mainline?

Yes, much nicer, thanks!

Paolo

Patch

Index: configure.ac
===================================================================
--- configure.ac	(revision 166959)
+++ configure.ac	(working copy)
@@ -451,7 +451,8 @@  yes)
   ;;
 no)
   # Make sure we get it printed in the list of not supported target libs.
-  noconfigdirs="$noconfigdirs ${libgcj}"
+  # Don't disable libffi, though, other languages use it.
+  noconfigdirs="$noconfigdirs `echo ${libgcj} | sed -e 's/target-libffi//'`"
   ;;
 esac
 
@@ -1765,6 +1766,9 @@  if test -d ${srcdir}/gcc; then
   missing_languages=`echo ",$enable_languages," | sed -e s/,all,/,/ -e s/,c,/,/ `
   potential_languages=,c,
 
+  enabled_target_libs=
+  disabled_target_libs=
+
   for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
     case ${lang_frag} in
       ..) ;;
@@ -1842,17 +1846,20 @@  if test -d ${srcdir}/gcc; then
 	case $add_this_lang in
 	  unsupported)
             # Remove language-dependent dirs.
-            eval noconfigdirs='"$noconfigdirs "'\"$target_libs $lang_dirs\"
+	    disabled_target_libs="$disabled_target_libs $target_libs"
+	    noconfigdirs="$noconfigdirs $lang_dirs"
 	    ;;
 	  no)
             # Remove language-dependent dirs; still show language as supported.
-            eval noconfigdirs='"$noconfigdirs "'\"$target_libs $lang_dirs\"
+	    disabled_target_libs="$disabled_target_libs $target_libs"
+	    noconfigdirs="$noconfigdirs $lang_dirs"
             potential_languages="${potential_languages}${language},"
 	    ;;
           yes)
 	    new_enable_languages="${new_enable_languages}${language},"
             potential_languages="${potential_languages}${language},"
 	    missing_languages=`echo "$missing_languages" | sed "s/,$language,/,/"`
+	    enabled_target_libs="$enabled_target_libs $target_libs"
 	    case "${boot_language}:,$enable_stage1_languages," in
 	      yes:* | *:*,$language,* | *:*,yes, | *:*,all,)
 		# Add to (comma-separated) list of stage 1 languages.
@@ -1870,6 +1877,17 @@  if test -d ${srcdir}/gcc; then
     esac
   done
 
+  # Add target libraries which are only needed for disabled languages
+  # to noconfigdirs.
+  if test -n "$disabled_target_libs"; then
+    for dir in $disabled_target_libs; do
+      case " $enabled_target_libs " in
+      *" ${dir} "*) ;;
+      *) noconfigdirs="$noconfigdirs $dir" ;;
+      esac
+    done
+  fi
+
   AC_ARG_ENABLE(stage1-languages,
 [  --enable-stage1-languages@<:@=all@:>@   choose additional languages to build during
                           stage1.  Mostly useful for compiler development.],