sim: warnings: sync some build logic from gdbsupport

This fixes testing of -Wno flags, and adds some more portable ones.
This commit is contained in:
Mike Frysinger
2023-12-05 18:49:27 -07:00
parent 3c8852fcc8
commit 3c7666dca5
2 changed files with 65 additions and 15 deletions

39
sim/configure vendored
View File

@@ -15802,7 +15802,6 @@ _ACEOF
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sim_trace" >&5
$as_echo "$sim_trace" >&6; }
# Check whether --enable-werror was given.
if test "${enable_werror+set}" = set; then :
enableval=$enable_werror; case "${enableval}" in
@@ -15834,11 +15833,21 @@ build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith
-Wold-style-declaration -Wold-style-definition
"
# Enable -Wno-format by default when using gcc on mingw since many
# GCC versions complain about %I64.
case "${host}" in
*-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
*) build_warnings="$build_warnings -Wformat-nonliteral" ;;
*-*-mingw32*)
# Enable -Wno-format by default when using gcc on mingw since many
# GCC versions complain about %I64.
build_warnings="$build_warnings -Wno-format" ;;
*-*-solaris*)
# Solaris 11.4 <python2.7/ceval.h> uses #pragma no_inline that GCC
# doesn't understand.
build_warnings="$build_warnings -Wno-unknown-pragmas"
# Solaris 11 <unistd.h> marks vfork deprecated.
build_warnings="$build_warnings -Wno-deprecated-declarations" ;;
*)
# Note that gcc requires -Wformat for -Wformat-nonliteral to work,
# but there's a special case for this below.
build_warnings="$build_warnings -Wformat-nonliteral" ;;
esac
# Check whether --enable-build-warnings was given.
@@ -15879,11 +15888,27 @@ $as_echo_n "checking compiler warning flags... " >&6; }
# Separate out the -Werror flag as some files just cannot be
# compiled with it enabled.
for w in ${build_warnings}; do
# GCC does not complain about -Wno-unknown-warning. Invert
# and test -Wunknown-warning instead.
case $w in
-Wno-*)
wtest=`echo $w | sed 's/-Wno-/-W/g'` ;;
-Wformat-nonliteral)
# gcc requires -Wformat before -Wformat-nonliteral
# will work, so stick them together.
w="-Wformat $w"
wtest="$w"
;;
*)
wtest=$w ;;
esac
case $w in
-Werr*) WERROR_CFLAGS=-Werror ;;
*) # Check that GCC accepts it
*)
# Check whether GCC accepts it.
saved_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror $w"
CFLAGS="$CFLAGS -Werror $wtest"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */

View File

@@ -15,8 +15,7 @@ dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
dnl
dnl --enable-build-warnings is for developers of the simulator.
dnl it enables extra GCC specific warnings.
AC_DEFUN([SIM_AC_OPTION_WARNINGS],
[
AC_DEFUN([SIM_AC_OPTION_WARNINGS], [dnl
AC_ARG_ENABLE(werror,
AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]),
[case "${enableval}" in
@@ -49,11 +48,21 @@ build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith
-Wold-style-declaration -Wold-style-definition
"
# Enable -Wno-format by default when using gcc on mingw since many
# GCC versions complain about %I64.
case "${host}" in
*-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
*) build_warnings="$build_warnings -Wformat-nonliteral" ;;
*-*-mingw32*)
# Enable -Wno-format by default when using gcc on mingw since many
# GCC versions complain about %I64.
build_warnings="$build_warnings -Wno-format" ;;
*-*-solaris*)
# Solaris 11.4 <python2.7/ceval.h> uses #pragma no_inline that GCC
# doesn't understand.
build_warnings="$build_warnings -Wno-unknown-pragmas"
# Solaris 11 <unistd.h> marks vfork deprecated.
build_warnings="$build_warnings -Wno-deprecated-declarations" ;;
*)
# Note that gcc requires -Wformat for -Wformat-nonliteral to work,
# but there's a special case for this below.
build_warnings="$build_warnings -Wformat-nonliteral" ;;
esac
AC_ARG_ENABLE(build-warnings,
@@ -91,11 +100,27 @@ then
# Separate out the -Werror flag as some files just cannot be
# compiled with it enabled.
for w in ${build_warnings}; do
# GCC does not complain about -Wno-unknown-warning. Invert
# and test -Wunknown-warning instead.
case $w in
-Wno-*)
wtest=`echo $w | sed 's/-Wno-/-W/g'` ;;
-Wformat-nonliteral)
# gcc requires -Wformat before -Wformat-nonliteral
# will work, so stick them together.
w="-Wformat $w"
wtest="$w"
;;
*)
wtest=$w ;;
esac
case $w in
-Werr*) WERROR_CFLAGS=-Werror ;;
*) # Check that GCC accepts it
*)
# Check whether GCC accepts it.
saved_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror $w"
CFLAGS="$CFLAGS -Werror $wtest"
AC_TRY_COMPILE([],[],WARN_CFLAGS="${WARN_CFLAGS} $w",)
CFLAGS="$saved_CFLAGS"
esac