Skip to content

Commit 1875c33

Browse files
committed
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.
1 parent 6186455 commit 1875c33

File tree

12 files changed

+145
-40
lines changed

12 files changed

+145
-40
lines changed

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,11 @@ add_subdirectory(gr-zeromq)
407407
if(ENABLE_GR_CTRLPORT)
408408
set(GR_CTRLPORT True)
409409
add_definitions(-DGR_CTRLPORT)
410+
411+
if(THRIFT_FOUND)
412+
set(GR_RPCSERVER_ENABLED True)
413+
set(GR_RPCSERVER_THRIFT True)
414+
endif(THRIFT_FOUND)
410415
endif(ENABLE_GR_CTRLPORT)
411416

412417
# Install our Cmake modules into $prefix/lib/cmake/gnuradio

cmake/Modules/FindThrift.cmake

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
INCLUDE(FindPkgConfig)
2+
PKG_CHECK_MODULES(PC_THRIFT thrift>=0.9.2)
3+
4+
FIND_PATH(THRIFT_INCLUDE_DIRS
5+
NAMES thrift/Thrift.h
6+
HINTS ${PC_THRIFT_INCLUDE_DIR}
7+
${CMAKE_INSTALL_PREFIX}/include
8+
PATHS
9+
/usr/local/include
10+
/usr/include
11+
)
12+
13+
FIND_LIBRARY(THRIFT_LIBRARIES
14+
NAMES thrift
15+
HINTS ${PC_THRIFT_LIBDIR}
16+
${CMAKE_INSTALL_PREFIX}/lib
17+
${CMAKE_INSTALL_PREFIX}/lib64
18+
PATHS
19+
${THRIFT_INCLUDE_DIRS}/../lib
20+
/usr/local/lib
21+
/usr/lib
22+
)
23+
24+
if(THRIFT_INCLUDE_DIRS AND THRIFT_LIBRARIES)
25+
set(THRIFT_FOUND TRUE CACHE BOOL "If Thift has been found")
26+
endif(THRIFT_INCLUDE_DIRS AND THRIFT_LIBRARIES)
27+
28+
29+
# Get the thrift binary to build our files during cmake
30+
FIND_PROGRAM(THRIFT_BIN thrift)
31+
32+
# Check that Thrift for Python is available
33+
include(GrPython)
34+
GR_PYTHON_CHECK_MODULE("Thrift" thrift "1" PYTHON_THRIFT_FOUND)
35+
36+
if(NOT PYTHON_THRIFT_FOUND)
37+
unset(THRIFT_FOUND)
38+
endif(NOT PYTHON_THRIFT_FOUND)
39+
40+
INCLUDE(FindPackageHandleStandardArgs)
41+
FIND_PACKAGE_HANDLE_STANDARD_ARGS(THRIFT DEFAULT_MSG
42+
THRIFT_LIBRARIES THRIFT_INCLUDE_DIRS
43+
THRIFT_BIN PYTHON_THRIFT_FOUND THRIFT_FOUND
44+
)
45+
MARK_AS_ADVANCED(
46+
THRIFT_LIBRARIES THRIFT_INCLUDE_DIRS
47+
THRIFT_BIN PYTHON_THRIFT_FOUND THRIFT_FOUND
48+
)

config.h.in

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@
3030
#ifndef GR_CTRLPORT
3131
#cmakedefine GR_CTRLPORT
3232
#endif
33+
#ifndef GR_RPCSERVER_ENABLED
34+
#cmakedefine GR_RPCSERVER_ENABLED
35+
#endif
36+
#ifndef GR_RPCSERVER_THRIFT
37+
#cmakedefine GR_RPCSERVER_THRIFT
38+
#endif
3339
#ifndef ENABLE_GR_LOG
3440
#cmakedefine ENABLE_GR_LOG
3541
#endif

