mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
meson, configure: move Xen detection to meson
This is quite a complicated check. I moved all the test programs to a single file in scripts/, picking the right program with #if and a -D flag in meson.build's cc.links() invocation. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
119fc611ea
commit
14efd8d3b5
3 changed files with 296 additions and 341 deletions
203
scripts/xen-detect.c
Normal file
203
scripts/xen-detect.c
Normal file
|
@ -0,0 +1,203 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/* Test programs for various Xen versions that QEMU supports. */
|
||||
#if CONFIG_XEN_CTRL_INTERFACE_VERSION == 41100
|
||||
#undef XC_WANT_COMPAT_DEVICEMODEL_API
|
||||
#define __XEN_TOOLS__
|
||||
#include <xendevicemodel.h>
|
||||
#include <xenforeignmemory.h>
|
||||
int main(void) {
|
||||
xendevicemodel_handle *xd;
|
||||
xenforeignmemory_handle *xfmem;
|
||||
|
||||
xd = xendevicemodel_open(0, 0);
|
||||
xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
|
||||
|
||||
xfmem = xenforeignmemory_open(0, 0);
|
||||
xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 41000
|
||||
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
|
||||
#include <xenforeignmemory.h>
|
||||
#include <xentoolcore.h>
|
||||
int main(void) {
|
||||
xenforeignmemory_handle *xfmem;
|
||||
|
||||
xfmem = xenforeignmemory_open(0, 0);
|
||||
xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
|
||||
xentoolcore_restrict_all(0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40900
|
||||
#undef XC_WANT_COMPAT_DEVICEMODEL_API
|
||||
#define __XEN_TOOLS__
|
||||
#include <xendevicemodel.h>
|
||||
int main(void) {
|
||||
xendevicemodel_handle *xd;
|
||||
|
||||
xd = xendevicemodel_open(0, 0);
|
||||
xendevicemodel_close(xd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40800
|
||||
/*
|
||||
* If we have stable libs the we don't want the libxc compat
|
||||
* layers, regardless of what CFLAGS we may have been given.
|
||||
*
|
||||
* Also, check if xengnttab_grant_copy_segment_t is defined and
|
||||
* grant copy operation is implemented.
|
||||
*/
|
||||
#undef XC_WANT_COMPAT_EVTCHN_API
|
||||
#undef XC_WANT_COMPAT_GNTTAB_API
|
||||
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
|
||||
#include <xenctrl.h>
|
||||
#include <xenstore.h>
|
||||
#include <xenevtchn.h>
|
||||
#include <xengnttab.h>
|
||||
#include <xenforeignmemory.h>
|
||||
#include <stdint.h>
|
||||
#include <xen/hvm/hvm_info_table.h>
|
||||
#if !defined(HVM_MAX_VCPUS)
|
||||
# error HVM_MAX_VCPUS not defined
|
||||
#endif
|
||||
int main(void) {
|
||||
xc_interface *xc = NULL;
|
||||
xenforeignmemory_handle *xfmem;
|
||||
xenevtchn_handle *xe;
|
||||
xengnttab_handle *xg;
|
||||
xengnttab_grant_copy_segment_t* seg = NULL;
|
||||
|
||||
xs_daemon_open();
|
||||
|
||||
xc = xc_interface_open(0, 0, 0);
|
||||
xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
|
||||
xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
|
||||
xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
|
||||
xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
|
||||
|
||||
xfmem = xenforeignmemory_open(0, 0);
|
||||
xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
|
||||
|
||||
xe = xenevtchn_open(0, 0);
|
||||
xenevtchn_fd(xe);
|
||||
|
||||
xg = xengnttab_open(0, 0);
|
||||
xengnttab_grant_copy(xg, 0, seg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40701
|
||||
/*
|
||||
* If we have stable libs the we don't want the libxc compat
|
||||
* layers, regardless of what CFLAGS we may have been given.
|
||||
*/
|
||||
#undef XC_WANT_COMPAT_EVTCHN_API
|
||||
#undef XC_WANT_COMPAT_GNTTAB_API
|
||||
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
|
||||
#include <xenctrl.h>
|
||||
#include <xenstore.h>
|
||||
#include <xenevtchn.h>
|
||||
#include <xengnttab.h>
|
||||
#include <xenforeignmemory.h>
|
||||
#include <stdint.h>
|
||||
#include <xen/hvm/hvm_info_table.h>
|
||||
#if !defined(HVM_MAX_VCPUS)
|
||||
# error HVM_MAX_VCPUS not defined
|
||||
#endif
|
||||
int main(void) {
|
||||
xc_interface *xc = NULL;
|
||||
xenforeignmemory_handle *xfmem;
|
||||
xenevtchn_handle *xe;
|
||||
xengnttab_handle *xg;
|
||||
|
||||
xs_daemon_open();
|
||||
|
||||
xc = xc_interface_open(0, 0, 0);
|
||||
xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
|
||||
xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
|
||||
xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
|
||||
xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
|
||||
|
||||
xfmem = xenforeignmemory_open(0, 0);
|
||||
xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
|
||||
|
||||
xe = xenevtchn_open(0, 0);
|
||||
xenevtchn_fd(xe);
|
||||
|
||||
xg = xengnttab_open(0, 0);
|
||||
xengnttab_map_grant_ref(xg, 0, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40600
|
||||
#include <xenctrl.h>
|
||||
#include <xenstore.h>
|
||||
#include <stdint.h>
|
||||
#include <xen/hvm/hvm_info_table.h>
|
||||
#if !defined(HVM_MAX_VCPUS)
|
||||
# error HVM_MAX_VCPUS not defined
|
||||
#endif
|
||||
int main(void) {
|
||||
xc_interface *xc;
|
||||
xs_daemon_open();
|
||||
xc = xc_interface_open(0, 0, 0);
|
||||
xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
|
||||
xc_gnttab_open(NULL, 0);
|
||||
xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
|
||||
xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
|
||||
xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
|
||||
xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40500
|
||||
#include <xenctrl.h>
|
||||
#include <xenstore.h>
|
||||
#include <stdint.h>
|
||||
#include <xen/hvm/hvm_info_table.h>
|
||||
#if !defined(HVM_MAX_VCPUS)
|
||||
# error HVM_MAX_VCPUS not defined
|
||||
#endif
|
||||
int main(void) {
|
||||
xc_interface *xc;
|
||||
xs_daemon_open();
|
||||
xc = xc_interface_open(0, 0, 0);
|
||||
xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
|
||||
xc_gnttab_open(NULL, 0);
|
||||
xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
|
||||
xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
|
||||
xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40200
|
||||
#include <xenctrl.h>
|
||||
#include <xenstore.h>
|
||||
#include <stdint.h>
|
||||
#include <xen/hvm/hvm_info_table.h>
|
||||
#if !defined(HVM_MAX_VCPUS)
|
||||
# error HVM_MAX_VCPUS not defined
|
||||
#endif
|
||||
int main(void) {
|
||||
xc_interface *xc;
|
||||
xs_daemon_open();
|
||||
xc = xc_interface_open(0, 0, 0);
|
||||
xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
|
||||
xc_gnttab_open(NULL, 0);
|
||||
xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
|
||||
xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else
|
||||
#error invalid CONFIG_XEN_CTRL_INTERFACE_VERSION
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue