# SPDX-License-Identifier: Apache-2.0

if BOARD_QEMU_X86 || BOARD_QEMU_X86_64 || BOARD_QEMU_X86_LAKEMONT || BOARD_QEMU_X86_TINY

# The EEPROM emulator must be initialized after the flash simulator
config EEPROM_INIT_PRIORITY
	default 60
	depends on EEPROM

config BUILD_OUTPUT_BIN
	default n

endif # BOARD_QEMU_X86 || BOARD_QEMU_X86_64 || BOARD_QEMU_X86_LAKEMONT || BOARD_QEMU_X86_TINY

if BOARD_QEMU_X86

config BOARD
	default "qemu_x86"

config FLASH_SIMULATOR
	default y
	depends on FLASH

config KERNEL_VM_SIZE
	default 0x10000000 if ACPI

config HEAP_MEM_POOL_SIZE
	default 1048576 if ACPI
	depends on KERNEL_MEM_POOL

config MULTIBOOT
	default y

config MULTIBOOT_INFO
	default y if MULTIBOOT

config MULTIBOOT_MEMMAP
	default y if MULTIBOOT

config QEMU_ICOUNT
	default n if HPET_TIMER && SHELL

config QEMU_ICOUNT_SHIFT
	default 5

endif # BOARD_QEMU_X86

if BOARD_QEMU_X86_64

config BOARD
	default "qemu_x86_64"

config KERNEL_VM_SIZE
	default 0x10000000 if ACPI

config HEAP_MEM_POOL_SIZE
	default 1048576 if ACPI
	depends on KERNEL_MEM_POOL

endif # BOARD_QEMU_X86_64

if BOARD_QEMU_X86_LAKEMONT

config BOARD
	default "qemu_x86_lakemont"

config KERNEL_VM_SIZE
	default 0x400000

config MULTIBOOT
	# This is needed for QEMU to load the ELF image
	default y

config X86_PC_COMPATIBLE
	# QEMU presents a PC-compatible machine
	default y

config QEMU_ICOUNT
	default n if HPET_TIMER && SHELL

config QEMU_ICOUNT_SHIFT
	default 5

endif # BOARD_QEMU_X86_LAKEMONT

if BOARD_QEMU_X86_TINY

config BOARD
	default "qemu_x86_tiny"

config KERNEL_VM_SIZE
	default 0x400000

config MULTIBOOT
	# This is needed for QEMU to load the ELF image
	default y

config X86_PC_COMPATIBLE
	# QEMU presents a PC-compatible machine
	default y

config QEMU_ICOUNT
	default n if HPET_TIMER && SHELL

config QEMU_ICOUNT_SHIFT
	default 5

config HAVE_CUSTOM_LINKER_SCRIPT
	default y

config CUSTOM_LINKER_SCRIPT
	default "${ZEPHYR_BASE}/boards/x86/qemu_x86/qemu_x86_tiny.ld"

config X86_EXTRA_PAGE_TABLE_PAGES
	# This is needed for gen_mmu.py to map the flash into memory
	default 2 if DEMAND_PAGING && !LINKER_GENERIC_SECTIONS_PRESENT_AT_BOOT

config DEMAND_PAGING_PAGE_FRAMES_RESERVE
	# Need to accommodate the heap for newlib or common malloc in libc-hook.c
	default 6 if NEWLIB_LIBC || (COMMON_LIBC_MALLOC && COMMON_LIBC_MALLOC_ARENA_SIZE != 0)

endif # BOARD_QEMU_X86_TINY
