diff options
author | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-02-18 15:49:59 +0300 |
---|---|---|
committer | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-02-18 15:49:59 +0300 |
commit | b4cb34dfb2619f594d82e512fd9ff7fc97400133 (patch) | |
tree | 6a64ab25a145265287789bceed3f59e953561206 /cmake/yandex_common.cmake | |
parent | 5e837a820d5be0671fa4096a1cc1e378453e5132 (diff) | |
download | ydb-b4cb34dfb2619f594d82e512fd9ff7fc97400133.tar.gz |
intermediate changes
ref:1a0585d83f27cb6fb5b9c4f68a08177e10faf3b3
Diffstat (limited to 'cmake/yandex_common.cmake')
-rw-r--r-- | cmake/yandex_common.cmake | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/cmake/yandex_common.cmake b/cmake/yandex_common.cmake new file mode 100644 index 0000000000..41248b0e24 --- /dev/null +++ b/cmake/yandex_common.cmake @@ -0,0 +1,120 @@ +# Set of common macros + +find_package(Python2 REQUIRED) + +function(target_ragel_lexers TgtName Key Src) + SET(RAGEL_BIN ${CMAKE_BINARY_DIR}/bin/ragel) + get_filename_component(OutPath ${Src} NAME) + string(APPEND OutPath .cpp) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${OutPath} + COMMAND Python2::Interpreter ${CMAKE_SOURCE_DIR}/build/scripts/run_tool.py -- ${RAGEL_BIN} ${RAGEL_FLAGS} ${ARGN} -o ${CMAKE_CURRENT_BINARY_DIR}/${OutPath} ${Src} + DEPENDS ${CMAKE_SOURCE_DIR}/build/scripts/run_tool.py ${Src} + ) + target_sources(${TgtName} ${Key} ${CMAKE_CURRENT_BINARY_DIR}/${OutPath}) +endfunction() + +function(target_yasm_source TgtName Key Src) + SET(YASM_BIN ${CMAKE_BINARY_DIR}/bin/yasm) + get_filename_component(OutPath ${Src} NAME_WLE) + string(APPEND OutPath .o) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${OutPath} + COMMAND Python2::Interpreter ${CMAKE_SOURCE_DIR}/build/scripts/run_tool.py -- ${YASM_BIN} ${YASM_FLAGS} ${ARGN} -o ${CMAKE_CURRENT_BINARY_DIR}/${OutPath} ${Src} + DEPENDS ${CMAKE_SOURCE_DIR}/build/scripts/run_tool.py ${Src} + ) + target_sources(${TgtName} ${Key} ${CMAKE_CURRENT_BINARY_DIR}/${OutPath}) +endfunction() + +function(target_joined_source TgtName Out) + foreach(InSrc ${ARGN}) + file(RELATIVE_PATH IncludePath ${CMAKE_SOURCE_DIR} ${InSrc}) + list(APPEND IncludesList ${IncludePath}) + endforeach() + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${Out} + COMMAND Python2::Interpreter ${CMAKE_SOURCE_DIR}/build/scripts/gen_join_srcs.py ${CMAKE_CURRENT_BINARY_DIR}/${Out} ${IncludesList} + DEPENDS ${CMAKE_SOURCE_DIR}/build/scripts/gen_join_srcs.py ${ARGN} + ) + target_sources(${TgtName} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${Out}) +endfunction() + +function(generate_enum_serilization Tgt Input) + set(opts "") + set(oneval_args INCLUDE_HEADERS) + set(multival_args "") + cmake_parse_arguments(ENUM_SERIALIZATION_ARGS + "${opts}" + "${oneval_args}" + "${multival_args}" + ${ARGN} + ) + get_filename_component(BaseName ${Input} NAME) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${BaseName}_serialized.cpp + COMMAND enum_parser ${Input} --include-path ${ENUM_SERIALIZATION_ARGS_INCLUDE_HEADERS} --output ${CMAKE_CURRENT_BINARY_DIR}/${BaseName}_serialized.cpp + DEPENDS ${Input} + ) + target_sources(${Tgt} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${BaseName}_serialized.cpp) +endfunction() + +function(add_global_library_for TgtName MainName) + add_library(${TgtName} STATIC ${ARGN}) + add_library(${TgtName}.wholearchive INTERFACE) + add_dependencies(${TgtName}.wholearchive ${TgtName}) + if (MSVC) + target_link_options(${TgtName}.wholearchive INTERFACE "SHELL:/WHOLEARCHIVE:$<TARGET_FILE:${TgtName}>") + elseif(APPLE) + target_link_options(${TgtName}.wholearchive INTERFACE "SHELL:-Wl,-force_load,$<TARGET_FILE:${TgtName}>") + else() + target_link_options(${TgtName}.wholearchive INTERFACE "SHELL:-Wl,--whole-archive $<TARGET_FILE:${TgtName}> -Wl,--no-whole-archive") + endif() + target_link_libraries(${MainName} INTERFACE ${TgtName}.wholearchive) +endfunction() + +function(target_link_flags) + target_link_libraries(${ARGN}) +endfunction() + +function(copy_file From To) + add_custom_command( + OUTPUT ${To} + COMMAND ${CMAKE_COMMAND} -E copy ${From} ${To} + DEPENDS ${From} + ) +endfunction() + +function(vcs_info Tgt) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/__vcs_version__.c + COMMAND Python2::Interpreter ${CMAKE_SOURCE_DIR}/build/scripts/vcs_info.py no-vcs dummy.json ${CMAKE_CURRENT_BINARY_DIR}/__vcs_version__.c ${CMAKE_SOURCE_DIR}/build/scripts/c_templates/svn_interface.c + DEPENDS ${CMAKE_SOURCE_DIR}/build/scripts/vcs_info.py ${CMAKE_SOURCE_DIR}/build/scripts/c_templates/svn_interface.c + ) + target_sources(${Tgt} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/__vcs_version__.c) +endfunction() + +function(resources Tgt Output) + set(opts "") + set(oneval_args "") + set(multival_args INPUTS KEYS) + cmake_parse_arguments(RESOURCE_ARGS + "${opts}" + "${oneval_args}" + "${multival_args}" + ${ARGN} + ) + list(LENGTH RESOURCE_ARGS_INPUTS InputsCount) + list(LENGTH RESOURCE_ARGS_KEYS KeysCount) + if (NOT ${InputsCount} EQUAL ${KeysCount}) + message(FATAL_ERROR "Resources inputs count isn't equal to keys count in " ${Tgt}) + endif() + foreach(Input Key IN ZIP_LISTS RESOURCE_ARGS_INPUTS RESOURCE_ARGS_KEYS) + list(APPEND ResourcesList ${Input}) + list(APPEND ResourcesList ${Key}) + endforeach() + add_custom_command( + OUTPUT ${Output} + COMMAND rescompiler ${Output} ${ResourcesList} + DEPENDS ${RESOURCE_ARGS_INPUTS} + ) +endfunction() |