mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 11:39:53 +00:00
meson-buildoptions: add support for string options
Allow using the buildoptions.json file for more options, namely anything that is not a boolean or multiple-choice. The mapping between configure and meson is messy for string options, so allow configure to use to something other than the name in meson_options.txt. This will come in handy anyway for builtin Meson options such as b_lto or b_coverage. Tested-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
f780a3f480
commit
119fc611ea
@ -11,7 +11,7 @@ option('qemu_firmwarepath', type : 'string', value : '',
|
||||
option('smbd', type : 'string', value : '',
|
||||
description: 'Path to smbd for slirp networking')
|
||||
option('sphinx_build', type : 'string', value : '',
|
||||
description: 'Use specified sphinx-build [$sphinx_build] for building document (default to be empty)')
|
||||
description: 'Use specified sphinx-build for building document')
|
||||
option('iasl', type : 'string', value : '',
|
||||
description: 'Path to ACPI disassembler')
|
||||
option('default_devices', type : 'boolean', value : true,
|
||||
|
@ -38,6 +38,11 @@ SKIP_OPTIONS = {
|
||||
"trace_file",
|
||||
}
|
||||
|
||||
OPTION_NAMES = {
|
||||
"malloc": "enable-malloc",
|
||||
"trace_backends": "enable-trace-backends",
|
||||
}
|
||||
|
||||
BUILTIN_OPTIONS = {
|
||||
"strip",
|
||||
}
|
||||
@ -75,7 +80,7 @@ def help_line(left, opt, indent, long):
|
||||
right = f'{opt["description"]}'
|
||||
if long:
|
||||
value = value_to_help(opt["value"])
|
||||
if value != "auto":
|
||||
if value != "auto" and value != "":
|
||||
right += f" [{value}]"
|
||||
if "choices" in opt and long:
|
||||
choices = "/".join(sorted(opt["choices"]))
|
||||
@ -96,6 +101,18 @@ def allow_arg(opt):
|
||||
return not (set(opt["choices"]) <= {"auto", "disabled", "enabled"})
|
||||
|
||||
|
||||
# Return whether the option (a dictionary) can be used without
|
||||
# arguments. Booleans can only be used without arguments;
|
||||
# combos require an argument if they accept neither "enabled"
|
||||
# nor "disabled"
|
||||
def require_arg(opt):
|
||||
if opt["type"] == "boolean":
|
||||
return False
|
||||
if opt["type"] != "combo":
|
||||
return True
|
||||
return not ({"enabled", "disabled"}.intersection(opt["choices"]))
|
||||
|
||||
|
||||
def filter_options(json):
|
||||
if ":" in json["name"]:
|
||||
return False
|
||||
@ -110,20 +127,48 @@ def load_options(json):
|
||||
return sorted(json, key=lambda x: x["name"])
|
||||
|
||||
|
||||
def cli_option(opt):
|
||||
name = opt["name"]
|
||||
if name in OPTION_NAMES:
|
||||
return OPTION_NAMES[name]
|
||||
return name.replace("_", "-")
|
||||
|
||||
|
||||
def cli_help_key(opt):
|
||||
key = cli_option(opt)
|
||||
if require_arg(opt):
|
||||
return key
|
||||
if opt["type"] == "boolean" and opt["value"]:
|
||||
return f"disable-{key}"
|
||||
return f"enable-{key}"
|
||||
|
||||
|
||||
def cli_metavar(opt):
|
||||
if opt["type"] == "string":
|
||||
return "VALUE"
|
||||
if opt["type"] == "array":
|
||||
return "CHOICES"
|
||||
return "CHOICE"
|
||||
|
||||
|
||||
def print_help(options):
|
||||
print("meson_options_help() {")
|
||||
for opt in options:
|
||||
key = opt["name"].replace("_", "-")
|
||||
for opt in sorted(options, key=cli_help_key):
|
||||
key = cli_help_key(opt)
|
||||
# The first section includes options that have an arguments,
|
||||
# and booleans (i.e., only one of enable/disable makes sense)
|
||||
if opt["type"] == "boolean":
|
||||
left = f"--disable-{key}" if opt["value"] else f"--enable-{key}"
|
||||
if require_arg(opt):
|
||||
metavar = cli_metavar(opt)
|
||||
left = f"--{key}={metavar}"
|
||||
help_line(left, opt, 27, True)
|
||||
elif opt["type"] == "boolean":
|
||||
left = f"--{key}"
|
||||
help_line(left, opt, 27, False)
|
||||
elif allow_arg(opt):
|
||||
if opt["type"] == "combo" and "enabled" in opt["choices"]:
|
||||
left = f"--enable-{key}[=CHOICE]"
|
||||
left = f"--{key}[=CHOICE]"
|
||||
else:
|
||||
left = f"--enable-{key}=CHOICE"
|
||||
left = f"--{key}=CHOICE"
|
||||
help_line(left, opt, 27, True)
|
||||
|
||||
sh_print()
|
||||
@ -142,9 +187,11 @@ def print_parse(options):
|
||||
print("_meson_option_parse() {")
|
||||
print(" case $1 in")
|
||||
for opt in options:
|
||||
key = opt["name"].replace("_", "-")
|
||||
key = cli_option(opt)
|
||||
name = opt["name"]
|
||||
if opt["type"] == "boolean":
|
||||
if require_arg(opt):
|
||||
print(f' --{key}=*) quote_sh "-D{name}=$2" ;;')
|
||||
elif opt["type"] == "boolean":
|
||||
print(f' --enable-{key}) printf "%s" -D{name}=true ;;')
|
||||
print(f' --disable-{key}) printf "%s" -D{name}=false ;;')
|
||||
else:
|
||||
|
@ -1,5 +1,7 @@
|
||||
# This file is generated by meson-buildoptions.py, do not edit!
|
||||
meson_options_help() {
|
||||
printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
|
||||
printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
|
||||
printf "%s\n" ' --enable-block-drv-whitelist-in-tools'
|
||||
printf "%s\n" ' use block whitelist also in tools instead of only'
|
||||
printf "%s\n" ' QEMU'
|
||||
@ -8,7 +10,6 @@ meson_options_help() {
|
||||
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
|
||||
printf "%s\n" ' --enable-cfi Control-Flow Integrity (CFI)'
|
||||
printf "%s\n" ' --enable-cfi-debug Verbose errors in case of CFI violation'
|
||||
printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
|
||||
printf "%s\n" ' --enable-debug-mutex mutex debugging support'
|
||||
printf "%s\n" ' --enable-debug-stack-usage'
|
||||
printf "%s\n" ' measure coroutine stack usage'
|
||||
@ -16,7 +17,6 @@ meson_options_help() {
|
||||
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
|
||||
printf "%s\n" ' --enable-fuzzing build fuzzing targets'
|
||||
printf "%s\n" ' --enable-gprof QEMU profiling with gprof'
|
||||
printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
|
||||
printf "%s\n" ' --enable-malloc=CHOICE choose memory allocator to use [system] (choices:'
|
||||
printf "%s\n" ' jemalloc/system/tcmalloc)'
|
||||
printf "%s\n" ' --enable-module-upgrades try to load modules from alternate paths for'
|
||||
@ -29,7 +29,7 @@ meson_options_help() {
|
||||
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
|
||||
printf "%s\n" ' --enable-strip Strip targets on install'
|
||||
printf "%s\n" ' --enable-tcg-interpreter TCG with bytecode interpreter (slow)'
|
||||
printf "%s\n" ' --enable-trace-backends=CHOICE'
|
||||
printf "%s\n" ' --enable-trace-backends=CHOICES'
|
||||
printf "%s\n" ' Set available tracing backends [log] (choices:'
|
||||
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
|
||||
printf "%s\n" ''
|
||||
|
Loading…
Reference in New Issue
Block a user