From c0dbfbd763ad77d6beaa345ce94afc93e193236e Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Thu, 9 Apr 2020 00:41:14 +0200 Subject: [PATCH] libphobos: Add --enable-libphobos-checking configure option As GDCFLAGS is overriden by the top-level make file with '-O2 -g', libphobos ends up always being built with all contracts, invariants, and asserts compiled in. This adds a new configurable that defaults to omit compiling any run-time checks into the library using '-frelease'. Other choices either set the flags '-fno-release', enabling all run-time checks, or '-fassert', which only compiles in asserts. The omission of compiling in contracts results in a smaller library size, with faster build times. libphobos/ChangeLog: PR d/94305 * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac: Add --enable-libphobos-checking and substitute CHECKING_DFLAGS. Remove -frelease from GDCFLAGS. * libdruntime/Makefile.am: Add CHECKING_DFLAGS to AM_DFLAGS. * libdruntime/Makefile.in: Regenerate. * src/Makefile.am: Add CHECKING_DFLAGS to AM_DFLAGS. * src/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. * testsuite/testsuite_flags.in: Add -fno-release -funittest to --gdcflags. --- libphobos/ChangeLog | 15 ++++++++++ libphobos/Makefile.in | 1 + libphobos/configure | 40 +++++++++++++++++++++++--- libphobos/configure.ac | 29 +++++++++++++++++-- libphobos/libdruntime/Makefile.am | 2 +- libphobos/libdruntime/Makefile.in | 3 +- libphobos/src/Makefile.am | 2 +- libphobos/src/Makefile.in | 3 +- libphobos/testsuite/Makefile.in | 1 + libphobos/testsuite/testsuite_flags.in | 2 +- 10 files changed, 87 insertions(+), 11 deletions(-) diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog index d8d37ef1c2b..5b9fe432bb9 100644 --- a/libphobos/ChangeLog +++ b/libphobos/ChangeLog @@ -1,3 +1,18 @@ +2020-04-09 Iain Buclaw + + PR d/94305 + * Makefile.in: Regenerate. + * configure: Regenerate. + * configure.ac: Add --enable-libphobos-checking and substitute + CHECKING_DFLAGS. Remove -frelease from GDCFLAGS. + * libdruntime/Makefile.am: Add CHECKING_DFLAGS to AM_DFLAGS. + * libdruntime/Makefile.in: Regenerate. + * src/Makefile.am: Add CHECKING_DFLAGS to AM_DFLAGS. + * src/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + * testsuite/testsuite_flags.in: Add -fno-release -funittest to + --gdcflags. + 2020-04-09 Iain Buclaw * configure: Regenerate. diff --git a/libphobos/Makefile.in b/libphobos/Makefile.in index 98d35641a95..b464d605232 100644 --- a/libphobos/Makefile.in +++ b/libphobos/Makefile.in @@ -207,6 +207,7 @@ CCASFLAGS = @CCASFLAGS@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ +CHECKING_DFLAGS = @CHECKING_DFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ diff --git a/libphobos/configure b/libphobos/configure index f458ad3b086..af597b2525b 100755 --- a/libphobos/configure +++ b/libphobos/configure @@ -637,6 +637,7 @@ WARN_DFLAGS GDCFLAGSX libtool_VERSION SPEC_PHOBOS_DEPS +CHECKING_DFLAGS ENABLE_LIBPHOBOS_FALSE ENABLE_LIBPHOBOS_TRUE gdc_include_dir @@ -842,6 +843,7 @@ with_cross_host enable_version_specific_runtime_libs with_toolexeclibdir enable_libphobos +enable_libphobos_checking ' ac_precious_vars='build_alias host_alias @@ -1488,6 +1490,11 @@ Optional Features: Specify that runtime libraries should be installed in a compiler-specific directory --enable-libphobos Enable libphobos + --enable-libphobos-checking[=LIST] + enable expensive run-time checks. With LIST, enable + only specific categories of checks. Categories are: + yes,no,all,none,release. Flags are: assert or other + strings Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -11642,7 +11649,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11645 "configure" +#line 11652 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11748,7 +11755,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11751 "configure" +#line 11758 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -15288,6 +15295,31 @@ else fi +# Enable expensive internal checks +# Check whether --enable-libphobos-checking was given. +if test "${enable_libphobos_checking+set}" = set; then : + enableval=$enable_libphobos_checking; ac_checking_flags="${enableval}" +else + ac_checking_flags=release +fi + +IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="$IFS," +for check in release $ac_checking_flags +do + case $check in + # These set all the flags to specific states + yes|all) RELEASE_FLAG="-fno-release" ; ASSERT_FLAG= ;; + no|none|release) RELEASE_FLAG="-frelease" ; ASSERT_FLAG= ;; + # These enable particular checks + assert) ASSERT_FLAG="-fassert" ;; + # Accept + *) ;; + esac +done +IFS="$ac_save_IFS" +CHECKING_DFLAGS="$RELEASE_FLAG $ASSERT_FLAG" + + # Add drtbegin.o/drtend.o to startfile/endfile specs in libgphobos.spec if test "$DCFG_MINFO_BRACKETING" = "false"; then DRTSTUFF_SPEC=$srcdir/src/drtstuff.spec @@ -15306,12 +15338,12 @@ libtool_VERSION=1:0:0 # Set default flags (after DRUNTIME_WERROR!) if test -z "$GDCFLAGS"; then - GDCFLAGS="-g -frelease -O2" + GDCFLAGS="-g -O2" fi if test -z "$GDCFLAGSX"; then - GDCFLAGSX="-g -fno-release -funittest" + GDCFLAGSX="-g" fi diff --git a/libphobos/configure.ac b/libphobos/configure.ac index e6148f07519..ffd12981d0b 100644 --- a/libphobos/configure.ac +++ b/libphobos/configure.ac @@ -187,6 +187,31 @@ yes:*) use_libphobos=yes ;; esac AM_CONDITIONAL(ENABLE_LIBPHOBOS, test x$use_libphobos = xyes) +# Enable expensive internal checks +AC_ARG_ENABLE(libphobos-checking, +[AS_HELP_STRING([[--enable-libphobos-checking[=LIST]]], + [enable expensive run-time checks. With LIST, + enable only specific categories of checks. + Categories are: yes,no,all,none,release. + Flags are: assert or other strings])], +[ac_checking_flags="${enableval}"],[ac_checking_flags=release]) +IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="$IFS," +for check in release $ac_checking_flags +do + case $check in + # These set all the flags to specific states + yes|all) RELEASE_FLAG="-fno-release" ; ASSERT_FLAG= ;; + no|none|release) RELEASE_FLAG="-frelease" ; ASSERT_FLAG= ;; + # These enable particular checks + assert) ASSERT_FLAG="-fassert" ;; + # Accept + *) ;; + esac +done +IFS="$ac_save_IFS" +CHECKING_DFLAGS="$RELEASE_FLAG $ASSERT_FLAG" +AC_SUBST(CHECKING_DFLAGS) + # Add drtbegin.o/drtend.o to startfile/endfile specs in libgphobos.spec if test "$DCFG_MINFO_BRACKETING" = "false"; then DRTSTUFF_SPEC=$srcdir/src/drtstuff.spec @@ -205,12 +230,12 @@ AC_SUBST(libtool_VERSION) # Set default flags (after DRUNTIME_WERROR!) if test -z "$GDCFLAGS"; then - GDCFLAGS="-g -frelease -O2" + GDCFLAGS="-g -O2" fi AC_SUBST(GDCFLAGS) if test -z "$GDCFLAGSX"; then - GDCFLAGSX="-g -fno-release -funittest" + GDCFLAGSX="-g" fi AC_SUBST(GDCFLAGSX) diff --git a/libphobos/libdruntime/Makefile.am b/libphobos/libdruntime/Makefile.am index 41ccfaa339c..c7b03a5967d 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_compiler_pic_flag) \ - $(WARN_DFLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) # Install all D and DI files ALL_DRUNTIME_INSTALL_DSOURCES = $(DRUNTIME_DSOURCES) \ diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in index 9277e0a1665..e0688e25c81 100644 --- a/libphobos/libdruntime/Makefile.in +++ b/libphobos/libdruntime/Makefile.in @@ -555,6 +555,7 @@ CCASFLAGS = @CCASFLAGS@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ +CHECKING_DFLAGS = @CHECKING_DFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ @@ -715,7 +716,7 @@ D_EXTRA_DFLAGS = -nostdinc -I $(srcdir) -I . # D flags for compilation AM_DFLAGS = \ $(phobos_compiler_pic_flag) \ - $(WARN_DFLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) # Install all D and DI files diff --git a/libphobos/src/Makefile.am b/libphobos/src/Makefile.am index 5c17538613a..d2418a8ca83 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_compiler_pic_flag) \ - $(WARN_DFLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) # Install all D files ALL_PHOBOS_INSTALL_DSOURCES = $(PHOBOS_DSOURCES) diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in index e58dafb5e7c..45651672e1e 100644 --- a/libphobos/src/Makefile.in +++ b/libphobos/src/Makefile.in @@ -278,6 +278,7 @@ CCASFLAGS = @CCASFLAGS@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ +CHECKING_DFLAGS = @CHECKING_DFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ @@ -440,7 +441,7 @@ D_EXTRA_DFLAGS = -nostdinc -I $(srcdir) \ # D flags for compilation AM_DFLAGS = \ $(phobos_compiler_pic_flag) \ - $(WARN_DFLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) # Install all D files diff --git a/libphobos/testsuite/Makefile.in b/libphobos/testsuite/Makefile.in index b70a996d95d..6f0eaf83405 100644 --- a/libphobos/testsuite/Makefile.in +++ b/libphobos/testsuite/Makefile.in @@ -151,6 +151,7 @@ CCASFLAGS = @CCASFLAGS@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ +CHECKING_DFLAGS = @CHECKING_DFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ diff --git a/libphobos/testsuite/testsuite_flags.in b/libphobos/testsuite/testsuite_flags.in index 990221a3d0f..808dde30993 100755 --- a/libphobos/testsuite/testsuite_flags.in +++ b/libphobos/testsuite/testsuite_flags.in @@ -28,7 +28,7 @@ case ${query} in ;; --gdcflags) GDCFLAGS_default="-fmessage-length=0 -fno-show-column" - GDCFLAGS_config="@WARN_DFLAGS@ @GDCFLAGSX@" + GDCFLAGS_config="@WARN_DFLAGS@ @GDCFLAGSX@ -fno-release -funittest" echo ${GDCFLAGS_default} ${GDCFLAGS_config} ;; --gdcpaths)