mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-07-21 18:34:33 +00:00
meson: move accelerator dependency checks together
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
a9cba054cf
commit
0f63d96311
175
meson.build
175
meson.build
|
@ -602,7 +602,10 @@ if sparse.found()
|
||||||
'-Wno-non-pointer-null'])
|
'-Wno-non-pointer-null'])
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Target-specific libraries and flags
|
#####################################
|
||||||
|
# Host-specific libraries and flags #
|
||||||
|
#####################################
|
||||||
|
|
||||||
libm = cc.find_library('m', required: false)
|
libm = cc.find_library('m', required: false)
|
||||||
threads = dependency('threads')
|
threads = dependency('threads')
|
||||||
util = cc.find_library('util', required: false)
|
util = cc.find_library('util', required: false)
|
||||||
|
@ -612,8 +615,6 @@ version_res = []
|
||||||
coref = []
|
coref = []
|
||||||
iokit = []
|
iokit = []
|
||||||
emulator_link_args = []
|
emulator_link_args = []
|
||||||
nvmm =not_found
|
|
||||||
hvf = not_found
|
|
||||||
midl = not_found
|
midl = not_found
|
||||||
widl = not_found
|
widl = not_found
|
||||||
pathcch = not_found
|
pathcch = not_found
|
||||||
|
@ -649,7 +650,10 @@ elif targetos == 'openbsd'
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Target-specific configuration of accelerators
|
###############################################
|
||||||
|
# Host-specific configuration of accelerators #
|
||||||
|
###############################################
|
||||||
|
|
||||||
accelerators = []
|
accelerators = []
|
||||||
if get_option('kvm').allowed() and targetos == 'linux'
|
if get_option('kvm').allowed() and targetos == 'linux'
|
||||||
accelerators += 'CONFIG_KVM'
|
accelerators += 'CONFIG_KVM'
|
||||||
|
@ -662,6 +666,8 @@ if get_option('whpx').allowed() and targetos == 'windows'
|
||||||
accelerators += 'CONFIG_WHPX'
|
accelerators += 'CONFIG_WHPX'
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
hvf = not_found
|
||||||
if get_option('hvf').allowed()
|
if get_option('hvf').allowed()
|
||||||
hvf = dependency('appleframeworks', modules: 'Hypervisor',
|
hvf = dependency('appleframeworks', modules: 'Hypervisor',
|
||||||
required: get_option('hvf'))
|
required: get_option('hvf'))
|
||||||
|
@ -669,6 +675,8 @@ if get_option('hvf').allowed()
|
||||||
accelerators += 'CONFIG_HVF'
|
accelerators += 'CONFIG_HVF'
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
nvmm = not_found
|
||||||
if targetos == 'netbsd'
|
if targetos == 'netbsd'
|
||||||
nvmm = cc.find_library('nvmm', required: get_option('nvmm'))
|
nvmm = cc.find_library('nvmm', required: get_option('nvmm'))
|
||||||
if nvmm.found()
|
if nvmm.found()
|
||||||
|
@ -716,6 +724,85 @@ if 'CONFIG_WHPX' not in accelerators and get_option('whpx').enabled()
|
||||||
error('WHPX not available on this platform')
|
error('WHPX not available on this platform')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
xen = not_found
|
||||||
|
if get_option('xen').enabled() or (get_option('xen').auto() and have_system)
|
||||||
|
xencontrol = dependency('xencontrol', required: false,
|
||||||
|
method: 'pkg-config')
|
||||||
|
if xencontrol.found()
|
||||||
|
xen_pc = declare_dependency(version: xencontrol.version(),
|
||||||
|
dependencies: [
|
||||||
|
xencontrol,
|
||||||
|
# disabler: true makes xen_pc.found() return false if any is not found
|
||||||
|
dependency('xenstore', required: false,
|
||||||
|
method: 'pkg-config',
|
||||||
|
disabler: true),
|
||||||
|
dependency('xenforeignmemory', required: false,
|
||||||
|
method: 'pkg-config',
|
||||||
|
disabler: true),
|
||||||
|
dependency('xengnttab', required: false,
|
||||||
|
method: 'pkg-config',
|
||||||
|
disabler: true),
|
||||||
|
dependency('xenevtchn', required: false,
|
||||||
|
method: 'pkg-config',
|
||||||
|
disabler: true),
|
||||||
|
dependency('xendevicemodel', required: false,
|
||||||
|
method: 'pkg-config',
|
||||||
|
disabler: true),
|
||||||
|
# optional, no "disabler: true"
|
||||||
|
dependency('xentoolcore', required: false,
|
||||||
|
method: 'pkg-config')])
|
||||||
|
if xen_pc.found()
|
||||||
|
xen = xen_pc
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
if not xen.found()
|
||||||
|
xen_tests = [ '4.11.0', '4.10.0', '4.9.0', '4.8.0', '4.7.1' ]
|
||||||
|
xen_libs = {
|
||||||
|
'4.11.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn', 'xentoolcore' ],
|
||||||
|
'4.10.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn', 'xentoolcore' ],
|
||||||
|
'4.9.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
|
||||||
|
'4.8.0': [ 'xenstore', 'xenctrl', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
|
||||||
|
'4.7.1': [ 'xenstore', 'xenctrl', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
|
||||||
|
}
|
||||||
|
xen_deps = {}
|
||||||
|
foreach ver: xen_tests
|
||||||
|
# cache the various library tests to avoid polluting the logs
|
||||||
|
xen_test_deps = []
|
||||||
|
foreach l: xen_libs[ver]
|
||||||
|
if l not in xen_deps
|
||||||
|
xen_deps += { l: cc.find_library(l, required: false) }
|
||||||
|
endif
|
||||||
|
xen_test_deps += xen_deps[l]
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
# Use -D to pick just one of the test programs in scripts/xen-detect.c
|
||||||
|
xen_version = ver.split('.')
|
||||||
|
xen_ctrl_version = xen_version[0] + \
|
||||||
|
('0' + xen_version[1]).substring(-2) + \
|
||||||
|
('0' + xen_version[2]).substring(-2)
|
||||||
|
if cc.links(files('scripts/xen-detect.c'),
|
||||||
|
args: '-DCONFIG_XEN_CTRL_INTERFACE_VERSION=' + xen_ctrl_version,
|
||||||
|
dependencies: xen_test_deps)
|
||||||
|
xen = declare_dependency(version: ver, dependencies: xen_test_deps)
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
|
endif
|
||||||
|
if xen.found()
|
||||||
|
accelerators += 'CONFIG_XEN'
|
||||||
|
elif get_option('xen').enabled()
|
||||||
|
error('could not compile and link Xen test program')
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
have_xen_pci_passthrough = get_option('xen_pci_passthrough') \
|
||||||
|
.require(xen.found(),
|
||||||
|
error_message: 'Xen PCI passthrough requested but Xen not enabled') \
|
||||||
|
.require(targetos == 'linux',
|
||||||
|
error_message: 'Xen PCI passthrough not available on this platform') \
|
||||||
|
.require(cpu == 'x86' or cpu == 'x86_64',
|
||||||
|
error_message: 'Xen PCI passthrough not available on this platform') \
|
||||||
|
.allowed()
|
||||||
|
|
||||||
################
|
################
|
||||||
# Dependencies #
|
# Dependencies #
|
||||||
################
|
################
|
||||||
|
@ -1689,86 +1776,6 @@ if not get_option('rdma').auto() or have_system
|
||||||
endforeach
|
endforeach
|
||||||
endif
|
endif
|
||||||
|
|
||||||
xen = not_found
|
|
||||||
if get_option('xen').enabled() or (get_option('xen').auto() and have_system)
|
|
||||||
xencontrol = dependency('xencontrol', required: false,
|
|
||||||
method: 'pkg-config')
|
|
||||||
if xencontrol.found()
|
|
||||||
xen_pc = declare_dependency(version: xencontrol.version(),
|
|
||||||
dependencies: [
|
|
||||||
xencontrol,
|
|
||||||
# disabler: true makes xen_pc.found() return false if any is not found
|
|
||||||
dependency('xenstore', required: false,
|
|
||||||
method: 'pkg-config',
|
|
||||||
disabler: true),
|
|
||||||
dependency('xenforeignmemory', required: false,
|
|
||||||
method: 'pkg-config',
|
|
||||||
disabler: true),
|
|
||||||
dependency('xengnttab', required: false,
|
|
||||||
method: 'pkg-config',
|
|
||||||
disabler: true),
|
|
||||||
dependency('xenevtchn', required: false,
|
|
||||||
method: 'pkg-config',
|
|
||||||
disabler: true),
|
|
||||||
dependency('xendevicemodel', required: false,
|
|
||||||
method: 'pkg-config',
|
|
||||||
disabler: true),
|
|
||||||
# optional, no "disabler: true"
|
|
||||||
dependency('xentoolcore', required: false,
|
|
||||||
method: 'pkg-config')])
|
|
||||||
if xen_pc.found()
|
|
||||||
xen = xen_pc
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
if not xen.found()
|
|
||||||
xen_tests = [ '4.11.0', '4.10.0', '4.9.0', '4.8.0', '4.7.1' ]
|
|
||||||
xen_libs = {
|
|
||||||
'4.11.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn', 'xentoolcore' ],
|
|
||||||
'4.10.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn', 'xentoolcore' ],
|
|
||||||
'4.9.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
|
|
||||||
'4.8.0': [ 'xenstore', 'xenctrl', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
|
|
||||||
'4.7.1': [ 'xenstore', 'xenctrl', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
|
|
||||||
}
|
|
||||||
xen_deps = {}
|
|
||||||
foreach ver: xen_tests
|
|
||||||
# cache the various library tests to avoid polluting the logs
|
|
||||||
xen_test_deps = []
|
|
||||||
foreach l: xen_libs[ver]
|
|
||||||
if l not in xen_deps
|
|
||||||
xen_deps += { l: cc.find_library(l, required: false) }
|
|
||||||
endif
|
|
||||||
xen_test_deps += xen_deps[l]
|
|
||||||
endforeach
|
|
||||||
|
|
||||||
# Use -D to pick just one of the test programs in scripts/xen-detect.c
|
|
||||||
xen_version = ver.split('.')
|
|
||||||
xen_ctrl_version = xen_version[0] + \
|
|
||||||
('0' + xen_version[1]).substring(-2) + \
|
|
||||||
('0' + xen_version[2]).substring(-2)
|
|
||||||
if cc.links(files('scripts/xen-detect.c'),
|
|
||||||
args: '-DCONFIG_XEN_CTRL_INTERFACE_VERSION=' + xen_ctrl_version,
|
|
||||||
dependencies: xen_test_deps)
|
|
||||||
xen = declare_dependency(version: ver, dependencies: xen_test_deps)
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endforeach
|
|
||||||
endif
|
|
||||||
if xen.found()
|
|
||||||
accelerators += 'CONFIG_XEN'
|
|
||||||
elif get_option('xen').enabled()
|
|
||||||
error('could not compile and link Xen test program')
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
have_xen_pci_passthrough = get_option('xen_pci_passthrough') \
|
|
||||||
.require(xen.found(),
|
|
||||||
error_message: 'Xen PCI passthrough requested but Xen not enabled') \
|
|
||||||
.require(targetos == 'linux',
|
|
||||||
error_message: 'Xen PCI passthrough not available on this platform') \
|
|
||||||
.require(cpu == 'x86' or cpu == 'x86_64',
|
|
||||||
error_message: 'Xen PCI passthrough not available on this platform') \
|
|
||||||
.allowed()
|
|
||||||
|
|
||||||
|
|
||||||
cacard = not_found
|
cacard = not_found
|
||||||
if not get_option('smartcard').auto() or have_system
|
if not get_option('smartcard').auto() or have_system
|
||||||
cacard = dependency('libcacard', required: get_option('smartcard'),
|
cacard = dependency('libcacard', required: get_option('smartcard'),
|
||||||
|
|
Loading…
Reference in a new issue