diff --git a/CMakeLists.txt b/CMakeLists.txt index ab6faec..ae1859c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,7 @@ set(CMAKE_C_STANDARD 23) set(CMAKE_BUILD_TYPE Debug) find_library(LZMA_LIBRARY NAMES liblzma.a REQUIRED) +find_program(SED_COMMAND NAMES sed REQUIRED) message(STATUS "Using ${LZMA_LIBRARY}") set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -28,6 +29,17 @@ add_custom_command( ) add_custom_target(gen_lds DEPENDS ${CMAKE_BINARY_DIR}/xzre.lds) +add_custom_command( + OUTPUT ${CMAKE_BINARY_DIR}/xzre.csv + COMMAND ${CMAKE_C_COMPILER} + -DGEN_CSV -x c -E -P + ${CMAKE_SOURCE_DIR}/xzre.lds.in | sed "/^\\s*$/d;s/^\\s*//" > ${CMAKE_BINARY_DIR}/xzre.csv + DEPENDS ${CMAKE_SOURCE_DIR}/xzre.lds.in + VERBATIM +) +add_custom_target(gen_csv ALL DEPENDS ${CMAKE_BINARY_DIR}/xzre.csv) + + target_sources(xzre PRIVATE ${SOURCES}) target_sources(lzma PRIVATE ${SOURCES}) target_compile_definitions(lzma PRIVATE XZRE_SHARED) diff --git a/xzre.lds.in b/xzre.lds.in index 703f5de..cc90525 100644 --- a/xzre.lds.in +++ b/xzre.lds.in @@ -1,14 +1,21 @@ -#define QUOTED(a) #a -#define QUOTE(a) QUOTED(a) +#define QUOTED(a) #a +#define QUOTE(a) QUOTED(a) +#ifdef GEN_CSV +#define DEFSYM(name, section) QUOTE(name),QUOTE(section) +#define SECTIONS_BEGIN() +#define SECTIONS_END(name) +// CSV header +name,section +#else #define DEFSYM(name, section) \ section : { \ QUOTE(name) = QUOTE(.); \ *(section); \ } - #define SECTIONS_BEGIN() SECTIONS { #define SECTIONS_END(name) } INSERT AFTER name; +#endif SECTIONS_BEGIN() DEFSYM(x86_dasm, .text.x86_codd)