build: move remaining compiler flag tests to meson
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. Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							
								
								
									
										79
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										79
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@@ -163,14 +163,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".
 | 
			
		||||
@@ -375,19 +375,6 @@ windmc="${WINDMC-${cross_prefix}windmc}"
 | 
			
		||||
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)
 | 
			
		||||
@@ -466,21 +453,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"
 | 
			
		||||
@@ -633,8 +612,6 @@ done
 | 
			
		||||
 | 
			
		||||
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=""
 | 
			
		||||
@@ -1196,59 +1173,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 $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
 | 
			
		||||
@@ -1931,7 +1875,6 @@ echo "MESON=$meson" >> $config_host_mak
 | 
			
		||||
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 "EXESUF=$EXESUF" >> $config_host_mak
 | 
			
		||||
 | 
			
		||||
# use included Linux headers
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										52
									
								
								meson.build
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								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,16 @@ 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_common_flags += cc.get_supported_arguments('-fno-pie')
 | 
			
		||||
  if not get_option('prefer_static')
 | 
			
		||||
    # No PIE is implied by -static which we added above.
 | 
			
		||||
    qemu_ldflags += cc.get_supported_link_arguments('-no-pie')
 | 
			
		||||
  endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
if not get_option('stack_protector').disabled()
 | 
			
		||||
  stack_protector_probe = '''
 | 
			
		||||
    int main(int argc, char *argv[])
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user