diff options
-rw-r--r-- | CMakeLists.txt | 5 | ||||
-rw-r--r-- | cmake/Modules/FindThrift.cmake | 48 | ||||
-rw-r--r-- | config.h.in | 6 | ||||
-rw-r--r-- | gnuradio-runtime/include/gnuradio/CMakeLists.txt | 11 | ||||
-rw-r--r-- | gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h | 22 | ||||
-rw-r--r-- | gnuradio-runtime/include/gnuradio/rpcserver_selector.h | 11 | ||||
-rw-r--r-- | gnuradio-runtime/lib/controlport/CMakeLists.txt | 39 | ||||
-rw-r--r-- | gnuradio-runtime/lib/controlport/rpcserver_selector.cc | 8 | ||||
-rw-r--r-- | gnuradio-runtime/lib/controlport/thrift/rpcserver_thrift.cc | 4 | ||||
-rw-r--r-- | gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt | 24 | ||||
-rw-r--r-- | gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py | 3 | ||||
-rw-r--r-- | gnuradio-runtime/python/gnuradio/ctrlport/ThriftRadioClient.py | 4 |
12 files changed, 145 insertions, 40 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d0a5000d5..bfc0accba3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -407,6 +407,11 @@ add_subdirectory(gr-zeromq) if(ENABLE_GR_CTRLPORT) set(GR_CTRLPORT True) add_definitions(-DGR_CTRLPORT) + + if(THRIFT_FOUND) + set(GR_RPCSERVER_ENABLED True) + set(GR_RPCSERVER_THRIFT True) + endif(THRIFT_FOUND) endif(ENABLE_GR_CTRLPORT) # Install our Cmake modules into $prefix/lib/cmake/gnuradio diff --git a/cmake/Modules/FindThrift.cmake b/cmake/Modules/FindThrift.cmake new file mode 100644 index 0000000000..017e941eeb --- /dev/null +++ b/cmake/Modules/FindThrift.cmake @@ -0,0 +1,48 @@ +INCLUDE(FindPkgConfig) +PKG_CHECK_MODULES(PC_THRIFT thrift>=0.9.2) + +FIND_PATH(THRIFT_INCLUDE_DIRS + NAMES thrift/Thrift.h + HINTS ${PC_THRIFT_INCLUDE_DIR} + ${CMAKE_INSTALL_PREFIX}/include + PATHS + /usr/local/include + /usr/include +) + +FIND_LIBRARY(THRIFT_LIBRARIES + NAMES thrift + HINTS ${PC_THRIFT_LIBDIR} + ${CMAKE_INSTALL_PREFIX}/lib + ${CMAKE_INSTALL_PREFIX}/lib64 + PATHS + ${THRIFT_INCLUDE_DIRS}/../lib + /usr/local/lib + /usr/lib +) + +if(THRIFT_INCLUDE_DIRS AND THRIFT_LIBRARIES) + set(THRIFT_FOUND TRUE CACHE BOOL "If Thift has been found") +endif(THRIFT_INCLUDE_DIRS AND THRIFT_LIBRARIES) + + +# Get the thrift binary to build our files during cmake +FIND_PROGRAM(THRIFT_BIN thrift) + +# Check that Thrift for Python is available +include(GrPython) +GR_PYTHON_CHECK_MODULE("Thrift" thrift "1" PYTHON_THRIFT_FOUND) + +if(NOT PYTHON_THRIFT_FOUND) + unset(THRIFT_FOUND) +endif(NOT PYTHON_THRIFT_FOUND) + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(THRIFT DEFAULT_MSG + THRIFT_LIBRARIES THRIFT_INCLUDE_DIRS + THRIFT_BIN PYTHON_THRIFT_FOUND THRIFT_FOUND +) +MARK_AS_ADVANCED( + THRIFT_LIBRARIES THRIFT_INCLUDE_DIRS + THRIFT_BIN PYTHON_THRIFT_FOUND THRIFT_FOUND +) diff --git a/config.h.in b/config.h.in index 82751a3cf7..ad6e3d022c 100644 --- a/config.h.in +++ b/config.h.in @@ -30,6 +30,12 @@ #ifndef GR_CTRLPORT #cmakedefine GR_CTRLPORT #endif +#ifndef GR_RPCSERVER_ENABLED +#cmakedefine GR_RPCSERVER_ENABLED +#endif +#ifndef GR_RPCSERVER_THRIFT +#cmakedefine GR_RPCSERVER_THRIFT +#endif #ifndef ENABLE_GR_LOG #cmakedefine ENABLE_GR_LOG #endif diff --git a/gnuradio-runtime/include/gnuradio/CMakeLists.txt b/gnuradio-runtime/include/gnuradio/CMakeLists.txt index 02b80ccb5c..472f91847b 100644 --- a/gnuradio-runtime/include/gnuradio/CMakeLists.txt +++ b/gnuradio-runtime/include/gnuradio/CMakeLists.txt @@ -80,14 +80,21 @@ install(FILES rpcserver_base.h rpcserver_booter_aggregator.h rpcserver_booter_base.h - rpcserver_booter_thrift.h rpcserver_selector.h + ${CMAKE_CURRENT_BINARY_DIR}/logger.h + DESTINATION ${GR_INCLUDE_DIR}/gnuradio + COMPONENT "runtime_devel" +) + +if(THRIFT_FOUND) +install(FILES + rpcserver_booter_thrift.h thrift_application_base.h thrift_server_template.h - ${CMAKE_CURRENT_BINARY_DIR}/logger.h DESTINATION ${GR_INCLUDE_DIR}/gnuradio COMPONENT "runtime_devel" ) +endif(THRIFT_FOUND) ########################################################################## # Configure logger diff --git a/gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h b/gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h index 0999dea747..f82f5ed0aa 100644 --- a/gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h +++ b/gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h @@ -672,7 +672,7 @@ struct rpcbasic_register_set : public rpcbasic_base d_minpriv = minpriv_; d_display = display_; d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get()); -#ifdef RPCSERVER_ENABLED +#ifdef GR_RPCSERVER_ENABLED callbackregister_base::configureCallback_t extractor(new rpcbasic_extractor<T,Tto>(d_object, function), minpriv_, std::string(units_), @@ -726,7 +726,7 @@ struct rpcbasic_register_set : public rpcbasic_base d_minpriv = minpriv_; d_display = display_; d_object = obj; -#ifdef RPCSERVER_ENABLED +#ifdef GR_RPCSERVER_ENABLED callbackregister_base::configureCallback_t extractor(new rpcbasic_extractor<T,Tto>(d_object, function), minpriv_, std::string(units_), @@ -741,7 +741,7 @@ struct rpcbasic_register_set : public rpcbasic_base ~rpcbasic_register_set() { -#ifdef RPCSERVER_ENABLED +#ifdef GR_RPCSERVER_ENABLED rpcmanager::get()->i()->unregisterConfigureCallback(d_id); #endif } @@ -830,7 +830,7 @@ struct rpcbasic_register_trigger : public rpcbasic_base d_desc = desc_; d_minpriv = minpriv_; d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get()); -#ifdef RPCSERVER_ENABLED +#ifdef GR_RPCSERVER_ENABLED callbackregister_base::configureCallback_t extractor(new rpcbasic_extractor<T,void>(d_object, function), minpriv_, std::string(desc_)); @@ -870,7 +870,7 @@ struct rpcbasic_register_trigger : public rpcbasic_base d_desc = desc_; d_minpriv = minpriv_; d_object = obj; -#ifdef RPCSERVER_ENABLED +#ifdef GR_RPCSERVER_ENABLED callbackregister_base::configureCallback_t extractor(new rpcbasic_extractor<T,void>(d_object, function), minpriv_, std::string(desc_)); @@ -884,7 +884,7 @@ struct rpcbasic_register_trigger : public rpcbasic_base ~rpcbasic_register_trigger() { -#ifdef RPCSERVER_ENABLED +#ifdef GR_RPCSERVER_ENABLED rpcmanager::get()->i()->unregisterConfigureCallback(d_id); #endif } @@ -988,7 +988,7 @@ public: d_minpriv = minpriv_; d_display = display_; d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get()); -#ifdef RPCSERVER_ENABLED +#ifdef GR_RPCSERVER_ENABLED callbackregister_base::queryCallback_t inserter(new rpcbasic_inserter<T,Tfrom>(d_object, function), minpriv_, std::string(units_), display_, std::string(desc_), min, max, def); @@ -1022,7 +1022,7 @@ public: d_minpriv = minpriv_; d_display = display_; d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get()); -#ifdef RPCSERVER_ENABLED +#ifdef GR_RPCSERVER_ENABLED callbackregister_base::queryCallback_t inserter(new rpcbasic_inserter<T,Tfrom>(d_object, (Tfrom (T::*)())function), minpriv_, std::string(units_), display_, std::string(desc_), min, max, def); @@ -1076,7 +1076,7 @@ public: d_minpriv = minpriv_; d_display = display_; d_object = obj; -#ifdef RPCSERVER_ENABLED +#ifdef GR_RPCSERVER_ENABLED callbackregister_base::queryCallback_t inserter(new rpcbasic_inserter<T,Tfrom>(d_object, function), minpriv_, std::string(units_), display_, std::string(desc_), min, max, def); @@ -1111,7 +1111,7 @@ public: d_minpriv = minpriv_; d_display = display_; d_object = obj; -#ifdef RPCSERVER_ENABLED +#ifdef GR_RPCSERVER_ENABLED callbackregister_base::queryCallback_t inserter(new rpcbasic_inserter<T,Tfrom>(d_object, (Tfrom (T::*)())function), minpriv_, std::string(units_), display_, std::string(desc_), min, max, def); @@ -1125,7 +1125,7 @@ public: ~rpcbasic_register_get() { -#ifdef RPCSERVER_ENABLED +#ifdef GR_RPCSERVER_ENABLED rpcmanager::get()->i()->unregisterQueryCallback(d_id); #endif } diff --git a/gnuradio-runtime/include/gnuradio/rpcserver_selector.h b/gnuradio-runtime/include/gnuradio/rpcserver_selector.h index 1011911575..31ab6cea0b 100644 --- a/gnuradio-runtime/include/gnuradio/rpcserver_selector.h +++ b/gnuradio-runtime/include/gnuradio/rpcserver_selector.h @@ -23,11 +23,12 @@ #ifndef RPCSERVER_SELECTOR #define RPCSERVER_SELECTOR -#define RPCSERVER_ENABLED +#include <gnuradio/config.h> -//#define RPCSERVER_ICE -#define RPCSERVER_THRIFT -//#define RPCSERVER_ERLANG -//#define RPCSERVER_XMLRPC +//#define GR_RPCSERVER_ENABLED +//#define GR_RPCSERVER_ICE +//#define GR_RPCSERVER_THRIFT +//#define GR_RPCSERVER_ERLANG +//#define GR_RPCSERVER_XMLRPC #endif diff --git a/gnuradio-runtime/lib/controlport/CMakeLists.txt b/gnuradio-runtime/lib/controlport/CMakeLists.txt index 65d5ebf846..72d032121b 100644 --- a/gnuradio-runtime/lib/controlport/CMakeLists.txt +++ b/gnuradio-runtime/lib/controlport/CMakeLists.txt @@ -31,10 +31,29 @@ list(APPEND gnuradio_ctrlport_sources ${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_selector.cc ) -# FIXME: create actual cmake test to find and enable Thrift -set(ENABLE_THRIFT "True") -if(ENABLE_THRIFT) +OPTION(ENABLE_CTRLPORT_THRIFT "Enable ControlPort Thrift support" ON) + +if(ENABLE_CTRLPORT_THRIFT) + +# Look if Thrift is installed and use it as a ControlPort backend. +FIND_PACKAGE(Thrift) + +if(THRIFT_FOUND) + +# Indicate thrift as an installed backend in the cmake summary. +message(STATUS "Found and enabling Thrift backend to ControlPort") +GR_APPEND_SUBCOMPONENT("thrift") + +# Run Thrrift To compile C++ and Python files +message(STATUS "Running thrift to build C++ bindings") +EXECUTE_PROCESS( + COMMAND ${THRIFT_BIN} --gen cpp -out ${CMAKE_CURRENT_BINARY_DIR}/ ${CMAKE_CURRENT_SOURCE_DIR}/thrift/gnuradio.thrift + OUTPUT_VARIABLE THRIFT_CPP_OUTPUT + ERROR_VARIABLE THRIFT_CPP_ERROR + ) + + list(APPEND gnuradio_ctrlport_sources ${CMAKE_CURRENT_SOURCE_DIR}/thrift/rpcserver_thrift.cc ${CMAKE_CURRENT_SOURCE_DIR}/thrift/rpcpmtconverters_thrift.cc @@ -43,14 +62,19 @@ list(APPEND gnuradio_ctrlport_sources ) # add files built by compiling gnuradio.thrift -# FIXME: Add cmake execute_process to do this for cpp and py list(APPEND gnuradio_ctrlport_sources ${CMAKE_CURRENT_BINARY_DIR}/gnuradio_types.cpp ${CMAKE_CURRENT_BINARY_DIR}/gnuradio_constants.cpp ${CMAKE_CURRENT_BINARY_DIR}/ControlPort.cpp ) -endif(ENABLE_THRIFT) +# Add required libraries here +list(APPEND gnuradio_runtime_libs + ${THRIFT_LIBRARIES} +) + +endif(THRIFT_FOUND) +endif(ENABLE_CTRLPORT_THRIFT) ######################################################################## # Add controlport stuff to gnuradio-runtime @@ -58,9 +82,4 @@ endif(ENABLE_THRIFT) include_directories(${CMAKE_CURRENT_BINARY_DIR}) -# Add any required libraries here -list(APPEND gnuradio_runtime_libs - thrift -) - endif(ENABLE_GR_CTRLPORT) diff --git a/gnuradio-runtime/lib/controlport/rpcserver_selector.cc b/gnuradio-runtime/lib/controlport/rpcserver_selector.cc index 199610169f..57b42ca4b6 100644 --- a/gnuradio-runtime/lib/controlport/rpcserver_selector.cc +++ b/gnuradio-runtime/lib/controlport/rpcserver_selector.cc @@ -26,19 +26,19 @@ bool rpcmanager::make_aggregator(false); -#ifdef RPCSERVER_ICE +#ifdef GR_RPCSERVER_ICE #error TODO ICE #endif -#ifdef RPCSERVER_THRIFT +#ifdef GR_RPCSERVER_THRIFT #include <gnuradio/rpcserver_booter_thrift.h> rpcmanager::rpcserver_booter_register_helper<rpcserver_booter_thrift> boot_thrift; #endif -#ifdef RPCSERVER_ERLANG +#ifdef GR_RPCSERVER_ERLANG #error TODO ERLANG #endif -#ifdef RPCSERVER_XMLRPC +#ifdef GR_RPCSERVER_XMLRPC #error TODO XMLRPC #endif diff --git a/gnuradio-runtime/lib/controlport/thrift/rpcserver_thrift.cc b/gnuradio-runtime/lib/controlport/thrift/rpcserver_thrift.cc index 9839e036bf..5dbfb8d088 100644 --- a/gnuradio-runtime/lib/controlport/thrift/rpcserver_thrift.cc +++ b/gnuradio-runtime/lib/controlport/thrift/rpcserver_thrift.cc @@ -49,7 +49,6 @@ void rpcserver_thrift::registerConfigureCallback(const std::string &id, const configureCallback_t callback) { { - std::cerr << "thrift::registerConfigureCallback: " << id << std::endl; ConfigureCallbackMap_t::const_iterator iter(d_setcallbackmap.find(id)); if(iter != d_setcallbackmap.end()) { std::stringstream s; @@ -68,7 +67,6 @@ rpcserver_thrift::registerConfigureCallback(const std::string &id, const configu void rpcserver_thrift::unregisterConfigureCallback(const std::string &id) { - //std::cerr << "thrift::unregisterConfigureCallback: " << id << std::endl; ConfigureCallbackMap_t::iterator iter(d_setcallbackmap.find(id)); if(iter == d_setcallbackmap.end()) { std::stringstream s; @@ -88,7 +86,6 @@ rpcserver_thrift::registerQueryCallback(const std::string &id, const queryCallback_t callback) { { - std::cerr << "thrift::registerQueryCallback: " << id << std::endl; QueryCallbackMap_t::const_iterator iter(d_getcallbackmap.find(id)); if(iter != d_getcallbackmap.end()) { std::stringstream s; @@ -107,7 +104,6 @@ rpcserver_thrift::registerQueryCallback(const std::string &id, void rpcserver_thrift::unregisterQueryCallback(const std::string &id) { - //std::cerr << "thrift::unregisterQueryCallback: " << id << std::endl; QueryCallbackMap_t::iterator iter(d_getcallbackmap.find(id)); if(iter == d_getcallbackmap.end()) { std::stringstream s; diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt b/gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt index d208763a90..69a61076dc 100644 --- a/gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt +++ b/gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt @@ -20,6 +20,16 @@ ######################################################################## include(GrPython) +if(THRIFT_FOUND) + +EXECUTE_PROCESS( + COMMAND ${THRIFT_BIN} --gen py -out ${CMAKE_CURRENT_BINARY_DIR}/ ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/controlport/thrift/gnuradio.thrift + OUTPUT_VARIABLE THRIFT_PY_OUTPUT + ERROR_VARIABLE THRIFT_PY_ERROR + ) + +endif(THRIFT_FOUND) + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/icon.png @@ -44,3 +54,17 @@ GR_PYTHON_INSTALL( PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE COMPONENT "runtime_python" ) + +# Install the files compiled from gnuradio.thrift +GR_PYTHON_INSTALL( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/__init__.py + ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/constants.py + ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/ControlPort.py + ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/ControlPort-remote + ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/StreamReceiver.py + ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/StreamReceiver-remote + ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/ttypes.py + DESTINATION ${GR_PYTHON_DIR}/gnuradio/ctrlport/GNURadio + COMPONENT "runtime_python" +) diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py b/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py index 5d75197966..661705d613 100644 --- a/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py +++ b/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py @@ -23,8 +23,7 @@ from gnuradio import gr from gnuradio import blocks from gnuradio import filter -#from gnuradio.ctrlport import GNURadio -from gnuradio.ControlPort import GNURadio +from gnuradio.ctrlport import GNURadio import sys, time, struct try: diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/ThriftRadioClient.py b/gnuradio-runtime/python/gnuradio/ctrlport/ThriftRadioClient.py index 6e6faec4c8..eca49dca76 100644 --- a/gnuradio-runtime/python/gnuradio/ctrlport/ThriftRadioClient.py +++ b/gnuradio-runtime/python/gnuradio/ctrlport/ThriftRadioClient.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2012 Free Software Foundation, Inc. +# Copyright 2015 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,7 +25,7 @@ from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol #from ControlPort.GNURadio import ControlPort -from gnuradio.ControlPort.GNURadio import ControlPort +from gnuradio.ctrlport.GNURadio import ControlPort import sys class ThriftRadioClient: |