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.
This commit is contained in:
Alex Williams 2018-04-17 10:36:59 -07:00 committed by Martin Braun
parent e733e590c4
commit 7dcd16f5a6
7 changed files with 137 additions and 5 deletions

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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
}