• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1set(grpc_USE_STATIC_LIBS OFF)
2if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
3    set(grpc_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 -O2")
4elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
5    set(grpc_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2")
6else()
7    set(grpc_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2 \
8  -Dgrpc=mindspore_grpc -Dgrpc_impl=mindspore_grpc_impl -Dgrpc_core=mindspore_grpc_core")
9    if(NOT ENABLE_GLIBCXX)
10        set(grpc_CXXFLAGS "${grpc_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
11    endif()
12endif()
13
14set(grpc_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack")
15
16if(EXISTS ${protobuf_ROOT}/lib64)
17  set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${protobuf_ROOT}/lib64/cmake/protobuf")
18else()
19  set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${protobuf_ROOT}/lib/cmake/protobuf")
20endif()
21message("grpc using Protobuf_DIR : " ${_FINDPACKAGE_PROTOBUF_CONFIG_DIR})
22
23if(EXISTS ${absl_ROOT}/lib64)
24  set(_FINDPACKAGE_ABSL_CONFIG_DIR "${absl_ROOT}/lib64/cmake/absl")
25else()
26  set(_FINDPACKAGE_ABSL_CONFIG_DIR "${absl_ROOT}/lib/cmake/absl")
27endif()
28message("grpc using absl_DIR : " ${_FINDPACKAGE_ABSL_CONFIG_DIR})
29
30if(EXISTS ${re2_ROOT}/lib64)
31  set(_FINDPACKAGE_RE2_CONFIG_DIR "${re2_ROOT}/lib64/cmake/re2")
32else()
33  set(_FINDPACKAGE_RE2_CONFIG_DIR "${re2_ROOT}/lib/cmake/re2")
34endif()
35message("grpc using re2_DIR : " ${_FINDPACKAGE_RE2_CONFIG_DIR})
36
37if(EXISTS ${openssl_ROOT})
38  set(_CMAKE_ARGS_OPENSSL_ROOT_DIR "-DOPENSSL_ROOT_DIR:PATH=${openssl_ROOT}")
39endif()
40
41if(ENABLE_GITEE)
42    set(REQ_URL "https://gitee.com/mirrors/grpc/repository/archive/v1.36.1.tar.gz")
43    set(MD5 "59e85aa3f583a65bf1135e119b75162d")
44else()
45    set(REQ_URL "https://github.com/grpc/grpc/archive/v1.36.1.tar.gz")
46    set(MD5 "90c93203e95e89af5f46738588217057")
47endif()
48
49mindspore_add_pkg(grpc
50        VER 1.36.1
51        LIBS mindspore_grpc++ mindspore_grpc mindspore_gpr mindspore_upb mindspore_address_sorting
52        EXE grpc_cpp_plugin
53        URL ${REQ_URL}
54        MD5 ${MD5}
55        PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/grpc/grpc.patch001
56        CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release
57        -DBUILD_SHARED_LIBS=ON
58        -DgRPC_INSTALL:BOOL=ON
59        -DgRPC_BUILD_TESTS:BOOL=OFF
60        -DgRPC_PROTOBUF_PROVIDER:STRING=package
61        -DgRPC_PROTOBUF_PACKAGE_TYPE:STRING=CONFIG
62        -DProtobuf_DIR:PATH=${_FINDPACKAGE_PROTOBUF_CONFIG_DIR}
63        -DgRPC_ZLIB_PROVIDER:STRING=package
64        -DZLIB_ROOT:PATH=${zlib_ROOT}
65        -DgRPC_ABSL_PROVIDER:STRING=package
66        -Dabsl_DIR:PATH=${_FINDPACKAGE_ABSL_CONFIG_DIR}
67        -DgRPC_CARES_PROVIDER:STRING=package
68        -Dc-ares_DIR:PATH=${c-ares_ROOT}/lib/cmake/c-ares
69        -DgRPC_SSL_PROVIDER:STRING=package
70        ${_CMAKE_ARGS_OPENSSL_ROOT_DIR}
71        -DgRPC_RE2_PROVIDER:STRING=package
72        -Dre2_DIR:PATH=${_FINDPACKAGE_RE2_CONFIG_DIR}
73        )
74
75include_directories(${grpc_INC})
76
77add_library(mindspore::grpc++ ALIAS grpc::mindspore_grpc++)
78
79# link other grpc libs
80target_link_libraries(grpc::mindspore_grpc++ INTERFACE grpc::mindspore_grpc grpc::mindspore_gpr grpc::mindspore_upb
81  grpc::mindspore_address_sorting)
82
83# modify mindspore macro define
84add_compile_definitions(grpc=mindspore_grpc)
85add_compile_definitions(grpc_impl=mindspore_grpc_impl)
86add_compile_definitions(grpc_core=mindspore_grpc_core)
87
88function(ms_grpc_generate c_var h_var)
89    if(NOT ARGN)
90        message(SEND_ERROR "Error: ms_grpc_generate() called without any proto files")
91        return()
92    endif()
93
94    set(${c_var})
95    set(${h_var})
96
97    foreach(file ${ARGN})
98        get_filename_component(abs_file ${file} ABSOLUTE)
99        get_filename_component(file_name ${file} NAME_WE)
100        get_filename_component(file_dir ${abs_file} PATH)
101        file(RELATIVE_PATH rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${file_dir})
102
103        list(APPEND ${c_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc")
104        list(APPEND ${h_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h")
105        list(APPEND ${c_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.grpc.pb.cc")
106        list(APPEND ${h_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.grpc.pb.h")
107
108        add_custom_command(
109                OUTPUT "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc"
110                "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h"
111                "${CMAKE_BINARY_DIR}/proto/${file_name}.grpc.pb.cc"
112                "${CMAKE_BINARY_DIR}/proto/${file_name}.grpc.pb.h"
113                WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
114                COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/proto"
115                COMMAND protobuf::protoc --version
116                COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/proto
117                        --grpc_out=${CMAKE_BINARY_DIR}/proto
118                        --plugin=protoc-gen-grpc=$<TARGET_FILE:grpc::grpc_cpp_plugin> ${abs_file}
119                DEPENDS protobuf::protoc grpc::grpc_cpp_plugin ${abs_file}
120                COMMENT "Running C++ gRPC compiler on ${file}" VERBATIM)
121    endforeach()
122
123    set_source_files_properties(${${c_var}} ${${h_var}} PROPERTIES GENERATED TRUE)
124    set(${c_var} ${${c_var}} PARENT_SCOPE)
125    set(${h_var} ${${h_var}} PARENT_SCOPE)
126endfunction()
127