aboutsummaryrefslogtreecommitdiff
path: root/cmake/Modules
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2025-07-14 21:35:43 +0000
committerFelix Morgner <felix.morgner@ost.ch>2025-07-14 21:35:43 +0000
commit9b12522f37c3f8704e8f8ca8736689dbbf30ce8b (patch)
treea18d04dcb11ee11520af3f75120dfdea4689e14a /cmake/Modules
parent05ac8c2bdd000d27b38411db2223eabb649c318f (diff)
downloadteachos-9b12522f37c3f8704e8f8ca8736689dbbf30ce8b.tar.xz
teachos-9b12522f37c3f8704e8f8ca8736689dbbf30ce8b.zip
cmake: introduce ELF utility module
Diffstat (limited to 'cmake/Modules')
-rw-r--r--cmake/Modules/ElfTransformations.cmake36
1 files changed, 36 insertions, 0 deletions
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()