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