* [committed] libphobos: Build runtime library with -ffunction-sections -fdata-sections
@ 2021-04-10 13:10 Iain Buclaw
0 siblings, 0 replies; only message in thread
From: Iain Buclaw @ 2021-04-10 13:10 UTC (permalink / raw)
To: gcc-patches
Hi,
This patch updates libphobs build files to compile with
`-ffunction-sections -fdata-sections' where supported, and sets
SECTION_FLAGS accordingly, to take advantage of the smaller executables
that can be had with `--gc-sections'.
Bootstrapped and regression tested on x86_64-linux-gnu/-m32/-mx32, and
committed to mainline.
Regards
Iain
---
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@
--
2.27.0
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-04-10 13:10 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-10 13:10 [committed] libphobos: Build runtime library with -ffunction-sections -fdata-sections Iain Buclaw
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).