2019-05-20 15:17:04 +02:00
cmake_minimum_required ( VERSION 2.8.12 )
2019-05-20 13:21:02 +02:00
set ( SOURCE_GROUP_HEADER_FILES
2019-05-20 14:24:53 +02:00
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcServer.h
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcCallbacks.h
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcCallbacks.inl
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcServiceInterface.h
2019-06-03 14:33:16 +02:00
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcCaseService.h
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcGridService.h
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcProjectService.h
2019-05-20 14:24:53 +02:00
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcCommandService.h
2019-06-04 12:59:06 +02:00
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcAppService.h
2019-05-21 13:40:42 +02:00
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcPropertiesService.h
2019-06-10 20:42:20 +02:00
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcPdmObjectService.h
2019-05-20 13:21:02 +02:00
)
set ( SOURCE_GROUP_SOURCE_FILES
2019-05-20 14:24:53 +02:00
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcServer.cpp
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcServiceInterface.cpp
2019-06-03 14:33:16 +02:00
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcCaseService.cpp
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcGridService.cpp
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcProjectService.cpp
2019-05-20 14:24:53 +02:00
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcCommandService.cpp
2019-06-04 12:59:06 +02:00
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcAppService.cpp
2019-05-21 13:40:42 +02:00
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcPropertiesService.cpp
2019-06-10 20:42:20 +02:00
${ CMAKE_CURRENT_LIST_DIR } /RiaGrpcPdmObjectService.cpp
2019-05-20 13:21:02 +02:00
)
add_definitions ( -DENABLE_GRPC )
if ( MSVC )
2019-05-20 14:24:53 +02:00
add_definitions ( -D_WIN32_WINNT=0x600 )
# Find Protobuf installation
# Looks for protobuf-config.cmake file installed by Protobuf's cmake installation.
2019-06-04 10:34:31 +02:00
set ( protobuf_MODULE_COMPATIBLE ON CACHE DBOOL "" )
find_package ( Protobuf CONFIG 3.0 QUIET )
if ( Protobuf_FOUND )
message ( STATUS "Using protobuf ${protobuf_VERSION}" )
else ()
message ( FATAL_ERROR "Protocol Buffers not found. This is required to build with gRPC" )
endif ()
2019-05-20 14:24:53 +02:00
# Find gRPC installation
# Looks for gRPCConfig.cmake file installed by gRPC's cmake installation.
find_package ( gRPC CONFIG REQUIRED NO_MODULE )
message ( STATUS "Using gRPC ${gRPC_VERSION}" )
set ( _PROTOBUF_LIBPROTOBUF protobuf::libprotobuf )
set ( _PROTOBUF_PROTOC $< TARGET_FILE:protobuf::protoc > )
set ( _GRPC_GRPCPP_UNSECURE gRPC::grpc++_unsecure gRPC::grpc_unsecure gRPC::gpr )
set ( _GRPC_CPP_PLUGIN_EXECUTABLE $< TARGET_FILE:gRPC::grpc_cpp_plugin > )
set ( GRPC_LIBRARIES ${ _GRPC_GRPCPP_UNSECURE } ${ _PROTOBUF_LIBPROTOBUF } )
2019-05-29 11:33:03 +02:00
set_target_properties ( ${ GRPC_LIBRARIES } PROPERTIES
MAP_IMPORTED_CONFIG_MINSIZEREL RELEASE
MAP_IMPORTED_CONFIG_RELWITHDEBINFO RELEASE
2019-05-20 14:24:53 +02:00
)
2019-05-29 11:33:03 +02:00
2019-05-20 13:21:02 +02:00
else ()
2019-08-12 09:08:27 +02:00
set ( RESINSIGHT_GRPC_INSTALL_PREFIX "" CACHE PATH "gRPC : Install prefix for gRPC" )
if ( NOT DEFINED RESINSIGHT_GRPC_INSTALL_PREFIX OR NOT EXISTS ${ RESINSIGHT_GRPC_INSTALL_PREFIX } )
message ( FATAL_ERROR "You need a valid RESINSIGHT_GRPC_INSTALL_PREFIX set to build with gRPC" )
2019-05-20 14:24:53 +02:00
endif ()
2019-08-12 09:08:27 +02:00
set ( ENV{PKG_CONFIG_PATH} "${RESINSIGHT_GRPC_INSTALL_PREFIX}/lib/pkgconfig" )
2019-05-20 14:24:53 +02:00
find_package ( PkgConfig REQUIRED )
pkg_check_modules ( GRPC REQUIRED grpc++_unsecure>=1.20 grpc_unsecure gpr protobuf )
2019-08-12 09:08:27 +02:00
set ( _PROTOBUF_PROTOC "${RESINSIGHT_GRPC_INSTALL_PREFIX}/bin/protoc" )
set ( _GRPC_CPP_PLUGIN_EXECUTABLE "${RESINSIGHT_GRPC_INSTALL_PREFIX}/bin/grpc_cpp_plugin" )
2019-05-20 14:24:53 +02:00
include_directories ( AFTER ${ GRPC_INCLUDE_DIRS } )
2019-05-20 13:21:02 +02:00
endif ()
# Cannot use the nice new FindPackage modules for python since that is CMake 3.12+
2019-08-12 08:51:56 +02:00
if ( RESINSIGHT_GRPC_PYTHON_EXECUTABLE AND EXISTS ${ RESINSIGHT_GRPC_PYTHON_EXECUTABLE } )
message ( STATUS "Using Python ${RESINSIGHT_GRPC_PYTHON_EXECUTABLE}" )
endif ( RESINSIGHT_GRPC_PYTHON_EXECUTABLE AND EXISTS ${ RESINSIGHT_GRPC_PYTHON_EXECUTABLE } )
2019-05-20 13:21:02 +02:00
# Proto files
set ( PROTO_FILES
2019-08-13 13:15:58 +02:00
"Definitions"
2019-06-10 20:42:20 +02:00
"PdmObject"
2019-06-03 14:33:16 +02:00
"Case"
"Project"
2019-05-20 14:24:53 +02:00
"Commands"
2019-06-04 12:59:06 +02:00
"App"
2019-05-21 13:40:42 +02:00
"Properties"
2019-06-03 14:33:16 +02:00
"Grid"
2019-05-20 13:21:02 +02:00
)
2019-05-22 20:23:49 +02:00
set ( GRPC_PYTHON_SOURCE_PATH "${CMAKE_CURRENT_LIST_DIR}/Python" )
2019-05-20 13:21:02 +02:00
2019-08-21 15:29:25 +02:00
foreach ( proto_file ${ PROTO_FILES } )
2019-05-20 14:24:53 +02:00
get_filename_component ( rips_proto "${CMAKE_CURRENT_LIST_DIR}/GrpcProtos/${proto_file}.proto" ABSOLUTE )
get_filename_component ( rips_proto_path "${rips_proto}" PATH )
2019-05-20 15:28:07 +02:00
list ( APPEND GRPC_PROTO_FILES_FULL_PATH ${ rips_proto } )
2019-05-20 14:24:53 +02:00
set ( rips_proto_srcs "${CMAKE_BINARY_DIR}/Generated/${proto_file}.pb.cc" )
set ( rips_proto_hdrs "${CMAKE_BINARY_DIR}/Generated/${proto_file}.pb.h" )
set ( rips_grpc_srcs "${CMAKE_BINARY_DIR}/Generated/${proto_file}.grpc.pb.cc" )
set ( rips_grpc_hdrs "${CMAKE_BINARY_DIR}/Generated/${proto_file}.grpc.pb.h" )
add_custom_command (
OUTPUT "${rips_proto_srcs}" "${rips_proto_hdrs}" "${rips_grpc_srcs}" "${rips_grpc_hdrs}"
COMMAND ${ _PROTOBUF_PROTOC }
ARGS --grpc_out "${CMAKE_BINARY_DIR}/Generated"
--cpp_out "${CMAKE_BINARY_DIR}/Generated"
-I "${rips_proto_path}"
--plugin=protoc-gen-grpc= "${_GRPC_CPP_PLUGIN_EXECUTABLE}"
"${rips_proto}"
DEPENDS "${rips_proto}"
)
2019-08-12 08:51:56 +02:00
if ( RESINSIGHT_GRPC_PYTHON_EXECUTABLE )
if ( EXISTS ${ RESINSIGHT_GRPC_PYTHON_EXECUTABLE } )
2019-07-24 11:13:23 +02:00
set ( rips_proto_python "rips/generated/${proto_file}_pb2.py" )
set ( rips_grpc_python "rips/generated/${proto_file}_pb2_grpc.py" )
add_custom_command (
OUTPUT "${GRPC_PYTHON_SOURCE_PATH}/${rips_proto_python}" "${GRPC_PYTHON_SOURCE_PATH}/${rips_grpc_python}"
2019-08-12 08:51:56 +02:00
COMMAND ${ RESINSIGHT_GRPC_PYTHON_EXECUTABLE }
2019-07-24 11:13:23 +02:00
ARGS -m grpc_tools.protoc
-I "${rips_proto_path}"
--python_out "${GRPC_PYTHON_SOURCE_PATH}/rips/generated"
--grpc_python_out "${GRPC_PYTHON_SOURCE_PATH}/rips/generated"
"${rips_proto}"
DEPENDS "${rips_proto}"
COMMENT "Generating ${rips_proto_python} and ${rips_grpc_python}"
VERBATIM
)
list ( APPEND GRPC_PYTHON_GENERATED_SOURCES
${ rips_proto_python }
${ rips_grpc_python }
)
else ()
2019-08-12 08:51:56 +02:00
message ( STATUS "Error generating Python for ${rips_proto}: RESINSIGHT_GRPC_PYTHON_EXECUTABLE set but ${RESINSIGHT_GRPC_PYTHON_EXECUTABLE} not found" )
endif ( EXISTS ${ RESINSIGHT_GRPC_PYTHON_EXECUTABLE } )
2019-07-24 11:13:23 +02:00
else ()
2019-08-12 08:51:56 +02:00
message ( STATUS "RESINSIGHT_GRPC_PYTHON_EXECUTABLE not specified. Will not generate GRPC Python code." )
endif ( RESINSIGHT_GRPC_PYTHON_EXECUTABLE )
2019-05-20 14:24:53 +02:00
list ( APPEND GRPC_HEADER_FILES
${ rips_proto_hdrs }
${ rips_grpc_hdrs }
)
list ( APPEND GRPC_CPP_SOURCES
${ rips_proto_srcs }
${ rips_grpc_srcs }
)
2019-05-20 13:21:02 +02:00
endforeach ( proto_file )
2019-08-12 08:51:56 +02:00
if ( RESINSIGHT_GRPC_PYTHON_EXECUTABLE )
if ( EXISTS ${ RESINSIGHT_GRPC_PYTHON_EXECUTABLE } )
2019-08-22 12:52:09 +02:00
CONFIGURE_FILE ( ${ CMAKE_SOURCE_DIR } /ApplicationCode/Adm/RiaVersionInfo.py.cmake
${ GRPC_PYTHON_SOURCE_PATH } /rips/generated/RiaVersionInfo.py )
CONFIGURE_FILE ( ${ GRPC_PYTHON_SOURCE_PATH } /setup.py.cmake
${ GRPC_PYTHON_SOURCE_PATH } /setup.py )
2019-07-24 11:13:23 +02:00
list ( APPEND GRPC_PYTHON_SOURCES
"rips/generated/RiaVersionInfo.py"
"rips/__init__.py"
"rips/Case.py"
"rips/Commands.py"
"rips/Grid.py"
2019-07-29 12:55:02 +02:00
"rips/GridCaseGroup.py"
2019-07-24 11:13:23 +02:00
"rips/Project.py"
"rips/Properties.py"
"rips/Instance.py"
"rips/PdmObject.py"
"rips/View.py"
2019-08-15 08:07:43 +02:00
"rips/PythonExamples/InstanceExample.py"
"rips/PythonExamples/CommandExample.py"
"rips/PythonExamples/CaseGridGroup.py"
"rips/PythonExamples/CaseInfoStreamingExample.py"
2019-08-19 13:46:14 +02:00
"rips/PythonExamples/ExportSnapshots.py"
2019-08-15 08:07:43 +02:00
"rips/PythonExamples/ErrorHandling.py"
"rips/PythonExamples/SoilPorvAsync.py"
"rips/PythonExamples/SoilPorvSync.py"
"rips/PythonExamples/SelectedCases.py"
"rips/PythonExamples/AllCases.py"
"rips/PythonExamples/SetGridProperties.py"
"rips/PythonExamples/SetCellResult.py"
"rips/PythonExamples/SetFlowDiagnosticsResult.py"
"rips/PythonExamples/GridInformation.py"
"rips/PythonExamples/InputPropTestSync.py"
"rips/PythonExamples/InputPropTestAsync.py"
"rips/PythonExamples/SoilAverageAsync.py"
"rips/PythonExamples/SoilAverageSync.py"
2019-08-19 13:46:14 +02:00
"rips/PythonExamples/ViewExample.py"
2019-07-24 11:13:23 +02:00
"rips/tests/test_cases.py"
"rips/tests/test_commands.py"
"rips/tests/test_grids.py"
"rips/tests/test_properties.py"
"rips/tests/test_project.py"
"rips/tests/conftest.py"
"rips/tests/dataroot.py"
"requirements.txt"
2019-08-21 15:29:25 +02:00
"setup.py"
2019-07-24 11:13:23 +02:00
"README.md"
"LICENSE"
)
2019-08-23 15:25:26 +02:00
2019-08-22 13:32:25 +02:00
list ( APPEND GRPC_PYTHON_SOURCES ${ GRPC_PYTHON_GENERATED_SOURCES } )
foreach ( PYTHON_SCRIPT ${ GRPC_PYTHON_SOURCES } )
list ( APPEND GRPC_PYTHON_SOURCES_FULL_PATH "${GRPC_PYTHON_SOURCE_PATH}/${PYTHON_SCRIPT}" )
endforeach ()
2019-07-24 11:13:23 +02:00
if ( MSVC )
source_group ( TREE ${ GRPC_PYTHON_SOURCE_PATH } FILES ${ GRPC_PYTHON_SOURCES_FULL_PATH } PREFIX "GrpcInterface\\Python" )
endif ( MSVC )
else ()
2019-08-12 08:51:56 +02:00
message ( STATUS "Error copying GRPC Python Code to build folder: RESINSIGHT_GRPC_PYTHON_EXECUTABLE set but ${RESINSIGHT_GRPC_PYTHON_EXECUTABLE} not found" )
endif ( EXISTS ${ RESINSIGHT_GRPC_PYTHON_EXECUTABLE } )
2019-07-24 11:13:23 +02:00
else ()
2019-08-12 08:51:56 +02:00
message ( STATUS "RESINSIGHT_GRPC_PYTHON_EXECUTABLE not specified. Will not copy grpc Python code to build folder" )
endif ( RESINSIGHT_GRPC_PYTHON_EXECUTABLE )
2019-05-20 13:21:02 +02:00
list ( APPEND GRPC_HEADER_FILES ${ SOURCE_GROUP_HEADER_FILES } )
list ( APPEND GRPC_CPP_SOURCES ${ SOURCE_GROUP_SOURCE_FILES } )
source_group ( "GrpcInterface" FILES ${ SOURCE_GROUP_HEADER_FILES } ${ SOURCE_GROUP_SOURCE_FILES } ${ CMAKE_CURRENT_LIST_DIR } /CMakeLists.cmake )
2019-05-20 15:28:07 +02:00
source_group ( "GrpcInterface\\GrpcProtos" FILES ${ GRPC_PROTO_FILES_FULL_PATH } )