diff options
Diffstat (limited to 'meson.build')
| -rw-r--r-- | meson.build | 133 |
1 files changed, 100 insertions, 33 deletions
diff --git a/meson.build b/meson.build index 5aaa364730..951c4d0ec5 100644 --- a/meson.build +++ b/meson.build @@ -1,6 +1,6 @@ project('qemu', ['c'], meson_version: '>=0.55.0', default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', - 'b_lundef=false','b_colorout=auto'], + 'b_colorout=auto'], version: run_command('head', meson.source_root() / 'VERSION').stdout().strip()) not_found = dependency('', required: false) @@ -14,7 +14,6 @@ ss = import('sourceset') sh = find_program('sh') cc = meson.get_compiler('c') 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 enable_static = 'CONFIG_STATIC' in config_host build_docs = 'BUILD_DOCS' in config_host @@ -33,6 +32,23 @@ endforeach have_tools = 'CONFIG_TOOLS' in config_host have_block = have_system or have_tools +python = import('python').find_installation() + +supported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] +supported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64', + 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] + +cpu = host_machine.cpu_family() +targetos = host_machine.system() + +configure_file(input: files('scripts/ninjatool.py'), + output: 'ninjatool', + configuration: config_host) + +################## +# Compiler flags # +################## + add_project_arguments(config_host['QEMU_CFLAGS'].split(), native: false, language: ['c', 'objc']) add_project_arguments(config_host['QEMU_CXXFLAGS'].split(), @@ -42,7 +58,13 @@ add_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), add_project_arguments(config_host['QEMU_INCLUDES'].split(), language: ['c', 'cpp', 'objc']) -python = import('python').find_installation() +# Specify linker-script with add_project_link_arguments so that it is not placed +# within a linker --start-group/--end-group pair +if 'CONFIG_FUZZ' in config_host + add_project_link_arguments(['-Wl,-T,', + (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')], + native: false, language: ['c', 'cpp', 'objc']) +endif link_language = meson.get_external_property('link_language', 'cpp') if link_language == 'cpp' @@ -59,17 +81,6 @@ if 'SPARSE_CFLAGS' in config_host 'compile_commands.json']) endif -configure_file(input: files('scripts/ninjatool.py'), - output: 'ninjatool', - configuration: config_host) - -supported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] -supported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64', - 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] - -cpu = host_machine.cpu_family() -targetos = host_machine.system() - m = cc.find_library('m', required: false) util = cc.find_library('util', required: false) winmm = [] @@ -101,8 +112,11 @@ elif targetos == 'haiku' cc.find_library('network'), cc.find_library('bsd')] endif -glib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(), - link_args: config_host['GLIB_LIBS'].split()) +# The path to glib.h is added to all compilation commands. This was +# grandfathered in from the QEMU Makefiles. +add_project_arguments(config_host['GLIB_CFLAGS'].split(), + native: false, language: ['c', 'cpp', 'objc']) +glib = declare_dependency(link_args: config_host['GLIB_LIBS'].split()) gio = not_found if 'CONFIG_GIO' in config_host gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), @@ -116,6 +130,11 @@ urcubp = not_found if 'CONFIG_TRACE_UST' in config_host urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) endif +gcrypt = not_found +if 'CONFIG_GCRYPT' in config_host + gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(), + link_args: config_host['GCRYPT_LIBS'].split()) +endif nettle = not_found if 'CONFIG_NETTLE' in config_host nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), @@ -203,6 +222,10 @@ libmpathpersist = not_found if config_host.has_key('CONFIG_MPATH') libmpathpersist = cc.find_library('mpathpersist') endif +libdl = not_found +if 'CONFIG_PLUGIN' in config_host + libdl = cc.find_library('dl', required: true) +endif libiscsi = not_found if 'CONFIG_LIBISCSI' in config_host libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), @@ -292,7 +315,8 @@ if 'CONFIG_AUDIO_COREAUDIO' in config_host endif opengl = not_found if 'CONFIG_OPENGL' in config_host - opengl = declare_dependency(link_args: config_host['OPENGL_LIBS'].split()) + opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(), + link_args: config_host['OPENGL_LIBS'].split()) else endif gtk = not_found @@ -405,6 +429,15 @@ libdaxctl = not_found if 'CONFIG_LIBDAXCTL' in config_host libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split()) endif +tasn1 = not_found +if 'CONFIG_TASN1' in config_host + tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(), + link_args: config_host['TASN1_LIBS'].split()) +endif +keyutils = dependency('libkeyutils', required: false, + method: 'pkg-config', static: enable_static) + +has_gettid = cc.has_function('gettid') # Create config-host.h @@ -415,6 +448,8 @@ config_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) config_host_data.set('CONFIG_VNC_PNG', png.found()) config_host_data.set('CONFIG_VNC_SASL', sasl.found()) config_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found()) +config_host_data.set('CONFIG_KEYUTILS', keyutils.found()) +config_host_data.set('CONFIG_GETTID', has_gettid) 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]) @@ -444,10 +479,45 @@ endforeach genh += configure_file(output: 'config-host.h', configuration: config_host_data) minikconf = find_program('scripts/minikconf.py') +config_all_devices = {} +config_all_disas = {} config_devices_mak_list = [] config_devices_h = {} config_target_h = {} config_target_mak = {} + +disassemblers = { + 'alpha' : ['CONFIG_ALPHA_DIS'], + 'arm' : ['CONFIG_ARM_DIS'], + 'avr' : ['CONFIG_AVR_DIS'], + 'cris' : ['CONFIG_CRIS_DIS'], + 'hppa' : ['CONFIG_HPPA_DIS'], + 'i386' : ['CONFIG_I386_DIS'], + 'x86_64' : ['CONFIG_I386_DIS'], + 'x32' : ['CONFIG_I386_DIS'], + 'lm32' : ['CONFIG_LM32_DIS'], + 'm68k' : ['CONFIG_M68K_DIS'], + 'microblaze' : ['CONFIG_MICROBLAZE_DIS'], + 'mips' : ['CONFIG_MIPS_DIS'], + 'moxie' : ['CONFIG_MOXIE_DIS'], + 'nios2' : ['CONFIG_NIOS2_DIS'], + 'or1k' : ['CONFIG_OPENRISC_DIS'], + 'ppc' : ['CONFIG_PPC_DIS'], + 'riscv' : ['CONFIG_RISCV_DIS'], + 'rx' : ['CONFIG_RX_DIS'], + 's390' : ['CONFIG_S390_DIS'], + 'sh4' : ['CONFIG_SH4_DIS'], + 'sparc' : ['CONFIG_SPARC_DIS'], + 'xtensa' : ['CONFIG_XTENSA_DIS'], +} +if link_language == 'cpp' + disassemblers += { + 'aarch64' : [ 'CONFIG_ARM_A64_DIS'], + 'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'], + 'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'], + } +endif + kconfig_external_symbols = [ 'CONFIG_KVM', 'CONFIG_XEN', @@ -463,9 +533,19 @@ kconfig_external_symbols = [ 'CONFIG_PVRDMA', ] ignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS'] + foreach target : target_dirs config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') + foreach k, v: disassemblers + if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k) + foreach sym: v + config_target += { sym: 'y' } + config_all_disas += { sym: 'y' } + endforeach + endif + endforeach + config_target_data = configuration_data() foreach k, v: config_target if not k.startswith('TARGET_') and not k.startswith('CONFIG_') @@ -512,11 +592,11 @@ foreach target : target_dirs config_devices_h += {target: configure_file(output: target + '-config-devices.h', configuration: config_devices_data)} config_target += config_devices + config_all_devices += config_devices endif config_target_mak += {target: config_target} endforeach -grepy = find_program('scripts/grepy.sh') # This configuration is used to build files that are shared by # multiple binaries, and then extracted out of the "common" # static_library target. @@ -526,17 +606,6 @@ grepy = find_program('scripts/grepy.sh') # targets that are not built for this compilation. The CONFIG_ALL # pseudo symbol replaces it. -if have_system - config_all_devices_mak = configure_file( - output: 'config-all-devices.mak', - input: config_devices_mak_list, - capture: true, - command: [grepy, '@INPUT@'], - ) - config_all_devices = keyval.load(config_all_devices_mak) -else - config_all_devices = {} -endif config_all = config_all_devices config_all += config_host config_all += config_all_disas @@ -707,6 +776,7 @@ if have_system 'hw/riscv', 'migration', 'net', + 'softmmu', 'ui', ] endif @@ -863,7 +933,7 @@ foreach d, list : modules endforeach nm = find_program('nm') -undefsym = find_program('scripts/undefsym.sh') +undefsym = find_program('scripts/undefsym.py') block_syms = custom_target('block.syms', output: 'block.syms', input: [libqemuutil, block_mods], capture: true, @@ -1023,7 +1093,6 @@ foreach target : target_dirs 'gui': false, 'sources': specific_fuzz.sources(), 'dependencies': specific_fuzz.dependencies(), - 'link_depends': [files('tests/qtest/fuzz/fork_fuzz.ld')], }] endif else @@ -1097,7 +1166,6 @@ if have_tools dependencies: [block, qemuutil], install: true) qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), dependencies: [block, qemuutil], install: true) - qemu_block_tools += [qemu_img, qemu_io, qemu_nbd] subdir('storage-daemon') subdir('contrib/rdmacm-mux') @@ -1288,7 +1356,6 @@ summary_info += {'CFLAGS': config_host['CFLAGS']} summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} summary_info += {'make': config_host['MAKE']} -summary_info += {'install': config_host['INSTALL']} summary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} summary_info += {'sphinx-build': config_host['SPHINX_BUILD']} summary_info += {'genisoimage': config_host['GENISOIMAGE']} |