gnuradio-runtime/include/gnuradio/CMakeLists.txt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,21 @@ install(FILES
8080
rpcserver_base.h
8181
rpcserver_booter_aggregator.h
8282
rpcserver_booter_base.h
83-
rpcserver_booter_thrift.h
8483
rpcserver_selector.h
84+
${CMAKE_CURRENT_BINARY_DIR}/logger.h
85+
DESTINATION ${GR_INCLUDE_DIR}/gnuradio
86+
COMPONENT "runtime_devel"
87+
)
88+
89+
if(THRIFT_FOUND)
90+
install(FILES
91+
rpcserver_booter_thrift.h
8592
thrift_application_base.h
8693
thrift_server_template.h
87-
${CMAKE_CURRENT_BINARY_DIR}/logger.h
8894
DESTINATION ${GR_INCLUDE_DIR}/gnuradio
8995
COMPONENT "runtime_devel"
9096
)
97+
endif(THRIFT_FOUND)
9198

9299
##########################################################################
93100
# Configure logger

gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -672,7 +672,7 @@ struct rpcbasic_register_set : public rpcbasic_base
672672
d_minpriv = minpriv_;
673673
d_display = display_;
674674
d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get());
675-
#ifdef RPCSERVER_ENABLED
675+
#ifdef GR_RPCSERVER_ENABLED
676676
callbackregister_base::configureCallback_t
677677
extractor(new rpcbasic_extractor<T,Tto>(d_object, function),
678678
minpriv_, std::string(units_),
@@ -726,7 +726,7 @@ struct rpcbasic_register_set : public rpcbasic_base
726726
d_minpriv = minpriv_;
727727
d_display = display_;
728728
d_object = obj;
729-
#ifdef RPCSERVER_ENABLED
729+
#ifdef GR_RPCSERVER_ENABLED
730730
callbackregister_base::configureCallback_t
731731
extractor(new rpcbasic_extractor<T,Tto>(d_object, function),
732732
minpriv_, std::string(units_),
@@ -741,7 +741,7 @@ struct rpcbasic_register_set : public rpcbasic_base
741741

742742
~rpcbasic_register_set()
743743
{
744-
#ifdef RPCSERVER_ENABLED
744+
#ifdef GR_RPCSERVER_ENABLED
745745
rpcmanager::get()->i()->unregisterConfigureCallback(d_id);
746746
#endif
747747
}
@@ -830,7 +830,7 @@ struct rpcbasic_register_trigger : public rpcbasic_base
830830
d_desc = desc_;
831831
d_minpriv = minpriv_;
832832
d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get());
833-
#ifdef RPCSERVER_ENABLED
833+
#ifdef GR_RPCSERVER_ENABLED
834834
callbackregister_base::configureCallback_t
835835
extractor(new rpcbasic_extractor<T,void>(d_object, function),
836836
minpriv_, std::string(desc_));
@@ -870,7 +870,7 @@ struct rpcbasic_register_trigger : public rpcbasic_base
870870
d_desc = desc_;
871871
d_minpriv = minpriv_;
872872
d_object = obj;
873-
#ifdef RPCSERVER_ENABLED
873+
#ifdef GR_RPCSERVER_ENABLED
874874
callbackregister_base::configureCallback_t
875875
extractor(new rpcbasic_extractor<T,void>(d_object, function),
876876
minpriv_, std::string(desc_));
@@ -884,7 +884,7 @@ struct rpcbasic_register_trigger : public rpcbasic_base
884884

885885
~rpcbasic_register_trigger()
886886
{
887-
#ifdef RPCSERVER_ENABLED
887+
#ifdef GR_RPCSERVER_ENABLED
888888
rpcmanager::get()->i()->unregisterConfigureCallback(d_id);
889889
#endif
890890
}
@@ -988,7 +988,7 @@ class rpcbasic_register_get : public rpcbasic_base
988988
d_minpriv = minpriv_;
989989
d_display = display_;
990990
d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get());
991-
#ifdef RPCSERVER_ENABLED
991+
#ifdef GR_RPCSERVER_ENABLED
992992
callbackregister_base::queryCallback_t
993993
inserter(new rpcbasic_inserter<T,Tfrom>(d_object, function),
994994
minpriv_, std::string(units_), display_, std::string(desc_), min, max, def);
@@ -1022,7 +1022,7 @@ class rpcbasic_register_get : public rpcbasic_base
10221022
d_minpriv = minpriv_;
10231023
d_display = display_;
10241024
d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get());
1025-
#ifdef RPCSERVER_ENABLED
1025+
#ifdef GR_RPCSERVER_ENABLED
10261026
callbackregister_base::queryCallback_t
10271027
inserter(new rpcbasic_inserter<T,Tfrom>(d_object, (Tfrom (T::*)())function),
10281028
minpriv_, std::string(units_), display_, std::string(desc_), min, max, def);
@@ -1076,7 +1076,7 @@ class rpcbasic_register_get : public rpcbasic_base
10761076
d_minpriv = minpriv_;
10771077
d_display = display_;
10781078
d_object = obj;
1079-
#ifdef RPCSERVER_ENABLED
1079+
#ifdef GR_RPCSERVER_ENABLED
10801080
callbackregister_base::queryCallback_t
10811081
inserter(new rpcbasic_inserter<T,Tfrom>(d_object, function),
10821082
minpriv_, std::string(units_), display_, std::string(desc_), min, max, def);
@@ -1111,7 +1111,7 @@ class rpcbasic_register_get : public rpcbasic_base
11111111
d_minpriv = minpriv_;
11121112
d_display = display_;
11131113
d_object = obj;
1114-
#ifdef RPCSERVER_ENABLED
1114+
#ifdef GR_RPCSERVER_ENABLED
11151115
callbackregister_base::queryCallback_t
11161116
inserter(new rpcbasic_inserter<T,Tfrom>(d_object, (Tfrom (T::*)())function),
11171117
minpriv_, std::string(units_), display_, std::string(desc_), min, max, def);
@@ -1125,7 +1125,7 @@ class rpcbasic_register_get : public rpcbasic_base
11251125

