aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.lazy.lua13
-rw-r--r--.nvim.lua78
-rw-r--r--kernel/CMakeLists.txt1
-rw-r--r--kernel/src/test_support/kapi/platform.cpp14
4 files changed, 106 insertions, 0 deletions
diff --git a/.lazy.lua b/.lazy.lua
new file mode 100644
index 0000000..1c2df6e
--- /dev/null
+++ b/.lazy.lua
@@ -0,0 +1,13 @@
+return {
+ {
+ "nvim-neo-tree/neo-tree.nvim",
+ opts = {
+ filesystem = {
+ filtered_items = {
+ visible = false,
+ hide_gitignored = true,
+ },
+ },
+ }
+ }
+}
diff --git a/.nvim.lua b/.nvim.lua
new file mode 100644
index 0000000..2cd34d6
--- /dev/null
+++ b/.nvim.lua
@@ -0,0 +1,78 @@
+local workspace_folder = vim.fn.getcwd()
+
+local function safe_require(module)
+ local ok, mod = pcall(require, module)
+ if not ok then return nil end
+ return mod
+end
+
+-- C++
+local default_clangd_config = vim.deepcopy(vim.lsp.config["clangd"]) or {}
+default_clangd_config.cmd = {
+ "clangd",
+ "--background-index",
+ "--clang-tidy",
+ "--header-insertion=iwyu",
+ "--completion-style=detailed",
+ string.format("--compile-commands-dir=%s/build", workspace_folder),
+ "--query-driver=**/x86_64-pc-elf-g++"
+}
+
+vim.lsp.config("clangd", default_clangd_config)
+
+vim.filetype.add({
+ pattern = {
+ [".*/kstd/include/kstd/.*"] = "cpp",
+ }
+})
+
+-- Debugging
+local dap = require("dap")
+local qemu_job = nil
+
+dap.adapters.teachos_qemu_mi = function(callback, config)
+ if qemu_job then
+ qemu_job:kill(9)
+ end
+
+ local artifact_path = config.program
+ if not artifact_path then
+ vim.notify("Fatal: No artifact path resolved by CMake", vim.log.levels.ERROR)
+ return
+ end
+
+ local elf_path = string.gsub(artifact_path, "%.sym$", ".elf")
+
+ qemu_job = vim.system({
+ "qemu-system-x86_64",
+ "-kernel", elf_path,
+ "-s", "-S",
+ "-nographic"
+ }, { text = true })
+
+ vim.defer_fn(function()
+ callback({
+ type = "executable",
+ command = vim.fn.stdpath("data") .. "/mason/bin/OpenDebugAD7",
+ })
+ end, 500)
+end
+
+dap.listeners.after.event_terminated["teachos_qemu_teardown"] = function()
+ if qemu_job then
+ qemu_job:kill(9)
+ qemu_job = nil
+ end
+end
+
+require("cmake-tools").setup({
+ cmake_dap_configuration = {
+ name = "(gdb) QEMU MI Attach",
+ type = "teachos_qemu_mi",
+ request = "launch",
+ miDebuggerServerAddress = "localhost:1234",
+ miDebuggerPath = "x86_64-pc-elf-gdb",
+ stopAtEntry = true,
+ }
+})
+
diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt
index 22513ea..ef73586 100644
--- a/kernel/CMakeLists.txt
+++ b/kernel/CMakeLists.txt
@@ -101,6 +101,7 @@ else()
"src/test_support/kapi/cio.cpp"
"src/test_support/kapi/interrupts.cpp"
"src/test_support/kapi/memory.cpp"
+ "src/test_support/kapi/platform.cpp"
"src/test_support/log_buffer.cpp"
"src/test_support/output_device.cpp"
"src/test_support/page_mapper.cpp"
diff --git a/kernel/src/test_support/kapi/platform.cpp b/kernel/src/test_support/kapi/platform.cpp
new file mode 100644
index 0000000..497c992
--- /dev/null
+++ b/kernel/src/test_support/kapi/platform.cpp
@@ -0,0 +1,14 @@
+#include "kapi/platform.hpp"
+
+#include "kapi/devices.hpp"
+
+namespace kapi::platform
+{
+
+ auto discover_cpu_topology(devices::bus &) -> bool
+ {
+ // TODO: implement more meaningful simulated CPU topology discovery
+ return true;
+ }
+
+} // namespace kapi::platform \ No newline at end of file