2019-05-20 08:17:04 -05:00
cmake_minimum_required ( VERSION 2.8.12 )
2019-05-20 06:21:02 -05:00
set ( SOURCE_GROUP_HEADER_FILES
2019-05-20 07:24:53 -05:00
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c S e r v e r . h
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c C a l l b a c k s . h
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c C a l l b a c k s . i n l
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c S e r v i c e I n t e r f a c e . h
2019-06-03 07:33:16 -05:00
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c C a s e S e r v i c e . h
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c G r i d S e r v i c e . h
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c P r o j e c t S e r v i c e . h
2019-05-20 07:24:53 -05:00
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c C o m m a n d S e r v i c e . h
2019-06-04 05:59:06 -05:00
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c A p p S e r v i c e . h
2019-05-21 06:40:42 -05:00
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c P r o p e r t i e s S e r v i c e . h
2019-06-10 13:42:20 -05:00
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c P d m O b j e c t S e r v i c e . h
2019-05-20 06:21:02 -05:00
)
set ( SOURCE_GROUP_SOURCE_FILES
2019-05-20 07:24:53 -05:00
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c S e r v e r . c p p
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c S e r v i c e I n t e r f a c e . c p p
2019-06-03 07:33:16 -05:00
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c C a s e S e r v i c e . c p p
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c G r i d S e r v i c e . c p p
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c P r o j e c t S e r v i c e . c p p
2019-05-20 07:24:53 -05:00
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c C o m m a n d S e r v i c e . c p p
2019-06-04 05:59:06 -05:00
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c A p p S e r v i c e . c p p
2019-05-21 06:40:42 -05:00
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c P r o p e r t i e s S e r v i c e . c p p
2019-06-10 13:42:20 -05:00
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / R i a G r p c P d m O b j e c t S e r v i c e . c p p
2019-05-20 06:21:02 -05:00
)
add_definitions ( -DENABLE_GRPC )
if ( MSVC )
2019-05-20 07:24:53 -05: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 03:34:31 -05: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 07:24:53 -05: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 04:33:03 -05:00
set_target_properties ( ${ GRPC_LIBRARIES } PROPERTIES
M A P _ I M P O R T E D _ C O N F I G _ M I N S I Z E R E L R E L E A S E
M A P _ I M P O R T E D _ C O N F I G _ R E L W I T H D E B I N F O R E L E A S E
2019-05-20 07:24:53 -05:00
)
2019-05-29 04:33:03 -05:00
2019-05-20 06:21:02 -05:00
else ( )
2019-08-12 02:08:27 -05: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 07:24:53 -05:00
endif ( )
2019-08-12 02:08:27 -05:00
set ( ENV{PKG_CONFIG_PATH} "${RESINSIGHT_GRPC_INSTALL_PREFIX}/lib/pkgconfig" )
2019-05-20 07:24:53 -05:00
find_package ( PkgConfig REQUIRED )
pkg_check_modules ( GRPC REQUIRED grpc++_unsecure>=1.20 grpc_unsecure gpr protobuf )
2019-08-12 02:08:27 -05: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 07:24:53 -05:00
include_directories ( AFTER ${ GRPC_INCLUDE_DIRS } )
2019-05-20 06:21:02 -05:00
endif ( )
# Cannot use the nice new FindPackage modules for python since that is CMake 3.12+
2019-08-12 01:51:56 -05: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 06:21:02 -05:00
# Proto files
set ( PROTO_FILES
2019-08-13 06:15:58 -05:00
" D e f i n i t i o n s "
2019-06-10 13:42:20 -05:00
" P d m O b j e c t "
2019-06-03 07:33:16 -05:00
" C a s e "
" P r o j e c t "
2019-05-20 07:24:53 -05:00
" C o m m a n d s "
2019-06-04 05:59:06 -05:00
" A p p "
2019-05-21 06:40:42 -05:00
" P r o p e r t i e s "
2019-06-03 07:33:16 -05:00
" G r i d "
2019-05-20 06:21:02 -05:00
)
2019-05-22 13:23:49 -05:00
set ( GRPC_PYTHON_SOURCE_PATH "${CMAKE_CURRENT_LIST_DIR}/Python" )
2019-05-20 06:21:02 -05:00
set ( GRPC_PYTHON_DEST_PATH "${CMAKE_BINARY_DIR}/Python" )
foreach ( proto_file ${ PROTO_FILES } )
2019-05-20 07:24:53 -05: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 08:28:07 -05:00
list ( APPEND GRPC_PROTO_FILES_FULL_PATH ${ rips_proto } )
2019-05-20 07:24:53 -05: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 (
O U T P U T " $ { r i p s _ p r o t o _ s r c s } " " $ { r i p s _ p r o t o _ h d r s } " " $ { r i p s _ g r p c _ s r c s } " " $ { r i p s _ g r p c _ h d r s } "
C O M M A N D $ { _ P R O T O B U F _ P R O T O C }
A R G S - - g r p c _ o u t " $ { C M A K E _ B I N A R Y _ D I R } / G e n e r a t e d "
- - c p p _ o u t " $ { C M A K E _ B I N A R Y _ D I R } / G e n e r a t e d "
- I " $ { r i p s _ p r o t o _ p a t h } "
- - p l u g i n = p r o t o c - g e n - g r p c = " $ { _ G R P C _ C P P _ P L U G I N _ E X E C U T A B L E } "
" $ { r i p s _ p r o t o } "
D E P E N D S " $ { r i p s _ p r o t o } "
)
2019-08-12 01:51:56 -05:00
if ( RESINSIGHT_GRPC_PYTHON_EXECUTABLE )
if ( EXISTS ${ RESINSIGHT_GRPC_PYTHON_EXECUTABLE } )
2019-07-24 04:13:23 -05: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 (
O U T P U T " $ { G R P C _ P Y T H O N _ S O U R C E _ P A T H } / $ { r i p s _ p r o t o _ p y t h o n } " " $ { G R P C _ P Y T H O N _ S O U R C E _ P A T H } / $ { r i p s _ g r p c _ p y t h o n } "
2019-08-12 01:51:56 -05:00
C O M M A N D $ { R E S I N S I G H T _ G R P C _ P Y T H O N _ E X E C U T A B L E }
2019-07-24 04:13:23 -05:00
A R G S - m g r p c _ t o o l s . p r o t o c
- I " $ { r i p s _ p r o t o _ p a t h } "
- - p y t h o n _ o u t " $ { G R P C _ P Y T H O N _ S O U R C E _ P A T H } / r i p s / g e n e r a t e d "
- - g r p c _ p y t h o n _ o u t " $ { G R P C _ P Y T H O N _ S O U R C E _ P A T H } / r i p s / g e n e r a t e d "
" $ { r i p s _ p r o t o } "
D E P E N D S " $ { r i p s _ p r o t o } "
C O M M E N T " G e n e r a t i n g $ { r i p s _ p r o t o _ p y t h o n } a n d $ { r i p s _ g r p c _ p y t h o n } "
V E R B A T I M
)
list ( APPEND GRPC_PYTHON_GENERATED_SOURCES
$ { r i p s _ p r o t o _ p y t h o n }
$ { r i p s _ g r p c _ p y t h o n }
)
else ( )
2019-08-12 01:51:56 -05: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 04:13:23 -05:00
else ( )
2019-08-12 01:51:56 -05:00
message ( STATUS "RESINSIGHT_GRPC_PYTHON_EXECUTABLE not specified. Will not generate GRPC Python code." )
endif ( RESINSIGHT_GRPC_PYTHON_EXECUTABLE )
2019-05-20 07:24:53 -05:00
list ( APPEND GRPC_HEADER_FILES
$ { r i p s _ p r o t o _ h d r s }
$ { r i p s _ g r p c _ h d r s }
)
list ( APPEND GRPC_CPP_SOURCES
$ { r i p s _ p r o t o _ s r c s }
$ { r i p s _ g r p c _ s r c s }
)
2019-05-20 06:21:02 -05:00
endforeach ( proto_file )
2019-08-12 01:51:56 -05:00
if ( RESINSIGHT_GRPC_PYTHON_EXECUTABLE )
if ( EXISTS ${ RESINSIGHT_GRPC_PYTHON_EXECUTABLE } )
2019-07-24 04:13:23 -05:00
list ( APPEND GRPC_PYTHON_SOURCES
$ { G R P C _ P Y T H O N _ G E N E R A T E D _ S O U R C E S }
" r i p s / g e n e r a t e d / R i a V e r s i o n I n f o . p y "
" r i p s / _ _ i n i t _ _ . p y "
" r i p s / A p p . p y "
" r i p s / C a s e . p y "
" r i p s / C o m m a n d s . p y "
" r i p s / G r i d . p y "
2019-07-29 05:55:02 -05:00
" r i p s / G r i d C a s e G r o u p . p y "
2019-07-24 04:13:23 -05:00
" r i p s / P r o j e c t . p y "
" r i p s / P r o p e r t i e s . p y "
" r i p s / I n s t a n c e . p y "
" r i p s / P d m O b j e c t . p y "
" r i p s / V i e w . p y "
2019-08-15 01:07:43 -05:00
" r i p s / P y t h o n E x a m p l e s / I n s t a n c e E x a m p l e . p y "
" r i p s / P y t h o n E x a m p l e s / C o m m a n d E x a m p l e . p y "
" r i p s / P y t h o n E x a m p l e s / C a s e G r i d G r o u p . p y "
" r i p s / P y t h o n E x a m p l e s / C a s e I n f o S t r e a m i n g E x a m p l e . p y "
2019-08-19 06:46:14 -05:00
" r i p s / P y t h o n E x a m p l e s / E x p o r t S n a p s h o t s . p y "
2019-08-15 01:07:43 -05:00
" r i p s / P y t h o n E x a m p l e s / E r r o r H a n d l i n g . p y "
" r i p s / P y t h o n E x a m p l e s / S o i l P o r v A s y n c . p y "
" r i p s / P y t h o n E x a m p l e s / S o i l P o r v S y n c . p y "
" r i p s / P y t h o n E x a m p l e s / S e l e c t e d C a s e s . p y "
" r i p s / P y t h o n E x a m p l e s / A l l C a s e s . p y "
" r i p s / P y t h o n E x a m p l e s / S e t G r i d P r o p e r t i e s . p y "
" r i p s / P y t h o n E x a m p l e s / S e t C e l l R e s u l t . p y "
" r i p s / P y t h o n E x a m p l e s / S e t F l o w D i a g n o s t i c s R e s u l t . p y "
" r i p s / P y t h o n E x a m p l e s / G r i d I n f o r m a t i o n . p y "
" r i p s / P y t h o n E x a m p l e s / I n p u t P r o p T e s t S y n c . p y "
" r i p s / P y t h o n E x a m p l e s / I n p u t P r o p T e s t A s y n c . p y "
" r i p s / P y t h o n E x a m p l e s / S o i l A v e r a g e A s y n c . p y "
" r i p s / P y t h o n E x a m p l e s / S o i l A v e r a g e S y n c . p y "
2019-08-19 06:46:14 -05:00
" r i p s / P y t h o n E x a m p l e s / V i e w E x a m p l e . p y "
2019-07-24 04:13:23 -05:00
" r i p s / t e s t s / t e s t _ c a s e s . p y "
" r i p s / t e s t s / t e s t _ c o m m a n d s . p y "
" r i p s / t e s t s / t e s t _ g r i d s . p y "
" r i p s / t e s t s / t e s t _ p r o p e r t i e s . p y "
" r i p s / t e s t s / t e s t _ p r o j e c t . p y "
" r i p s / t e s t s / c o n f t e s t . p y "
" r i p s / t e s t s / d a t a r o o t . p y "
" r e q u i r e m e n t s . t x t "
" s e t u p . p y . c m a k e "
" R E A D M E . m d "
" L I C E N S E "
)
foreach ( PYTHON_SCRIPT ${ GRPC_PYTHON_SOURCES } )
list ( APPEND GRPC_PYTHON_SOURCES_FULL_PATH "${GRPC_PYTHON_SOURCE_PATH}/${PYTHON_SCRIPT}" )
endforeach ( )
if ( MSVC )
source_group ( TREE ${ GRPC_PYTHON_SOURCE_PATH } FILES ${ GRPC_PYTHON_SOURCES_FULL_PATH } PREFIX "GrpcInterface\\Python" )
endif ( MSVC )
else ( )
2019-08-12 01:51:56 -05: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 04:13:23 -05:00
else ( )
2019-08-12 01:51:56 -05: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 06:21:02 -05:00
list ( APPEND GRPC_HEADER_FILES ${ SOURCE_GROUP_HEADER_FILES } )
list ( APPEND GRPC_CPP_SOURCES ${ SOURCE_GROUP_SOURCE_FILES } )
2019-05-22 13:23:49 -05:00
CONFIGURE_FILE ( ${ CMAKE_SOURCE_DIR } /ApplicationCode/Adm/RiaVersionInfo.py.cmake
2019-06-12 01:29:41 -05:00
$ { G R P C _ P Y T H O N _ S O U R C E _ P A T H } / r i p s / g e n e r a t e d / R i a V e r s i o n I n f o . p y
2019-05-22 13:23:49 -05:00
)
2019-06-03 07:33:16 -05:00
CONFIGURE_FILE ( ${ GRPC_PYTHON_SOURCE_PATH } /setup.py.cmake
$ { G R P C _ P Y T H O N _ S O U R C E _ P A T H } / s e t u p . p y
)
2019-05-22 13:23:49 -05:00
2019-05-20 06:21:02 -05:00
source_group ( "GrpcInterface" FILES ${ SOURCE_GROUP_HEADER_FILES } ${ SOURCE_GROUP_SOURCE_FILES } ${ CMAKE_CURRENT_LIST_DIR } /CMakeLists.cmake )
2019-05-20 08:28:07 -05:00
source_group ( "GrpcInterface\\GrpcProtos" FILES ${ GRPC_PROTO_FILES_FULL_PATH } )