meson: replace create-config with meson configure_file
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>
This commit is contained in:
parent
484e2cc730
commit
859aef026e
3
Makefile
3
Makefile
@ -143,6 +143,7 @@ endif
|
||||
include $(SRC_PATH)/tests/Makefile.include
|
||||
|
||||
all: recurse-all
|
||||
Makefile: $(addsuffix /all, $(SUBDIRS))
|
||||
|
||||
# LIBFDT_lib="": avoid breaking existing trees with objects requiring -fPIC
|
||||
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_lib=""
|
||||
@ -206,7 +207,7 @@ clean: recurse-clean ninja-clean clean-ctlist
|
||||
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
|
||||
|
||||
|
2
block.c
2
block.c
@ -433,9 +433,11 @@ static int bdrv_format_is_whitelisted(const char *format_name, bool read_only)
|
||||
{
|
||||
static const char *whitelist_rw[] = {
|
||||
CONFIG_BDRV_RW_WHITELIST
|
||||
NULL
|
||||
};
|
||||
static const char *whitelist_ro[] = {
|
||||
CONFIG_BDRV_RO_WHITELIST
|
||||
NULL
|
||||
};
|
||||
const char **p;
|
||||
|
||||
|
11
configure
vendored
11
configure
vendored
@ -6962,8 +6962,9 @@ if test "$slirp" != "no"; then
|
||||
echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
|
||||
echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
|
||||
fi
|
||||
subdirs=
|
||||
if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
|
||||
echo "config-host.h: slirp/all" >> $config_host_mak
|
||||
subdirs="$subdirs slirp"
|
||||
fi
|
||||
if test "$vde" = "yes" ; then
|
||||
echo "CONFIG_VDE=y" >> $config_host_mak
|
||||
@ -7036,7 +7037,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
|
||||
@ -7797,7 +7797,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 "CXX=$cxx" >> $config_host_mak
|
||||
echo "OBJCC=$objcc" >> $config_host_mak
|
||||
@ -8287,11 +8287,12 @@ 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
|
||||
subdirs="$subdirs dtc"
|
||||
fi
|
||||
if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
|
||||
echo "config-host.h: capstone/all" >> $config_host_mak
|
||||
subdirs="$subdirs capstone"
|
||||
fi
|
||||
echo "SUBDIRS=$subdirs" >> $config_host_mak
|
||||
if test -n "$LIBCAPSTONE"; then
|
||||
echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
|
||||
fi
|
||||
|
96
meson.build
96
meson.build
@ -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(),
|
||||
native: false, language: ['c', 'objc'])
|
||||
@ -359,13 +361,43 @@ 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']
|
||||
strings = ['HOST_DSOSUF', 'CONFIG_IASL', 'qemu_confdir', 'qemu_datadir',
|
||||
'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir',
|
||||
'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath']
|
||||
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 strings.contains(k)
|
||||
if not k.startswith('CONFIG_')
|
||||
k = 'CONFIG_' + k.to_upper()
|
||||
endif
|
||||
config_host_data.set_quoted(k, v)
|
||||
elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_')
|
||||
config_host_data.set(k, v == 'y' ? 1 : v)
|
||||
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',
|
||||
@ -381,16 +413,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
|
||||
@ -404,14 +456,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
|
||||
@ -451,7 +505,6 @@ config_all += {
|
||||
|
||||
# Generators
|
||||
|
||||
genh = []
|
||||
hxtool = find_program('scripts/hxtool')
|
||||
shaderinclude = find_program('scripts/shaderinclude.pl')
|
||||
qapi_gen = find_program('scripts/qapi-gen.py')
|
||||
@ -481,7 +534,7 @@ tracetool = [
|
||||
|
||||
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,
|
||||
@ -490,13 +543,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'],
|
||||
@ -830,13 +876,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 = ['-DNEED_CPU_H',
|
||||
'-DCONFIG_TARGET="@0@-config-target.h"'.format(target),
|
||||
'-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)]
|
||||
link_args = []
|
||||
|
||||
config_target += config_host
|
||||
target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])]
|
||||
if targetos == 'linux'
|
||||
target_inc += include_directories('linux-headers', is_system: true)
|
||||
@ -897,19 +944,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,
|
||||
|
@ -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
|
||||
|
@ -113,7 +113,7 @@ static int module_load_file(const char *fname)
|
||||
{
|
||||
GModule *g_module;
|
||||
void (*sym)(void);
|
||||
const char *dsosuf = HOST_DSOSUF;
|
||||
const char *dsosuf = CONFIG_HOST_DSOSUF;
|
||||
int len = strlen(fname);
|
||||
int suf_len = strlen(dsosuf);
|
||||
ModuleEntry *e, *next;
|
||||
@ -221,7 +221,7 @@ bool module_load_one(const char *prefix, const char *lib_name)
|
||||
|
||||
for (i = 0; i < n_dirs; i++) {
|
||||
fname = g_strdup_printf("%s/%s%s",
|
||||
dirs[i], module_name, HOST_DSOSUF);
|
||||
dirs[i], module_name, CONFIG_HOST_DSOSUF);
|
||||
ret = module_load_file(fname);
|
||||
g_free(fname);
|
||||
fname = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user