aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Williams <alex.williams@ni.com>2018-04-17 10:36:59 -0700
committerMartin Braun <martin.braun@ettus.com>2018-04-18 15:34:51 -0700
commit7dcd16f5a6980cb1183bf1a10812c952d92c4ddb (patch)
treed1eaa9bdca563fe1f17886d771e16ff65ed153c7
parente733e590c4b5aa3053af0681bef199d27e4b2d7a (diff)
downloaduhd-7dcd16f5a6980cb1183bf1a10812c952d92c4ddb.tar.gz
uhd-7dcd16f5a6980cb1183bf1a10812c952d92c4ddb.tar.bz2
uhd-7dcd16f5a6980cb1183bf1a10812c952d92c4ddb.zip
mpm: Use configurable components for build system
For a minimal build, default to off for components unless the MPM_DEVICE or the user requests it specifically.
-rw-r--r--mpm/CMakeLists.txt12
-rw-r--r--mpm/cmake/Modules/MPMComponent.cmake104
-rw-r--r--mpm/include/mpm/CMakeLists.txt5
-rw-r--r--mpm/lib/CMakeLists.txt4
-rw-r--r--mpm/lib/dboards/CMakeLists.txt4
-rw-r--r--mpm/python/CMakeLists.txt1
-rw-r--r--mpm/python/pyusrp_periphs.cpp12
7 files changed, 137 insertions, 5 deletions
diff --git a/mpm/CMakeLists.txt b/mpm/CMakeLists.txt
index b9afd70be..1270aa719 100644
--- a/mpm/CMakeLists.txt
+++ b/mpm/CMakeLists.txt
@@ -36,6 +36,8 @@ INCLUDE(MPMVersion)
########################################################################
# useful macros
########################################################################
+INCLUDE(MPMComponent) # enable components
+
MACRO(USRP_PERIPHS_APPEND_SOURCES)
SET(usrp_periphs_sources ${usrp_periphs_sources} PARENT_SCOPE)
LIST(APPEND usrp_periphs_sources ${ARGV})
@@ -134,6 +136,16 @@ if(mpm_device_check EQUAL -1)
Specify -DMPM_DEVICE=<device> on the command line or set MPM_DEVICE using a CMake GUI.")
endif()
+# Request required components for MPM_DEVICE
+IF(MPM_DEVICE STREQUAL "n3xx")
+ SET(ENABLE_MYKONOS ON)
+ SET(ENABLE_MAGNESIUM ON)
+ENDIF()
+
+MPM_REGISTER_COMPONENT("LibMPM" ENABLE_LIBMPM ON "Boost_FOUND" OFF ON)
+MPM_REGISTER_COMPONENT("Mykonos" ENABLE_MYKONOS ON "ENABLE_LIBMPM" OFF OFF)
+MPM_REGISTER_COMPONENT("Magnesium" ENABLE_MAGNESIUM ON "ENABLE_MYKONOS" OFF OFF)
+
ADD_SUBDIRECTORY(include)
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}/include
diff --git a/mpm/cmake/Modules/MPMComponent.cmake b/mpm/cmake/Modules/MPMComponent.cmake
new file mode 100644
index 000000000..fefcc5d65
--- /dev/null
+++ b/mpm/cmake/Modules/MPMComponent.cmake
@@ -0,0 +1,104 @@
+#
+# Copyright 2018 Ettus Research, a National Instruments Company
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+
+########################################################################
+SET(_mpm_enabled_components "" CACHE INTERNAL "" FORCE)
+SET(_mpm_disabled_components "" CACHE INTERNAL "" FORCE)
+
+########################################################################
+# Register a component into the system
+# - name the component string name ("FOO")
+# - var the global enable variable (ENABLE_FOO)
+# - enb the default enable setting (ON)
+# - deps a list of dependencies (DEPENDENCY_FOUND)
+# - dis the default disable setting (OFF)
+# - req fail if dependencies not met (unless specifically disabled)
+#
+# In parentheses are examples. If you specify those, we register a component
+# "FOO" which is enabled by calling CMake with -DENABLE_FOO=ON. It defaults to
+# ON, unless DEPENDENCY_FOUND is false, in which case it becomes false.
+########################################################################
+MACRO(MPM_REGISTER_COMPONENT name var enb deps dis req)
+ MESSAGE(STATUS "")
+ MESSAGE(STATUS "Configuring ${name} support...")
+ FOREACH(dep ${deps})
+ MESSAGE(STATUS " Dependency ${dep} = ${${dep}}")
+ ENDFOREACH(dep)
+
+ # If user specified option, store here. Note: If the user doesn't specify
+ # this option on the cmake command line, both user_enabled and
+ # user_disabled will be false!
+ IF("${${var}}" STREQUAL "OFF")
+ SET(user_disabled TRUE)
+ ELSE()
+ SET(user_disabled FALSE)
+ ENDIF("${${var}}" STREQUAL "OFF")
+ IF("${${var}}" STREQUAL "ON")
+ SET(user_enabled TRUE)
+ ELSE()
+ SET(user_enabled FALSE)
+ ENDIF("${${var}}" STREQUAL "ON")
+
+ # Override default if user set
+ IF(user_enabled OR user_disabled)
+ SET(option "${${var}}")
+ ELSE(user_enabled OR user_disabled)
+ SET(option ${req})
+ ENDIF()
+
+ # setup the dependent option for this component
+ INCLUDE(CMakeDependentOption)
+ CMAKE_DEPENDENT_OPTION(${var} "enable ${name} support" ${option} "${deps}" ${dis})
+
+ # There are two failure cases:
+ # 1) The user requested this component explicitly (-DENABLE_FOO=ON) but the
+ # requirements are not met.
+ # 2) The user did not explicitly turn off this component (-DENABLE_FOO=OFF)
+ # but it is flagged as required by ${req}
+ IF(NOT ${var} AND user_enabled) # Case 1)
+ MESSAGE(FATAL_ERROR "Dependencies for required component ${name} not met.")
+ ENDIF(NOT ${var} AND user_enabled)
+ IF(NOT ${var} AND ${req} AND NOT user_disabled) # Case 2)
+ MESSAGE(FATAL_ERROR "Dependencies for required component ${name} not met.")
+ ENDIF(NOT ${var} AND ${req} AND NOT user_disabled)
+
+ #append the component into one of the lists
+ IF(${var})
+ MESSAGE(STATUS " Enabling ${name} support.")
+ LIST(APPEND _mpm_enabled_components ${name})
+ ELSE(${var})
+ MESSAGE(STATUS " Disabling ${name} support.")
+ LIST(APPEND _mpm_disabled_components ${name})
+ ENDIF(${var})
+ MESSAGE(STATUS " Override with -D${var}=ON/OFF")
+
+ #make components lists into global variables
+ SET(_mpm_enabled_components ${_uhd_enabled_components} CACHE INTERNAL "" FORCE)
+ SET(_mpm_disabled_components ${_uhd_disabled_components} CACHE INTERNAL "" FORCE)
+ENDMACRO(MPM_REGISTER_COMPONENT)
+
+########################################################################
+# Print the registered component summary
+########################################################################
+FUNCTION(MPM_PRINT_COMPONENT_SUMMARY)
+ MESSAGE(STATUS "")
+ MESSAGE(STATUS "######################################################")
+ MESSAGE(STATUS "# MPM enabled components ")
+ MESSAGE(STATUS "######################################################")
+ FOREACH(comp ${_mpm_enabled_components})
+ MESSAGE(STATUS " * ${comp}")
+ ENDFOREACH(comp)
+
+ MESSAGE(STATUS "")
+ MESSAGE(STATUS "######################################################")
+ MESSAGE(STATUS "# MPM disabled components ")
+ MESSAGE(STATUS "######################################################")
+ FOREACH(comp ${_mpm_disabled_components})
+ MESSAGE(STATUS " * ${comp}")
+ ENDFOREACH(comp)
+
+ MESSAGE(STATUS "")
+ENDFUNCTION(MPM_PRINT_COMPONENT_SUMMARY)
diff --git a/mpm/include/mpm/CMakeLists.txt b/mpm/include/mpm/CMakeLists.txt
index d9cb68e03..e69d85ef2 100644
--- a/mpm/include/mpm/CMakeLists.txt
+++ b/mpm/include/mpm/CMakeLists.txt
@@ -9,7 +9,10 @@ INSTALL(FILES
DESTINATION ${INCLUDE_DIR}/mpm
)
-ADD_SUBDIRECTORY(ad937x)
+IF(ENABLE_MYKONOS)
+ ADD_SUBDIRECTORY(ad937x)
+ENDIF(ENABLE_MYKONOS)
+
ADD_SUBDIRECTORY(chips)
ADD_SUBDIRECTORY(dboards)
ADD_SUBDIRECTORY(spi)
diff --git a/mpm/lib/CMakeLists.txt b/mpm/lib/CMakeLists.txt
index 091c2c25f..cf252f6e6 100644
--- a/mpm/lib/CMakeLists.txt
+++ b/mpm/lib/CMakeLists.txt
@@ -11,9 +11,9 @@ ADD_SUBDIRECTORY(chips)
ADD_SUBDIRECTORY(spi)
ADD_SUBDIRECTORY(types)
-if(MPM_DEVICE STREQUAL "n3xx")
+if(ENABLE_MYKONOS)
ADD_SUBDIRECTORY(mykonos)
-endif(MPM_DEVICE STREQUAL "n3xx")
+endif(ENABLE_MYKONOS)
USRP_PERIPHS_ADD_OBJECT(periphs
exception.cpp
diff --git a/mpm/lib/dboards/CMakeLists.txt b/mpm/lib/dboards/CMakeLists.txt
index a1017d8d3..7af3f98b7 100644
--- a/mpm/lib/dboards/CMakeLists.txt
+++ b/mpm/lib/dboards/CMakeLists.txt
@@ -8,8 +8,8 @@
# This file included, use CMake directory variables
########################################################################
-if(MPM_DEVICE STREQUAL "n3xx")
+if(ENABLE_MAGNESIUM)
USRP_PERIPHS_ADD_OBJECT(dboards
magnesium_manager.cpp
)
-endif(MPM_DEVICE STREQUAL "n3xx")
+endif(ENABLE_MAGNESIUM)
diff --git a/mpm/python/CMakeLists.txt b/mpm/python/CMakeLists.txt
index c7a5ac698..2fd71b744 100644
--- a/mpm/python/CMakeLists.txt
+++ b/mpm/python/CMakeLists.txt
@@ -28,6 +28,7 @@ SET(PERIPH_MGR_INIT "${CMAKE_CURRENT_BINARY_DIR}/usrp_mpm/periph_manager/__init_
CONFIGURE_FILE(${SETUP_PY_IN} ${SETUP_PY})
CONFIGURE_FILE(${PERIPH_MGR_INIT_IN} ${PERIPH_MGR_INIT})
+CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/usrp_hwd.py" "${CMAKE_CURRENT_BINARY_DIR}/usrp_hwd.py" COPYONLY)
ADD_CUSTOM_COMMAND(OUTPUT ${OUTPUT}
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}" -DBINARY_DIR="${CMAKE_CURRENT_BINARY_DIR}" -P ${CMAKE_CURRENT_SOURCE_DIR}/copy_python_module.cmake
diff --git a/mpm/python/pyusrp_periphs.cpp b/mpm/python/pyusrp_periphs.cpp
index 716209205..feb7c2bad 100644
--- a/mpm/python/pyusrp_periphs.cpp
+++ b/mpm/python/pyusrp_periphs.cpp
@@ -6,6 +6,7 @@
// include hackery to only include boost python and define the macro here
#include <boost/python.hpp>
+#include <config.h>
#define LIBMPM_PYTHON
#define LIBMPM_BOOST_PREAMBLE(module) \
/* Register submodule types */ \
@@ -45,8 +46,15 @@ private:
#include <mpm/xbar_iface.hpp>
#include <mpm/types/types_python.hpp>
#include <mpm/spi/spi_python.hpp>
+
+#ifdef ENABLE_MYKONOS
#include <mpm/ad937x/ad937x_ctrl.hpp>
+#endif
+
+#ifdef ENABLE_MAGNESIUM
#include <mpm/dboards/magnesium_manager.hpp>
+#endif
+
#include <boost/noncopyable.hpp>
namespace bp = boost::python;
@@ -58,7 +66,11 @@ BOOST_PYTHON_MODULE(libpyusrp_periphs)
export_converter();
export_types();
export_spi();
+#ifdef ENABLE_MYKONOS
export_mykonos();
+#endif
export_xbar();
+#ifdef ENABLE_MAGNESIUM
export_magnesium();
+#endif
}