2026-02-05 09:54:46 +00:00
|
|
|
find_program(QEMU qemu-system-${TARGET_ARCH} REQUIRED)
|
2026-02-21 23:25:31 +00:00
|
|
|
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
|
|
|
|
2026-02-21 23:25:31 +00:00
|
|
|
find_program(LLDB lldb)
|
|
|
|
|
find_program(GDB gdb)
|
|
|
|
|
|
|
|
|
|
set(patched_kernel ${CMAKE_CURRENT_BINARY_DIR}/kernel/${kernel_name}.elf32)
|
2026-02-22 16:25:10 +00:00
|
|
|
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 ()
|
2026-02-21 23:25:31 +00:00
|
|
|
|
|
|
|
|
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
|
2026-02-19 19:28:22 +00:00
|
|
|
COMMAND
|
|
|
|
|
${QEMU}
|
2026-02-21 23:25:31 +00:00
|
|
|
-kernel ${patched_kernel}
|
2026-02-19 19:28:22 +00:00
|
|
|
-initrd ${sys_dir}/${bsp_name}
|
2026-02-22 16:25:10 +00:00
|
|
|
${generic_flags}
|
|
|
|
|
-serial stdio
|
2026-02-19 19:28:22 +00:00
|
|
|
--append kernel.early-console=ttyS0
|
|
|
|
|
USES_TERMINAL
|
2026-02-21 23:25:31 +00:00
|
|
|
DEPENDS ${patched_kernel} bsp)
|
2026-02-21 12:23:41 +00:00
|
|
|
|
|
|
|
|
add_custom_target(run-kernel-monitor
|
|
|
|
|
COMMAND
|
|
|
|
|
${QEMU}
|
|
|
|
|
-kernel $<TARGET_FILE:${kernel_name}>
|
|
|
|
|
-initrd ${sys_dir}/${bsp_name}
|
2026-02-22 16:25:10 +00:00
|
|
|
${generic_flags}
|
|
|
|
|
-monitor stdio
|
2026-02-21 12:23:41 +00:00
|
|
|
USES_TERMINAL
|
|
|
|
|
DEPENDS ${kernel_name} bsp)
|
2026-02-21 23:25:31 +00:00
|
|
|
|
|
|
|
|
if (image_cdrom)
|
|
|
|
|
message(STATUS "QEMU: Enable CD-ROM boot")
|
|
|
|
|
add_custom_target(run-cdrom
|
|
|
|
|
COMMAND
|
|
|
|
|
${QEMU}
|
|
|
|
|
-cdrom ${image_cdrom}
|
2026-02-22 16:25:10 +00:00
|
|
|
${generic_flags}
|
2026-02-21 23:25:31 +00:00
|
|
|
-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}
|
2026-02-22 16:25:10 +00:00
|
|
|
${generic_flags}
|
|
|
|
|
-s -S &
|
2026-02-21 23:25:31 +00:00
|
|
|
${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}
|
2026-02-22 16:25:10 +00:00
|
|
|
${generic_flags}
|
|
|
|
|
-s -S &
|
2026-02-21 23:25:31 +00:00
|
|
|
${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}
|
2026-02-22 16:25:10 +00:00
|
|
|
${generic_flags}
|
|
|
|
|
-s -S &
|
2026-02-21 23:25:31 +00:00
|
|
|
${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}
|
2026-02-22 16:25:10 +00:00
|
|
|
${generic_flags}
|
|
|
|
|
-s -S &
|
2026-02-21 23:25:31 +00:00
|
|
|
${GDB} -tui
|
|
|
|
|
-s "${CMAKE_BINARY_DIR}/kernel/${kernel_name}.debug"
|
|
|
|
|
-ex "target remote localhost:1234"
|
|
|
|
|
USES_TERMINAL
|
|
|
|
|
DEPENDS ${image_cdrom})
|
|
|
|
|
endif ()
|
|
|
|
|
endif ()
|
|
|
|
|
|