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.
This commit is contained in:
Iain Buclaw 2020-04-09 00:41:14 +02:00
parent 6e286c8df4
commit c0dbfbd763
10 changed files with 87 additions and 11 deletions

View File

@ -1,3 +1,18 @@
2020-04-09 Iain Buclaw <ibuclaw@gdcproject.org>
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 <ibuclaw@gdcproject.org>
* configure: Regenerate.

View File

@ -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@

40
libphobos/configure vendored
View File

@ -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

View File

@ -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)

View File

@ -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) \

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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@

View File

@ -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)