diff options
author | rtk0c <[email protected]> | 2022-06-11 11:37:45 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2022-06-11 11:37:45 -0700 |
commit | f29a141ab4c4308aed66f930a6f3a42cd20a482d (patch) | |
tree | 482cb3698e45ddc22cc39977dac3e49071554eb1 /CMakeLists.txt | |
parent | 123bea4fc8d828cec7b41949bab1db443387728e (diff) |
Changeset: 70 Fix cmake and codegen infra
- Invoke codegen.exe once with a list of changed files, instead of individually for each changed file (this gives the codegen global access to all the code, allowing more things)
- Initial support for outputting an archive SQLite database that contains all the code info
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 80 |
1 files changed, 61 insertions, 19 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index ca9c541..530bf8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,30 @@ target_link_libraries(10-common PUBLIC glm::glm ) +file(GLOB_RECURSE 10-editor-common_SOURCES + source/10-editor-common/*.c + source/10-editor-common/*.cpp +) +add_library(10-editor-common OBJECT ${10-editor-common_SOURCES}) + +set_target_properties(10-editor-common PROPERTIES + CXX_STANDARD 20 + CXX_STANDARD_REQUIRED ON + CXX_EXTENSIONS OFF + UNITY_BUILD OFF +) + +target_include_directories(10-editor-common PUBLIC source/10-editor-common) +target_link_libraries(10-editor-common PUBLIC + # External dependencies + ${CONAN_LIBS} + glm::glm + imgui + + # Project internal components + 10-common +) + # ============================================================================== # Layer 20 (building tools) @@ -124,14 +148,6 @@ function(add_projectized_executable) ${arg_EXTRA_SOURCES} ) - target_include_directories(${arg_TARGET_NAME} PRIVATE - ${arg_TARGET_SOURCE_DIR} - ) - - target_link_libraries(${arg_TARGET_NAME} PRIVATE - 10-common - ) - set_target_properties(${arg_TARGET_NAME} PROPERTIES CXX_STANDARD 20 CXX_STANDARD_REQUIRED ON @@ -143,32 +159,56 @@ function(add_projectized_executable) target_include_directories(${arg_TARGET_NAME} PRIVATE ${var_OUTPUT_DIR}) target_link_libraries(${arg_TARGET_NAME} PRIVATE 20-codegen-runtime) + # https://stackoverflow.com/questions/70371064/run-custom-command-with-modified-files-as-arguments + set(var_STAMPS "") + set(var_STAMP_LIST ${var_OUTPUT_DIR}/stamplist.txt) + set(var_GENERATED_FILE_LIST "") foreach(var_HEADER IN LISTS var_HEADERS) get_filename_component(var_HEADER_ABS "${var_HEADER}" ABSOLUTE) - get_filename_component(var_HEADER_NAME "${var_HEADER}" NAME_WLE) + get_filename_component(var_HEADER_FILENAME "${var_HEADER}" NAME) + get_filename_component(var_HEADER_STEM "${var_HEADER}" NAME_WLE) + + set(var_STAMP_FILE ${var_OUTPUT_DIR}/stamp/${var_HEADER_FILENAME}) + list(APPEND var_STAMPS ${var_STAMP_FILE}) + add_custom_command( + OUTPUT ${var_STAMP_FILE} + COMMAND "${CMAKE_COMMAND}" -E echo "${var_HEADER_ABS}" >> "${var_STAMP_LIST}" + COMMAND "${CMAKE_COMMAND}" -E touch "${var_STAMP_FILE}" + DEPENDS ${var_HEADER} + ) # Things that are included by other TUs set(var_OUTPUT_HEADERS - ${var_OUTPUT_DIR}/generated/${var_HEADER_NAME}.gh.inl - ${var_OUTPUT_DIR}/generated/${var_HEADER_NAME}.gs.inl + ${var_OUTPUT_DIR}/generated/${var_HEADER_STEM}.gh.inl + ${var_OUTPUT_DIR}/generated/${var_HEADER_STEM}.gs.inl ) # Things that needs to be compiled # NOTE: we need at least one of this to make sure the target is rebuilt if the generated files changes set(var_OUTPUT_SOURCES - ${var_OUTPUT_DIR}/generated/${var_HEADER_NAME}.g.cpp - ) - - # Generate the files - add_custom_command( - OUTPUT ${var_OUTPUT_HEADERS} ${var_OUTPUT_SOURCES} - COMMAND 20-codegen-compiler ${var_OUTPUT_DIR}/generated single:${var_HEADER} - DEPENDS ${var_HEADER} + ${var_OUTPUT_DIR}/generated/${var_HEADER_STEM}.g.cpp ) + # Record the list of generated files, for the DEPENDS of the actual codegen executable invocation + list(APPEND var_GENERATED_FILE_LIST ${var_OUTPUT_HEADERS} ${var_OUTPUT_SOURCES}) # Add generated TUs to the target target_sources(${arg_TARGET_NAME} PRIVATE ${var_OUTPUT_SOURCES}) endforeach() + + # NOTE: we prepend the target name to the custom targets to mangle them, prevent conflict between different projectized targets + add_custom_target(${arg_TARGET_NAME}delete-stamp-list COMMAND "${CMAKE_COMMAND}" -E rm -f "${var_STAMP_LIST}") + add_custom_target(${arg_TARGET_NAME}update-stamps DEPENDS ${var_STAMPS}) + add_dependencies(${arg_TARGET_NAME}update-stamps ${arg_TARGET_NAME}delete-stamp-list) + + # Actually generate the files, based on the list of changed files + add_custom_command( + OUTPUT ${var_GENERATED_FILE_LIST} + COMMAND 20-codegen-compiler + --output-dir=${var_OUTPUT_DIR}/generated + --database=${var_OUTPUT_DIR}/model.sqlite3 + fileList:${var_STAMP_LIST} + DEPENDS ${var_STAMPS} ${arg_TARGET_NAME}update-stamps + ) endif() endfunction() @@ -199,6 +239,8 @@ target_link_libraries(30-game PRIVATE tracy # Project internal components + 10-common + 10-editor-common ) target_flag_exceptions(30-game ON) |