Build libbackend.a as a thin archive if possible
authorPatrick Palka <ppalka@gcc.gnu.org>
Wed, 20 Jul 2016 14:09:20 +0000 (14:09 +0000)
committerPatrick Palka <ppalka@gcc.gnu.org>
Wed, 20 Jul 2016 14:09:20 +0000 (14:09 +0000)
gcc/ChangeLog:

* configure.ac (thin_archive_support): New variable.  AC_SUBST it.
* configure: Regenerate.
* Makefile.in (THIN_ARCHIVE_SUPPORT): New variable.
(USE_THIN_ARCHIVES): New variable.
(libbackend.a): If USE_THIN_ARCHIVES then pass T to ar to build
this archive as a thin archive.

From-SVN: r238524

gcc/ChangeLog
gcc/Makefile.in
gcc/configure
gcc/configure.ac

index 848d19b323ade605bfb62cc3db1758bab9c31838..5af16ba065a03cea91185c10ce3b1ab1ead4f56d 100644 (file)
@@ -1,3 +1,12 @@
+2016-07-20  Patrick Palka  <ppalka@gcc.gnu.org>
+
+       * configure.ac (thin_archive_support): New variable.  AC_SUBST it.
+       * configure: Regenerate.
+       * Makefile.in (THIN_ARCHIVE_SUPPORT): New variable.
+       (USE_THIN_ARCHIVES): New variable.
+       (libbackend.a): If USE_THIN_ARCHIVES then pass T to ar to build
+       this archive as a thin archive.
+
 2016-07-20  David Malcolm  <dmalcolm@redhat.com>
 
        * diagnostic-show-locus.c (diagnostic_show_locus): If this is the
index bfa467c38acd2cd2633d6d81e4f8582197fe540a..7a0160f89b61dec26fff1614a379d52bf807f938 100644 (file)
@@ -275,6 +275,17 @@ else
 LLINKER = $(LINKER)
 endif
 
+THIN_ARCHIVE_SUPPORT = @thin_archive_support@
+
+USE_THIN_ARCHIVES = no
+ifeq ($(THIN_ARCHIVE_SUPPORT),yes)
+ifeq ($(AR_FLAGS),rc)
+ifeq ($(RANLIB_FLAGS),)
+USE_THIN_ARCHIVES = yes
+endif
+endif
+endif
+
 # -------------------------------------------
 # Programs which operate on the build machine
 # -------------------------------------------
@@ -1883,8 +1894,14 @@ compilations: $(BACKEND)
 # This archive is strictly for the host.
 libbackend.a: $(OBJS)
        -rm -rf libbackend.a
+       @# Build libbackend.a as a thin archive if possible, as doing so
+       @# significantly reduces build times.
+ifeq ($(USE_THIN_ARCHIVES),yes)
+       $(AR) $(AR_FLAGS)T libbackend.a $(OBJS)
+else
        $(AR) $(AR_FLAGS) libbackend.a $(OBJS)
        -$(RANLIB) $(RANLIB_FLAGS) libbackend.a
+endif
 
 libcommon-target.a: $(OBJS-libcommon-target)
        -rm -rf libcommon-target.a
index ed4447299c2fd18c4089e3e9412a38d73bbe7d8e..871ed0c3d1571951fe74ba82389ccb727060269a 100755 (executable)
@@ -679,6 +679,7 @@ zlibinc
 zlibdir
 HOST_LIBS
 enable_default_ssp
+thin_archive_support
 libgcc_visibility
 gcc_cv_readelf
 gcc_cv_objdump
@@ -18475,7 +18476,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 18478 "configure"
+#line 18479 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -18581,7 +18582,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 18584 "configure"
+#line 18585 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -27846,6 +27847,21 @@ $as_echo "#define HAVE_AS_LINE_ZERO 1" >>confdefs.h
 
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for thin archives" >&5
+$as_echo_n "checking support for thin archives... " >&6; }
+thin_archive_support=no
+echo 'int main (void) { return 0; }' > conftest.c
+if ($AR --version | sed 1q | grep "GNU ar" \
+    && $CC $CFLAGS -c conftest.c \
+    && $AR rcT conftest.a conftest.o \
+    && $CC $CFLAGS $LDFLAGS -o conftest conftest.a) >/dev/null 2>&1; then
+  thin_archive_support=yes
+fi
+rm -f conftest.c conftest.o conftest.a conftest
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $thin_archive_support" >&5
+$as_echo "$thin_archive_support" >&6; }
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker PT_GNU_EH_FRAME support" >&5
 $as_echo_n "checking linker PT_GNU_EH_FRAME support... " >&6; }
 gcc_cv_ld_eh_frame_hdr=no
index 086d0fc3eca79a87c257bbaee2440bb11601cfd1..241e82dfc7285817bbdf8ccd8f7e9537251e8565 100644 (file)
@@ -4899,6 +4899,19 @@ if test "x$gcc_cv_as_line_zero" = xyes; then
 [Define if the assembler won't complain about a line such as # 0 "" 2.])
 fi
 
+AC_MSG_CHECKING(support for thin archives)
+thin_archive_support=no
+echo 'int main (void) { return 0; }' > conftest.c
+if ($AR --version | sed 1q | grep "GNU ar" \
+    && $CC $CFLAGS -c conftest.c \
+    && $AR rcT conftest.a conftest.o \
+    && $CC $CFLAGS $LDFLAGS -o conftest conftest.a) >/dev/null 2>&1; then
+  thin_archive_support=yes
+fi
+rm -f conftest.c conftest.o conftest.a conftest
+AC_MSG_RESULT($thin_archive_support)
+AC_SUBST(thin_archive_support)
+
 AC_MSG_CHECKING(linker PT_GNU_EH_FRAME support)
 gcc_cv_ld_eh_frame_hdr=no
 if test $in_tree_ld = yes ; then