diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2025-07-14 21:35:43 +0000 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2025-07-14 21:35:43 +0000 |
| commit | 9b12522f37c3f8704e8f8ca8736689dbbf30ce8b (patch) | |
| tree | a18d04dcb11ee11520af3f75120dfdea4689e14a | |
| parent | 05ac8c2bdd000d27b38411db2223eabb649c318f (diff) | |
| download | teachos-9b12522f37c3f8704e8f8ca8736689dbbf30ce8b.tar.xz teachos-9b12522f37c3f8704e8f8ca8736689dbbf30ce8b.zip | |
cmake: introduce ELF utility module
| -rw-r--r-- | .vscode/launch.json | 2 | ||||
| -rw-r--r-- | CMakeLists.txt | 6 | ||||
| -rw-r--r-- | cmake/Modules/ElfTransformations.cmake | 36 |
3 files changed, 42 insertions, 2 deletions
diff --git a/.vscode/launch.json b/.vscode/launch.json index 7778c04..6739aa3 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -11,7 +11,7 @@ "gdbpath": "x86_64-pc-elf-gdb", "cwd": "${workspaceFolder}", "preLaunchTask": "QEMU (gdb)", - "executable": "${command:cmake.buildDirectory}/bin/${command:cmake.buildType}/kernel.elf", + "executable": "${command:cmake.buildDirectory}/bin/${command:cmake.buildType}/kernel.sym", "autorun": [ "-enable-pretty-printing", "-break-insert _start" diff --git a/CMakeLists.txt b/CMakeLists.txt index 27500ed..6f7d5a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ project("kernel" set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules") +include("ElfTransformations") include("GenerateBootableIso") #[============================================================================[ @@ -38,8 +39,11 @@ target_link_libraries("kernel" PRIVATE "os::kern" ) -target_generate_bootable_iso("kernel") +target_disassemble("kernel") +target_extract_debug_symbols("kernel") +target_strip("kernel") +target_generate_bootable_iso("kernel") # #[============================================================================[ # # Documentation diff --git a/cmake/Modules/ElfTransformations.cmake b/cmake/Modules/ElfTransformations.cmake new file mode 100644 index 0000000..dfc8576 --- /dev/null +++ b/cmake/Modules/ElfTransformations.cmake @@ -0,0 +1,36 @@ +include_guard(GLOBAL) + +function(target_extract_debug_symbols TARGET) + add_custom_command(TARGET "${TARGET}" + POST_BUILD + COMMAND "${CMAKE_OBJCOPY}" + "--only-keep-debug" + "$<TARGET_FILE:${TARGET}>" + "$<TARGET_FILE_DIR:${TARGET}>/$<TARGET_FILE_BASE_NAME:${TARGET}>.sym" + BYPRODUCTS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIGURATION>/${TARGET}.sym" + COMMENT "Extracting debug symbols from $<TARGET_FILE:${TARGET}> ..." + ) +endfunction() + +function(target_strip TARGET) + add_custom_command(TARGET "${TARGET}" + POST_BUILD + COMMAND "${CMAKE_STRIP}" + "$<TARGET_FILE:${TARGET}>" + COMMENT "Stripping $<TARGET_FILE:${TARGET}> ..." + ) +endfunction() + +function(target_disassemble TARGET) + add_custom_command(TARGET "${TARGET}" + POST_BUILD + COMMAND "${CMAKE_OBJDUMP}" + "--disassemble" + "--visualize-jumps" + "--demangle" + "$<TARGET_FILE:${TARGET}>" + ">$<TARGET_FILE_DIR:${TARGET}>/$<TARGET_FILE_BASE_NAME:${TARGET}>.dis" + BYPRODUCTS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIGURATION>/${TARGET}.dis" + COMMENT "Dumping disassembly for $<TARGET_FILE:${TARGET}> ..." + ) +endfunction() |
