m = cc.find_library('m', required: false)
util = cc.find_library('util', required: false)
+winmm = []
socket = []
version_res = []
coref = []
hvf = []
if targetos == 'windows'
socket = cc.find_library('ws2_32')
+ winmm = cc.find_library('winmm')
win = import('windows')
version_res = win.compile_resources('version.rc',
if 'CONFIG_AUTH_PAM' in config_host
pam = cc.find_library('pam')
endif
+libaio = cc.find_library('aio', required: false)
+zlib = not_found
+if 'CONFIG_ZLIB' in config_host
+ zlib = declare_dependency(compile_args: config_host['ZLIB_CFLAGS'].split(),
+ link_args: config_host['ZLIB_LIBS'].split())
+endif
+linux_io_uring = not_found
+if 'CONFIG_LINUX_IO_URING' in config_host
+ linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(),
+ link_args: config_host['LINUX_IO_URING_LIBS'].split())
+endif
+libxml2 = not_found
+if 'CONFIG_LIBXML2' in config_host
+ libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(),
+ link_args: config_host['LIBXML2_LIBS'].split())
+endif
+libnfs = not_found
+if 'CONFIG_LIBNFS' in config_host
+ libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split())
+endif
libattr = not_found
if 'CONFIG_ATTR' in config_host
libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split())
xkbcommon = declare_dependency(compile_args: config_host['XKBCOMMON_CFLAGS'].split(),
link_args: config_host['XKBCOMMON_LIBS'].split())
endif
+slirp = not_found
+if config_host.has_key('CONFIG_SLIRP')
+ slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(),
+ link_args: config_host['SLIRP_LIBS'].split())
+endif
+vde = not_found
+if config_host.has_key('CONFIG_VDE')
+ vde = declare_dependency(link_args: config_host['VDE_LIBS'].split())
+endif
+pulse = not_found
+if 'CONFIG_LIBPULSE' in config_host
+ pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(),
+ link_args: config_host['PULSE_LIBS'].split())
+endif
+alsa = not_found
+if 'CONFIG_ALSA' in config_host
+ alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(),
+ link_args: config_host['ALSA_LIBS'].split())
+endif
+jack = not_found
+if 'CONFIG_LIBJACK' in config_host
+ jack = declare_dependency(link_args: config_host['JACK_LIBS'].split())
+endif
+spice = not_found
+if 'CONFIG_SPICE' in config_host
+ spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(),
+ link_args: config_host['SPICE_LIBS'].split())
+endif
rt = cc.find_library('rt', required: false)
+libmpathpersist = not_found
+if config_host.has_key('CONFIG_MPATH')
+ libmpathpersist = cc.find_library('mpathpersist')
+endif
libiscsi = not_found
if 'CONFIG_LIBISCSI' in config_host
libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(),
link_args: config_host['LIBISCSI_LIBS'].split())
endif
+zstd = not_found
+if 'CONFIG_ZSTD' in config_host
+ zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(),
+ link_args: config_host['ZSTD_LIBS'].split())
+endif
gbm = not_found
if 'CONFIG_GBM' in config_host
gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(),
if 'CONFIG_LIBUDEV' in config_host
libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split())
endif
+brlapi = not_found
+if 'CONFIG_BRLAPI' in config_host
+ brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split())
+endif
+sdl = not_found
+if 'CONFIG_SDL' in config_host
+ sdl = declare_dependency(compile_args: config_host['SDL_CFLAGS'].split(),
+ link_args: config_host['SDL_LIBS'].split())
+endif
+rbd = not_found
+if 'CONFIG_RBD' in config_host
+ rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split())
+endif
+glusterfs = not_found
+if 'CONFIG_GLUSTERFS' in config_host
+ glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(),
+ link_args: config_host['GLUSTERFS_LIBS'].split())
+endif
+libssh = not_found
+if 'CONFIG_LIBSSH' in config_host
+ libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(),
+ link_args: config_host['LIBSSH_LIBS'].split())
+endif
+libbzip2 = not_found
+if 'CONFIG_BZIP2' in config_host
+ libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split())
+endif
+liblzfse = not_found
+if 'CONFIG_LZFSE' in config_host
+ liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split())
+endif
+oss = not_found
+if 'CONFIG_AUDIO_OSS' in config_host
+ oss = declare_dependency(link_args: config_host['OSS_LIBS'].split())
+endif
+dsound = not_found
+if 'CONFIG_AUDIO_DSOUND' in config_host
+ dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split())
+endif
+coreaudio = not_found
+if 'CONFIG_AUDIO_COREAUDIO' in config_host
+ coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split())
+endif
+opengl = not_found
+if 'CONFIG_OPENGL' in config_host
+ opengl = declare_dependency(link_args: config_host['OPENGL_LIBS'].split())
+else
+endif
+gtk = not_found
+if 'CONFIG_GTK' in config_host
+ gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(),
+ link_args: config_host['GTK_LIBS'].split())
+endif
+vte = not_found
+if 'CONFIG_VTE' in config_host
+ vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(),
+ link_args: config_host['VTE_LIBS'].split())
+endif
+x11 = not_found
+if 'CONFIG_X11' in config_host
+ x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(),
+ link_args: config_host['X11_LIBS'].split())
+endif
+curses = not_found
+if 'CONFIG_CURSES' in config_host
+ curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(),
+ link_args: config_host['CURSES_LIBS'].split())
+endif
+iconv = not_found
+if 'CONFIG_ICONV' in config_host
+ iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(),
+ link_args: config_host['ICONV_LIBS'].split())
+endif
+gio = not_found
+if 'CONFIG_GIO' in config_host
+ gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(),
+ link_args: config_host['GIO_LIBS'].split())
+endif
+png = not_found
+if 'CONFIG_VNC_PNG' in config_host
+ png = declare_dependency(compile_args: config_host['PNG_CFLAGS'].split(),
+ link_args: config_host['PNG_LIBS'].split())
+endif
+jpeg = not_found
+if 'CONFIG_VNC_JPEG' in config_host
+ jpeg = declare_dependency(compile_args: config_host['JPEG_CFLAGS'].split(),
+ link_args: config_host['JPEG_LIBS'].split())
+endif
+sasl = not_found
+if 'CONFIG_VNC_SASL' in config_host
+ sasl = declare_dependency(compile_args: config_host['SASL_CFLAGS'].split(),
+ link_args: config_host['SASL_LIBS'].split())
+endif
+fdt = not_found
+if 'CONFIG_FDT' in config_host
+ fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(),
+ link_args: config_host['FDT_LIBS'].split())
+endif
+snappy = not_found
+if 'CONFIG_SNAPPY' in config_host
+ snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split())
+endif
+lzo = not_found
+if 'CONFIG_LZO' in config_host
+ lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split())
+endif
+rdma = not_found
+if 'CONFIG_RDMA' in config_host
+ rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split())
+endif
+numa = not_found
+if 'CONFIG_NUMA' in config_host
+ numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split())
+endif
+xen = not_found
+if 'CONFIG_XEN_BACKEND' in config_host
+ xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(),
+ link_args: config_host['XEN_LIBS'].split())
+endif
+cacard = not_found
+if 'CONFIG_SMARTCARD' in config_host
+ cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(),
+ link_args: config_host['SMARTCARD_LIBS'].split())
+endif
+usbredir = not_found
+if 'CONFIG_USB_REDIR' in config_host
+ usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(),
+ link_args: config_host['USB_REDIR_LIBS'].split())
+endif
+libusb = not_found
+if 'CONFIG_USB_LIBUSB' in config_host
+ libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(),
+ link_args: config_host['LIBUSB_LIBS'].split())
+endif
create_config = find_program('scripts/create_config')
minikconf = find_program('scripts/minikconf.py')
]
endif
foreach d : hx_headers
- custom_target(d[1],
+ hxdep += custom_target(d[1],
input: files(d[0]),
output: d[1],
capture: true,
stub_ss = ss.source_set()
trace_ss = ss.source_set()
block_ss = ss.source_set()
+blockdev_ss = ss.source_set()
+qmp_ss = ss.source_set()
common_ss = ss.source_set()
softmmu_ss = ss.source_set()
user_ss = ss.source_set()
subdir('qom')
subdir('authz')
subdir('crypto')
-subdir('storage-daemon')
subdir('ui')
qemuutil = declare_dependency(link_with: libqemuutil,
sources: genh + version_res)
+decodetree = generator(find_program('scripts/decodetree.py'),
+ output: 'decode-@BASENAME@.c.inc',
+ arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@'])
+
+subdir('audio')
subdir('io')
subdir('chardev')
subdir('fsdev')
+subdir('libdecnumber')
subdir('target')
+subdir('dump')
+
+block_ss.add(files(
+ 'block.c',
+ 'blockjob.c',
+ 'job.c',
+ 'qemu-io-cmds.c',
+))
+block_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c'))
+
+subdir('nbd')
+subdir('scsi')
+subdir('block')
+
+blockdev_ss.add(files(
+ 'blockdev.c',
+ 'blockdev-nbd.c',
+ 'iothread.c',
+ 'job-qmp.c',
+))
+
+# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon,
+# os-win32.c does not
+blockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c'))
+softmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')])
+
+softmmu_ss.add_all(blockdev_ss)
+softmmu_ss.add(files(
+ 'bootdevice.c',
+ 'dma-helpers.c',
+ 'qdev-monitor.c',
+), sdl)
+
+softmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c'))
+softmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp])
+softmmu_ss.add(when: ['CONFIG_FDT', fdt], if_true: [files('device_tree.c')])
+
+common_ss.add(files('cpus-common.c'))
+
+subdir('softmmu')
+subdir('backends')
+subdir('disas')
+subdir('migration')
+subdir('monitor')
+subdir('net')
+subdir('replay')
+subdir('hw')
+subdir('accel')
+subdir('linux-user')
+
+linux_user_ss.add(files('gdbstub.c', 'thunk.c'))
+specific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss)
+
+# needed for fuzzing binaries
+subdir('tests/qtest/libqos')
block_mods = []
softmmu_mods = []
capture: true,
command: [undefsym, nm, '@INPUT@'])
+block_ss = block_ss.apply(config_host, strict: false)
+libblock = static_library('block', block_ss.sources() + genh,
+ dependencies: block_ss.dependencies(),
+ link_depends: block_syms,
+ name_suffix: 'fa',
+ build_by_default: false)
+
+block = declare_dependency(link_whole: [libblock],
+ link_args: '@block.syms',
+ dependencies: [crypto, io])
+
+qmp_ss = qmp_ss.apply(config_host, strict: false)
+libqmp = static_library('qmp', qmp_ss.sources() + genh,
+ dependencies: qmp_ss.dependencies(),
+ name_suffix: 'fa',
+ build_by_default: false)
+
+qmp = declare_dependency(link_whole: [libqmp])
+
foreach m : block_mods + softmmu_mods
shared_module(m.name(),
name_prefix: '',
if target.endswith('-softmmu')
qemu_target_name = 'qemu-system-' + target_name
target_type='system'
+ t = target_softmmu_arch[arch].apply(config_target, strict: false)
+ arch_srcs += t.sources()
+
+ hw_dir = target_name == 'sparc64' ? 'sparc64' : arch
+ hw = hw_arch[hw_dir].apply(config_target, strict: false)
+ arch_srcs += hw.sources()
+
arch_srcs += config_devices_h[target]
else
+ abi = config_target['TARGET_ABI_DIR']
target_type='user'
qemu_target_name = 'qemu-' + target_name
if 'CONFIG_LINUX_USER' in config_target
endif
target_inc += include_directories(
base_dir,
- base_dir / config_target['TARGET_ABI_DIR'],
+ base_dir / abi,
)
+ if 'CONFIG_LINUX_USER' in config_target
+ dir = base_dir / abi
+ arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c')
+ if config_target.has_key('TARGET_SYSTBL_ABI')
+ arch_srcs += \
+ syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'],
+ extra_args : config_target['TARGET_SYSTBL_ABI'])
+ endif
+ endif
endif
+ t = target_arch[arch].apply(config_target, strict: false)
+ arch_srcs += t.sources()
+
target_common = common_ss.apply(config_target, strict: false)
objects = common_all.extract_objects(target_common.sources())
endforeach
# Other build targets
+
if 'CONFIG_GUEST_AGENT' in config_host
subdir('qga')
endif
if have_tools
+ qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep],
+ dependencies: [authz, block, crypto, io, qom, qemuutil], install: true)
+ qemu_io = executable('qemu-io', files('qemu-io.c'),
+ dependencies: [block, qemuutil], install: true)
+ if targetos == 'linux' or targetos == 'sunos' or targetos.endswith('bsd')
+ qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'),
+ dependencies: [block, qemuutil], install: true)
+ endif
+
+ subdir('storage-daemon')
subdir('contrib/rdmacm-mux')
subdir('contrib/elf2dmp')
dependencies: [qemuutil, libcap_ng],
install: true,
install_dir: get_option('libexecdir'))
+
+ executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'),
+ dependencies: [authz, crypto, io, qom, qemuutil,
+ libcap_ng, libudev, libmpathpersist],
+ install: true)
endif
if 'CONFIG_IVSHMEM' in config_host