@@ -190,7 +190,7 @@ clean: recurse-clean
rm -f fsdev/*.pod scsi/*.pod
rm -f $(foreach f,$(generated-files-y),$(f) $(f)-timestamp)
-VERSION ?= $(shell cat VERSION)
+VERSION = $(shell cat $(SRC_PATH)/VERSION)
dist: qemu-$(VERSION).tar.bz2
@@ -443,13 +443,13 @@ static int bdrv_format_is_whitelisted(const char *format_name, bool read_only)
return 1; /* no whitelist, anything goes */
}
- for (p = whitelist_rw; *p; p++) {
+ for (p = whitelist_rw; p < &whitelist_rw[ARRAY_SIZE(whitelist_rw)]; p++) {
if (!strcmp(format_name, *p)) {
return 1;
}
}
if (read_only) {
- for (p = whitelist_ro; *p; p++) {
+ for (p = whitelist_ro; p < &whitelist_ro[ARRAY_SIZE(whitelist_ro)]; p++) {
if (!strcmp(format_name, *p)) {
return 1;
}
@@ -6905,7 +6905,7 @@ if test "$slirp" != "no"; then
echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
fi
if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
- echo "config-host.h: slirp/all" >> $config_host_mak
+ echo "all Makefile: slirp/all" >> $config_host_mak
fi
if test "$vde" = "yes" ; then
echo "CONFIG_VDE=y" >> $config_host_mak
@@ -6983,7 +6983,6 @@ if test "$xfs" = "yes" ; then
echo "CONFIG_XFS=y" >> $config_host_mak
fi
qemu_version=$(head $source_path/VERSION)
-echo "VERSION=$qemu_version" >>$config_host_mak
echo "PKGVERSION=$pkgversion" >>$config_host_mak
echo "SRC_PATH=$source_path" >> $config_host_mak
echo "TARGET_DIRS=$target_list" >> $config_host_mak
@@ -7742,7 +7741,7 @@ echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
echo "MESON=$meson" >> $config_host_mak
echo "CC=$cc" >> $config_host_mak
if $iasl -h > /dev/null 2>&1; then
- echo "IASL=$iasl" >> $config_host_mak
+ echo "CONFIG_IASL=$iasl" >> $config_host_mak
fi
echo "HOST_CC=$host_cc" >> $config_host_mak
echo "CXX=$cxx" >> $config_host_mak
@@ -8271,10 +8270,10 @@ echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
if [ "$fdt" = "git" ]; then
- echo "config-host.h: dtc/all" >> $config_host_mak
+ echo "all Makefile: dtc/all" >> $config_host_mak
fi
if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
- echo "config-host.h: capstone/all" >> $config_host_mak
+ echo "all Makefile: capstone/all" >> $config_host_mak
fi
if test -n "$LIBCAPSTONE"; then
echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
@@ -12,6 +12,8 @@ config_host = keyval.load(meson.current_build_dir() / 'config-host.mak')
config_all_disas = keyval.load(meson.current_build_dir() / 'config-all-disas.mak')
enable_modules = 'CONFIG_MODULES' in config_host
build_docs = 'BUILD_DOCS' in config_host
+config_host_data = configuration_data()
+genh = []
add_project_arguments(config_host['QEMU_CFLAGS'].split(),
language: ['c', 'objc'])
@@ -342,13 +344,47 @@ if 'CONFIG_LIBPMEM' in config_host
link_args: config_host['LIBPMEM_LIBS'].split())
endif
-create_config = find_program('scripts/create_config')
+# Create config-host.h
+
+config_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version()))
+config_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0])
+config_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1])
+config_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2])
+
+arrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
+ignored = ['HOST_USB', 'HOST_CC']
+strings = ['HOST_DSOSUF', 'CONFIG_IASL']
+foreach k, v: config_host
+ if arrays.contains(k)
+ if v != ''
+ v = '"' + '", "'.join(v.split()) + '", '
+ endif
+ config_host_data.set(k, v)
+ elif k == 'ARCH'
+ config_host_data.set('HOST_' + v.to_upper(), 1)
+ elif ignored.contains(k)
+ # do nothing
+ elif k.startswith('qemu') and (k.endswith('dir') or k.endswith('path'))
+ config_host_data.set_quoted('CONFIG_' + k.to_upper(), v)
+ elif strings.contains(k)
+ config_host_data.set_quoted(k, v)
+ elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_')
+ if v == 'y' or v == 'm'
+ config_host_data.set(k, 1)
+ else
+ config_host_data.set(k, v)
+ endif
+ endif
+endforeach
+genh += configure_file(output: 'config-host.h', configuration: config_host_data)
+
minikconf = find_program('scripts/minikconf.py')
target_dirs = config_host['TARGET_DIRS'].split()
have_user = false
have_system = false
config_devices_mak_list = []
config_devices_h = {}
+config_target_h = {}
config_target_mak = {}
kconfig_external_symbols = [
'CONFIG_KVM',
@@ -364,16 +400,36 @@ kconfig_external_symbols = [
'CONFIG_LINUX',
'CONFIG_PVRDMA',
]
+ignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS']
foreach target : target_dirs
have_user = have_user or target.endswith('-user')
- config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') + config_host
+ config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak')
+
+ config_target_data = configuration_data()
+ foreach k, v: config_target
+ if not k.startswith('TARGET_') and not k.startswith('CONFIG_')
+ # do nothing
+ elif ignored.contains(k)
+ # do nothing
+ elif k == 'TARGET_BASE_ARCH'
+ config_target_data.set('TARGET_' + v.to_upper(), 1)
+ elif k == 'TARGET_NAME'
+ config_target_data.set_quoted(k, v)
+ elif v == 'y'
+ config_target_data.set(k, 1)
+ else
+ config_target_data.set(k, v)
+ endif
+ endforeach
+ config_target_h += {target: configure_file(output: target + '-config-target.h',
+ configuration: config_target_data)}
if target.endswith('-softmmu')
have_system = true
base_kconfig = []
foreach sym : kconfig_external_symbols
- if sym in config_target
+ if sym in config_target or sym in config_host
base_kconfig += '@0@=y'.format(sym)
endif
endforeach
@@ -387,14 +443,16 @@ foreach target : target_dirs
command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'],
config_devices_mak, '@DEPFILE@', '@INPUT@',
base_kconfig])
- config_devices_h += {target: custom_target(
- target + '-config-devices.h',
- input: config_devices_mak,
- output: target + '-config-devices.h',
- capture: true,
- command: [create_config, '@INPUT@'])}
+
+ config_devices_data = configuration_data()
+ config_devices = keyval.load(config_devices_mak)
+ foreach k, v: config_devices
+ config_devices_data.set(k, 1)
+ endforeach
config_devices_mak_list += config_devices_mak
- config_target += keyval.load(config_devices_mak)
+ config_devices_h += {target: configure_file(output: target + '-config-devices.h',
+ configuration: config_devices_data)}
+ config_target += config_devices
endif
config_target_mak += {target: config_target}
endforeach
@@ -434,7 +492,6 @@ config_all += {
# Generators
-genh = []
hxtool = find_program('scripts/hxtool')
shaderinclude = find_program('scripts/shaderinclude.pl')
qapi_gen = find_program('scripts/qapi-gen.py')
@@ -458,7 +515,7 @@ qapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py',
qemu_version_cmd = [find_program('scripts/qemu-version.sh'),
meson.current_source_dir(),
- config_host['PKGVERSION'], config_host['VERSION']]
+ config_host['PKGVERSION'], meson.project_version()]
qemu_version = custom_target('qemu-version.h',
output: 'qemu-version.h',
command: qemu_version_cmd,
@@ -467,13 +524,6 @@ qemu_version = custom_target('qemu-version.h',
build_always_stale: true)
genh += qemu_version
-config_host_h = custom_target('config-host.h',
- input: meson.current_build_dir() / 'config-host.mak',
- output: 'config-host.h',
- capture: true,
- command: [create_config, '@INPUT@'])
-genh += config_host_h
-
hxdep = []
hx_headers = [
['qemu-options.hx', 'qemu-options.def'],
@@ -805,13 +855,14 @@ foreach target : target_dirs
config_target = config_target_mak[target]
target_name = config_target['TARGET_NAME']
arch = config_target['TARGET_BASE_ARCH']
- arch_srcs = []
+ arch_srcs = [config_target_h[target]]
arch_deps = []
c_args = config_target['QEMU_CFLAGS'].split() + ['-DNEED_CPU_H',
'-DCONFIG_TARGET="@0@-config-target.h"'.format(target),
'-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)]
link_args = config_target['QEMU_LDFLAGS'].split()
+ config_target += config_host
target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])]
if host_machine.system() == 'linux'
target_inc += include_directories('linux-headers', is_system: true)
@@ -872,19 +923,12 @@ foreach target : target_dirs
objects = common_all.extract_objects(target_common.sources())
deps = target_common.dependencies()
- # TODO: Change to generator once obj-y goes away
- config_target_h = custom_target(target + '-config-target.h',
- input: meson.current_build_dir() / target / 'config-target.mak',
- output: target + '-config-target.h',
- capture: true,
- command: [create_config, '@INPUT@'])
-
target_specific = specific_ss.apply(config_target, strict: false)
arch_srcs += target_specific.sources()
arch_deps += target_specific.dependencies()
lib = static_library('qemu-' + target,
- sources: arch_srcs + [config_target_h] + genh,
+ sources: arch_srcs + genh,
objects: objects,
include_directories: target_inc,
c_args: c_args,
deleted file mode 100755
@@ -1,131 +0,0 @@
-#!/bin/sh
-
-test $# -gt 0 && exec < $1
-
-echo "/* Automatically generated by create_config - do not modify */"
-
-while read line; do
-
-case $line in
- VERSION=*) # configuration
- version=${line#*=}
- major=$(echo "$version" | cut -d. -f1)
- minor=$(echo "$version" | cut -d. -f2)
- micro=$(echo "$version" | cut -d. -f3)
- echo "#define QEMU_VERSION \"$version\""
- echo "#define QEMU_VERSION_MAJOR $major"
- echo "#define QEMU_VERSION_MINOR $minor"
- echo "#define QEMU_VERSION_MICRO $micro"
- ;;
- qemu_*dir=* | qemu_*path=*) # qemu-specific directory configuration
- name=${line%=*}
- value=${line#*=}
- define_name=$(echo $name | LC_ALL=C tr '[a-z]' '[A-Z]')
- eval "define_value=\"$value\""
- echo "#define CONFIG_$define_name \"$define_value\""
- # save for the next definitions
- eval "$name=\$define_value"
- ;;
- prefix=*)
- # save for the next definitions
- prefix=${line#*=}
- ;;
- IASL=*) # iasl executable
- value=${line#*=}
- echo "#define CONFIG_IASL $value"
- ;;
- CONFIG_AUDIO_DRIVERS=*)
- drivers=${line#*=}
- echo "#define CONFIG_AUDIO_DRIVERS \\"
- for drv in $drivers; do
- echo " \"${drv}\",\\"
- done
- echo ""
- ;;
- CONFIG_BDRV_RW_WHITELIST=*)
- echo "#define CONFIG_BDRV_RW_WHITELIST\\"
- for drv in ${line#*=}; do
- echo " \"${drv}\",\\"
- done
- echo " NULL"
- ;;
- CONFIG_BDRV_RO_WHITELIST=*)
- echo "#define CONFIG_BDRV_RO_WHITELIST\\"
- for drv in ${line#*=}; do
- echo " \"${drv}\",\\"
- done
- echo " NULL"
- ;;
- CONFIG_*=y) # configuration
- name=${line%=*}
- echo "#define $name 1"
- ;;
- CONFIG_*=n) # configuration
- ;;
- CONFIG_*=*) # configuration
- name=${line%=*}
- value=${line#*=}
- echo "#define $name $value"
- ;;
- HAVE_*=y) # configuration
- name=${line%=*}
- echo "#define $name 1"
- ;;
- HAVE_*=*) # configuration
- name=${line%=*}
- value=${line#*=}
- echo "#define $name $value"
- ;;
- ARCH=*) # configuration
- arch=${line#*=}
- arch_name=$(echo $arch | LC_ALL=C tr '[a-z]' '[A-Z]')
- echo "#define HOST_$arch_name 1"
- ;;
- HOST_USB=*)
- # do nothing
- ;;
- HOST_CC=*)
- # do nothing
- ;;
- HOST_*=y) # configuration
- name=${line%=*}
- echo "#define $name 1"
- ;;
- HOST_DSOSUF=*)
- echo "#define HOST_DSOSUF \"${line#*=}\""
- ;;
- HOST_*=*) # configuration
- name=${line%=*}
- value=${line#*=}
- echo "#define $name $value"
- ;;
- TARGET_BASE_ARCH=*) # configuration
- target_base_arch=${line#*=}
- base_arch_name=$(echo $target_base_arch | LC_ALL=C tr '[a-z]' '[A-Z]')
- echo "#define TARGET_$base_arch_name 1"
- ;;
- TARGET_XML_FILES=*)
- # do nothing
- ;;
- TARGET_ABI_DIR=*)
- # do nothing
- ;;
- TARGET_NAME=*)
- target_name=${line#*=}
- echo "#define TARGET_NAME \"$target_name\""
- ;;
- TARGET_DIRS=*)
- # do nothing
- ;;
- TARGET_*=y) # configuration
- name=${line%=*}
- echo "#define $name 1"
- ;;
- TARGET_*=*) # configuration
- name=${line%=*}
- value=${line#*=}
- echo "#define $name $value"
- ;;
-esac
-
-done # read
@@ -88,7 +88,7 @@ typedef struct {
static char disk[] = "tests/acpi-test-disk-XXXXXX";
static const char *data_dir = "tests/data/acpi";
#ifdef CONFIG_IASL
-static const char *iasl = stringify(CONFIG_IASL);
+static const char *iasl = CONFIG_IASL;
#else
static const char *iasl;
#endif
Move the create-config logic to meson.build; create a configuration_data object and let meson handle the quoting and output. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- Makefile | 2 +- block.c | 4 +- configure | 9 ++- meson.build | 100 ++++++++++++++++++++++--------- scripts/create_config | 131 ----------------------------------------- tests/qtest/bios-tables-test.c | 2 +- 6 files changed, 80 insertions(+), 168 deletions(-) delete mode 100755 scripts/create_config