diff options
author | Darrick J. Wong <darrick.wong@oracle.com> | 2018-03-08 20:35:20 -0600 |
---|---|---|
committer | Eric Sandeen <sandeen@redhat.com> | 2018-03-08 20:35:20 -0600 |
commit | e61f1552aae4819194ad603222eedef4b08710a2 (patch) | |
tree | e485b289b77d405f9b8ebe1bc9350bf681838f57 | |
parent | 1b0adc71229ba8611b06abc2bffa03babba5157d (diff) | |
download | xfsprogs-dev-e61f1552aae4819194ad603222eedef4b08710a2.tar.gz |
misc: enable link time optimization, if requested
Enable link time optimization (LTO) if the builder requests it. The
extra link optimization results in smaller binaries.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
-rw-r--r-- | configure.ac | 12 | ||||
-rwxr-xr-x | debian/rules | 4 | ||||
-rw-r--r-- | include/builddefs.in | 9 | ||||
-rw-r--r-- | m4/package_libcdev.m4 | 26 |
4 files changed, 49 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index b0d26016dd..686bf789bd 100644 --- a/configure.ac +++ b/configure.ac @@ -90,6 +90,11 @@ AC_ARG_ENABLE(threadsan, enable_threadsan=no) AC_SUBST(enable_threadsan) +AC_ARG_ENABLE(lto, +[ --enable-lto=[yes/no] Enable link time optimization (LTO) [default=probe]],, + enable_lto=probe) +AC_SUBST(enable_lto) + # # If the user specified a libdir ending in lib64 do not append another # 64 to the library names. @@ -206,6 +211,13 @@ if test "$have_threadsan" = "yes" && test "$have_addrsan" = "yes"; then AC_MSG_WARN([ADDRSAN and THREADSAN are not known to work together.]) fi +if test "$enable_lto" = "yes" || test "$enable_lto" = "probe"; then + AC_PACKAGE_CHECK_LTO +fi +if test "$enable_lto" = "yes" && test "$have_lto" != "yes"; then + AC_MSG_ERROR([LTO not supported by compiler.]) +fi + AC_PACKAGE_CHECK_RETPOLINE AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([char *]) diff --git a/debian/rules b/debian/rules index 4cba165b70..cb4fa22c15 100755 --- a/debian/rules +++ b/debian/rules @@ -20,9 +20,9 @@ stdenv = @GZIP=-q; export GZIP; options = export DEBUG=-DNDEBUG DISTRIBUTION=debian \ INSTALL_USER=root INSTALL_GROUP=root \ - LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes --enable-blkid=yes --disable-ubsan --disable-addrsan --disable-threadsan" ; + LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes --enable-blkid=yes --disable-ubsan --disable-addrsan --disable-threadsan --enable-lto" ; diopts = $(options) \ - export OPTIMIZER=-Os LOCAL_CONFIGURE_OPTIONS="--enable-gettext=no --disable-ubsan --disable-addrsan --disable-threadsan" ; + export OPTIMIZER=-Os LOCAL_CONFIGURE_OPTIONS="--enable-gettext=no --disable-ubsan --disable-addrsan --disable-threadsan --enable-lto" ; checkdir = test -f debian/rules build: build-arch build-indep diff --git a/include/builddefs.in b/include/builddefs.in index fe05dc376c..7a2a626867 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -183,6 +183,15 @@ OPTIMIZER += @retpoline_cflags@ LOADERFLAGS += @retpoline_ldflags@ endif +# Use special ar/ranlib wrappers if we have lto +HAVE_LTO = @have_lto@ +ifeq ($(HAVE_LTO),yes) +OPTIMIZER += @lto_cflags@ +LOADERFLAGS += @lto_ldflags@ +AR = @gcc_ar@ +RANLIB = @gcc_ranlib@ +endif + GCFLAGS = $(DEBUG) \ -DVERSION=\"$(PKG_VERSION)\" -DLOCALEDIR=\"$(PKG_LOCALE_DIR)\" \ -DPACKAGE=\"$(PKG_NAME)\" -I$(TOPDIR)/include -I$(TOPDIR)/libxfs diff --git a/m4/package_libcdev.m4 b/m4/package_libcdev.m4 index 5a7baa1e53..0a6b514437 100644 --- a/m4/package_libcdev.m4 +++ b/m4/package_libcdev.m4 @@ -421,6 +421,32 @@ AC_DEFUN([AC_HAVE_HDIO_GETGEO], AC_SUBST(have_hdio_getgeo) ]) +AC_DEFUN([AC_PACKAGE_CHECK_LTO], + [ AC_MSG_CHECKING([if C compiler supports LTO]) + OLD_CFLAGS="$CFLAGS" + OLD_LDFLAGS="$LDFLAGS" + LTO_FLAGS="-flto -ffat-lto-objects" + CFLAGS="$CFLAGS $LTO_FLAGS" + LDFLAGS="$LDFLAGS $LTO_FLAGS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([])], + [AC_MSG_RESULT([yes])] + [lto_cflags=$LTO_FLAGS] + [lto_ldflags=$LTO_FLAGS] + [AC_PATH_PROG(gcc_ar, gcc-ar,,)] + [AC_PATH_PROG(gcc_ranlib, gcc-ranlib,,)], + [AC_MSG_RESULT([no])]) + if test -x "$gcc_ar" && test -x "$gcc_ranlib"; then + have_lto=yes + fi + CFLAGS="${OLD_CFLAGS}" + LDFLAGS="${OLD_LDFLAGS}" + AC_SUBST(gcc_ar) + AC_SUBST(gcc_ranlib) + AC_SUBST(have_lto) + AC_SUBST(lto_cflags) + AC_SUBST(lto_ldflags) + ]) + AC_DEFUN([AC_PACKAGE_CHECK_RETPOLINE], [ AC_MSG_CHECKING([if C compiler supports retpoline]) OLD_CFLAGS="$CFLAGS" |