aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt24
1 files changed, 22 insertions, 2 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 55db14b..4800935 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -62,8 +62,6 @@ if(BRUSSEL_CODEGEN_DEBUG_PRINT)
target_compile_definitions(codegen PRIVATE CODEGEN_DEBUG_PRINT=1)
endif()
-# ==============================================================================
-
file(GLOB_RECURSE things_codegen_base_SOURCES source-codegen-base/*.c source-codegen-base/*.cpp)
add_library(things_codegen_base OBJECT ${things_codegen_base_SOURCES})
@@ -82,6 +80,25 @@ target_link_libraries(things_codegen_base PUBLIC
things_common
)
+# TODO support reading all files from the target, instead of manually supplying a search dir
+function(target_gen_metadata TARGET_NAME SEARCH_DIR)
+ get_target_property(TARGET_SOURCES ${TARGET_NAME} SOURCES)
+
+ set(OUTPUT_DIR ${CMAKE_BINARY_DIR}/generated/${TARGET_NAME})
+ set(OUTPUT_FILES
+ ${OUTPUT_DIR}/generated/GeneratedCode.hpp
+ ${OUTPUT_DIR}/generated/GeneratedCode.cpp
+ )
+ add_custom_command(
+ OUTPUT ${OUTPUT_FILES}
+ COMMAND codegen ${OUTPUT_DIR}/generated rec:${SEARCH_DIR}
+ DEPENDS ${TARGET_SOURCES}
+ )
+
+ target_include_directories(${TARGET_NAME} PRIVATE ${OUTPUT_DIR})
+ target_sources(${TARGET_NAME} PRIVATE ${OUTPUT_FILES})
+endfunction()
+
# ==============================================================================
# add_executable requires at least one source file
@@ -153,3 +170,6 @@ if(BRUSSEL_ENABLE_ASAN)
-fno-omit-frame-pointer
)
endif()
+
+get_filename_component(METADATA_INP_DIR "source" ABSOLUTE)
+target_gen_metadata(${PROJECT_NAME} ${METADATA_INP_DIR})