config BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET
	bool
	# Only tested on these architectures
	default y if BR2_aarch64 || BR2_i386 || BR2_mips || BR2_mipsel \
		|| BR2_x86_64 || BR2_arm \
		|| BR2_powerpc64 || BR2_powerpc64le

comment "QEMU requires a toolchain with wchar, threads"
	depends on BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET
	depends on BR2_USE_MMU
	depends on !(BR2_TOOLCHAIN_HAS_THREADS && BR2_USE_WCHAR)

config BR2_PACKAGE_QEMU
	bool "QEMU"
	depends on BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_USE_WCHAR # gettext
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_LIBGLIB2
	select BR2_PACKAGE_PIXMAN
	select BR2_PACKAGE_ZLIB
	help
	  QEMU is a generic and open source machine emulator and virtualizer.

	  When used as a machine emulator, QEMU can run OSes and programs made
	  for one machine (e.g. an ARM board) on a different machine (e.g.
	  your own PC). By using dynamic translation, it achieves very good
	  performance.

	  When used as a virtualizer, QEMU achieves near native performances
	  by executing the guest code directly on the host CPU. QEMU supports
	  virtualization when executing under the Xen hypervisor or using the
	  KVM kernel module in Linux. When using KVM, QEMU can virtualize x86,
	  server and embedded PowerPC, and S390 guests.

	  http://qemu.org/

if BR2_PACKAGE_QEMU

comment "Emulators selection"

config BR2_PACKAGE_QEMU_CUSTOM_TARGETS
	string "Enable specific targets"
	help
	  Enter here the list of QEMU targets you want to build. For example:

	    System emulation      | User-land emulation
	    ----------------------+-----------------------
	    i386-softmmu          | i386-linux-user
	    arm-softmmu           | ppc-linux-user
	    x86_64-softmmu        | sparc-bsd-user
	    ...                   | ...

config QEMU_FOO
	bool # To break the indentation

if BR2_PACKAGE_QEMU_CUSTOM_TARGETS = ""

comment "... or you can select emulator families to enable, below:"

config BR2_PACKAGE_QEMU_SYSTEM
	bool "Enable all systems emulation"
	depends on !BR2_STATIC_LIBS # dtc
	select BR2_PACKAGE_QEMU_FDT
	help
	  Say 'y' to build all system emulators/virtualisers that QEMU supports.

comment "systems emulation needs a toolchain w/ dynamic library"
	depends on BR2_STATIC_LIBS

config BR2_PACKAGE_QEMU_LINUX_USER
	bool "Enable all Linux user-land emulation"
	# Incompatible "struct sigevent" definition on musl
	depends on !BR2_TOOLCHAIN_USES_MUSL
	help
	  Say 'y' to build all Linux user-land emulators that QEMU supports.

# Note: bsd-user can not be build on Linux

comment "Linux user-land emulation needs a glibc or uClibc toolchain"
	depends on BR2_TOOLCHAIN_USES_MUSL

endif # BR2_PACKAGE_QEMU_CUSTOM_TARGETS == ""

config BR2_PACKAGE_QEMU_HAS_EMULS
	def_bool y
	depends on BR2_PACKAGE_QEMU_SYSTEM || BR2_PACKAGE_QEMU_LINUX_USER || BR2_PACKAGE_QEMU_CUSTOM_TARGETS != ""

if BR2_PACKAGE_QEMU_HAS_EMULS

comment "Frontends"

config BR2_PACKAGE_QEMU_SDL
	bool "Enable SDL frontend"
	select BR2_PACKAGE_SDL
	help
	  Say 'y' to enable the SDL frontend, that is, a graphical window
	  presenting the VM's display.

comment "Misc. features"

config BR2_PACKAGE_QEMU_FDT
	bool "Enable FDT"
	depends on !BR2_STATIC_LIBS # dtc
	select BR2_PACKAGE_DTC
	help
	  Say 'y' here to have QEMU capable of constructing Device Trees,
	  and passing them to the VMs.

comment "FDT support needs a toolchain w/ dynamic library"
	depends on BR2_STATIC_LIBS

endif # BR2_PACKAGE_QEMU_HAS_EMULS

config BR2_PACKAGE_QEMU_TOOLS
	bool "Enable tools"
	help
	  Say 'y' here to include tools packaged with QEMU (e.g. qemu-img).

endif # BR2_PACKAGE_QEMU
