autotools: enable -fdata/function-sections and --gc-sections
Analogue to the parent cmake commit, with linker flag detection. The former two split the functions and data into separate sections within the object file. Which makes it easier for the latter to properly garbage collect and discard unused sections. Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
This commit is contained in:
1 parent
3beea10fce
commit
fc07582375
2 files changed
+20
-4
No files matched your search
+4
-4
@@ -284,7 +284,7 @@ endif
|
||||
|
||||
# -no-undefined marks that libarchive doesn't rely on symbols
|
||||
# defined in the application. This is mandatory for cygwin.
|
||||
libarchive_la_LDFLAGS= -no-undefined -version-info $(ARCHIVE_LIBTOOL_VERSION)
|
||||
libarchive_la_LDFLAGS= -no-undefined -version-info $(ARCHIVE_LIBTOOL_VERSION) $(GC_SECTIONS)
|
||||
libarchive_la_LIBADD= $(LTLIBICONV)
|
||||
|
||||
# Manpages to install
|
||||
@@ -1023,7 +1023,7 @@ endif
|
||||
|
||||
bsdtar_LDADD= libarchive.la libarchive_fe.la $(LTLIBICONV)
|
||||
bsdtar_CPPFLAGS= -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe $(bsdtar_ccstatic) $(PLATFORMCPPFLAGS)
|
||||
bsdtar_LDFLAGS= $(bsdtar_ldstatic)
|
||||
bsdtar_LDFLAGS= $(bsdtar_ldstatic) $(GC_SECTIONS)
|
||||
|
||||
bsdtar_EXTRA_DIST= \
|
||||
tar/bsdtar.1 \
|
||||
@@ -1189,7 +1189,7 @@ endif
|
||||
|
||||
bsdcpio_LDADD= libarchive_fe.la libarchive.la $(LTLIBICONV)
|
||||
bsdcpio_CPPFLAGS= -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe $(bsdcpio_ccstatic) $(PLATFORMCPPFLAGS)
|
||||
bsdcpio_LDFLAGS= $(bsdcpio_ldstatic)
|
||||
bsdcpio_LDFLAGS= $(bsdcpio_ldstatic) $(GC_SECTIONS)
|
||||
|
||||
bsdcpio_EXTRA_DIST= \
|
||||
cpio/bsdcpio.1 \
|
||||
@@ -1343,7 +1343,7 @@ endif
|
||||
|
||||
bsdcat_LDADD= libarchive_fe.la libarchive.la $(LTLIBICONV)
|
||||
bsdcat_CPPFLAGS= -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe $(bsdcat_ccstatic) $(PLATFORMCPPFLAGS)
|
||||
bsdcat_LDFLAGS= $(bsdcat_ldstatic)
|
||||
bsdcat_LDFLAGS= $(bsdcat_ldstatic) $(GC_SECTIONS)
|
||||
|
||||
bsdcat_EXTRA_DIST= \
|
||||
cat/bsdcat.1 \
|
||||
|
||||
@@ -540,6 +540,22 @@ fi
|
||||
# Checks for supported compiler flags
|
||||
AX_APPEND_COMPILE_FLAGS([-Wall -Wformat -Wformat-security])
|
||||
|
||||
# Place the functions and data into separate sections, allowing the linker
|
||||
# to garbage collect the unused ones.
|
||||
save_LDFLAGS=$LDFLAGS
|
||||
LDFLAGS="$LDFLAGS -Wl,--gc-sections"
|
||||
AC_MSG_CHECKING([whether ld supports --gc-sections])
|
||||
AC_LINK_IFELSE(
|
||||
[AC_LANG_SOURCE([static char UnusedFunc() { return 5; } int main() { return 0;}])],
|
||||
[AC_MSG_RESULT([yes])
|
||||
GC_SECTIONS="-Wl,--gc-sections";
|
||||
AX_APPEND_COMPILE_FLAGS([-ffunction-sections -fdata-sections])],
|
||||
[AC_MSG_RESULT([no])
|
||||
GC_SECTIONS="";])
|
||||
LDFLAGS=$save_LDFLAGS
|
||||
|
||||
AC_SUBST(GC_SECTIONS)
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
# la_TYPE_UID_T defaults to "int", which is incorrect for MinGW
|
||||
|
||||
Reference in new issue
Block a user