11261126
~rpcbasic_register_get()
11271127
{
1128-
#ifdef RPCSERVER_ENABLED
1128+
#ifdef GR_RPCSERVER_ENABLED
11291129
rpcmanager::get()->i()->unregisterQueryCallback(d_id);
11301130
#endif
11311131
}

gnuradio-runtime/include/gnuradio/rpcserver_selector.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@
2323
#ifndef RPCSERVER_SELECTOR
2424
#define RPCSERVER_SELECTOR
2525

26-
#define RPCSERVER_ENABLED
26+
#include <gnuradio/config.h>
2727

28-
//#define RPCSERVER_ICE
29-
#define RPCSERVER_THRIFT
30-
//#define RPCSERVER_ERLANG
31-
//#define RPCSERVER_XMLRPC
28+
//#define GR_RPCSERVER_ENABLED
29+
//#define GR_RPCSERVER_ICE
30+
//#define GR_RPCSERVER_THRIFT
31+
//#define GR_RPCSERVER_ERLANG
32+
//#define GR_RPCSERVER_XMLRPC
3233

3334
#endif

gnuradio-runtime/lib/controlport/CMakeLists.txt

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,29 @@ list(APPEND gnuradio_ctrlport_sources
3131
${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_selector.cc
3232
)
3333

34-
# FIXME: create actual cmake test to find and enable Thrift
35-
set(ENABLE_THRIFT "True")
3634

37-
if(ENABLE_THRIFT)
35+
OPTION(ENABLE_CTRLPORT_THRIFT "Enable ControlPort Thrift support" ON)
36+
37+
if(ENABLE_CTRLPORT_THRIFT)
38+
39+
# Look if Thrift is installed and use it as a ControlPort backend.
40+
FIND_PACKAGE(Thrift)
41+
42+
if(THRIFT_FOUND)
43+
44+
# Indicate thrift as an installed backend in the cmake summary.
45+
message(STATUS "Found and enabling Thrift backend to ControlPort")
46+
GR_APPEND_SUBCOMPONENT("thrift")
47+
48+
# Run Thrrift To compile C++ and Python files
49+
message(STATUS "Running thrift to build C++ bindings")
50+
EXECUTE_PROCESS(
51+
COMMAND ${THRIFT_BIN} --gen cpp -out ${CMAKE_CURRENT_BINARY_DIR}/ ${CMAKE_CURRENT_SOURCE_DIR}/thrift/gnuradio.thrift
52+
OUTPUT_VARIABLE THRIFT_CPP_OUTPUT
53+
ERROR_VARIABLE THRIFT_CPP_ERROR
54+
)
55+
56+
3857
list(APPEND gnuradio_ctrlport_sources
3958
${CMAKE_CURRENT_SOURCE_DIR}/thrift/rpcserver_thrift.cc
4059
${CMAKE_CURRENT_SOURCE_DIR}/thrift/rpcpmtconverters_thrift.cc
@@ -43,24 +62,24 @@ list(APPEND gnuradio_ctrlport_sources
4362
)
4463

4564
# add files built by compiling gnuradio.thrift
46-
# FIXME: Add cmake execute_process to do this for cpp and py
4765
list(APPEND gnuradio_ctrlport_sources
4866
${CMAKE_CURRENT_BINARY_DIR}/gnuradio_types.cpp
4967
${CMAKE_CURRENT_BINARY_DIR}/gnuradio_constants.cpp
5068
${CMAKE_CURRENT_BINARY_DIR}/ControlPort.cpp
5169
)
5270

53-
endif(ENABLE_THRIFT)
71+
# Add required libraries here
72+
list(APPEND gnuradio_runtime_libs
73+
${THRIFT_LIBRARIES}
74+
)
75+
76+
endif(THRIFT_FOUND)
77+
endif(ENABLE_CTRLPORT_THRIFT)
5478

5579
########################################################################
5680
# Add controlport stuff to gnuradio-runtime
5781
########################################################################
5882

5983
include_directories(${CMAKE_CURRENT_BINARY_DIR})
6084

61-
# Add any required libraries here
62-
list(APPEND gnuradio_runtime_libs
63-
thrift
64-
)
65-
6685
endif(ENABLE_GR_CTRLPORT)

gnuradio-runtime/lib/controlport/rpcserver_selector.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,19 @@
2626

2727
bool rpcmanager::make_aggregator(false);
2828

29-
#ifdef RPCSERVER_ICE
29+
#ifdef GR_RPCSERVER_ICE
3030
#error TODO ICE
3131
#endif
3232

33-
#ifdef RPCSERVER_THRIFT
33+
#ifdef GR_RPCSERVER_THRIFT
3434
#include <gnuradio/rpcserver_booter_thrift.h>
3535
rpcmanager::rpcserver_booter_register_helper<rpcserver_booter_thrift> boot_thrift;
3636
#endif
3737

38-
#ifdef RPCSERVER_ERLANG
38+
#ifdef GR_RPCSERVER_ERLANG
3939
#error TODO ERLANG
4040
#endif
4141

42-
#ifdef RPCSERVER_XMLRPC
42+
#ifdef GR_RPCSERVER_XMLRPC
4343
#error TODO XMLRPC
4444
#endif

gnuradio-runtime/lib/controlport/thrift/rpcserver_thrift.cc

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ void
4949
rpcserver_thrift::registerConfigureCallback(const std::string &id, const configureCallback_t callback)
5050
{
5151
{
52-
std::cerr << "thrift::registerConfigureCallback: " << id << std::endl;
5352
ConfigureCallbackMap_t::const_iterator iter(d_setcallbackmap.find(id));
5453
if(iter != d_setcallbackmap.end()) {
5554
std::stringstream s;
@@ -68,7 +67,6 @@ rpcserver_thrift::registerConfigureCallback(const std::string &id, const configu
6867
void
6968
rpcserver_thrift::unregisterConfigureCallback(const std::string &id)
7069
{
71-
//std::cerr << "thrift::unregisterConfigureCallback: " << id << std::endl;
7270
ConfigureCallbackMap_t::iterator iter(d_setcallbackmap.find(id));
7371
if(iter == d_setcallbackmap.end()) {
7472
std::stringstream s;
@@ -88,7 +86,6 @@ rpcserver_thrift::registerQueryCallback(const std::string &id,
8886
const queryCallback_t callback)
8987
{
9088
{
91-
std::cerr << "thrift::registerQueryCallback: " << id << std::endl;
9289
QueryCallbackMap_t::const_iterator iter(d_getcallbackmap.find(id));
9390
if(iter != d_getcallbackmap.end()) {
9491
std::stringstream s;
@@ -107,7 +104,6 @@ rpcserver_thrift::registerQueryCallback(const std::string &id,
107104
void
108105
rpcserver_thrift::unregisterQueryCallback(const std::string &id)
109106
{
110-
//std::cerr << "thrift::unregisterQueryCallback: " << id << std::endl;
111107
QueryCallbackMap_t::iterator iter(d_getcallbackmap.find(id));
112108
if(iter == d_getcallbackmap.end()) {
113109
std::stringstream s;

gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@
2020
########################################################################
2121
include(GrPython)
2222

23+
if(THRIFT_FOUND)
24+
25+
EXECUTE_PROCESS(
26+
COMMAND ${THRIFT_BIN} --gen py -out ${CMAKE_CURRENT_BINARY_DIR}/ ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/controlport/thrift/gnuradio.thrift
27+
OUTPUT_VARIABLE THRIFT_PY_OUTPUT
28+
ERROR_VARIABLE THRIFT_PY_ERROR
29+
)
30+
31+
endif(THRIFT_FOUND)
32+
2333
install(
2434
FILES
2535
${CMAKE_CURRENT_SOURCE_DIR}/icon.png
@@ -44,3 +54,17 @@ GR_PYTHON_INSTALL(
4454
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
4555
COMPONENT "runtime_python"
4656
)
57+
58+
# Install the files compiled from gnuradio.thrift
59+
GR_PYTHON_INSTALL(
60+
FILES
61+
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/__init__.py
62+
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/constants.py
63+
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/ControlPort.py
64+
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/ControlPort-remote
65+
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/StreamReceiver.py
66+
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/StreamReceiver-remote
67+
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/ttypes.py
68+
DESTINATION ${GR_PYTHON_DIR}/gnuradio/ctrlport/GNURadio
69+
COMPONENT "runtime_python"
70+
)

gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323
from gnuradio import gr
2424
from gnuradio import blocks
2525
from gnuradio import filter
26-
#from gnuradio.ctrlport import GNURadio
27-
from gnuradio.ControlPort import GNURadio
26+
from gnuradio.ctrlport import GNURadio
2827
import sys, time, struct
2928

3029
try:

gnuradio-runtime/python/gnuradio/ctrlport/ThriftRadioClient.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python
22
#
3-
# Copyright 2012 Free Software Foundation, Inc.
3+
# Copyright 2015 Free Software Foundation, Inc.
44
#
55
# This file is part of GNU Radio
66
#
@@ -25,7 +25,7 @@
2525
from thrift.transport import TTransport
2626
from thrift.protocol import TBinaryProtocol
2727
#from ControlPort.GNURadio import ControlPort
28-
from gnuradio.ControlPort.GNURadio import ControlPort
28+
from gnuradio.ctrlport.GNURadio import ControlPort
2929
import sys
3030

3131
class ThriftRadioClient:

0 commit comments

Comments
 (0)