qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 26/30] build: move remaining compiler flag tests to meson


From: Marc-André Lureau
Subject: Re: [PATCH 26/30] build: move remaining compiler flag tests to meson
Date: Mon, 12 Dec 2022 17:54:56 +0400

Hi

On Fri, Dec 9, 2022 at 3:38 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> Remove the only remaining uses of QEMU_CFLAGS.  Now that no
> feature tests are done in configure, it is possible to remove
> CONFIGURE_CFLAGS and CONFIGURE_LDFLAGS as well.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

> ---
>  configure   | 79 ++++++++---------------------------------------------
>  meson.build | 49 ++++++++++++++++++++++++++++++++-
>  2 files changed, 59 insertions(+), 69 deletions(-)
>
> diff --git a/configure b/configure
> index 6df61f4337e4..d5491fc3b986 100755
> --- a/configure
> +++ b/configure
> @@ -158,14 +158,14 @@ do_cc() {
>
>  compile_object() {
>    local_cflags="$1"
> -  do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags 
> -c -o $TMPO $TMPC
> +  do_cc $CFLAGS $EXTRA_CFLAGS $local_cflags -c -o $TMPO $TMPC
>  }
>
>  compile_prog() {
>    local_cflags="$1"
>    local_ldflags="$2"
> -  do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags 
> -o $TMPE $TMPC \
> -      $LDFLAGS $EXTRA_LDFLAGS $CONFIGURE_LDFLAGS $local_ldflags
> +  do_cc $CFLAGS $EXTRA_CFLAGS $local_cflags -o $TMPE $TMPC \
> +      $LDFLAGS $EXTRA_LDFLAGS $local_ldflags
>  }
>
>  # symbolically link $1 to $2.  Portable version of "ln -sf".
> @@ -351,19 +351,6 @@ windres="${WINDRES-${cross_prefix}windres}"
>  pkg_config="${PKG_CONFIG-${cross_prefix}pkg-config}"
>  sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
>
> -# default flags for all hosts
> -# We use -fwrapv to tell the compiler that we require a C dialect where
> -# left shift of signed integers is well defined and has the expected
> -# 2s-complement style results. (Both clang and gcc agree that it
> -# provides these semantics.)
> -QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv"
> -QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE 
> $QEMU_CFLAGS"
> -
> -# Flags that are needed during configure but later taken care of by Meson
> -CONFIGURE_CFLAGS="-std=gnu11 -Wall"
> -CONFIGURE_LDFLAGS=
> -
> -
>  check_define() {
>  cat > $TMPC <<EOF
>  #if !defined($1)
> @@ -442,21 +429,13 @@ openbsd)
>  darwin)
>    bsd="yes"
>    darwin="yes"
> -  # Disable attempts to use ObjectiveC features in os/object.h since they
> -  # won't work when we're compiling with gcc as a C compiler.
> -  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
>  ;;
>  sunos)
>    solaris="yes"
>    make="${MAKE-gmake}"
> -# needed for CMSG_ macros in sys/socket.h
> -  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
> -# needed for TIOCWIN* defines in termios.h
> -  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
>  ;;
>  haiku)
>    pie="no"
> -  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC 
> $QEMU_CFLAGS"
>  ;;
>  linux)
>    linux="yes"
> @@ -589,8 +568,6 @@ fi
>
>  if test "$mingw32" = "yes" ; then
>    EXESUF=".exe"
> -  # MinGW needs -mthreads for TLS and macro _MT.
> -  CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
>    prefix="/qemu"
>    bindir=""
>    qemu_suffix=""
> @@ -1102,59 +1079,26 @@ static THREAD int tls_var;
>  int main(void) { return tls_var; }
>  EOF
>
> -# Meson currently only handles pie as a boolean for now so if we have
> -# explicitly disabled PIE we need to extend our cflags because it wont.
>  if test "$static" = "yes"; then
>    if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" 
> "-static-pie"; then
> -    CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
>      pie="yes"
>    elif test "$pie" = "yes"; then
>      error_exit "-static-pie not available due to missing toolchain support"
>    else
>      pie="no"
> -    QEMU_CFLAGS="-fno-pie -no-pie $QEMU_CFLAGS"
>    fi
> -elif test "$pie" = "no"; then
> -  if compile_prog "-Werror -fno-pie" "-no-pie"; then
> -    CONFIGURE_CFLAGS="-fno-pie $CONFIGURE_CFLAGS"
> -    CONFIGURE_LDFLAGS="-no-pie $CONFIGURE_LDFLAGS"
> -    QEMU_CFLAGS="-fno-pie -no-pie $QEMU_CFLAGS"
> +elif test "$pie" != "no"; then
> +  if compile_prog "-Werror -fPIE -DPIE" "-pie"; then
> +    pie="yes"
> +  elif test "$pie" = "yes"; then
> +    error_exit "PIE not available due to missing toolchain support"
> +  else
> +    echo "Disabling PIE due to missing toolchain support"
> +    pie="no"
>    fi
> -elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
> -  CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
> -  CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
> -  pie="yes"
> -elif test "$pie" = "yes"; then
> -  error_exit "PIE not available due to missing toolchain support"
> -else
> -  echo "Disabling PIE due to missing toolchain support"
> -  pie="no"
>  fi
>
>  ##########################################
> -# __sync_fetch_and_and requires at least -march=i486. Many toolchains
> -# use i686 as default anyway, but for those that don't, an explicit
> -# specification is necessary
> -
> -if test "$cpu" = "i386"; then
> -  cat > $TMPC << EOF
> -static int sfaa(int *ptr)
> -{
> -  return __sync_fetch_and_and(ptr, 0);
> -}
> -
> -int main(void)
> -{
> -  int val = 42;
> -  val = __sync_val_compare_and_swap(&val, 0, 1);
> -  sfaa(&val);
> -  return val;
> -}
> -EOF
> -  if ! compile_prog "" "" ; then
> -    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
> -  fi
> -fi
>
>  if test -z "${target_list+xxx}" ; then
>      default_targets=yes
> @@ -1834,7 +1778,6 @@ echo "MESON=$meson" >> $config_host_mak
>  echo "NINJA=$ninja" >> $config_host_mak
>  echo "PKG_CONFIG=${pkg_config_exe}" >> $config_host_mak
>  echo "CC=$cc" >> $config_host_mak
> -echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
>  echo "EXESUF=$EXESUF" >> $config_host_mak
>
>  # use included Linux headers
> diff --git a/meson.build b/meson.build
> index 4ec8104b73a3..01c6ac0045bc 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -190,10 +190,50 @@ endif
>  # Compiler flags #
>  ##################
>
> -qemu_common_flags = config_host['QEMU_CFLAGS'].split()
> +# default flags for all hosts
> +# We use -fwrapv to tell the compiler that we require a C dialect where
> +# left shift of signed integers is well defined and has the expected
> +# 2s-complement style results. (Both clang and gcc agree that it
> +# provides these semantics.)
> +
> +qemu_common_flags = [
> +  '-D_GNU_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_LARGEFILE_SOURCE',
> +  '-fno-strict-aliasing', '-fno-common', '-fwrapv' ]
>  qemu_cflags = []
>  qemu_ldflags = []
>
> +if targetos == 'darwin'
> +  # Disable attempts to use ObjectiveC features in os/object.h since they
> +  # won't work when we're compiling with gcc as a C compiler.
> +  qemu_common_flags += '-DOS_OBJECT_USE_OBJC=0'
> +elif targetos == 'solaris'
> +  # needed for CMSG_ macros in sys/socket.h
> +  qemu_common_flags += '-D_XOPEN_SOURCE=600'
> +  # needed for TIOCWIN* defines in termios.h
> +  qemu_common_flags += '-D__EXTENSIONS__'
> +elif targetos == 'haiku'
> +  qemu_common_flags += ['-DB_USE_POSITIVE_POSIX_ERRORS', '-D_BSD_SOURCE', 
> '-fPIC']
> +endif
> +
> +# __sync_fetch_and_and requires at least -march=i486. Many toolchains
> +# use i686 as default anyway, but for those that don't, an explicit
> +# specification is necessary
> +if host_arch == 'i386' and not cc.links('''
> +  static int sfaa(int *ptr)
> +  {
> +    return __sync_fetch_and_and(ptr, 0);
> +  }
> +
> +  int main(void)
> +  {
> +    int val = 42;
> +    val = __sync_val_compare_and_swap(&val, 0, 1);
> +    sfaa(&val);
> +    return val;
> +  }''')
> +  qemu_common_flags = ['-march=i486'] + qemu_common_flags
> +endif
> +
>  if get_option('gprof')
>    qemu_common_flags += ['-p']
>    qemu_ldflags += ['-p']
> @@ -203,6 +243,13 @@ if get_option('prefer_static')
>    qemu_ldflags += get_option('b_pie') ? '-static-pie' : '-static'
>  endif
>
> +# Meson currently only handles pie as a boolean for now, so if the user
> +# has explicitly disabled PIE we need to extend our cflags.
> +if not get_option('b_pie')
> +  qemu_cflags += cc.get_supported_arguments('-fno-pie')
> +  qemu_ldflags += cc.get_supported_link_arguments('-no-pie')
> +endif
> +
>  if not get_option('stack_protector').disabled()
>    stack_protector_probe = '''
>      int main(int argc, char *argv[])
> --
> 2.38.1
>
>


-- 
Marc-André Lureau



reply via email to

[Prev in Thread] Current Thread [Next in Thread]