# # Copyright 2013-2023 Software Radio Systems Limited # # This file is part of srsRAN # # srsRAN is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of # the License, or (at your option) any later version. # # srsRAN is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # A copy of the GNU Affero General Public License can be found in # the LICENSE file in the top-level directory of this distribution # and at http://www.gnu.org/licenses/. # FIND_PACKAGE(PkgConfig REQUIRED) #PKG_CHECK_MODULES(UHD uhd) IF(NOT UHD_FOUND) FIND_PATH( UHD_INCLUDE_DIRS NAMES uhd.h HINTS $ENV{UHD_DIR}/include PATHS /usr/local/include /usr/include ) FIND_LIBRARY( UHD_LIBRARIES NAMES uhd HINTS $ENV{UHD_DIR}/lib PATHS /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/local/lib64 /usr/local/lib32 ) message(STATUS "UHD LIBRARIES " ${UHD_LIBRARIES}) message(STATUS "UHD INCLUDE DIRS " ${UHD_INCLUDE_DIRS}) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(UHD DEFAULT_MSG UHD_LIBRARIES UHD_INCLUDE_DIRS) MARK_AS_ADVANCED(UHD_LIBRARIES UHD_INCLUDE_DIRS) include(CheckCXXSourceCompiles) IF(UHD_FOUND) # UHD library directory get_filename_component(UHD_LIBRARY_DIR ${UHD_LIBRARIES} DIRECTORY) # Save current required variables set(_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) set(_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) set(_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) # Set required variables set(CMAKE_REQUIRED_INCLUDES ${UHD_INCLUDE_DIRS}) set(CMAKE_REQUIRED_FLAGS "${CMAKE_CXX_FLAGS} -L${UHD_LIBRARY_DIR}") set(CMAKE_REQUIRED_LIBRARIES uhd boost_program_options boost_system) # Checks whether the UHD driver supports X300 reset from srsRAN. This functionality requires changing the function # `x300_make_ctrl_iface_enet` visibility in the file `uhd/host/lib/usrp/x300_fw_ctrl.cpp`. This can be accomplished # adding the following line: # `UHD_API wb_iface::sptr x300_make_ctrl_iface_enet(uhd::transport::udp_simple::sptr udp, bool enable_errors);` check_cxx_source_compiles("#include #include #include uhd::wb_iface::sptr x300_make_ctrl_iface_enet(uhd::transport::udp_simple::sptr udp, bool enable_errors); uhd_error try_usrp_x300_reset() { uhd::transport::udp_simple::sptr udp_simple = uhd::transport::udp_simple::make_connected(\"\", \"49152\"); uhd::wb_iface::sptr x300_ctrl = x300_make_ctrl_iface_enet(udp_simple, true); x300_ctrl->poke32(0x100058, 1); return UHD_ERROR_NONE; } int main(int argc, char** argv) { try_usrp_x300_reset(); return 0; }" UHD_ENABLE_X300_FW_RESET) # Checks whether the UHD driver supports X300 custom RF-NOC devices check_cxx_source_compiles("#include #include #include #include static uhd::device3::sptr device3; static uhd::rfnoc::ddc_block_ctrl::sptr ddc_ctrl; static uhd::rfnoc::radio_ctrl::sptr radio_ctrl; uhd_error try_device3_ddc_ctrl() { ddc_ctrl = device3->get_block_ctrl(uhd::rfnoc::block_id_t(\"DDC_0\")); return UHD_ERROR_NONE; } uhd_error try_device3_radio_ctrl() { radio_ctrl = device3->get_block_ctrl(uhd::rfnoc::block_id_t(\"Radio_0\")); return UHD_ERROR_NONE; } int main(int argc, char** argv) { try_device3_ddc_ctrl(); try_device3_radio_ctrl(); return 0; }" UHD_ENABLE_RFNOC) # Checks whether the UHD driver supports X300 custom RF-NOC devices check_cxx_source_compiles("#include #include #include static uhd::device3::sptr device3; static uhd::rfnoc::ddc_ch2_block_ctrl::sptr ddc_ctrl; uhd_error try_device3_ddc_ch2_ctrl() { ddc_ctrl = device3->get_block_ctrl(uhd::rfnoc::block_id_t(\"DDCch2_0\")); return UHD_ERROR_NONE; } int main(int argc, char** argv) { try_device3_ddc_ch2_ctrl(); return 0; }" UHD_ENABLE_CUSTOM_RFNOC) # Recover required variables set(CMAKE_REQUIRED_FLAGS ${_CMAKE_REQUIRED_FLAGS}) set(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${_CMAKE_REQUIRED_INCLUDES}) ENDIF(UHD_FOUND) ENDIF(NOT UHD_FOUND)