# SPDX-License-Identifier: Apache-2.0 # Copyright (c) 2019 Intel Corp. set(SUPPORTED_EMU_PLATFORMS qemu) if(NOT CONFIG_REBOOT) set(REBOOT_FLAG -no-reboot) endif() if(CONFIG_X86_64) set(QEMU_binary_suffix x86_64) set(QEMU_CPU_TYPE_${ARCH} qemu64,+x2apic) if("${CONFIG_MP_MAX_NUM_CPUS}" STREQUAL "1") # icount works with 1 CPU so we can enable it here. # FIXME: once this works across configs, remove this line and set # CONFIG_QEMU_ICOUNT_SHIFT in defconfig instead. list(APPEND QEMU_EXTRA_FLAGS -icount shift=5,align=off,sleep=off -rtc clock=vm) endif() else() set(QEMU_CPU_TYPE_${ARCH} qemu32,+nx,+pae) endif() if(CONFIG_XIP) # Extra 4MB to emulate flash area math(EXPR QEMU_MEMORY_SIZE_MB "${CONFIG_SRAM_SIZE} / 1024 + 4") elseif(CONFIG_BOARD_QEMU_X86_TINY AND CONFIG_DEMAND_PAGING AND NOT CONFIG_LINKER_GENERIC_SECTIONS_PRESENT_AT_BOOT) # Flash is at 4MB-8MB, so need this to be large enough math(EXPR QEMU_MEMORY_SIZE_MB "8") else() math(EXPR QEMU_MEMORY_SIZE_MB "${CONFIG_SRAM_SIZE} / 1024") endif() set(QEMU_CPU_FLAGS "") if(CONFIG_X86_MMX) string(JOIN "," QEMU_CPU_FLAGS "${QEMU_CPU_FLAGS}" "mmx") string(JOIN "," QEMU_CPU_FLAGS "${QEMU_CPU_FLAGS}" "mmxext") endif() if(CONFIG_X86_SSE) string(JOIN "," QEMU_CPU_FLAGS "${QEMU_CPU_FLAGS}" "sse") endif() if(CONFIG_X86_SSE2) string(JOIN "," QEMU_CPU_FLAGS "${QEMU_CPU_FLAGS}" "sse2") endif() if(CONFIG_X86_SSE3) string(JOIN "," QEMU_CPU_FLAGS "${QEMU_CPU_FLAGS}" "pni") endif() if(CONFIG_X86_SSSE3) string(JOIN "," QEMU_CPU_FLAGS "${QEMU_CPU_FLAGS}" "ssse3") endif() if(CONFIG_X86_SSE41) string(JOIN "," QEMU_CPU_FLAGS "${QEMU_CPU_FLAGS}" "sse4.1") endif() if(CONFIG_X86_SSE42) string(JOIN "," QEMU_CPU_FLAGS "${QEMU_CPU_FLAGS}" "sse4.2") endif() if(CONFIG_X86_SSE4A) string(JOIN "," QEMU_CPU_FLAGS "${QEMU_CPU_FLAGS}" "sse4a") endif() if(NOT CONFIG_X86_64 AND CONFIG_CACHE_MANAGEMENT) string(JOIN "," QEMU_CPU_FLAGS "${QEMU_CPU_FLAGS}" "clflush") endif() set(QEMU_FLAGS_${ARCH} -m ${QEMU_MEMORY_SIZE_MB} -cpu ${QEMU_CPU_TYPE_${ARCH}}${QEMU_CPU_FLAGS} -machine q35 -device isa-debug-exit,iobase=0xf4,iosize=0x04 ${REBOOT_FLAG} -nographic ) if(NOT CONFIG_ACPI) list(APPEND QEMU_FLAGS_${ARCH} -machine acpi=off) endif() # TODO: Support debug # board_set_debugger_ifnset(qemu) # debugserver: QEMU_EXTRA_FLAGS += -s -S # debugserver: qemu if(CONFIG_BOARD_QEMU_X86_TINY AND CONFIG_DEMAND_PAGING AND NOT CONFIG_LINKER_GENERIC_SECTIONS_PRESENT_AT_BOOT) # This is to map the flash so it is accessible. math(EXPR QEMU_FLASH_SIZE_KB "${CONFIG_FLASH_SIZE} * 1024") set(X86_EXTRA_GEN_MMU_ARGUMENTS --map ${CONFIG_FLASH_BASE_ADDRESS},${QEMU_FLASH_SIZE_KB},W) endif()