You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.6 KiB
87 lines
2.6 KiB
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
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} -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()
|
|
|