mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
45b6f1e59f
Summary: [Thrift] Rename generated client source file for consistency with the recently-added header. The new generated client source file is `{Service}AsyncClient.cpp`. Reviewed By: stevegury Differential Revision: D9174822 fbshipit-source-id: 49a050a96d3f583fdb5ad56545ca4a16d31605d7
115 lines
3.2 KiB
CMake
115 lines
3.2 KiB
CMake
function(add_thrift_cpp2_library LIB_NAME THRIFT_FILE)
|
|
# Parse the arguments
|
|
set(SERVICES)
|
|
set(DEPENDS)
|
|
set(GEN_ARGS)
|
|
set(mode "UNSET")
|
|
foreach(arg IN LISTS ARGN)
|
|
if("${arg}" STREQUAL "SERVICES")
|
|
set(mode "SERVICES")
|
|
elseif("${arg}" STREQUAL "DEPENDS")
|
|
set(mode "DEPENDS")
|
|
elseif("${arg}" STREQUAL "OPTIONS")
|
|
set(mode "OPTIONS")
|
|
else()
|
|
if("${mode}" STREQUAL "SERVICES")
|
|
list(APPEND SERVICES "${arg}")
|
|
elseif("${mode}" STREQUAL "DEPENDS")
|
|
list(APPEND DEPENDS "${arg}")
|
|
elseif("${mode}" STREQUAL "OPTIONS")
|
|
list(APPEND GEN_ARGS "${arg}")
|
|
else()
|
|
message(
|
|
FATAL_ERROR
|
|
"expected SERVICES, DEPENDS, or OPTIONS argument, found ${arg}"
|
|
)
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
|
|
get_filename_component(base ${THRIFT_FILE} NAME_WE)
|
|
get_filename_component(
|
|
output_dir
|
|
${CMAKE_CURRENT_BINARY_DIR}/${THRIFT_FILE}
|
|
DIRECTORY
|
|
)
|
|
|
|
list(APPEND GEN_ARGS "include_prefix=${output_dir}")
|
|
# CMake 3.12 is finally getting a list(JOIN) function, but until then
|
|
# treating the list as a string and replacing the semicolons is good enough.
|
|
string(REPLACE ";" "," GEN_ARG_STR "${GEN_ARGS}")
|
|
|
|
# Compute the list of generated files
|
|
list(APPEND generated_headers
|
|
${output_dir}/gen-cpp2/${base}_constants.h
|
|
${output_dir}/gen-cpp2/${base}_constants.cpp
|
|
${output_dir}/gen-cpp2/${base}_types.h
|
|
${output_dir}/gen-cpp2/${base}_types.tcc
|
|
${output_dir}/gen-cpp2/${base}_types_custom_protocol.h
|
|
)
|
|
list(APPEND generated_sources
|
|
${output_dir}/gen-cpp2/${base}_data.h
|
|
${output_dir}/gen-cpp2/${base}_data.cpp
|
|
${output_dir}/gen-cpp2/${base}_types.cpp
|
|
)
|
|
foreach(service IN LISTS SERVICES)
|
|
list(APPEND generated_headers
|
|
${output_dir}/gen-cpp2/${service}.h
|
|
${output_dir}/gen-cpp2/${service}.tcc
|
|
${output_dir}/gen-cpp2/${service}AsyncClient.h
|
|
${output_dir}/gen-cpp2/${service}_custom_protocol.h
|
|
)
|
|
list(APPEND generated_sources
|
|
${output_dir}/gen-cpp2/${service}.cpp
|
|
${output_dir}/gen-cpp2/${service}AsyncClient.cpp
|
|
${output_dir}/gen-cpp2/${service}_processmap_binary.cpp
|
|
${output_dir}/gen-cpp2/${service}_processmap_compact.cpp
|
|
)
|
|
endforeach()
|
|
|
|
# Emit the rule to run the thrift compiler
|
|
add_custom_command(
|
|
OUTPUT
|
|
${generated_headers}
|
|
${generated_sources}
|
|
COMMAND
|
|
${CMAKE_COMMAND} -E make_directory ${output_dir}
|
|
COMMAND
|
|
${FBTHRIFT_COMPILER}
|
|
--strict
|
|
--templates ${FBTHRIFT_TEMPLATES_DIR}
|
|
--gen "mstch_cpp2:${GEN_ARG_STR}"
|
|
-I ${CMAKE_SOURCE_DIR}
|
|
-o ${output_dir}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${THRIFT_FILE}
|
|
WORKING_DIRECTORY
|
|
${CMAKE_BINARY_DIR}
|
|
MAIN_DEPENDENCY
|
|
${THRIFT_FILE}
|
|
DEPENDS
|
|
${DEPENDS}
|
|
)
|
|
|
|
# Now emit the library rule to compile the sources
|
|
add_library(${LIB_NAME} STATIC
|
|
${generated_sources}
|
|
)
|
|
set_property(
|
|
TARGET ${LIB_NAME}
|
|
PROPERTY PUBLIC_HEADER
|
|
${generated_headers}
|
|
)
|
|
target_include_directories(
|
|
${LIB_NAME}
|
|
PUBLIC
|
|
${CMAKE_SOURCE_DIR}
|
|
${CMAKE_BINARY_DIR}
|
|
)
|
|
target_link_libraries(
|
|
${LIB_NAME}
|
|
PUBLIC
|
|
${DEPENDS}
|
|
FBThrift::thriftcpp2
|
|
)
|
|
endfunction()
|