diff options
author | robot-ya-builder <robot-ya-builder@yandex-team.com> | 2022-09-01 05:47:31 +0300 |
---|---|---|
committer | robot-ya-builder <robot-ya-builder@yandex-team.com> | 2022-09-01 05:47:31 +0300 |
commit | e83b936566d59e48df0aa4c414beaf0c4519c772 (patch) | |
tree | 43d715760743f81e2060d6ee6f4d4c9d8693751e /cmake | |
parent | fc8096bf8173562afc5da58dbbb019af2ce1ee2f (diff) | |
download | ydb-e83b936566d59e48df0aa4c414beaf0c4519c772.tar.gz |
Update external build system generation utility
* [cmake] Hierarchical add_subdirectroy structure
* [cmake] Support for same file compilation multiple times with different flags
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/yandex_common.cmake | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/cmake/yandex_common.cmake b/cmake/yandex_common.cmake index 4e1d01dfd1..c422bd7766 100644 --- a/cmake/yandex_common.cmake +++ b/cmake/yandex_common.cmake @@ -42,6 +42,45 @@ function(target_joined_source TgtName Out) target_sources(${TgtName} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${Out}) endfunction() +function(target_sources_custom TgtName CompileOutSuffix) + set(opts "") + set(oneval_args "") + set(multival_args SRCS CUSTOM_FLAGS) + cmake_parse_arguments(TARGET_SOURCES_CUSTOM + "${opts}" + "${oneval_args}" + "${multival_args}" + ${ARGN} + ) + + foreach(Src ${TARGET_SOURCES_CUSTOM_SRCS}) + file(RELATIVE_PATH SrcRealPath ${CMAKE_SOURCE_DIR} ${Src}) + get_filename_component(SrcDir ${SrcRealPath} DIRECTORY) + get_filename_component(SrcName ${SrcRealPath} NAME_WLE) + get_filename_component(SrcExt ${SrcRealPath} LAST_EXT) + set(SrcCopy "${CMAKE_BINARY_DIR}/${SrcDir}/${SrcName}${CompileOutSuffix}${SrcExt}") + add_custom_command( + OUTPUT ${SrcCopy} + COMMAND ${CMAKE_COMMAND} -E copy ${Src} ${SrcCopy} + DEPENDS ${Src} + ) + list(APPEND PreparedSrc ${SrcCopy}) + set_property( + SOURCE + ${SrcCopy} + APPEND PROPERTY COMPILE_OPTIONS + ${TARGET_SOURCES_CUSTOM_CUSTOM_FLAGS} + -I${CMAKE_SOURCE_DIR}/${SrcDir} + ) + endforeach() + + target_sources( + ${TgtName} + PRIVATE + ${PreparedSrc} + ) +endfunction() + function(generate_enum_serilization Tgt Input) set(opts "") set(oneval_args INCLUDE_HEADERS) |