From d118ec221dd5fc829d2170c257e10b8159dce274 Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Thu, 8 Apr 2021 18:31:04 +0200 Subject: [PATCH] libphobos: Build runtime library with -ffunction-sections -fdata-sections Tests for `-ffunction-sections -fdata-sections' and sets SECTION_FLAGS accordingly. If there is no warning when using it, take advantage of the smaller executables that can be had with `--gc-sections'. libphobos/ChangeLog: * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac: Call DRUNTIME_SECTION_FLAGS. * libdruntime/Makefile.am: Add SECTION_FLAGS to AM_DFLAGS. * libdruntime/Makefile.in: Regenerate. * m4/druntime.m4 (DRUNTIME_SECTION_FLAGS): New macro. * src/Makefile.am: Add SECTION_FLAGS to AM_DFLAGS. * src/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. --- libphobos/Makefile.in | 1 + libphobos/configure | 47 +++++++++++++++++++++++++++++-- libphobos/configure.ac | 1 + libphobos/libdruntime/Makefile.am | 2 +- libphobos/libdruntime/Makefile.in | 3 +- libphobos/m4/druntime.m4 | 19 +++++++++++++ libphobos/src/Makefile.am | 2 +- libphobos/src/Makefile.in | 3 +- libphobos/testsuite/Makefile.in | 1 + 9 files changed, 73 insertions(+), 6 deletions(-) diff --git a/libphobos/Makefile.in b/libphobos/Makefile.in index eab12688867..a8f7e160742 100644 --- a/libphobos/Makefile.in +++ b/libphobos/Makefile.in @@ -271,6 +271,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +SECTION_FLAGS = @SECTION_FLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ diff --git a/libphobos/configure b/libphobos/configure index 59ca64aa1e0..fe7cd9c11ff 100755 --- a/libphobos/configure +++ b/libphobos/configure @@ -700,6 +700,7 @@ DRUNTIME_CPU_ARM_FALSE DRUNTIME_CPU_ARM_TRUE DRUNTIME_CPU_AARCH64_FALSE DRUNTIME_CPU_AARCH64_TRUE +SECTION_FLAGS libphobos_srcdir libphobos_builddir get_gcc_base_ver @@ -11749,7 +11750,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11752 "configure" +#line 11753 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11855,7 +11856,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11858 "configure" +#line 11859 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -14085,6 +14086,48 @@ fi fi + + + gdc_save_DFLAGS=$GDCFLAGS + GDCFLAGS="-fno-moduleinfo -nostdinc -I $phobos_cv_abs_srcdir/libdruntime -nophoboslib $GDCFLAGS" + + ac_ext=d +ac_compile='$GDC -c $GDCFLAGS conftest.$ac_ext >&5' +ac_link='$GDC -o conftest$ac_exeext $GDCFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=yes + + GDCFLAGS="$GDCFLAGS -g -Werror -ffunction-sections -fdata-sections" + cat > conftest.$ac_ext <<_ACEOF +module mod; +int foo; void bar() { } + +extern(C) int main() { + return 0; +} +_ACEOF +if ac_fn_d_try_compile "$LINENO"; then : + ac_fdsections=yes +else + ac_fdsections=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test "x$ac_fdsections" = "xyes"; then + SECTION_FLAGS='-ffunction-sections -fdata-sections' + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_fdsections" >&5 +$as_echo "$ac_fdsections" >&6; } + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + GDCFLAGS=$gdc_save_DFLAGS + + + + druntime_target_cpu_parsed="" case "$target_cpu" in aarch64*) diff --git a/libphobos/configure.ac b/libphobos/configure.ac index 248d0ebbc19..3b5a830cccf 100644 --- a/libphobos/configure.ac +++ b/libphobos/configure.ac @@ -137,6 +137,7 @@ GCC_BASE_VER DRUNTIME_CONFIGURE DRUNTIME_MULTILIB DRUNTIME_WERROR +DRUNTIME_SECTION_FLAGS DRUNTIME_CPU_SOURCES DRUNTIME_OS_SOURCES DRUNTIME_OS_THREAD_MODEL diff --git a/libphobos/libdruntime/Makefile.am b/libphobos/libdruntime/Makefile.am index 74a0f006036..02a68b10424 100644 --- a/libphobos/libdruntime/Makefile.am +++ b/libphobos/libdruntime/Makefile.am @@ -24,7 +24,7 @@ D_EXTRA_DFLAGS=-nostdinc -I $(srcdir) -I . # D flags for compilation AM_DFLAGS= \ $(phobos_lt_pic_flag) $(phobos_compiler_shared_flag) \ - $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(CET_DFLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(SECTION_FLAGS) $(CET_DFLAGS) # Flags for other kinds of sources AM_CFLAGS=$(CET_FLAGS) diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in index 63b2133e69c..853a7fc1981 100644 --- a/libphobos/libdruntime/Makefile.in +++ b/libphobos/libdruntime/Makefile.in @@ -635,6 +635,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +SECTION_FLAGS = @SECTION_FLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ @@ -727,7 +728,7 @@ D_EXTRA_DFLAGS = -nostdinc -I $(srcdir) -I . # D flags for compilation AM_DFLAGS = \ $(phobos_lt_pic_flag) $(phobos_compiler_shared_flag) \ - $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(CET_DFLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(SECTION_FLAGS) $(CET_DFLAGS) # Flags for other kinds of sources diff --git a/libphobos/m4/druntime.m4 b/libphobos/m4/druntime.m4 index 7221712a888..2a7a689dd18 100644 --- a/libphobos/m4/druntime.m4 +++ b/libphobos/m4/druntime.m4 @@ -116,3 +116,22 @@ AC_DEFUN([DRUNTIME_INSTALL_DIRECTORIES], gdc_include_dir='$(libdir)/gcc/${target_alias}/${gcc_version}/include/d' AC_SUBST(gdc_include_dir) ]) + +# DRUNTIME_SECTION_FLAGS +# ---------------------- +# Check for -ffunction-sections nad -fdata-sections. +AC_DEFUN([DRUNTIME_SECTION_FLAGS], +[ + WITH_LOCAL_DRUNTIME([ + AC_LANG_PUSH([D]) + GDCFLAGS="$GDCFLAGS -g -Werror -ffunction-sections -fdata-sections" + AC_TRY_COMPILE([int foo; void bar() { }],[return 0;], + [ac_fdsections=yes], [ac_fdsections=no]) + if test "x$ac_fdsections" = "xyes"; then + SECTION_FLAGS='-ffunction-sections -fdata-sections' + fi + AC_MSG_RESULT($ac_fdsections) + AC_LANG_POP([D]) + ], [-nophoboslib]) + AC_SUBST(SECTION_FLAGS) +]) diff --git a/libphobos/src/Makefile.am b/libphobos/src/Makefile.am index 2dedc740f16..f97ddccaca8 100644 --- a/libphobos/src/Makefile.am +++ b/libphobos/src/Makefile.am @@ -25,7 +25,7 @@ D_EXTRA_DFLAGS=-nostdinc -I $(srcdir) \ # D flags for compilation AM_DFLAGS= \ $(phobos_lt_pic_flag) $(phobos_compiler_shared_flag) \ - $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(CET_DFLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(SECTION_FLAGS) $(CET_DFLAGS) # Flags for other kinds of sources AM_CFLAGS=$(CET_FLAGS) diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in index 9e410e5b642..4f76e1077d5 100644 --- a/libphobos/src/Makefile.in +++ b/libphobos/src/Makefile.in @@ -388,6 +388,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +SECTION_FLAGS = @SECTION_FLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ @@ -482,7 +483,7 @@ D_EXTRA_DFLAGS = -nostdinc -I $(srcdir) \ # D flags for compilation AM_DFLAGS = \ $(phobos_lt_pic_flag) $(phobos_compiler_shared_flag) \ - $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(CET_DFLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(SECTION_FLAGS) $(CET_DFLAGS) # Flags for other kinds of sources diff --git a/libphobos/testsuite/Makefile.in b/libphobos/testsuite/Makefile.in index 51eb4efc79d..885548018ba 100644 --- a/libphobos/testsuite/Makefile.in +++ b/libphobos/testsuite/Makefile.in @@ -215,6 +215,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +SECTION_FLAGS = @SECTION_FLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@