aboutsummaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorrobot-ya-builder <robot-ya-builder@yandex-team.com>2022-09-01 05:47:31 +0300
committerrobot-ya-builder <robot-ya-builder@yandex-team.com>2022-09-01 05:47:31 +0300
commite83b936566d59e48df0aa4c414beaf0c4519c772 (patch)
tree43d715760743f81e2060d6ee6f4d4c9d8693751e /cmake
parentfc8096bf8173562afc5da58dbbb019af2ce1ee2f (diff)
downloadydb-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.cmake39
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)