All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: [PULL 59/68] build: move warning flag selection to meson
Date: Wed, 17 May 2023 19:45:11 +0200	[thread overview]
Message-ID: <20230517174520.887405-60-pbonzini@redhat.com> (raw)
In-Reply-To: <20230517174520.887405-1-pbonzini@redhat.com>

Meson already knows to test with the positive form of the flag, which
simplifies the test.  Warnings are now tested explicitly for the C++
compiler, instead of hardcoding those that are only available for
the C language.

At this point all compiler flags in QEMU_CFLAGS are global and only
depend on the OS.  No feature tests are performed in configure.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 configure                | 86 ----------------------------------------
 contrib/plugins/Makefile |  3 +-
 meson.build              | 70 ++++++++++++++++++++++----------
 3 files changed, 49 insertions(+), 110 deletions(-)

diff --git a/configure b/configure
index 44d70803f5ce..eed1aec31c23 100755
--- a/configure
+++ b/configure
@@ -79,7 +79,6 @@ fi
 TMPB="qemu-conf"
 TMPC="${TMPDIR1}/${TMPB}.c"
 TMPO="${TMPDIR1}/${TMPB}.o"
-TMPM="${TMPDIR1}/${TMPB}.m"
 TMPE="${TMPDIR1}/${TMPB}.exe"
 
 rm -f config.log
@@ -162,15 +161,6 @@ do_cc() {
     do_compiler_werror "$cc" $CPU_CFLAGS "$@"
 }
 
