instead of checking the availability of a required program, let's use the `REQUIRED` argument introduced by CMake 3.18, simpler this way. Signed-off-by: Kefu Chai <kefu.chai@scylladb.com> Closes scylladb/scylladb#15447
59 lines
1.9 KiB
CMake
59 lines
1.9 KiB
CMake
# Generate C++ source files from thrift definitions
|
|
function(scylla_generate_thrift)
|
|
set(one_value_args TARGET VAR THRIFT_VERSION IN_FILE OUT_DIR SERVICE)
|
|
cmake_parse_arguments(args "" "${one_value_args}" "" ${ARGN})
|
|
|
|
get_filename_component(in_file_name ${args_IN_FILE} NAME_WE)
|
|
|
|
set(aux_out_file_name ${args_OUT_DIR}/${in_file_name})
|
|
set(outputs
|
|
${aux_out_file_name}_types.cpp
|
|
${aux_out_file_name}_types.h
|
|
${aux_out_file_name}_constants.cpp
|
|
${aux_out_file_name}_constants.h
|
|
${args_OUT_DIR}/${args_SERVICE}.cpp
|
|
${args_OUT_DIR}/${args_SERVICE}.h)
|
|
|
|
find_program(THRIFT thrift
|
|
REQUIRED)
|
|
execute_process(
|
|
COMMAND "${THRIFT}" -version
|
|
OUTPUT_VARIABLE thrift_version_output
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
string(REGEX MATCH "[0-9]+\.[0-9]+\.[0-9]+$"
|
|
thrift_version "${thrift_version_output}")
|
|
set(${args_THRIFT_VERSION} ${thrift_version} PARENT_SCOPE)
|
|
|
|
add_custom_command(
|
|
DEPENDS ${args_IN_FILE}
|
|
OUTPUT ${outputs}
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${args_OUT_DIR}
|
|
COMMAND ${THRIFT} -gen cpp:cob_style,no_skeleton -out "${args_OUT_DIR}" "${args_IN_FILE}")
|
|
|
|
add_custom_target(${args_TARGET}
|
|
DEPENDS ${outputs})
|
|
|
|
set(${args_VAR} ${outputs} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
scylla_generate_thrift(
|
|
TARGET scylla_thrift_gen_cassandra
|
|
VAR scylla_thrift_gen_cassandra_files
|
|
THRIFT_VERSION thrift_version
|
|
IN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cassandra.thrift"
|
|
OUT_DIR ${scylla_gen_build_dir}
|
|
SERVICE Cassandra)
|
|
|
|
add_library(interface STATIC)
|
|
target_sources(interface
|
|
PRIVATE
|
|
${scylla_thrift_gen_cassandra_files})
|
|
target_include_directories(interface
|
|
PUBLIC
|
|
${scylla_gen_build_dir})
|
|
if(thrift_version VERSION_LESS 0.11.0)
|
|
target_compile_definitions(interface
|
|
PUBLIC
|
|
THRIFT_USES_BOOST)
|
|
endif()
|