mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2026-10-14 03:31:50 +00:00
167 lines
6.2 KiB
CMake
167 lines
6.2 KiB
CMake
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
|
# This file is part of GNSS-SDR.
|
|
#
|
|
# SPDX-FileCopyrightText: 2011-2026 C. Fernandez-Prades cfernandez(at)cttc.es
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
# Tries to find libbladeRF.
|
|
#
|
|
# Usage of this module as follows:
|
|
#
|
|
# find_package(LIBBLADERF)
|
|
#
|
|
# Variables used by this module, they can change the default behaviour and need
|
|
# to be set before calling find_package:
|
|
#
|
|
# LIBBLADERF_ROOT Set this variable to the root installation of
|
|
# libbladeRF if the module has problems finding
|
|
# the proper installation path.
|
|
#
|
|
# Variables defined by this module:
|
|
#
|
|
# LIBBLADERF_FOUND System has libbladeRF libs/headers
|
|
# LIBBLADERF_LIBRARIES The libbladeRF libraries (bladeRF)
|
|
# LIBBLADERF_INCLUDE_DIRS The location of libbladeRF headers
|
|
# LIBBLADERF_VERSION The detected libbladeRF version
|
|
#
|
|
# Provides the following imported target:
|
|
# Bladerf::bladerf
|
|
#
|
|
|
|
if(NOT COMMAND feature_summary)
|
|
include(FeatureSummary)
|
|
endif()
|
|
|
|
if(NOT PKG_CONFIG_FOUND)
|
|
include(FindPkgConfig)
|
|
endif()
|
|
|
|
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
|
include(GnsssdrFindPaths)
|
|
endif()
|
|
|
|
pkg_check_modules(PC_LIBBLADERF libbladeRF)
|
|
|
|
if(NOT LIBBLADERF_ROOT)
|
|
set(LIBBLADERF_ROOT_USER_DEFINED /usr)
|
|
else()
|
|
set(LIBBLADERF_ROOT_USER_DEFINED ${LIBBLADERF_ROOT})
|
|
endif()
|
|
if(DEFINED ENV{LIBBLADERF_ROOT})
|
|
set(LIBBLADERF_ROOT_USER_DEFINED
|
|
${LIBBLADERF_ROOT_USER_DEFINED}
|
|
$ENV{LIBBLADERF_ROOT}
|
|
)
|
|
endif()
|
|
set(LIBBLADERF_ROOT_USER_DEFINED
|
|
${LIBBLADERF_ROOT_USER_DEFINED}
|
|
${CMAKE_INSTALL_PREFIX}
|
|
)
|
|
|
|
find_path(LIBBLADERF_INCLUDE_DIRS
|
|
NAMES libbladeRF.h
|
|
HINTS ${PC_LIBBLADERF_INCLUDEDIR}
|
|
PATHS ${LIBBLADERF_ROOT_USER_DEFINED}/include
|
|
${GNSSSDR_INCLUDE_PATHS}
|
|
)
|
|
|
|
find_library(LIBBLADERF_LIBRARIES
|
|
NAMES bladeRF
|
|
HINTS ${PC_LIBBLADERF_LIBDIR}
|
|
PATHS ${LIBBLADERF_ROOT_USER_DEFINED}/lib
|
|
${LIBBLADERF_ROOT_USER_DEFINED}/lib64
|
|
${GNSSSDR_LIB_PATHS}
|
|
)
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(LIBBLADERF DEFAULT_MSG LIBBLADERF_LIBRARIES LIBBLADERF_INCLUDE_DIRS)
|
|
|
|
if(PC_LIBBLADERF_VERSION)
|
|
set(LIBBLADERF_VERSION ${PC_LIBBLADERF_VERSION})
|
|
elseif(LIBBLADERF_INCLUDE_DIRS)
|
|
set(_LIBBLADERF_VERSION_HEADER "${LIBBLADERF_INCLUDE_DIRS}/libbladeRF.h")
|
|
if(EXISTS "${_LIBBLADERF_VERSION_HEADER}")
|
|
file(STRINGS "${_LIBBLADERF_VERSION_HEADER}"
|
|
_LIBBLADERF_API_VERSION_LINE
|
|
REGEX "^#[ \t]*define[ \t]+LIBBLADERF_API_VERSION[ \t]+\\(?0[xX][0-9A-Fa-f]+\\)?"
|
|
)
|
|
if(_LIBBLADERF_API_VERSION_LINE MATCHES "0[xX]([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])[0-9A-Fa-f][0-9A-Fa-f]")
|
|
# LIBBLADERF_API_VERSION encodes major, minor, patch, and reserved
|
|
# components in one byte each, starting with the most significant.
|
|
set(_LIBBLADERF_VERSION_HEX_DIGITS "0123456789ABCDEF")
|
|
foreach(_LIBBLADERF_VERSION_COMPONENT MAJOR MINOR PATCH)
|
|
if(_LIBBLADERF_VERSION_COMPONENT STREQUAL "MAJOR")
|
|
set(_LIBBLADERF_VERSION_HIGH_NIBBLE "${CMAKE_MATCH_1}")
|
|
set(_LIBBLADERF_VERSION_LOW_NIBBLE "${CMAKE_MATCH_2}")
|
|
elseif(_LIBBLADERF_VERSION_COMPONENT STREQUAL "MINOR")
|
|
set(_LIBBLADERF_VERSION_HIGH_NIBBLE "${CMAKE_MATCH_3}")
|
|
set(_LIBBLADERF_VERSION_LOW_NIBBLE "${CMAKE_MATCH_4}")
|
|
else()
|
|
set(_LIBBLADERF_VERSION_HIGH_NIBBLE "${CMAKE_MATCH_5}")
|
|
set(_LIBBLADERF_VERSION_LOW_NIBBLE "${CMAKE_MATCH_6}")
|
|
endif()
|
|
string(TOUPPER "${_LIBBLADERF_VERSION_HIGH_NIBBLE}"
|
|
_LIBBLADERF_VERSION_HIGH_NIBBLE
|
|
)
|
|
string(TOUPPER "${_LIBBLADERF_VERSION_LOW_NIBBLE}"
|
|
_LIBBLADERF_VERSION_LOW_NIBBLE
|
|
)
|
|
string(FIND "${_LIBBLADERF_VERSION_HEX_DIGITS}"
|
|
"${_LIBBLADERF_VERSION_HIGH_NIBBLE}"
|
|
_LIBBLADERF_VERSION_HIGH_NIBBLE
|
|
)
|
|
string(FIND "${_LIBBLADERF_VERSION_HEX_DIGITS}"
|
|
"${_LIBBLADERF_VERSION_LOW_NIBBLE}"
|
|
_LIBBLADERF_VERSION_LOW_NIBBLE
|
|
)
|
|
math(EXPR _LIBBLADERF_VERSION_${_LIBBLADERF_VERSION_COMPONENT}
|
|
"${_LIBBLADERF_VERSION_HIGH_NIBBLE} * 16 + ${_LIBBLADERF_VERSION_LOW_NIBBLE}"
|
|
)
|
|
endforeach()
|
|
set(LIBBLADERF_VERSION
|
|
"${_LIBBLADERF_VERSION_MAJOR}.${_LIBBLADERF_VERSION_MINOR}.${_LIBBLADERF_VERSION_PATCH}"
|
|
)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(LIBBLADERF_FOUND AND DEFINED GNSSSDR_LIBBLADERF_MIN_VERSION)
|
|
if(NOT LIBBLADERF_VERSION)
|
|
message(STATUS "libbladeRF was found, but its version could not be determined. GNSS-SDR requires at least v${GNSSSDR_LIBBLADERF_MIN_VERSION}")
|
|
set(LIBBLADERF_FOUND FALSE)
|
|
unset(LIBBLADERF_LIBRARIES CACHE)
|
|
unset(LIBBLADERF_INCLUDE_DIRS CACHE)
|
|
elseif(LIBBLADERF_VERSION VERSION_LESS GNSSSDR_LIBBLADERF_MIN_VERSION)
|
|
message(STATUS "libbladeRF v${LIBBLADERF_VERSION} was found, but GNSS-SDR requires at least v${GNSSSDR_LIBBLADERF_MIN_VERSION}. Please upgrade libbladeRF: https://github.com/Nuand/bladeRF")
|
|
set(LIBBLADERF_FOUND FALSE)
|
|
unset(LIBBLADERF_LIBRARIES CACHE)
|
|
unset(LIBBLADERF_INCLUDE_DIRS CACHE)
|
|
endif()
|
|
endif()
|
|
|
|
if(LIBBLADERF_FOUND AND LIBBLADERF_VERSION)
|
|
set_package_properties(LIBBLADERF PROPERTIES
|
|
DESCRIPTION "Nuand bladeRF library (found: v${LIBBLADERF_VERSION})"
|
|
)
|
|
else()
|
|
set_package_properties(LIBBLADERF PROPERTIES
|
|
DESCRIPTION "Nuand bladeRF library"
|
|
)
|
|
endif()
|
|
|
|
set_package_properties(LIBBLADERF PROPERTIES
|
|
URL "https://github.com/Nuand/bladeRF"
|
|
)
|
|
|
|
if(LIBBLADERF_FOUND AND NOT TARGET Bladerf::bladerf)
|
|
add_library(Bladerf::bladerf SHARED IMPORTED)
|
|
set_target_properties(Bladerf::bladerf PROPERTIES
|
|
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
|
|
IMPORTED_LOCATION "${LIBBLADERF_LIBRARIES}"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${LIBBLADERF_INCLUDE_DIRS}"
|
|
INTERFACE_LINK_LIBRARIES "${LIBBLADERF_LIBRARIES}"
|
|
)
|
|
endif()
|
|
|
|
mark_as_advanced(LIBBLADERF_LIBRARIES LIBBLADERF_INCLUDE_DIRS)
|