diff options
author | Emil Velikov <emil.l.velikov@gmail.com> | 2021-11-21 17:38:38 +0000 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2021-11-21 19:28:46 +0000 |
commit | fc0758237548328941fa7a9699510d6f357896ed (patch) | |
tree | 219948ee477a74f694468f9af9bc127d2471c152 /configure.ac | |
parent | 3beea10fceea4d58958aaafcdbcf1264b667613f (diff) | |
download | libarchive-fc0758237548328941fa7a9699510d6f357896ed.tar.gz |
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>
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index cb89c3ee..c8295e4a 100644 --- a/configure.ac +++ b/configure.ac @@ -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 |