1cmake_minimum_required(VERSION 3.16) 2 3set(PROTOBUF_PROTOC_EXECUTABLE "/usr/local/bin/protoc" CACHE STRING "Protoc binary on host") 4set(gRPC_CPP_PLUGIN_EXECUTABLE "/usr/local/bin/grpc_cpp_plugin" CACHE STRING "gRPC CPP plugin binary on host") 5 6set(GRPC_SRC_DIR ../../../../../) 7 8set(GRPC_BUILD_DIR ../grpc/outputs/${ANDROID_ABI}) 9file(MAKE_DIRECTORY ${GRPC_BUILD_DIR}) 10 11add_subdirectory(${GRPC_SRC_DIR} ${GRPC_BUILD_DIR}) 12 13#include_directories(${GRPC_SRC_DIR}/include) 14include_directories(${GRPC_SRC_DIR}) 15include_directories(${_gRPC_ABSL_INCLUDE_DIR}) 16 17set(GRPC_PROTO_GENS_DIR ${CMAKE_BINARY_DIR}/gens) 18file(MAKE_DIRECTORY ${GRPC_PROTO_GENS_DIR}) 19include_directories(${GRPC_PROTO_GENS_DIR}) 20 21function(android_protobuf_grpc_generate_cpp SRC_FILES HDR_FILES INCLUDE_ROOT) 22 if(NOT ARGN) 23 message(SEND_ERROR "Error: android_protobuf_grpc_generate_cpp() called without any proto files") 24 return() 25 endif() 26 27 set(${SRC_FILES}) 28 set(${HDR_FILES}) 29 set(PROTOBUF_INCLUDE_PATH -I ${INCLUDE_ROOT}) 30 foreach(FIL ${ARGN}) 31 get_filename_component(ABS_FIL ${FIL} ABSOLUTE) 32 get_filename_component(FIL_WE ${FIL} NAME_WE) 33 file(RELATIVE_PATH REL_FIL ${CMAKE_CURRENT_SOURCE_DIR}/${INCLUDE_ROOT} ${ABS_FIL}) 34 get_filename_component(REL_DIR ${REL_FIL} DIRECTORY) 35 set(RELFIL_WE "${REL_DIR}/${FIL_WE}") 36 37 list(APPEND ${SRC_FILES} "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.cc") 38 list(APPEND ${HDR_FILES} "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.h") 39 list(APPEND ${SRC_FILES} "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.cc") 40 list(APPEND ${HDR_FILES} "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.h") 41 42 add_custom_command( 43 OUTPUT "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.cc" 44 "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.h" 45 "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.cc" 46 "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.h" 47 COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} 48 ARGS --grpc_out=${GRPC_PROTO_GENS_DIR} 49 --cpp_out=${GRPC_PROTO_GENS_DIR} 50 --plugin=protoc-gen-grpc=${gRPC_CPP_PLUGIN_EXECUTABLE} 51 ${PROTOBUF_INCLUDE_PATH} 52 ${REL_FIL} 53 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 54 DEPENDS ${PROTOBUF_PROTOC_EXECUTABLE} ${gRPC_CPP_PLUGIN_EXECUTABLE} ${ABS_FIL} ) 55 endforeach() 56 57 set_source_files_properties(${${SRC_FILES}} ${${HDR_FILES}} PROPERTIES GENERATED TRUE) 58 set(${SRC_FILES} ${${SRC_FILES}} PARENT_SCOPE) 59 set(${HDR_FILES} ${${HDR_FILES}} PARENT_SCOPE) 60endfunction() 61 62set(PROTO_BASE_DIR ${GRPC_SRC_DIR}/examples/protos) 63 64android_protobuf_grpc_generate_cpp( 65 MESSAGES_PROTO_SRCS MESSAGES_PROTO_HDRS 66 ${GRPC_SRC_DIR} ${GRPC_SRC_DIR}/src/proto/grpc/testing/messages.proto) 67 68add_library(messages_proto_lib 69 SHARED ${MESSAGES_PROTO_SRCS} ${MESSAGES_PROTO_HDRS}) 70 71target_link_libraries(messages_proto_lib 72 libprotobuf 73 grpc++ 74 android 75 log) 76 77android_protobuf_grpc_generate_cpp( 78 EMPTY_PROTO_SRCS EMPTY_PROTO_HDRS 79 ${GRPC_SRC_DIR} ${GRPC_SRC_DIR}/src/proto/grpc/testing/empty.proto) 80 81add_library(empty_proto_lib 82 SHARED ${EMPTY_PROTO_SRCS} ${EMPTY_PROTO_HDRS}) 83 84target_link_libraries(empty_proto_lib 85 libprotobuf 86 grpc++ 87 android 88 log) 89 90android_protobuf_grpc_generate_cpp( 91 TEST_PROTO_SRCS TEST_PROTO_HDRS 92 ${GRPC_SRC_DIR} ${GRPC_SRC_DIR}/src/proto/grpc/testing/test.proto) 93 94add_library(test_proto_lib 95 SHARED ${TEST_PROTO_SRCS} ${TEST_PROTO_HDRS}) 96 97target_link_libraries(test_proto_lib 98 libprotobuf 99 grpc++ 100 empty_proto_lib 101 messages_proto_lib 102 android 103 log) 104 105find_library(log-lib 106 log) 107 108add_library(grpc-interop 109 SHARED 110 src/main/cpp/grpc-interop.cc 111 ${GRPC_SRC_DIR}/test/cpp/interop/backend_metrics_lb_policy.h 112 ${GRPC_SRC_DIR}/test/cpp/interop/backend_metrics_lb_policy.cc 113 ${GRPC_SRC_DIR}/test/cpp/interop/interop_client.h 114 ${GRPC_SRC_DIR}/test/cpp/interop/interop_client.cc 115 ${GRPC_SRC_DIR}/test/core/test_util/histogram.h 116 ${GRPC_SRC_DIR}/test/core/test_util/histogram.cc 117 ${GRPC_SRC_DIR}/test/core/test_util/test_lb_policies.h 118 ${GRPC_SRC_DIR}/test/core/test_util/test_lb_policies.cc) 119 120target_link_libraries(grpc-interop 121 messages_proto_lib 122 empty_proto_lib 123 test_proto_lib 124 android 125 ${log-lib}) 126