From 7dcd16f5a6980cb1183bf1a10812c952d92c4ddb Mon Sep 17 00:00:00 2001 From: Alex Williams Date: Tue, 17 Apr 2018 10:36:59 -0700 Subject: 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. --- mpm/CMakeLists.txt | 12 ++++ mpm/cmake/Modules/MPMComponent.cmake | 104 +++++++++++++++++++++++++++++++++++ mpm/include/mpm/CMakeLists.txt | 5 +- mpm/lib/CMakeLists.txt | 4 +- mpm/lib/dboards/CMakeLists.txt | 4 +- mpm/python/CMakeLists.txt | 1 + mpm/python/pyusrp_periphs.cpp | 12 ++++ 7 files changed, 137 insertions(+), 5 deletions(-) create mode 100644 mpm/cmake/Modules/MPMComponent.cmake (limited to 'mpm') 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= 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 +#include #define LIBMPM_PYTHON #define LIBMPM_BOOST_PREAMBLE(module) \ /* Register submodule types */ \ @@ -45,8 +46,15 @@ private: #include #include #include + +#ifdef ENABLE_MYKONOS #include +#endif + +#ifdef ENABLE_MAGNESIUM #include +#endif + #include 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 } -- cgit v1.2.3