|  | # SPDX-License-Identifier: Apache-2.0 | 
|  |  | 
|  | set(EMU_PLATFORM 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_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() | 
|  |  | 
|  | set(QEMU_FLAGS_${ARCH} | 
|  | -m ${QEMU_MEMORY_SIZE_MB} | 
|  | -cpu ${QEMU_CPU_TYPE_${ARCH}}${QEMU_CPU_FLAGS} | 
|  | -device isa-debug-exit,iobase=0xf4,iosize=0x04 | 
|  | ${REBOOT_FLAG} | 
|  | -nographic | 
|  | ) | 
|  |  | 
|  | if(NOT CONFIG_ACPI) | 
|  | list(APPEND QEMU_FLAGS_${ARCH} -no-acpi) | 
|  | 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() |