mirror of
https://github.com/EttusResearch/uhd.git
synced 2026-10-25 17:36:10 +00:00
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:
parent
e733e590c4
commit
7dcd16f5a6
@ -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
|
||||
|
||||
104
mpm/cmake/Modules/MPMComponent.cmake
Normal file
104
mpm/cmake/Modules/MPMComponent.cmake
Normal 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)
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user