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 () find_program(LLDB lldb) find_program(GDB gdb) set(patched_kernel ${CMAKE_CURRENT_BINARY_DIR}/kernel/${kernel_name}.elf32) add_custom_command(OUTPUT ${patched_kernel} DEPENDS ${kernel_name} COMMAND ${CMAKE_COMMAND} -E copy $ ${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") add_custom_target(run-kernel COMMAND ${QEMU} -kernel ${patched_kernel} -initrd ${sys_dir}/${bsp_name} -m 1G -serial stdio -enable-kvm --append kernel.early-console=ttyS0 USES_TERMINAL DEPENDS ${patched_kernel} bsp) add_custom_target(run-kernel-monitor COMMAND ${QEMU} -kernel $ -initrd ${sys_dir}/${bsp_name} -m 1G -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} -m 1G -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 $ -initrd ${sys_dir}/${bsp_name} -enable-kvm -m 1G -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} -m 1G -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 $ -initrd ${sys_dir}/${bsp_name} -m 1G -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} -m 1G -s -S & ${GDB} -tui -s "${CMAKE_BINARY_DIR}/kernel/${kernel_name}.debug" -ex "target remote localhost:1234" USES_TERMINAL DEPENDS ${image_cdrom}) endif () endif ()