Files
rosetta/arch/x86_64/QEMU.cmake

124 lines
3.0 KiB
CMake
Raw Normal View History

2026-02-05 09:54:46 +00:00
find_program(QEMU qemu-system-${TARGET_ARCH} REQUIRED)
if (NOT QEMU)
message(STATUS "QEMU: Cannot find qemu-system-${TARGET_ARCH}. Direct-kernel boot unavailable")
return()
endif ()
2026-02-05 09:54:46 +00:00
find_program(LLDB lldb)
find_program(GDB gdb)
set(patched_kernel ${CMAKE_CURRENT_BINARY_DIR}/kernel/${kernel_name}.elf32)
set(generic_flags -m 1G)
if (${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux")
message(STATUS "QEMU: Enabling KVM acceleration")
set(generic_flags ${generic_flags} -enable-kvm)
else ()
message(STATUS "QEMU: Host system is not Linux. KVM acceleration unavailable")
endif ()
add_custom_command(OUTPUT ${patched_kernel}
DEPENDS ${kernel_name}
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:${kernel_name}>
${patched_kernel}
COMMAND ${BUILD_TOOLS_DIR}/e64patch ${patched_kernel}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Patching kernel elf64 image"
)
message(STATUS "QEMU: Enable direct-kernel boot")
2026-02-05 09:54:46 +00:00
add_custom_target(run-kernel
COMMAND
${QEMU}
-kernel ${patched_kernel}
-initrd ${sys_dir}/${bsp_name}
${generic_flags}
-serial stdio
--append kernel.early-console=ttyS0
USES_TERMINAL
DEPENDS ${patched_kernel} bsp)
add_custom_target(run-kernel-monitor
COMMAND
${QEMU}
-kernel $<TARGET_FILE:${kernel_name}>
-initrd ${sys_dir}/${bsp_name}
${generic_flags}
-monitor stdio
USES_TERMINAL
DEPENDS ${kernel_name} bsp)
if (image_cdrom)
message(STATUS "QEMU: Enable CD-ROM boot")
add_custom_target(run-cdrom
COMMAND
${QEMU}
-cdrom ${image_cdrom}
${generic_flags}
-serial stdio
USES_TERMINAL
DEPENDS ${image_cdrom})
endif ()
if (LLDB)
message(STATUS "QEMU: Enable direct-kernel debug with LLDB")
add_custom_target(debug-kernel
COMMAND
${QEMU}
-kernel $<TARGET_FILE:${kernel_name}>
-initrd ${sys_dir}/${bsp_name}
${generic_flags}
-s -S &
${LLDB}
-o "file ${CMAKE_BINARY_DIR}/kernel/${kernel_name}.debug"
-o "gdb-remote localhost:1234"
USES_TERMINAL
DEPENDS ${kernel_name} bsp)
if (image_cdrom)
message(STATUS "QEMU: Enable CD-ROM debug with LLDB")
add_custom_target(debug-cdrom
COMMAND
${QEMU}
-cdrom ${image_cdrom}
${generic_flags}
-s -S &
${LLDB}
-o "file ${CMAKE_BINARY_DIR}/kernel/${kernel_name}.debug"
-o "target remote localhost:1234"
USES_TERMINAL
DEPENDS cdrom)
endif ()
elseif (GDB)
message(STATUS "QEMU: Enable direct-kernel debug with GDB")
add_custom_target(debug-kernel
COMMAND
${QEMU}
-kernel $<TARGET_FILE:${kernel_name}>
-initrd ${sys_dir}/${bsp_name}
${generic_flags}
-s -S &
${GDB}
-o "file ${CMAKE_BINARY_DIR}/kernel/${kernel_name}.debug"
-o "remote localhost:1234"
USES_TERMINAL
DEPENDS ${kernel_name} bsp)
if (image_cdrom)
message(STATUS "QEMU: Enable CD-ROM debug with GDB")
add_custom_target(debug-cdrom
COMMAND
${QEMU}
-cdrom ${image_cdrom}
${generic_flags}
-s -S &
${GDB} -tui
-s "${CMAKE_BINARY_DIR}/kernel/${kernel_name}.debug"
-ex "target remote localhost:1234"
USES_TERMINAL
DEPENDS ${image_cdrom})
endif ()
endif ()