summaryrefslogtreecommitdiff
path: root/gnuradio-runtime
diff options
context:
space:
mode:
authorTom Rondeau <tom@trondeau.com>2015-02-20 17:14:03 -0500
committerTom Rondeau <tom@trondeau.com>2015-04-02 15:38:56 -0700
commit1875c3381bc4e2d2468f9dfe44557cd2a94d5e1c (patch)
treea1bb1f3374735d59abf94fa877b8521d15613591 /gnuradio-runtime
parent61864555b687d918b1bd4772fa12c83a29e78abf (diff)
controlport: Addes a FindThrift cmake module to find the Thrift headers, libraries, and Python files.
Also adds a ENABLE_CTRLPORT_THRIFT option to cmake so we can turn off Thrift even if it's found installed on the system. We will do this for any backend to provide maximum control over what is used and not used. This changes how the RPC selector mechanism works; we now set the available RPCs in the config.h file instead of just by hand in the rpcserver_selector.h code. Finally, cmake displays the backend as a submodule of gr-ctrlport when summarizing what is being built for GNU Radio so we know which backends are or are not being used.
Diffstat (limited to 'gnuradio-runtime')
-rw-r--r--gnuradio-runtime/include/gnuradio/CMakeLists.txt11
-rw-r--r--gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h22
-rw-r--r--gnuradio-runtime/include/gnuradio/rpcserver_selector.h11
-rw-r--r--gnuradio-runtime/lib/controlport/CMakeLists.txt39
-rw-r--r--gnuradio-runtime/lib/controlport/rpcserver_selector.cc8
-rw-r--r--gnuradio-runtime/lib/controlport/thrift/rpcserver_thrift.cc4
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt24
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py3
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/ThriftRadioClient.py4
9 files changed, 86 insertions, 40 deletions
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: