aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2022-06-11 11:37:45 -0700
committerrtk0c <[email protected]>2022-06-11 11:37:45 -0700
commitf29a141ab4c4308aed66f930a6f3a42cd20a482d (patch)
tree482cb3698e45ddc22cc39977dac3e49071554eb1 /CMakeLists.txt
parent123bea4fc8d828cec7b41949bab1db443387728e (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.txt80
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)