-do_objc() {
-    do_compiler_werror "$objcc" $CPU_CFLAGS "$@"
-}
-
-# Append $2 to the variable named $1, with space separation
-add_to() {
-    eval $1=\${$1:+\"\$$1 \"}\$2
-}
-
 compile_object() {
   local_cflags="$1"
   do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
@@ -1186,81 +1176,6 @@ if ! compile_prog "" "" ; then
     error_exit "You need at least GCC v7.4 or Clang v10.0 (or XCode Clang v12.0)"
 fi
 
-# Accumulate -Wfoo and -Wno-bar separately.
-# We will list all of the enable flags first, and the disable flags second.
-# Note that we do not add -Werror, because that would enable it for all
-# configure tests. If a configure test failed due to -Werror this would
-# just silently disable some features, so it's too error prone.
-
-warn_flags=
-add_to warn_flags -Wundef
-add_to warn_flags -Wwrite-strings
-add_to warn_flags -Wmissing-prototypes
-add_to warn_flags -Wstrict-prototypes
-add_to warn_flags -Wredundant-decls
-add_to warn_flags -Wold-style-declaration
-add_to warn_flags -Wold-style-definition
-add_to warn_flags -Wtype-limits
-add_to warn_flags -Wformat-security
-add_to warn_flags -Wformat-y2k
-add_to warn_flags -Winit-self
-add_to warn_flags -Wignored-qualifiers
-add_to warn_flags -Wempty-body
-add_to warn_flags -Wnested-externs
-add_to warn_flags -Wendif-labels
-add_to warn_flags -Wexpansion-to-defined
-add_to warn_flags -Wimplicit-fallthrough=2
-add_to warn_flags -Wmissing-format-attribute
-
-if test "$targetos" != "darwin"; then
-    add_to warn_flags -Wthread-safety
-fi
-
-nowarn_flags=
-add_to nowarn_flags -Wno-initializer-overrides
-add_to nowarn_flags -Wno-missing-include-dirs
-add_to nowarn_flags -Wno-shift-negative-value
-add_to nowarn_flags -Wno-string-plus-int
-add_to nowarn_flags -Wno-typedef-redefinition
-add_to nowarn_flags -Wno-tautological-type-limit-compare
-add_to nowarn_flags -Wno-psabi
-add_to nowarn_flags -Wno-gnu-variable-sized-type-not-at-end
-
-gcc_flags="$warn_flags $nowarn_flags"
-
-cc_has_warning_flag() {
-    write_c_skeleton;
-
-    # Use the positive sense of the flag when testing for -Wno-wombat
-    # support (gcc will happily accept the -Wno- form of unknown
-    # warning options).
-    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
-    compile_prog "-Werror $optflag" ""
-}
-
-objcc_has_warning_flag() {
-    cat > $TMPM <<EOF
-int main(void) { return 0; }
-EOF
-
-    # Use the positive sense of the flag when testing for -Wno-wombat
-    # support (gcc will happily accept the -Wno- form of unknown
-    # warning options).
-    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
-    do_objc -Werror $optflag \
-      $OBJCFLAGS $EXTRA_OBJCFLAGS $CONFIGURE_OBJCFLAGS $QEMU_OBJCFLAGS \
-      -o $TMPE $TMPM
-}
-
-for flag in $gcc_flags; do
-    if cc_has_warning_flag $flag ; then
-        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
-    fi
-    if objcc_has_warning_flag $flag ; then
-        QEMU_OBJCFLAGS="$QEMU_OBJCFLAGS $flag"
-    fi
-done
-
 if test "$static" = "yes" ; then
   if test "$plugins" = "yes"; then
     error_exit "static and plugins are mutually incompatible"
@@ -2017,7 +1932,6 @@ echo "NINJA=$ninja" >> $config_host_mak
 echo "PKG_CONFIG=${pkg_config}" >> $config_host_mak
 echo "CC=$cc" >> $config_host_mak
 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
-echo "QEMU_OBJCFLAGS=$QEMU_OBJCFLAGS" >> $config_host_mak
 echo "EXESUF=$EXESUF" >> $config_host_mak
 
 # use included Linux headers
diff --git a/contrib/plugins/Makefile b/contrib/plugins/Makefile
index 8a316cd76f2f..b2b9db9f51af 100644
--- a/contrib/plugins/Makefile
+++ b/contrib/plugins/Makefile
@@ -27,8 +27,7 @@ SONAMES := $(addsuffix .so,$(addprefix lib,$(NAMES)))
 # The main QEMU uses Glib extensively so it's perfectly fine to use it
 # in plugins (which many example do).
 CFLAGS := $(shell $(PKG_CONFIG) --cflags glib-2.0)
-CFLAGS += -fPIC -Wall $(filter -W%, $(QEMU_CFLAGS))
-CFLAGS += $(if $(findstring no-psabi,$(QEMU_CFLAGS)),-Wpsabi)
+CFLAGS += -fPIC -Wall
 CFLAGS += $(if $(CONFIG_DEBUG_TCG), -ggdb -O0)
 CFLAGS += -I$(SRC_PATH)/include/qemu
 
diff --git a/meson.build b/meson.build
index fff488f63f6d..e7a7a1624afa 100644
--- a/meson.build
+++ b/meson.build
@@ -190,16 +190,8 @@ endif
 # Compiler flags #
 ##################
 
-qemu_common_flags = []
+qemu_common_flags = config_host['QEMU_CFLAGS'].split()
 qemu_cflags = []
-foreach arg : config_host['QEMU_CFLAGS'].split()
-  if arg.startswith('-W')
-    qemu_cflags += arg
-  else
-    qemu_common_flags += arg
-  endif
-endforeach
-qemu_objcflags = config_host['QEMU_OBJCFLAGS'].split()
 qemu_ldflags = []
 
 if get_option('gprof')
@@ -369,20 +361,47 @@ endif
 add_global_arguments(qemu_common_flags, native: false, language: all_languages)
 add_global_link_arguments(qemu_ldflags, native: false, language: all_languages)
 
+# Collect warnings that we want to enable
+
+warn_flags = [
+  '-Wundef',
+  '-Wwrite-strings',
+  '-Wmissing-prototypes',
+  '-Wstrict-prototypes',
+  '-Wredundant-decls',
+  '-Wold-style-declaration',
+  '-Wold-style-definition',
+  '-Wtype-limits',
+  '-Wformat-security',
+  '-Wformat-y2k',
+  '-Winit-self',
+  '-Wignored-qualifiers',
+  '-Wempty-body',
+  '-Wnested-externs',
+  '-Wendif-labels',
+  '-Wexpansion-to-defined',
+  '-Wimplicit-fallthrough=2',
+  '-Wmissing-format-attribute',
+  '-Wno-initializer-overrides',
+  '-Wno-missing-include-dirs',
+  '-Wno-shift-negative-value',
+  '-Wno-string-plus-int',
+  '-Wno-typedef-redefinition',
+  '-Wno-tautological-type-limit-compare',
+  '-Wno-psabi',
+  '-Wno-gnu-variable-sized-type-not-at-end',
+]
+
+if targetos != 'darwin'
+  warn_flags += ['-Wthread-safety']
+endif
+
 # Check that the C++ compiler exists and works with the C compiler.
 link_language = 'c'
 linker = cc
 qemu_cxxflags = []
 if 'cpp' in all_languages
-  add_global_arguments(['-D__STDC_LIMIT_MACROS', '-D__STDC_CONSTANT_MACROS', '-D__STDC_FORMAT_MACROS'],
-                       native: false, language: 'cpp')
-  foreach k: qemu_cflags
-    if k not in ['-Wstrict-prototypes', '-Wmissing-prototypes', '-Wnested-externs',
-                 '-Wold-style-declaration', '-Wold-style-definition', '-Wredundant-decls']
-      qemu_cxxflags += [k]
-    endif
-  endforeach
-
+  qemu_cxxflags = ['-D__STDC_LIMIT_MACROS', '-D__STDC_CONSTANT_MACROS', '-D__STDC_FORMAT_MACROS'] + qemu_cflags
   if cxx.links(files('scripts/main.c'), args: qemu_cflags)
     link_language = 'cpp'
     linker = cxx
@@ -402,9 +421,16 @@ if get_option('optimization') != '0' and targetos == 'linux'
   endif
 endif
 
-add_project_arguments(qemu_cflags, native: false, language: 'c')
-add_project_arguments(qemu_cxxflags, native: false, language: 'cpp')
-add_project_arguments(qemu_objcflags, native: false, language: 'objc')
+add_project_arguments(qemu_cflags, native: false, language: 'objc')
+add_project_arguments(cc.get_supported_arguments(warn_flags), native: false, language: 'c')
+if 'cpp' in all_languages
+  add_project_arguments(qemu_cxxflags, native: false, language: 'cpp')
+  add_project_arguments(cxx.get_supported_arguments(warn_flags), native: false, language: 'cpp')
+endif
+if 'objc' in all_languages
+  # Note sanitizer flags are not applied to Objective-C sources!
+  add_project_arguments(objc.get_supported_arguments(warn_flags), native: false, language: 'objc')
+endif
 if targetos == 'linux'
   add_project_arguments('-isystem', meson.current_source_dir() / 'linux-headers',
                         '-isystem', 'linux-headers',
@@ -3986,7 +4012,7 @@ if 'cpp' in all_languages
   summary_info += {'QEMU_CXXFLAGS':     ' '.join(qemu_common_flags + qemu_cxxflags)}
 endif
 if 'objc' in all_languages
-  summary_info += {'QEMU_OBJCFLAGS':    ' '.join(qemu_common_flags + qemu_objcflags)}
+  summary_info += {'QEMU_OBJCFLAGS':    ' '.join(qemu_common_flags)}
 endif
 summary_info += {'QEMU_LDFLAGS':      ' '.join(qemu_ldflags)}
 summary_info += {'profiler':          get_option('profiler')}
-- 
2.40.1



  parent reply	other threads:[~2023-05-17 18:02 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-17 17:44 [PULL 00/68] i386, build system, KVM changes for 2023-05-18 Paolo Bonzini
2023-05-17 17:44 ` [PULL 01/68] target/i386: add support for FLUSH_L1D feature Paolo Bonzini
2023-05-17 17:44 ` [PULL 02/68] target/i386: add support for FB_CLEAR feature Paolo Bonzini
2023-05-17 17:44 ` [PULL 03/68] target/i386: fix operand size for VCOMI/VUCOMI instructions Paolo Bonzini
2023-05-17 17:44 ` [PULL 04/68] target/i386: fix avx2 instructions vzeroall and vpermdq Paolo Bonzini
2023-05-17 17:44 ` [PULL 05/68] tests/tcg/i386: correct mask for VPERM2F128/VPERM2I128 Paolo Bonzini
2023-05-17 17:44 ` [PULL 06/68] target/i386: Fix and add some comments next to SSE/AVX instructions Paolo Bonzini
2023-05-17 17:44 ` [PULL 07/68] target/i386: Fix exception classes for " Paolo Bonzini
2023-05-17 17:44 ` [PULL 08/68] target/i386: Fix exception classes for MOVNTPS/MOVNTPD Paolo Bonzini
2023-05-17 17:44 ` [PULL 09/68] meson: Pass -j option to sphinx Paolo Bonzini
2023-05-17 17:44 ` [PULL 10/68] migration: Add last stage indicator to global dirty log Paolo Bonzini
2023-05-17 17:44 ` [PULL 11/68] kvm: Synchronize the backup bitmap in the last stage Paolo Bonzini
2023-05-17 17:44 ` [PULL 12/68] kvm: Add helper kvm_dirty_ring_init() Paolo Bonzini
2023-05-17 17:44 ` [PULL 13/68] kvm: Enable dirty ring for arm64 Paolo Bonzini
2023-05-17 17:44 ` [PULL 14/68] tcg: round-robin: do not use mb_read for rr_current_cpu Paolo Bonzini
2023-05-17 17:44 ` [PULL 15/68] coverity: the definitive COMPONENTS.md update Paolo Bonzini
2023-05-17 17:44 ` [PULL 16/68] scsi-generic: fix buffer overflow on block limits inquiry Paolo Bonzini
2023-05-17 17:44 ` [PULL 17/68] make: clean after distclean deletes source files Paolo Bonzini
2023-05-17 17:44 ` [PULL 18/68] python: shut up "pip install" during "make check-minreqs" Paolo Bonzini
2023-05-17 17:44 ` [PULL 19/68] python: update pylint configuration Paolo Bonzini
2023-05-17 17:44 ` [PULL 20/68] python: add mkvenv.py Paolo Bonzini
2023-05-17 17:44 ` [PULL 21/68] mkvenv: add better error message for broken or missing ensurepip Paolo Bonzini
2023-05-17 17:44 ` [PULL 22/68] mkvenv: add nested venv workaround Paolo Bonzini
2023-05-17 17:44 ` [PULL 23/68] mkvenv: add ensure subcommand Paolo Bonzini
2023-05-17 17:44 ` [PULL 24/68] mkvenv: add --diagnose option to explain "ensure" failures Paolo Bonzini
2023-05-17 17:44 ` [PULL 25/68] mkvenv: add console script entry point generation Paolo Bonzini
2023-05-17 17:44 ` [PULL 26/68] mkvenv: use pip's vendored distlib as a fallback Paolo Bonzini
2023-05-17 17:44 ` [PULL 27/68] mkvenv: avoid ensurepip if pip is installed Paolo Bonzini
2023-05-17 17:44 ` [PULL 28/68] mkvenv: work around broken pip installations on Debian 10 Paolo Bonzini
2023-05-17 17:44 ` [PULL 29/68] tests/docker: add python3-venv dependency Paolo Bonzini
2023-05-17 17:44 ` [PULL 30/68] tests/vm: Configure netbsd to use Python 3.10 Paolo Bonzini
2023-05-17 17:44 ` [PULL 31/68] tests/vm: add py310-expat to NetBSD Paolo Bonzini
2023-05-17 17:44 ` [PULL 32/68] python: add vendor.py utility Paolo Bonzini
2023-05-17 17:44 ` [PULL 33/68] configure: create a python venv unconditionally Paolo Bonzini
2023-05-17 17:44 ` [PULL 34/68] python/wheels: add vendored meson package Paolo Bonzini
2023-05-17 17:44 ` [PULL 35/68] configure: use 'mkvenv ensure meson' to bootstrap meson Paolo Bonzini
2023-05-17 17:44 ` [PULL 36/68] qemu.git: drop meson git submodule Paolo Bonzini
2023-05-17 17:44 ` [PULL 37/68] tests: Use configure-provided pyvenv for tests Paolo Bonzini
2023-05-17 17:44 ` [PULL 38/68] configure: move --enable-docs and --disable-docs back to configure Paolo Bonzini
2023-05-17 17:44 ` [PULL 39/68] configure: bootstrap sphinx with mkvenv Paolo Bonzini
2023-05-17 17:44 ` [PULL 40/68] configure: add --enable-pypi and --disable-pypi Paolo Bonzini
2023-05-17 17:44 ` [PULL 41/68] Python: Drop support for Python 3.6 Paolo Bonzini
2023-05-17 17:44 ` [PULL 42/68] configure: Add courtesy hint to Python version failure message Paolo Bonzini
2023-05-17 17:44 ` [PULL 43/68] mkvenv: mark command as required Paolo Bonzini
2023-05-17 17:44 ` [PULL 44/68] python: bump some of the dependencies Paolo Bonzini
2023-05-17 17:44 ` [PULL 45/68] meson: regenerate meson-buildoptions.sh Paolo Bonzini
2023-05-17 17:44 ` [PULL 46/68] meson: require 0.63.0 Paolo Bonzini
2023-05-17 17:44 ` [PULL 47/68] meson: use prefer_static option Paolo Bonzini
2023-05-17 17:45 ` [PULL 48/68] meson: remove static_kwargs Paolo Bonzini
2023-05-17 17:45 ` [PULL 49/68] meson: add more version numbers to the summary Paolo Bonzini
2023-05-17 17:45 ` [PULL 50/68] meson: drop unnecessary declare_dependency() Paolo Bonzini
2023-05-17 17:45 ` [PULL 51/68] build: move glib detection and workarounds to meson Paolo Bonzini
2023-05-17 17:45 ` [PULL 52/68] configure: remove pkg-config functions Paolo Bonzini
2023-05-17 17:45 ` [PULL 53/68] configure, meson: move --enable-modules to Meson Paolo Bonzini
2023-05-17 17:45 ` [PULL 54/68] meson: prepare move of QEMU_CFLAGS to meson Paolo Bonzini
2023-05-17 17:45 ` [PULL 55/68] build: move sanitizer tests " Paolo Bonzini
2023-05-17 17:45 ` [PULL 56/68] build: move SafeStack " Paolo Bonzini
2023-05-17 17:45 ` [PULL 57/68] build: move coroutine backend selection " Paolo Bonzini
2023-05-17 17:45 ` [PULL 58/68] build: move stack protector flag " Paolo Bonzini
2023-05-17 17:45 ` Paolo Bonzini [this message]
2023-05-17 17:45 ` [PULL 60/68] build: move remaining compiler flag tests " Paolo Bonzini
2023-05-17 17:45 ` [PULL 61/68] build: move compiler version check " Paolo Bonzini
2023-05-17 17:45 ` [PULL 62/68] build: move --disable-debug-info " Paolo Bonzini
2023-05-17 17:45 ` [PULL 63/68] configure: remove compiler sanity check Paolo Bonzini
2023-05-17 18:48   ` Peter Maydell
2023-05-18  4:57     ` Paolo Bonzini
2023-05-17 17:45 ` [PULL 64/68] configure: do not rerun the tests with -Werror Paolo Bonzini
2023-05-17 17:45 ` [PULL 65/68] configure: remove unnecessary mkdir Paolo Bonzini
2023-05-17 17:45 ` [PULL 66/68] configure: reorder option parsing code Paolo Bonzini
2023-05-17 17:45 ` [PULL 67/68] configure: remove unnecessary check Paolo Bonzini
2023-05-17 17:45 ` [PULL 68/68] docs/devel: update build system docs Paolo Bonzini
2023-05-17 20:31 ` [PULL 00/68] i386, build system, KVM changes for 2023-05-18 Richard Henderson
2023-05-18  5:09   ` Paolo Bonzini
2023-05-18  9:22   ` Peter Maydell
2023-05-18  9:52     ` Paolo Bonzini
2023-05-18 11:35     ` Paolo Bonzini
2023-05-18 13:04     ` Richard Henderson
2023-05-19  3:06 ` Yang Zhong
2023-05-19  8:29   ` Paolo Bonzini
2023-05-22  9:11     ` Yang Zhong
2023-05-18 11:40 [PULL v3 " Paolo Bonzini
2023-05-18 11:40 ` [PULL 59/68] build: move warning flag selection to meson Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230517174520.887405-60-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.