From 25e08379b869ba2f2def6d0e9d8443e053f8c3be Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Wed, 20 Jul 2016 14:09:20 +0000 Subject: [PATCH] Build libbackend.a as a thin archive if possible 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 | 9 +++++++++ gcc/Makefile.in | 17 +++++++++++++++++ gcc/configure | 20 ++++++++++++++++++-- gcc/configure.ac | 13 +++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 848d19b323a..5af16ba065a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2016-07-20 Patrick Palka + + * 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 * diagnostic-show-locus.c (diagnostic_show_locus): If this is the diff --git a/gcc/Makefile.in b/gcc/Makefile.in index bfa467c38ac..7a0160f89b6 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -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 diff --git a/gcc/configure b/gcc/configure index ed4447299c2..871ed0c3d15 100755 --- a/gcc/configure +++ b/gcc/configure @@ -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 diff --git a/gcc/configure.ac b/gcc/configure.ac index 086d0fc3eca..241e82dfc72 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -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 -- 2.30.2