mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2026-08-06 02:08:53 +00:00
CMake: improve portability and robustness
Refactor Python detection Improve imported target handling Improve version detection Improve naming consistency
This commit is contained in:
+48
-36
@@ -264,7 +264,7 @@ endif()
|
||||
|
||||
# Enable optimization options in GCC for Release and RelWithDebInfo build types
|
||||
if((${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") AND (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))
|
||||
if(NOT (${LINUX_DISTRIBUTION} MATCHES "Fedora") AND NOT (${LINUX_DISTRIBUTION} MATCHES "Gentoo"))
|
||||
if(NOT ("${LINUX_DISTRIBUTION}" MATCHES "Fedora") AND NOT ("${LINUX_DISTRIBUTION}" MATCHES "Gentoo"))
|
||||
# flag -O3 enables tree vectorization
|
||||
# See https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
||||
@@ -603,7 +603,7 @@ if(CMAKE_VERSION VERSION_LESS 3.1)
|
||||
set_property(TARGET Threads::Threads PROPERTY IMPORTED_LINK_INTERFACE_LANGUAGES "CXX")
|
||||
include(GNUInstallDirs)
|
||||
# Fix bug in Debian 8.11
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Debian")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Debian")
|
||||
if(${LINUX_VER} VERSION_LESS 8.12)
|
||||
if(ARCH_64BITS)
|
||||
set(FIX_PTHREADS_LOCATION "x86_64-linux-gnu/")
|
||||
@@ -790,7 +790,7 @@ endif()
|
||||
if(NOT BOOST_ROOT)
|
||||
# Workaround for Macports
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
if(${DETECT_MACPORTS} EQUAL 0)
|
||||
if(DEFINED MACPORTS_PREFIX AND NOT "${MACPORTS_PREFIX}" STREQUAL "")
|
||||
if(EXISTS "${MACPORTS_PREFIX}/libexec/boost/1.76")
|
||||
set(BOOST_ROOT "${MACPORTS_PREFIX}/libexec/boost/1.76")
|
||||
elseif(EXISTS "${MACPORTS_PREFIX}/libexec/boost/1.71")
|
||||
@@ -1180,9 +1180,9 @@ if(NOT VOLKGNSSSDR_FOUND)
|
||||
message(STATUS "Mako template library not found. See https://www.makotemplates.org/")
|
||||
message(STATUS " You can try to install it by typing:")
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(STATUS " sudo yum install ${PYTHON_NAME}-mako")
|
||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
||||
elseif("${LINUX_DISTRIBUTION}" MATCHES "openSUSE")
|
||||
message(STATUS " sudo zypper install ${PYTHON_NAME}-Mako")
|
||||
else()
|
||||
message(STATUS " sudo apt install ${PYTHON_NAME}-mako")
|
||||
@@ -1197,9 +1197,9 @@ if(NOT VOLKGNSSSDR_FOUND)
|
||||
message(STATUS "python-six not found. See https://pythonhosted.org/six/")
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU")
|
||||
message(STATUS " You can try to install it by typing:")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(STATUS " sudo yum install ${PYTHON_NAME}-six")
|
||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
||||
elseif("${LINUX_DISTRIBUTION}" MATCHES "openSUSE")
|
||||
message(STATUS " sudo zypper install ${PYTHON_NAME}-six")
|
||||
else()
|
||||
message(STATUS " sudo apt install ${PYTHON_NAME}-six")
|
||||
@@ -1450,15 +1450,21 @@ if(NOT VOLKGNSSSDR_FOUND)
|
||||
set_target_properties(Volkgnsssdr::volkgnsssdr PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
|
||||
IMPORTED_LOCATION "${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/${CMAKE_INSTALL_LIBDIR}/libvolk_gnsssdr${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
INCLUDE_DIRECTORIES "${VOLK_GNSSSDR_INCLUDE_DIRS}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${VOLK_GNSSSDR_INCLUDE_DIRS}"
|
||||
INTERFACE_LINK_LIBRARIES "${VOLK_GNSSSDR_LIBRARIES}"
|
||||
)
|
||||
if(CMAKE_VERSION VERSION_GREATER 3.0 AND SUPPORTED_CPU_FEATURES_ARCH)
|
||||
if(NOT CPUFEATURES_FOUND AND ENABLE_CPUFEATURES)
|
||||
set_target_properties(Volkgnsssdr::volkgnsssdr PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}cpu_features${CMAKE_STATIC_LIBRARY_SUFFIX}
|
||||
get_target_property(_volkgnsssdr_link_libraries
|
||||
Volkgnsssdr::volkgnsssdr INTERFACE_LINK_LIBRARIES
|
||||
)
|
||||
list(APPEND _volkgnsssdr_link_libraries
|
||||
"${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}cpu_features${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
)
|
||||
set_target_properties(Volkgnsssdr::volkgnsssdr PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "${_volkgnsssdr_link_libraries}"
|
||||
)
|
||||
unset(_volkgnsssdr_link_libraries)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
@@ -1848,9 +1854,9 @@ if(NOT absl_FOUND)
|
||||
else()
|
||||
message(" aclocal has not been found.")
|
||||
message(" You can try to install it by typing:")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(" sudo yum groupinstall 'Development Tools'")
|
||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
||||
elseif("${LINUX_DISTRIBUTION}" MATCHES "openSUSE")
|
||||
message(" sudo zypper install automake")
|
||||
else()
|
||||
message(" sudo apt install automake")
|
||||
@@ -1860,9 +1866,9 @@ if(NOT absl_FOUND)
|
||||
else()
|
||||
message(" libtool has not been found.")
|
||||
message(" You can try to install it by typing:")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(" sudo yum groupinstall 'Development Tools'")
|
||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
||||
elseif("${LINUX_DISTRIBUTION}" MATCHES "openSUSE")
|
||||
message(" sudo zypper install libtoool")
|
||||
else()
|
||||
message(" sudo apt install libtool")
|
||||
@@ -2065,7 +2071,7 @@ if(NOT BLAS_FOUND)
|
||||
message(" 'sudo port install lapack' if you are using Macports, or")
|
||||
message(" 'brew install lapack' if you are using Homebrew.")
|
||||
else()
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(" sudo yum install blas-devel")
|
||||
else()
|
||||
message(" sudo apt install libblas-dev")
|
||||
@@ -2100,9 +2106,9 @@ if(NOT LAPACK_FOUND)
|
||||
message(" The LAPACK library has not been found.")
|
||||
if(LINUX_DISTRIBUTION)
|
||||
message(" You can try to install it by typing:")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(" sudo yum install lapack-devel")
|
||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
||||
elseif("${LINUX_DISTRIBUTION}" MATCHES "openSUSE")
|
||||
message(" sudo zypper install lapack-devel")
|
||||
else()
|
||||
message(" sudo apt install liblapack-dev")
|
||||
@@ -2179,9 +2185,9 @@ if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO)
|
||||
if(NOT GFORTRAN)
|
||||
message(STATUS "The gfortran library has not been found.")
|
||||
message(STATUS " You can try to install it by typing:")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(STATUS " sudo yum install gcc-fortran")
|
||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
||||
elseif("${LINUX_DISTRIBUTION}" MATCHES "openSUSE")
|
||||
message(STATUS " sudo zypper install gcc-fortran")
|
||||
else()
|
||||
message(STATUS " sudo apt install gfortran")
|
||||
@@ -2385,9 +2391,9 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS
|
||||
message(STATUS " $ brew install hdf5")
|
||||
endif()
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat" OR ${LINUX_DISTRIBUTION} MATCHES "CentOS")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat" OR "${LINUX_DISTRIBUTION}" MATCHES "CentOS")
|
||||
message(STATUS " sudo yum install hdf5-devel")
|
||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
||||
elseif("${LINUX_DISTRIBUTION}" MATCHES "openSUSE")
|
||||
message(STATUS " sudo zypper install hdf5-devel")
|
||||
else()
|
||||
message(STATUS " sudo apt install libhdf5-dev")
|
||||
@@ -2402,9 +2408,9 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS
|
||||
if(NOT EXISTS "/usr/bin/libtoolize")
|
||||
message(" libtool has not been found.")
|
||||
message(" You can try to install it by typing:")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(" sudo yum groupinstall 'Development Tools'")
|
||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
||||
elseif("${LINUX_DISTRIBUTION}" MATCHES "openSUSE")
|
||||
message(" sudo zypper install libtoool")
|
||||
else()
|
||||
message(" sudo apt install libtool")
|
||||
@@ -2422,9 +2428,9 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS
|
||||
else()
|
||||
message(" aclocal has not been found.")
|
||||
message(" You can try to install it by typing:")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(" sudo yum groupinstall 'Development Tools'")
|
||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
||||
elseif("${LINUX_DISTRIBUTION}" MATCHES "openSUSE")
|
||||
message(" sudo zypper install automake")
|
||||
else()
|
||||
message(" sudo apt install automake")
|
||||
@@ -2457,9 +2463,13 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS
|
||||
endif()
|
||||
endif()
|
||||
|
||||
list(GET HDF5_LIBRARIES 0 HDF5_FIRST_DIR)
|
||||
get_filename_component(HDF5_BASE_DIR2 ${HDF5_FIRST_DIR} DIRECTORY)
|
||||
get_filename_component(HDF5_BASE_DIR ${HDF5_BASE_DIR2} DIRECTORY)
|
||||
if(HDF5_LIBRARIES)
|
||||
list(GET HDF5_LIBRARIES 0 HDF5_FIRST_DIR)
|
||||
get_filename_component(HDF5_BASE_DIR2 ${HDF5_FIRST_DIR} DIRECTORY)
|
||||
get_filename_component(HDF5_BASE_DIR ${HDF5_BASE_DIR2} DIRECTORY)
|
||||
else()
|
||||
message(FATAL_ERROR "HDF5 was found but HDF5_LIBRARIES is empty.")
|
||||
endif()
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
if(EXISTS ${MACOS_PACKAGES_PREFIX}/include/hdf5.h)
|
||||
set(HDF5_BASE_DIR ${MACOS_PACKAGES_PREFIX})
|
||||
@@ -2813,9 +2823,9 @@ if((NOT Protobuf_FOUND) OR (NOT Protobuf_PROTOC_EXECUTABLE) OR (${Protobuf_VERSI
|
||||
if(NOT EXISTS "/usr/bin/libtoolize")
|
||||
message(" libtool has not been found.")
|
||||
message(" You can try to install it by typing:")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(" sudo yum groupinstall 'Development Tools'")
|
||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
||||
elseif("${LINUX_DISTRIBUTION}" MATCHES "openSUSE")
|
||||
message(" sudo zypper install libtoool")
|
||||
else()
|
||||
message(" sudo apt install libtool")
|
||||
@@ -2833,9 +2843,9 @@ if((NOT Protobuf_FOUND) OR (NOT Protobuf_PROTOC_EXECUTABLE) OR (${Protobuf_VERSI
|
||||
else()
|
||||
message(" aclocal has not been found.")
|
||||
message(" You can try to install it by typing:")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(" sudo yum groupinstall 'Development Tools'")
|
||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
||||
elseif("${LINUX_DISTRIBUTION}" MATCHES "openSUSE")
|
||||
message(" sudo zypper install automake")
|
||||
else()
|
||||
message(" sudo apt install automake")
|
||||
@@ -3097,7 +3107,7 @@ else()
|
||||
message(STATUS " You can get nice code documentation by using it!")
|
||||
message(STATUS " Get it from https://www.doxygen.nl/download.html")
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(STATUS " or simply by doing 'sudo yum install doxygen-latex'.")
|
||||
else()
|
||||
message(STATUS " or simply by doing 'sudo apt install doxygen-latex'.")
|
||||
@@ -3523,8 +3533,10 @@ if(ENABLE_DMA_PROXY)
|
||||
endif()
|
||||
endif()
|
||||
file(GLOB_RECURSE DMA_PROXY_FILES "${TARGET_ROOTFS_PATH}/*/dma-proxy.ko")
|
||||
list(GET DMA_PROXY_FILES 0 DMA_PROXY_FILE)
|
||||
if(EXISTS "${DMA_PROXY_FILE}")
|
||||
if(DMA_PROXY_FILES)
|
||||
list(GET DMA_PROXY_FILES 0 DMA_PROXY_FILE)
|
||||
endif()
|
||||
if(DMA_PROXY_FILES AND EXISTS "${DMA_PROXY_FILE}")
|
||||
message(STATUS "Found dma-proxy.ko file: ${DMA_PROXY_FILE}")
|
||||
set(ENABLE_FPGA ON)
|
||||
else()
|
||||
@@ -3797,7 +3809,7 @@ else()
|
||||
endif()
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
message(STATUS "Building on ${MACOS_DISTRIBUTION}")
|
||||
if(${DETECT_MACPORTS} EQUAL 0)
|
||||
if(DEFINED MACPORTS_PREFIX AND NOT "${MACPORTS_PREFIX}" STREQUAL "")
|
||||
message(STATUS "Found Macports v${MACPORTS_VERSION} installed at ${MACPORTS_PREFIX}")
|
||||
endif()
|
||||
if(${DETECT_HOMEBREW} EQUAL 0)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
# Avoid using the BLAS and LAPACK implementations that comes with the Accelerate
|
||||
# framework, which causes a bug when the BeiDou constellation is enabled
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -15,68 +15,78 @@ else()
|
||||
endif()
|
||||
|
||||
if(EXISTS "/etc/lsb-release")
|
||||
execute_process(COMMAND cat /etc/lsb-release
|
||||
COMMAND grep DISTRIB_ID
|
||||
COMMAND awk -F= "{ print $2 }"
|
||||
COMMAND tr "\n" " "
|
||||
COMMAND sed "s/ //"
|
||||
OUTPUT_VARIABLE LINUX_DISTRIBUTION
|
||||
RESULT_VARIABLE LINUX_ID_RESULT
|
||||
file(STRINGS "/etc/lsb-release" _lsb_distrib_id_line
|
||||
REGEX "^DISTRIB_ID="
|
||||
LIMIT_COUNT 1
|
||||
)
|
||||
execute_process(COMMAND cat /etc/lsb-release
|
||||
COMMAND grep DISTRIB_RELEASE
|
||||
COMMAND awk -F= "{ print $2 }"
|
||||
COMMAND tr "\n" " "
|
||||
COMMAND sed "s/ //"
|
||||
OUTPUT_VARIABLE LINUX_VER
|
||||
RESULT_VARIABLE LINUX_VER_RESULT
|
||||
file(STRINGS "/etc/lsb-release" _lsb_distrib_release_line
|
||||
REGEX "^DISTRIB_RELEASE="
|
||||
LIMIT_COUNT 1
|
||||
)
|
||||
if(_lsb_distrib_id_line)
|
||||
string(REGEX REPLACE "^DISTRIB_ID=" "" LINUX_DISTRIBUTION "${_lsb_distrib_id_line}")
|
||||
string(REPLACE "\"" "" LINUX_DISTRIBUTION "${LINUX_DISTRIBUTION}")
|
||||
string(STRIP "${LINUX_DISTRIBUTION}" LINUX_DISTRIBUTION)
|
||||
set(LINUX_ID_RESULT 0)
|
||||
else()
|
||||
set(LINUX_ID_RESULT 1)
|
||||
endif()
|
||||
if(_lsb_distrib_release_line)
|
||||
string(REGEX REPLACE "^DISTRIB_RELEASE=" "" LINUX_VER "${_lsb_distrib_release_line}")
|
||||
string(REPLACE "\"" "" LINUX_VER "${LINUX_VER}")
|
||||
string(STRIP "${LINUX_VER}" LINUX_VER)
|
||||
set(LINUX_VER_RESULT 0)
|
||||
else()
|
||||
set(LINUX_VER_RESULT 1)
|
||||
endif()
|
||||
unset(_lsb_distrib_id_line)
|
||||
unset(_lsb_distrib_release_line)
|
||||
endif()
|
||||
|
||||
|
||||
if(NOT LINUX_DISTRIBUTION)
|
||||
if(EXISTS "/etc/linuxmint/info")
|
||||
set(LINUX_DISTRIBUTION "LinuxMint")
|
||||
execute_process(COMMAND cat /etc/linuxmint/info
|
||||
COMMAND grep -m1 RELEASE
|
||||
COMMAND awk -F= "{ print $2 }"
|
||||
COMMAND tr "\n" " "
|
||||
COMMAND sed "s/ //"
|
||||
OUTPUT_VARIABLE LINUX_VER
|
||||
RESULT_VARIABLE LINUX_VER_RESULT
|
||||
file(STRINGS "/etc/linuxmint/info" _linuxmint_release_line
|
||||
REGEX "^RELEASE="
|
||||
LIMIT_COUNT 1
|
||||
)
|
||||
if(_linuxmint_release_line)
|
||||
string(REGEX REPLACE "^RELEASE=" "" LINUX_VER "${_linuxmint_release_line}")
|
||||
string(REPLACE "\"" "" LINUX_VER "${LINUX_VER}")
|
||||
string(STRIP "${LINUX_VER}" LINUX_VER)
|
||||
set(LINUX_VER_RESULT 0)
|
||||
else()
|
||||
set(LINUX_VER_RESULT 1)
|
||||
endif()
|
||||
unset(_linuxmint_release_line)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT LINUX_DISTRIBUTION)
|
||||
if(EXISTS "/etc/os-release")
|
||||
execute_process(COMMAND cat /etc/os-release
|
||||
COMMAND grep -m1 NAME
|
||||
COMMAND awk -F= "{ print $2 }"
|
||||
COMMAND tr "\n" " "
|
||||
COMMAND sed "s/ //"
|
||||
OUTPUT_VARIABLE LINUX_DISTRIBUTION_
|
||||
RESULT_VARIABLE LINUX_ID_RESULT
|
||||
)
|
||||
execute_process(COMMAND cat /etc/os-release
|
||||
COMMAND grep VERSION_ID
|
||||
COMMAND awk -F= "{ print $2 }"
|
||||
COMMAND tr "\n" " "
|
||||
COMMAND sed "s/ //"
|
||||
OUTPUT_VARIABLE LINUX_VER_
|
||||
RESULT_VARIABLE LINUX_VER_RESULT
|
||||
)
|
||||
if(LINUX_DISTRIBUTION_)
|
||||
string(REPLACE "\"" "" LINUX_DISTRIBUTION__ ${LINUX_DISTRIBUTION_})
|
||||
string(STRIP ${LINUX_DISTRIBUTION__} LINUX_DISTRIBUTION)
|
||||
file(STRINGS "/etc/os-release" _os_release_name_line REGEX "^NAME=" LIMIT_COUNT 1)
|
||||
file(STRINGS "/etc/os-release" _os_release_version_line REGEX "^VERSION_ID=" LIMIT_COUNT 1)
|
||||
|
||||
if(_os_release_name_line)
|
||||
string(REGEX REPLACE "^NAME=" "" LINUX_DISTRIBUTION "${_os_release_name_line}")
|
||||
string(REPLACE "\"" "" LINUX_DISTRIBUTION "${LINUX_DISTRIBUTION}")
|
||||
string(STRIP "${LINUX_DISTRIBUTION}" LINUX_DISTRIBUTION)
|
||||
endif()
|
||||
if(LINUX_VER_)
|
||||
string(REPLACE "\"" "" LINUX_VER ${LINUX_VER_})
|
||||
|
||||
if(_os_release_version_line)
|
||||
string(REGEX REPLACE "^VERSION_ID=" "" LINUX_VER "${_os_release_version_line}")
|
||||
string(REPLACE "\"" "" LINUX_VER "${LINUX_VER}")
|
||||
string(STRIP "${LINUX_VER}" LINUX_VER)
|
||||
endif()
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Debian")
|
||||
set(LINUX_DISTRIBUTION "Debian")
|
||||
file(READ /etc/debian_version LINUX_VER_)
|
||||
string(REPLACE "\n" "" LINUX_VER ${LINUX_VER_})
|
||||
|
||||
if("${LINUX_DISTRIBUTION}" STREQUAL "Debian" AND EXISTS "/etc/debian_version")
|
||||
file(READ "/etc/debian_version" LINUX_VER_)
|
||||
string(STRIP "${LINUX_VER_}" LINUX_VER)
|
||||
endif()
|
||||
|
||||
unset(_os_release_name_line)
|
||||
unset(_os_release_version_line)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -84,7 +94,7 @@ if(NOT LINUX_DISTRIBUTION)
|
||||
if(EXISTS "/etc/redhat-release")
|
||||
set(LINUX_DISTRIBUTION "Red Hat")
|
||||
file(READ /etc/redhat-release LINUX_VER_)
|
||||
string(REPLACE "\n" "" LINUX_VER ${LINUX_VER_})
|
||||
string(REPLACE "\n" "" LINUX_VER "${LINUX_VER_}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -92,7 +102,7 @@ if(NOT LINUX_DISTRIBUTION)
|
||||
if(EXISTS "/etc/debian_version")
|
||||
set(LINUX_DISTRIBUTION "Debian")
|
||||
file(READ /etc/debian_version LINUX_VER_)
|
||||
string(REPLACE "\n" "" LINUX_VER ${LINUX_VER_})
|
||||
string(REPLACE "\n" "" LINUX_VER "${LINUX_VER_}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
@@ -80,13 +80,13 @@ endif()
|
||||
|
||||
set(MACOS_PACKAGES_PREFIX "")
|
||||
# Detect if MacPorts is installed on this system; if so, return base path and version
|
||||
execute_process(COMMAND which port RESULT_VARIABLE DETECT_MACPORTS OUTPUT_VARIABLE MACPORTS_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(${DETECT_MACPORTS} EQUAL 0)
|
||||
find_program(MACPORTS_EXECUTABLE port)
|
||||
if(MACPORTS_EXECUTABLE)
|
||||
# "/opt/local/bin/port", so we get the parent directory
|
||||
get_filename_component(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY)
|
||||
get_filename_component(MACPORTS_PREFIX "${MACPORTS_EXECUTABLE}" DIRECTORY)
|
||||
# "/opt/local/bin", so we get the parent directory
|
||||
get_filename_component(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY)
|
||||
execute_process(COMMAND port version RESULT_VARIABLE DETECT_MACPORTS_VERSION OUTPUT_VARIABLE MACPORTS_VERSION ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
get_filename_component(MACPORTS_PREFIX "${MACPORTS_PREFIX}" DIRECTORY)
|
||||
execute_process(COMMAND "${MACPORTS_EXECUTABLE}" version RESULT_VARIABLE DETECT_MACPORTS_VERSION OUTPUT_VARIABLE MACPORTS_VERSION ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" MACPORTS_VERSION "${MACPORTS_VERSION}")
|
||||
set(MACOS_PACKAGES_PREFIX ${MACPORTS_PREFIX})
|
||||
endif()
|
||||
@@ -98,3 +98,4 @@ if(${DETECT_HOMEBREW} EQUAL 0)
|
||||
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" HOMEBREW_VERSION "${HOMEBREW_VERSION}")
|
||||
set(MACOS_PACKAGES_PREFIX ${HOMEBREW_PREFIX})
|
||||
endif()
|
||||
unset(MACPORTS_EXECUTABLE)
|
||||
|
||||
@@ -1,61 +1,166 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2021-2025 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-FileCopyrightText: 2021-2026 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
set(FPHSA_NAME_MISMATCHED ON)
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
########################################################################
|
||||
# Find cpu_features
|
||||
#
|
||||
# Provides the following imported target:
|
||||
# CpuFeature::cpu_features
|
||||
########################################################################
|
||||
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
find_library(CPUFEATURES_LIBRARIES
|
||||
|
||||
########################################################################
|
||||
# Build candidate root list
|
||||
########################################################################
|
||||
set(_CPUFEATURES_ROOT_HINTS)
|
||||
|
||||
if(CPUFEATURES_DIR)
|
||||
list(APPEND _CPUFEATURES_ROOT_HINTS "${CPUFEATURES_DIR}")
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{CPUFEATURES_DIR} AND NOT "$ENV{CPUFEATURES_DIR}" STREQUAL "")
|
||||
list(APPEND _CPUFEATURES_ROOT_HINTS "$ENV{CPUFEATURES_DIR}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_INSTALL_PREFIX)
|
||||
list(APPEND _CPUFEATURES_ROOT_HINTS "${CMAKE_INSTALL_PREFIX}")
|
||||
endif()
|
||||
if(DEFINED _CPUFEATURES_ROOT_HINTS)
|
||||
list(REMOVE_DUPLICATES _CPUFEATURES_ROOT_HINTS)
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Search paths for headers and libraries
|
||||
########################################################################
|
||||
set(_CPUFEATURES_INCLUDE_HINTS)
|
||||
set(_CPUFEATURES_LIBRARY_HINTS)
|
||||
|
||||
foreach(_cpufeatures_prefix ${_CPUFEATURES_ROOT_HINTS})
|
||||
list(APPEND _CPUFEATURES_INCLUDE_HINTS
|
||||
"${_cpufeatures_prefix}"
|
||||
"${_cpufeatures_prefix}/include"
|
||||
)
|
||||
list(APPEND _CPUFEATURES_LIBRARY_HINTS
|
||||
"${_cpufeatures_prefix}/lib"
|
||||
"${_cpufeatures_prefix}/lib64"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
list(APPEND _CPUFEATURES_INCLUDE_HINTS ${GNSSSDR_INCLUDE_PATHS})
|
||||
list(APPEND _CPUFEATURES_LIBRARY_HINTS ${GNSSSDR_LIB_PATHS})
|
||||
|
||||
list(REMOVE_DUPLICATES _CPUFEATURES_INCLUDE_HINTS)
|
||||
list(REMOVE_DUPLICATES _CPUFEATURES_LIBRARY_HINTS)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Find headers and library
|
||||
########################################################################
|
||||
find_library(CPUFEATURES_LIBRARY
|
||||
NAMES cpu_features
|
||||
PATHS ${GNSSSDR_LIB_PATHS}
|
||||
PATHS ${_CPUFEATURES_LIBRARY_HINTS}
|
||||
)
|
||||
|
||||
find_path(CPUFEATURES_INCLUDE_DIR cpu_features_macros.h
|
||||
PATHS $ENV{CPUFEATURES_DIR}/include
|
||||
$ENV{CPUFEATURES_DIR}
|
||||
${GNSSSDR_INCLUDE_PATHS}
|
||||
find_path(CPUFEATURES_INCLUDE_DIR
|
||||
NAMES cpu_features_macros.h
|
||||
PATHS ${_CPUFEATURES_INCLUDE_HINTS}
|
||||
PATH_SUFFIXES cpu_features
|
||||
)
|
||||
|
||||
if(CPUFEATURES_INCLUDE_DIR AND CPUFEATURES_LIBRARIES)
|
||||
if(NOT PACKAGE_VERSION)
|
||||
set(PACKAGE_VERSION "")
|
||||
endif()
|
||||
set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION})
|
||||
unset(PACKAGE_VERSION)
|
||||
list(GET CPUFEATURES_LIBRARIES 0 FIRST_DIR)
|
||||
get_filename_component(CPUFEATURES_LIBRARIES_PATH ${FIRST_DIR} DIRECTORY)
|
||||
if(EXISTS ${CPUFEATURES_LIBRARIES_PATH}/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake)
|
||||
include(${CPUFEATURES_LIBRARIES_PATH}/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake)
|
||||
endif()
|
||||
if(PACKAGE_VERSION)
|
||||
set(CPUFEATURES_VERSION ${PACKAGE_VERSION})
|
||||
else()
|
||||
set(CPUFEATURES_VERSION "Unknown")
|
||||
endif()
|
||||
set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION})
|
||||
endif()
|
||||
|
||||
########################################################################
|
||||
# Standard result handling
|
||||
########################################################################
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(CPUFEATURES
|
||||
DEFAULT_MSG
|
||||
CPUFEATURES_LIBRARIES
|
||||
CPUFEATURES_LIBRARY
|
||||
CPUFEATURES_INCLUDE_DIR
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Determine version
|
||||
########################################################################
|
||||
if(CPUFEATURES_FOUND)
|
||||
get_filename_component(_CPUFEATURES_LIBRARY_PATH
|
||||
"${CPUFEATURES_LIBRARY}" DIRECTORY
|
||||
)
|
||||
if(EXISTS "${_CPUFEATURES_LIBRARY_PATH}/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake")
|
||||
if(DEFINED PACKAGE_VERSION)
|
||||
set(_CPUFEATURES_PACKAGE_VERSION_WAS_DEFINED TRUE)
|
||||
set(_CPUFEATURES_OLD_PACKAGE_VERSION "${PACKAGE_VERSION}")
|
||||
else()
|
||||
set(_CPUFEATURES_PACKAGE_VERSION_WAS_DEFINED FALSE)
|
||||
endif()
|
||||
|
||||
unset(PACKAGE_VERSION)
|
||||
include(
|
||||
"${_CPUFEATURES_LIBRARY_PATH}/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake"
|
||||
)
|
||||
|
||||
if(PACKAGE_VERSION)
|
||||
set(CPUFEATURES_VERSION "${PACKAGE_VERSION}")
|
||||
else()
|
||||
set(CPUFEATURES_VERSION "Unknown")
|
||||
endif()
|
||||
|
||||
unset(PACKAGE_VERSION)
|
||||
|
||||
if(_CPUFEATURES_PACKAGE_VERSION_WAS_DEFINED)
|
||||
set(PACKAGE_VERSION "${_CPUFEATURES_OLD_PACKAGE_VERSION}")
|
||||
else()
|
||||
unset(PACKAGE_VERSION)
|
||||
endif()
|
||||
|
||||
unset(_CPUFEATURES_PACKAGE_VERSION_WAS_DEFINED)
|
||||
unset(_CPUFEATURES_OLD_PACKAGE_VERSION)
|
||||
else()
|
||||
set(CPUFEATURES_VERSION "Unknown")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Compatibility variables
|
||||
########################################################################
|
||||
set(CPUFEATURES_LIBRARIES "${CPUFEATURES_LIBRARY}")
|
||||
|
||||
mark_as_advanced(
|
||||
CPUFEATURES_LIBRARY
|
||||
CPUFEATURES_LIBRARIES
|
||||
CPUFEATURES_INCLUDE_DIR
|
||||
CPUFEATURES_VERSION
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Define imported target
|
||||
########################################################################
|
||||
if(CPUFEATURES_FOUND AND NOT TARGET CpuFeature::cpu_features)
|
||||
add_library(CpuFeature::cpu_features STATIC IMPORTED)
|
||||
add_library(CpuFeature::cpu_features UNKNOWN IMPORTED)
|
||||
set_target_properties(CpuFeature::cpu_features PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
IMPORTED_LOCATION "${CPUFEATURES_LIBRARIES}"
|
||||
IMPORTED_LOCATION "${CPUFEATURES_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CPUFEATURES_INCLUDE_DIR}"
|
||||
INTERFACE_LINK_LIBRARIES "${CPUFEATURES_LIBRARIES}"
|
||||
)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(CPUFEATURES_LIBRARIES)
|
||||
|
||||
########################################################################
|
||||
# Cleanup internal variables
|
||||
########################################################################
|
||||
unset(_CPUFEATURES_ROOT_HINTS)
|
||||
unset(_CPUFEATURES_INCLUDE_HINTS)
|
||||
unset(_CPUFEATURES_LIBRARY_HINTS)
|
||||
unset(_CPUFEATURES_LIBRARY_PATH)
|
||||
unset(_cpufeatures_prefix)
|
||||
@@ -66,10 +66,6 @@ Imported Targets
|
||||
Variables
|
||||
*********
|
||||
|
||||
.. variable:: CXX_FILESYSTEM_IS_EXPERIMENTAL
|
||||
|
||||
Set to ``TRUE`` when the :find-component:`fs.Experimental` version of C++
|
||||
filesystem library was found, otherwise ``FALSE``.
|
||||
|
||||
.. variable:: CXX_FILESYSTEM_HAVE_FS
|
||||
|
||||
@@ -120,24 +116,33 @@ if(FILESYSTEM_FIND_QUIETLY)
|
||||
endif()
|
||||
|
||||
# All of our tests require C++17 or later
|
||||
set(OLD_CMAKE_CXX_STANDARD ${CMAKE_CXX_STANDARD})
|
||||
if(DEFINED CMAKE_CXX_STANDARD)
|
||||
set(_FILESYSTEM_OLD_CMAKE_CXX_STANDARD_DEFINED TRUE)
|
||||
set(_FILESYSTEM_OLD_CMAKE_CXX_STANDARD "${CMAKE_CXX_STANDARD}")
|
||||
else()
|
||||
set(_FILESYSTEM_OLD_CMAKE_CXX_STANDARD_DEFINED FALSE)
|
||||
endif()
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(_filesystem_required_flag "")
|
||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "8.0.0"))
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.99")
|
||||
set(UNDEFINED_BEHAVIOR_WITHOUT_LINKING TRUE)
|
||||
set(_filesystem_required_flag "-std=c++17")
|
||||
elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.99"))
|
||||
set(_filesystem_required_flag "-std=c++17")
|
||||
elseif((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11"))
|
||||
set(_filesystem_required_flag "-std=c++17")
|
||||
elseif(MSVC AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "18"))
|
||||
set(_filesystem_required_flag "/std:c++17")
|
||||
endif()
|
||||
|
||||
if(_filesystem_required_flag)
|
||||
if(CMAKE_REQUIRED_FLAGS)
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${_filesystem_required_flag}")
|
||||
else()
|
||||
set(CMAKE_REQUIRED_FLAGS "${_filesystem_required_flag}")
|
||||
endif()
|
||||
set(CMAKE_REQUIRED_FLAGS "-std=c++17")
|
||||
endif()
|
||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.99"))
|
||||
set(CMAKE_REQUIRED_FLAGS "-std=c++17")
|
||||
endif()
|
||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11"))
|
||||
set(CMAKE_REQUIRED_FLAGS "-std=c++17")
|
||||
endif()
|
||||
if(MSVC AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "18"))
|
||||
set(CMAKE_REQUIRED_FLAGS "/std:c++17")
|
||||
endif()
|
||||
|
||||
|
||||
# Normalize and check the component list we were given
|
||||
set(want_components ${FILESYSTEM_FIND_COMPONENTS})
|
||||
if(FILESYSTEM_FIND_COMPONENTS STREQUAL "")
|
||||
@@ -217,7 +222,6 @@ if(CXX_FILESYSTEM_HAVE_FS)
|
||||
|
||||
if(NOT CXX_FILESYSTEM_NO_LINK_NEEDED)
|
||||
set(prev_libraries ${CMAKE_REQUIRED_LIBRARIES})
|
||||
set(CMAKE_REQUIRED_FLAGS "-std=c++17")
|
||||
# Add the libstdc++ flag
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${prev_libraries} -lstdc++fs)
|
||||
check_cxx_source_compiles("${code}" CXX_FILESYSTEM_STDCPPFS_NEEDED)
|
||||
@@ -249,8 +253,10 @@ if(CXX_FILESYSTEM_HAVE_FS)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT ${_found})
|
||||
set(CMAKE_CXX_STANDARD ${OLD_CMAKE_CXX_STANDARD})
|
||||
if(_FILESYSTEM_OLD_CMAKE_CXX_STANDARD_DEFINED)
|
||||
set(CMAKE_CXX_STANDARD "${_FILESYSTEM_OLD_CMAKE_CXX_STANDARD}")
|
||||
else()
|
||||
unset(CMAKE_CXX_STANDARD)
|
||||
endif()
|
||||
|
||||
cmake_pop_check_state()
|
||||
@@ -263,3 +269,6 @@ find_package_handle_standard_args(FILESYSTEM DEFAULT_MSG FILESYSTEM_FOUND)
|
||||
if(FILESYSTEM_FIND_REQUIRED AND NOT FILESYSTEM_FOUND)
|
||||
message(FATAL_ERROR "Cannot compile a simple program using std::filesystem")
|
||||
endif()
|
||||
|
||||
unset(_FILESYSTEM_OLD_CMAKE_CXX_STANDARD_DEFINED)
|
||||
unset(_FILESYSTEM_OLD_CMAKE_CXX_STANDARD)
|
||||
|
||||
@@ -25,7 +25,7 @@ if(NOT COMMAND feature_summary)
|
||||
include(FeatureSummary)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -1,36 +1,37 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-FileCopyrightText: 2011-2026 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
if(NOT COMMAND feature_summary)
|
||||
include(FeatureSummary)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
if(NOT GFORTRAN_ROOT)
|
||||
set(GFORTRAN_ROOT_USER_DEFINED /usr/lib)
|
||||
set(GFORTRAN_ROOT_USER_DEFINED "")
|
||||
if(DEFINED GFORTRAN_ROOT AND NOT "${GFORTRAN_ROOT}" STREQUAL "")
|
||||
list(APPEND GFORTRAN_ROOT_USER_DEFINED "${GFORTRAN_ROOT}")
|
||||
else()
|
||||
set(GFORTRAN_ROOT_USER_DEFINED ${GFORTRAN_ROOT})
|
||||
list(APPEND GFORTRAN_ROOT_USER_DEFINED "/usr/lib")
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{GFORTRAN_ROOT})
|
||||
set(GFORTRAN_ROOT_USER_DEFINED
|
||||
$ENV{GFORTRAN_ROOT}
|
||||
${GFORTRAN_ROOT_USER_DEFINED}
|
||||
)
|
||||
list(APPEND GFORTRAN_ROOT_USER_DEFINED "$ENV{GFORTRAN_ROOT}")
|
||||
endif()
|
||||
|
||||
set(GCC_MAJOR_SERIES 16 15 14 13 12 11 10 9 8 7 6 5)
|
||||
set(GCC4_SERIES 4.9.1 4.9 4.8.3 4.8.1 4.7.2 4.7 4.8.2 4.8 4.7 4.6 4.5 4.4.4 4.4)
|
||||
set(GCC4_SERIES 4.9.1 4.9 4.8.3 4.8.2 4.8.1 4.8 4.7.2 4.7 4.6 4.5 4.4.4 4.4)
|
||||
set(GCC_SERIES ${GCC_MAJOR_SERIES} ${GCC4_SERIES})
|
||||
|
||||
find_library(GFORTRAN NAMES gfortran
|
||||
PATHS ${GFORTRAN_ROOT_USER_DEFINED}
|
||||
/usr/lib/gcc/x86_64-linux-gnu # Debian
|
||||
find_library(GFORTRAN
|
||||
NAMES gfortran
|
||||
PATHS
|
||||
${GFORTRAN_ROOT_USER_DEFINED}
|
||||
/usr/lib/gcc/x86_64-linux-gnu
|
||||
/usr/lib/gcc/i386-linux-gnu
|
||||
/usr/lib/gcc/i486-linux-gnu
|
||||
/usr/lib/gcc/i586-linux-gnu
|
||||
@@ -56,14 +57,14 @@ find_library(GFORTRAN NAMES gfortran
|
||||
/usr/lib/gcc/sparc64-linux-gnu
|
||||
/usr/lib/gcc/x86_64-linux-gnux32
|
||||
/usr/lib/gcc/sh4-linux-gnu
|
||||
/usr/lib/gcc/i686-redhat-linux # Fedora
|
||||
/usr/lib/gcc/i686-redhat-linux
|
||||
/usr/lib64/gcc/x86_64-redhat-linux
|
||||
/usr/lib/gcc/x86_64-redhat-linux
|
||||
/usr/lib/gcc/armv7hl-redhat-linux-gnueabi
|
||||
/usr/lib/gcc/aarch64-redhat-linux
|
||||
/usr/lib/gcc/ppc64le-redhat-linux
|
||||
/usr/lib/gcc/s390x-redhat-linux
|
||||
/usr/lib64/gcc/x86_64-suse-linux # openSUSE
|
||||
/usr/lib64/gcc/x86_64-suse-linux
|
||||
/usr/lib/gcc/i586-suse-linux
|
||||
/usr/lib/gcc/x86_64-suse-linux
|
||||
/usr/lib/gcc/armv6hl-suse-linux-gnueabi
|
||||
@@ -86,3 +87,5 @@ set_package_properties(GFORTRAN PROPERTIES
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(GFORTRAN DEFAULT_MSG GFORTRAN)
|
||||
|
||||
mark_as_advanced(GFORTRAN)
|
||||
|
||||
@@ -28,7 +28,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
endif()
|
||||
pkg_check_modules(PC_GMP "gmp")
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -4,16 +4,22 @@
|
||||
# SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
if(GNSSSIMULATOR_ROOT)
|
||||
set(GNSSSIMULATOR_ROOT_USER_DEFINED ${GNSSSIMULATOR_ROOT})
|
||||
else()
|
||||
set(GNSSSIMULATOR_ROOT_USER_DEFINED /usr/local/bin)
|
||||
set(GNSSSIMULATOR_ROOT_USER_DEFINED /usr/local)
|
||||
endif()
|
||||
if(DEFINED ENV{GNSSSIMULATOR_ROOT})
|
||||
set(GNSSSIMULATOR_ROOT_USER_DEFINED
|
||||
${GNSSSIMULATOR_ROOT_USER_DEFINED}
|
||||
$ENV{GNSSSIMULATOR_ROOT}
|
||||
)
|
||||
endif()
|
||||
if(DEFINED ENV{GNSSSIMULATOR})
|
||||
set(GNSSSIMULATOR_ROOT_USER_DEFINED
|
||||
${GNSSSIMULATOR_ROOT_USER_DEFINED}
|
||||
$ENV{GNSSSIMULATOR}
|
||||
@@ -37,12 +43,22 @@ find_program(SW_GENERATOR_BIN gnss_sim
|
||||
|
||||
if(SW_GENERATOR_BIN AND CMAKE_CROSSCOMPILING)
|
||||
if(CMAKE_SYSROOT)
|
||||
string(REGEX REPLACE "${CMAKE_SYSROOT}" "" SW_GENERATOR_BIN "${SW_GENERATOR_BIN}")
|
||||
string(LENGTH "${CMAKE_SYSROOT}" _gnsssimulator_sysroot_len)
|
||||
string(SUBSTRING "${SW_GENERATOR_BIN}" 0 ${_gnsssimulator_sysroot_len} _gnsssimulator_sysroot_prefix)
|
||||
if(_gnsssimulator_sysroot_prefix STREQUAL "${CMAKE_SYSROOT}")
|
||||
string(SUBSTRING "${SW_GENERATOR_BIN}" ${_gnsssimulator_sysroot_len} -1 SW_GENERATOR_BIN)
|
||||
endif()
|
||||
elseif(DEFINED ENV{OECORE_TARGET_SYSROOT})
|
||||
string(REGEX REPLACE "$ENV{OECORE_TARGET_SYSROOT}" "" SW_GENERATOR_BIN "${SW_GENERATOR_BIN}")
|
||||
string(LENGTH "$ENV{OECORE_TARGET_SYSROOT}" _gnsssimulator_sysroot_len)
|
||||
string(SUBSTRING "${SW_GENERATOR_BIN}" 0 ${_gnsssimulator_sysroot_len} _gnsssimulator_sysroot_prefix)
|
||||
if(_gnsssimulator_sysroot_prefix STREQUAL "$ENV{OECORE_TARGET_SYSROOT}")
|
||||
string(SUBSTRING "${SW_GENERATOR_BIN}" ${_gnsssimulator_sysroot_len} -1 SW_GENERATOR_BIN)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(GNSSSIMULATOR DEFAULT_MSG SW_GENERATOR_BIN)
|
||||
mark_as_advanced(SW_GENERATOR_BIN)
|
||||
unset(_gnsssimulator_sysroot_len)
|
||||
unset(_gnsssimulator_sysroot_prefix)
|
||||
|
||||
@@ -19,7 +19,7 @@ if(NOT COMMAND feature_summary)
|
||||
include(FeatureSummary)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# SPDX-FileCopyrightText: 2021-2025 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
@@ -31,9 +31,17 @@ if(NOT CMAKE_CROSSCOMPILING)
|
||||
else()
|
||||
if(GNUPLOT_EXECUTABLE)
|
||||
if(CMAKE_SYSROOT)
|
||||
string(REGEX REPLACE "${CMAKE_SYSROOT}" "" GNUPLOT_EXECUTABLE "${GNUPLOT_EXECUTABLE}")
|
||||
string(LENGTH "${CMAKE_SYSROOT}" _gnuplot_sysroot_len)
|
||||
string(SUBSTRING "${GNUPLOT_EXECUTABLE}" 0 ${_gnuplot_sysroot_len} _gnuplot_sysroot_prefix)
|
||||
if(_gnuplot_sysroot_prefix STREQUAL "${CMAKE_SYSROOT}")
|
||||
string(SUBSTRING "${GNUPLOT_EXECUTABLE}" ${_gnuplot_sysroot_len} -1 GNUPLOT_EXECUTABLE)
|
||||
endif()
|
||||
elseif(DEFINED ENV{OECORE_TARGET_SYSROOT})
|
||||
string(REGEX REPLACE "$ENV{OECORE_TARGET_SYSROOT}" "" GNUPLOT_EXECUTABLE "${GNUPLOT_EXECUTABLE}")
|
||||
string(LENGTH "$ENV{OECORE_TARGET_SYSROOT}" _gnuplot_sysroot_len)
|
||||
string(SUBSTRING "${GNUPLOT_EXECUTABLE}" 0 ${_gnuplot_sysroot_len} _gnuplot_sysroot_prefix)
|
||||
if(_gnuplot_sysroot_prefix STREQUAL "$ENV{OECORE_TARGET_SYSROOT}")
|
||||
string(SUBSTRING "${GNUPLOT_EXECUTABLE}" ${_gnuplot_sysroot_len} -1 GNUPLOT_EXECUTABLE)
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Warning: Gnuplot is not found, you can install it later.")
|
||||
@@ -44,3 +52,5 @@ endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(GNUPLOT DEFAULT_MSG GNUPLOT_EXECUTABLE)
|
||||
unset(_gnuplot_sysroot_len)
|
||||
unset(_gnuplot_sysroot_prefix)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-FileCopyrightText: 2011-2026 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
########################################################################
|
||||
@@ -16,28 +16,30 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
# if GR_REQUIRED_COMPONENTS is not defined, it will be set to the following list
|
||||
if(NOT GR_REQUIRED_COMPONENTS)
|
||||
if(NOT DEFINED GR_REQUIRED_COMPONENTS OR
|
||||
"${GR_REQUIRED_COMPONENTS}" STREQUAL "")
|
||||
set(GR_REQUIRED_COMPONENTS RUNTIME PMT BLOCKS FFT FILTER ANALOG)
|
||||
endif()
|
||||
|
||||
# Allows us to use all .cmake files in this directory
|
||||
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_LIST_DIR})
|
||||
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_LIST_DIR}")
|
||||
|
||||
# Easily access all libraries and includes of GNU Radio
|
||||
set(GNURADIO_ALL_LIBRARIES "")
|
||||
set(GNURADIO_ALL_INCLUDE_DIRS "")
|
||||
set(GNURADIO_REQUIRED_COMPONENTS_FOUND TRUE)
|
||||
|
||||
macro(LIST_CONTAINS var value)
|
||||
set(${var})
|
||||
set(${var} FALSE)
|
||||
foreach(value2 ${ARGN})
|
||||
if(${value} STREQUAL ${value2})
|
||||
if("${value}" STREQUAL "${value2}")
|
||||
set(${var} TRUE)
|
||||
endif()
|
||||
endforeach()
|
||||
@@ -72,9 +74,8 @@ set(GNURADIO_INSTALL_PREFIX_USER_PROVIDED
|
||||
)
|
||||
|
||||
function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE)
|
||||
list_contains(REQUIRED_MODULE ${EXTVAR} ${GR_REQUIRED_COMPONENTS})
|
||||
list_contains(REQUIRED_MODULE "${EXTVAR}" ${GR_REQUIRED_COMPONENTS})
|
||||
if(NOT REQUIRED_MODULE)
|
||||
#message("Ignoring GNU Radio Module ${EXTVAR}")
|
||||
return()
|
||||
endif()
|
||||
|
||||
@@ -92,6 +93,8 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE)
|
||||
set(PC_INCDIR ${PC_GNURADIO_${EXTVAR}_INCLUDEDIR})
|
||||
set(PC_LIBDIR ${PC_GNURADIO_${EXTVAR}_LIBDIR})
|
||||
|
||||
unset(${LIBVAR_NAME})
|
||||
|
||||
# look for include files
|
||||
find_path(${INCVAR_NAME}
|
||||
NAMES ${INCFILE}
|
||||
@@ -108,7 +111,9 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE)
|
||||
PATHS ${GNURADIO_INSTALL_PREFIX_USER_PROVIDED}/${CMAKE_INSTALL_LIBDIR}
|
||||
${GNSSSDR_LIB_PATHS}
|
||||
)
|
||||
list(APPEND ${LIBVAR_NAME} ${${LIBVAR_NAME}_${libname}})
|
||||
if(${LIBVAR_NAME}_${libname})
|
||||
list(APPEND ${LIBVAR_NAME} ${${LIBVAR_NAME}_${libname}})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
set(${LIBVAR_NAME} ${${LIBVAR_NAME}} PARENT_SCOPE)
|
||||
@@ -118,11 +123,15 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE)
|
||||
message(STATUS " * LIBS=${GNURADIO_${EXTVAR}_LIBRARIES}")
|
||||
|
||||
# append to all includes and libs list
|
||||
set(GNURADIO_ALL_INCLUDE_DIRS ${GNURADIO_ALL_INCLUDE_DIRS} ${GNURADIO_${EXTVAR}_INCLUDE_DIRS} PARENT_SCOPE)
|
||||
set(GNURADIO_ALL_LIBRARIES ${GNURADIO_ALL_LIBRARIES} ${GNURADIO_${EXTVAR}_LIBRARIES} PARENT_SCOPE)
|
||||
set(GNURADIO_ALL_INCLUDE_DIRS ${GNURADIO_ALL_INCLUDE_DIRS}
|
||||
${GNURADIO_${EXTVAR}_INCLUDE_DIRS} PARENT_SCOPE)
|
||||
set(GNURADIO_ALL_LIBRARIES ${GNURADIO_ALL_LIBRARIES}
|
||||
${GNURADIO_${EXTVAR}_LIBRARIES} PARENT_SCOPE)
|
||||
|
||||
if(GNURADIO_${EXTVAR}_LIBRARIES AND GNURADIO_${EXTVAR}_INCLUDE_DIRS)
|
||||
set(GNURADIO_${EXTVAR}_FOUND TRUE)
|
||||
else()
|
||||
set(GNURADIO_${EXTVAR}_FOUND FALSE)
|
||||
endif()
|
||||
message(STATUS "GNURADIO_${EXTVAR}_FOUND = ${GNURADIO_${EXTVAR}_FOUND}")
|
||||
set(GNURADIO_${EXTVAR}_FOUND ${GNURADIO_${EXTVAR}_FOUND} PARENT_SCOPE)
|
||||
@@ -130,25 +139,28 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE)
|
||||
# generate an error if the module is missing
|
||||
if(NOT GNURADIO_${EXTVAR}_FOUND)
|
||||
message(STATUS "Required GNU Radio Component: ${EXTVAR} missing!")
|
||||
set(GNURADIO_FOUND FALSE) # Trick for feature_summary
|
||||
set(GNURADIO_FOUND FALSE PARENT_SCOPE) # Trick for feature_summary
|
||||
set(GNURADIO_REQUIRED_COMPONENTS_FOUND FALSE PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
# Create imported target
|
||||
string(TOLOWER ${EXTVAR} gnuradio_component)
|
||||
if(NOT TARGET Gnuradio::${gnuradio_component})
|
||||
add_library(Gnuradio::${gnuradio_component} SHARED IMPORTED)
|
||||
string(TOLOWER "${EXTVAR}" gnuradio_component)
|
||||
if(NOT TARGET Gnuradio::${gnuradio_component}
|
||||
AND GNURADIO_${EXTVAR}_LIBRARIES)
|
||||
add_library(Gnuradio::${gnuradio_component} UNKNOWN IMPORTED)
|
||||
set(GNURADIO_LIBRARY ${GNURADIO_${EXTVAR}_LIBRARIES})
|
||||
list(GET GNURADIO_LIBRARY 0 FIRST_DIR)
|
||||
get_filename_component(GNURADIO_DIR ${FIRST_DIR} ABSOLUTE)
|
||||
list(GET GNURADIO_LIBRARY 0 FIRST_LIBRARY)
|
||||
set_target_properties(Gnuradio::${gnuradio_component} PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
|
||||
IMPORTED_LOCATION "${GNURADIO_DIR}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${GNURADIO_${EXTVAR}_INCLUDE_DIRS}"
|
||||
IMPORTED_LOCATION "${FIRST_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES
|
||||
"${GNURADIO_${EXTVAR}_INCLUDE_DIRS}"
|
||||
INTERFACE_LINK_LIBRARIES "${GNURADIO_LIBRARY}"
|
||||
)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS)
|
||||
mark_as_advanced(GNURADIO_${EXTVAR}_LIBRARIES
|
||||
GNURADIO_${EXTVAR}_INCLUDE_DIRS)
|
||||
endfunction()
|
||||
|
||||
gr_module(RUNTIME gnuradio-runtime gnuradio/top_block.h gnuradio-runtime)
|
||||
@@ -168,25 +180,74 @@ gr_module(VOCODER gnuradio-vocoder gnuradio/vocoder/api.h gnuradio-vocoder)
|
||||
gr_module(WAVELET gnuradio-wavelet gnuradio/wavelet/api.h gnuradio-wavelet)
|
||||
gr_module(ZEROMQ gnuradio-zeromq gnuradio/zeromq/api.h gnuradio-zeromq)
|
||||
|
||||
|
||||
list(REMOVE_DUPLICATES GNURADIO_ALL_INCLUDE_DIRS)
|
||||
list(REMOVE_DUPLICATES GNURADIO_ALL_LIBRARIES)
|
||||
|
||||
if(NOT PC_GNURADIO_RUNTIME_VERSION)
|
||||
set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION})
|
||||
if(DEFINED PACKAGE_VERSION)
|
||||
set(OLD_PACKAGE_VERSION "${PACKAGE_VERSION}")
|
||||
set(_HAD_PACKAGE_VERSION TRUE)
|
||||
else()
|
||||
unset(OLD_PACKAGE_VERSION)
|
||||
set(_HAD_PACKAGE_VERSION FALSE)
|
||||
endif()
|
||||
|
||||
if(DEFINED PACKAGE_FIND_VERSION_MAJOR)
|
||||
set(OLD_PACKAGE_FIND_VERSION_MAJOR "${PACKAGE_FIND_VERSION_MAJOR}")
|
||||
set(_HAD_PACKAGE_FIND_VERSION_MAJOR TRUE)
|
||||
else()
|
||||
set(_HAD_PACKAGE_FIND_VERSION_MAJOR FALSE)
|
||||
endif()
|
||||
|
||||
if(DEFINED PACKAGE_FIND_VERSION_MINOR)
|
||||
set(OLD_PACKAGE_FIND_VERSION_MINOR "${PACKAGE_FIND_VERSION_MINOR}")
|
||||
set(_HAD_PACKAGE_FIND_VERSION_MINOR TRUE)
|
||||
else()
|
||||
set(_HAD_PACKAGE_FIND_VERSION_MINOR FALSE)
|
||||
endif()
|
||||
|
||||
if(DEFINED PACKAGE_FIND_VERSION_PATCH)
|
||||
set(OLD_PACKAGE_FIND_VERSION_PATCH "${PACKAGE_FIND_VERSION_PATCH}")
|
||||
set(_HAD_PACKAGE_FIND_VERSION_PATCH TRUE)
|
||||
else()
|
||||
set(_HAD_PACKAGE_FIND_VERSION_PATCH FALSE)
|
||||
endif()
|
||||
|
||||
unset(PACKAGE_VERSION)
|
||||
list(GET GNURADIO_BLOCKS_LIBRARIES 0 FIRST_DIR)
|
||||
get_filename_component(GNURADIO_BLOCKS_DIR ${FIRST_DIR} DIRECTORY)
|
||||
if(EXISTS ${GNURADIO_BLOCKS_DIR}/cmake/gnuradio/GnuradioConfigVersion.cmake)
|
||||
set(PACKAGE_FIND_VERSION_MAJOR 3)
|
||||
set(PACKAGE_FIND_VERSION_MINOR 7)
|
||||
set(PACKAGE_FIND_VERSION_PATCH 4)
|
||||
include(${GNURADIO_BLOCKS_DIR}/cmake/gnuradio/GnuradioConfigVersion.cmake)
|
||||
if(GNURADIO_BLOCKS_LIBRARIES)
|
||||
list(GET GNURADIO_BLOCKS_LIBRARIES 0 FIRST_LIBRARY)
|
||||
get_filename_component(GNURADIO_BLOCKS_DIR "${FIRST_LIBRARY}" DIRECTORY)
|
||||
if(EXISTS "${GNURADIO_BLOCKS_DIR}/cmake/gnuradio/GnuradioConfigVersion.cmake")
|
||||
set(PACKAGE_FIND_VERSION_MAJOR 3)
|
||||
set(PACKAGE_FIND_VERSION_MINOR 7)
|
||||
set(PACKAGE_FIND_VERSION_PATCH 4)
|
||||
include("${GNURADIO_BLOCKS_DIR}/cmake/gnuradio/GnuradioConfigVersion.cmake")
|
||||
endif()
|
||||
endif()
|
||||
if(PACKAGE_VERSION)
|
||||
set(PC_GNURADIO_RUNTIME_VERSION ${PACKAGE_VERSION})
|
||||
set(PC_GNURADIO_RUNTIME_VERSION "${PACKAGE_VERSION}")
|
||||
endif()
|
||||
|
||||
if(_HAD_PACKAGE_VERSION)
|
||||
set(PACKAGE_VERSION "${OLD_PACKAGE_VERSION}")
|
||||
else()
|
||||
unset(PACKAGE_VERSION)
|
||||
endif()
|
||||
if(_HAD_PACKAGE_FIND_VERSION_MAJOR)
|
||||
set(PACKAGE_FIND_VERSION_MAJOR "${OLD_PACKAGE_FIND_VERSION_MAJOR}")
|
||||
else()
|
||||
unset(PACKAGE_FIND_VERSION_MAJOR)
|
||||
endif()
|
||||
if(_HAD_PACKAGE_FIND_VERSION_MINOR)
|
||||
set(PACKAGE_FIND_VERSION_MINOR "${OLD_PACKAGE_FIND_VERSION_MINOR}")
|
||||
else()
|
||||
unset(PACKAGE_FIND_VERSION_MINOR)
|
||||
endif()
|
||||
if(_HAD_PACKAGE_FIND_VERSION_PATCH)
|
||||
set(PACKAGE_FIND_VERSION_PATCH "${OLD_PACKAGE_FIND_VERSION_PATCH}")
|
||||
else()
|
||||
unset(PACKAGE_FIND_VERSION_PATCH)
|
||||
endif()
|
||||
set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION})
|
||||
endif()
|
||||
|
||||
# Trick to find out that GNU Radio is >= 3.7.4 if pkgconfig is not present
|
||||
@@ -220,11 +281,11 @@ if(GNURADIO_VERSION)
|
||||
if(GNURADIO_VERSION VERSION_LESS ${GNSSSDR_GNURADIO_MIN_VERSION})
|
||||
unset(GNURADIO_RUNTIME_FOUND)
|
||||
message(STATUS "The GNU Radio version installed in your system (v${GNURADIO_VERSION}) is too old.")
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU")
|
||||
if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux|kFreeBSD|GNU")
|
||||
message("Go to https://wiki.gnuradio.org/index.php/InstallingGR")
|
||||
message("and follow the instructions to install a newer GNU Radio version in your system.")
|
||||
endif()
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
if("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
|
||||
message("You can install it easily via Macports:")
|
||||
message(" sudo port install gnuradio ")
|
||||
message("Alternatively, you can use homebrew:")
|
||||
@@ -241,12 +302,13 @@ else()
|
||||
)
|
||||
endif()
|
||||
|
||||
find_package_handle_standard_args(GNURADIO DEFAULT_MSG GNURADIO_RUNTIME_FOUND)
|
||||
find_package_handle_standard_args(GNURADIO DEFAULT_MSG
|
||||
GNURADIO_RUNTIME_FOUND GNURADIO_REQUIRED_COMPONENTS_FOUND)
|
||||
|
||||
# Detect if using standard pointers
|
||||
set(GNURADIO_USES_STD_POINTERS FALSE)
|
||||
if(GNURADIO_VERSION VERSION_GREATER 3.8.99)
|
||||
file(STRINGS ${GNURADIO_RUNTIME_INCLUDE_DIRS}/gnuradio/basic_block.h _basic_block)
|
||||
file(STRINGS "${GNURADIO_RUNTIME_INCLUDE_DIRS}/gnuradio/basic_block.h" _basic_block)
|
||||
foreach(_loop_var IN LISTS _basic_block)
|
||||
string(STRIP "${_loop_var}" _file_line)
|
||||
if("public std::enable_shared_from_this<basic_block>" STREQUAL "${_file_line}")
|
||||
@@ -256,7 +318,7 @@ if(GNURADIO_VERSION VERSION_GREATER 3.8.99)
|
||||
endif()
|
||||
|
||||
# Detect if FFT are templates
|
||||
if(EXISTS ${GNURADIO_FFT_INCLUDE_DIRS}/gnuradio/fft/fft_vfc.h)
|
||||
if(EXISTS "${GNURADIO_FFT_INCLUDE_DIRS}/gnuradio/fft/fft_vfc.h")
|
||||
set(GNURADIO_FFT_USES_TEMPLATES FALSE)
|
||||
else()
|
||||
set(GNURADIO_FFT_USES_TEMPLATES TRUE)
|
||||
@@ -300,13 +362,12 @@ if(GNURADIO_VERSION VERSION_GREATER 3.8.99)
|
||||
|
||||
# Create imported target
|
||||
if(NOT TARGET Gnuradio::iio)
|
||||
add_library(Gnuradio::iio SHARED IMPORTED)
|
||||
add_library(Gnuradio::iio UNKNOWN IMPORTED)
|
||||
set(GNURADIO_LIBRARY ${GNURADIO_IIO_LIBRARIES})
|
||||
list(GET GNURADIO_LIBRARY 0 FIRST_DIR)
|
||||
get_filename_component(GNURADIO_DIR ${FIRST_DIR} ABSOLUTE)
|
||||
list(GET GNURADIO_LIBRARY 0 FIRST_LIBRARY)
|
||||
set_target_properties(Gnuradio::iio PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
|
||||
IMPORTED_LOCATION "${GNURADIO_DIR}"
|
||||
IMPORTED_LOCATION "${FIRST_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${GNURADIO_IIO_INCLUDE_DIRS}"
|
||||
INTERFACE_LINK_LIBRARIES "${GNURADIO_LIBRARY}"
|
||||
)
|
||||
@@ -321,7 +382,7 @@ endif()
|
||||
|
||||
# Check if PMT uses boost::any or std::any
|
||||
if(GNURADIO_PMT_INCLUDE_DIRS)
|
||||
file(STRINGS ${GNURADIO_PMT_INCLUDE_DIRS}/pmt/pmt.h _pmt_content)
|
||||
file(STRINGS "${GNURADIO_PMT_INCLUDE_DIRS}/pmt/pmt.h" _pmt_content)
|
||||
set(_uses_boost TRUE)
|
||||
foreach(_loop_var IN LISTS _pmt_content)
|
||||
string(STRIP "${_loop_var}" _file_line)
|
||||
@@ -329,7 +390,7 @@ if(GNURADIO_PMT_INCLUDE_DIRS)
|
||||
set(_uses_boost FALSE)
|
||||
endif()
|
||||
endforeach()
|
||||
if(${_uses_boost})
|
||||
if(_uses_boost)
|
||||
set(PMT_USES_BOOST_ANY TRUE)
|
||||
endif()
|
||||
endif()
|
||||
@@ -337,7 +398,7 @@ endif()
|
||||
# Check if GNU Radio uses log4cpp or spdlog
|
||||
if(GNURADIO_RUNTIME_INCLUDE_DIRS)
|
||||
if(EXISTS "${GNURADIO_RUNTIME_INCLUDE_DIRS}/gnuradio/logger.h")
|
||||
file(STRINGS ${GNURADIO_RUNTIME_INCLUDE_DIRS}/gnuradio/logger.h _logger_content)
|
||||
file(STRINGS "${GNURADIO_RUNTIME_INCLUDE_DIRS}/gnuradio/logger.h" _logger_content)
|
||||
set(_uses_log4cpp FALSE)
|
||||
set(_uses_spdlog FALSE)
|
||||
foreach(_loop_var IN LISTS _logger_content)
|
||||
@@ -349,21 +410,29 @@ if(GNURADIO_RUNTIME_INCLUDE_DIRS)
|
||||
set(_uses_spdlog TRUE)
|
||||
endif()
|
||||
endforeach()
|
||||
if(${_uses_log4cpp})
|
||||
if(_uses_log4cpp)
|
||||
find_package(LOG4CPP)
|
||||
set_package_properties(LOG4CPP PROPERTIES
|
||||
PURPOSE "Required by GNU Radio."
|
||||
TYPE REQUIRED
|
||||
)
|
||||
if(CMAKE_VERSION VERSION_GREATER 3.13)
|
||||
target_link_libraries(Gnuradio::filter INTERFACE Log4cpp::log4cpp)
|
||||
target_link_libraries(Gnuradio::runtime INTERFACE Log4cpp::log4cpp)
|
||||
if(TARGET Gnuradio::filter)
|
||||
target_link_libraries(Gnuradio::filter INTERFACE Log4cpp::log4cpp)
|
||||
endif()
|
||||
if(TARGET Gnuradio::runtime)
|
||||
target_link_libraries(Gnuradio::runtime INTERFACE Log4cpp::log4cpp)
|
||||
endif()
|
||||
else()
|
||||
set_target_properties(Gnuradio::filter PROPERTIES INTERFACE_LINK_LIBRARIES Log4cpp::log4cpp)
|
||||
set_target_properties(Gnuradio::runtime PROPERTIES INTERFACE_LINK_LIBRARIES Log4cpp::log4cpp)
|
||||
if(TARGET Gnuradio::filter)
|
||||
set_target_properties(Gnuradio::filter PROPERTIES INTERFACE_LINK_LIBRARIES Log4cpp::log4cpp)
|
||||
endif()
|
||||
if(TARGET Gnuradio::runtime)
|
||||
set_target_properties(Gnuradio::runtime PROPERTIES INTERFACE_LINK_LIBRARIES Log4cpp::log4cpp)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
if(${_uses_spdlog})
|
||||
if(_uses_spdlog)
|
||||
find_package(spdlog REQUIRED CONFIG)
|
||||
set_package_properties(spdlog PROPERTIES
|
||||
URL "https://github.com/gabime/spdlog"
|
||||
@@ -373,11 +442,19 @@ if(GNURADIO_RUNTIME_INCLUDE_DIRS)
|
||||
)
|
||||
set(GNURADIO_USES_SPDLOG TRUE)
|
||||
if(CMAKE_VERSION VERSION_GREATER 3.13)
|
||||
target_link_libraries(Gnuradio::runtime INTERFACE spdlog::spdlog)
|
||||
target_link_libraries(Gnuradio::blocks INTERFACE spdlog::spdlog)
|
||||
if(TARGET Gnuradio::runtime)
|
||||
target_link_libraries(Gnuradio::runtime INTERFACE spdlog::spdlog)
|
||||
endif()
|
||||
if(TARGET Gnuradio::blocks)
|
||||
target_link_libraries(Gnuradio::blocks INTERFACE spdlog::spdlog)
|
||||
endif()
|
||||
else()
|
||||
set_target_properties(Gnuradio::runtime PROPERTIES INTERFACE_LINK_LIBRARIES spdlog::spdlog)
|
||||
set_target_properties(Gnuradio::blocks PROPERTIES INTERFACE_LINK_LIBRARIES spdlog::spdlog)
|
||||
if(TARGET Gnuradio::runtime)
|
||||
set_target_properties(Gnuradio::runtime PROPERTIES INTERFACE_LINK_LIBRARIES spdlog::spdlog)
|
||||
endif()
|
||||
if(TARGET Gnuradio::blocks)
|
||||
set_target_properties(Gnuradio::blocks PROPERTIES INTERFACE_LINK_LIBRARIES spdlog::spdlog)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -23,7 +23,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ if(NOT COMMAND feature_summary)
|
||||
include(FeatureSummary)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ if(NOT COMMAND feature_summary)
|
||||
include(FeatureSummary)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
+124
-86
@@ -1,7 +1,7 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-FileCopyrightText: 2011-2026 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
# FindMATIO
|
||||
@@ -10,139 +10,166 @@
|
||||
#
|
||||
# Once done this will define:
|
||||
#
|
||||
# MATIO_FOUND - True if MATIO found.
|
||||
# MATIO_LIBRARIES - MATIO libraries.
|
||||
# MATIO_INCLUDE_DIRS - where to find matio.h, etc..
|
||||
# MATIO_VERSION_STRING - version number as a string (e.g.: "1.3.4")
|
||||
# MATIO_FOUND - True if MATIO found.
|
||||
# MATIO_LIBRARIES - MATIO libraries.
|
||||
# MATIO_INCLUDE_DIRS - Where to find matio.h, etc.
|
||||
# MATIO_VERSION_STRING - Version number as a string (e.g. "1.5.28")
|
||||
#
|
||||
# Provides the following imported target:
|
||||
# Matio::matio
|
||||
#
|
||||
#=============================================================================
|
||||
# Copyright 2015 Avtech Scientific <http://avtechscientific.com>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# * Neither the names of Kitware, Inc., the Insight Software Consortium,
|
||||
# nor the names of their contributors may be used to endorse or promote
|
||||
# products derived from this software without specific prior written
|
||||
# permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#=============================================================================
|
||||
# Matio::matio
|
||||
#
|
||||
|
||||
if(NOT COMMAND feature_summary)
|
||||
include(FeatureSummary)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
if(NOT MATIO_ROOT)
|
||||
set(MATIO_ROOT_USER_DEFINED /usr)
|
||||
else()
|
||||
set(MATIO_ROOT_USER_DEFINED ${MATIO_ROOT})
|
||||
endif()
|
||||
if(DEFINED ENV{MATIO_ROOT})
|
||||
set(MATIO_ROOT_USER_DEFINED
|
||||
${MATIO_ROOT_USER_DEFINED}
|
||||
$ENV{MATIO_ROOT}
|
||||
)
|
||||
########################################################################
|
||||
# Build candidate root list
|
||||
########################################################################
|
||||
set(_MATIO_ROOT_HINTS)
|
||||
|
||||
if(MATIO_ROOT)
|
||||
list(APPEND _MATIO_ROOT_HINTS "${MATIO_ROOT}")
|
||||
endif()
|
||||
|
||||
# Look for the header file.
|
||||
if(DEFINED ENV{MATIO_ROOT} AND NOT "$ENV{MATIO_ROOT}" STREQUAL "")
|
||||
list(APPEND _MATIO_ROOT_HINTS "$ENV{MATIO_ROOT}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_INSTALL_PREFIX)
|
||||
list(APPEND _MATIO_ROOT_HINTS "${CMAKE_INSTALL_PREFIX}")
|
||||
endif()
|
||||
|
||||
if(VCPKG_INSTALLED_DIR AND VCPKG_TARGET_TRIPLET)
|
||||
list(APPEND _MATIO_ROOT_HINTS
|
||||
"${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}")
|
||||
endif()
|
||||
|
||||
list(REMOVE_DUPLICATES _MATIO_ROOT_HINTS)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Search paths for headers and libraries
|
||||
########################################################################
|
||||
set(_MATIO_INCLUDE_HINTS)
|
||||
set(_MATIO_LIBRARY_HINTS)
|
||||
|
||||
foreach(_matio_prefix ${_MATIO_ROOT_HINTS})
|
||||
list(APPEND _MATIO_INCLUDE_HINTS
|
||||
"${_matio_prefix}"
|
||||
"${_matio_prefix}/include"
|
||||
)
|
||||
list(APPEND _MATIO_LIBRARY_HINTS
|
||||
"${_matio_prefix}/lib"
|
||||
"${_matio_prefix}/lib64"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
list(APPEND _MATIO_INCLUDE_HINTS ${GNSSSDR_INCLUDE_PATHS})
|
||||
list(APPEND _MATIO_LIBRARY_HINTS ${GNSSSDR_LIB_PATHS})
|
||||
|
||||
list(REMOVE_DUPLICATES _MATIO_INCLUDE_HINTS)
|
||||
list(REMOVE_DUPLICATES _MATIO_LIBRARY_HINTS)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Find headers and library
|
||||
########################################################################
|
||||
find_path(MATIO_INCLUDE_DIR
|
||||
NAMES matio.h
|
||||
PATHS
|
||||
${MATIO_ROOT_USER_DEFINED}/include
|
||||
${GNSSSDR_INCLUDE_PATHS}
|
||||
${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include
|
||||
PATHS ${_MATIO_INCLUDE_HINTS}
|
||||
DOC "The MATIO include directory"
|
||||
)
|
||||
|
||||
# Look for the library.
|
||||
find_library(MATIO_LIBRARY
|
||||
NAMES matio libmatio
|
||||
PATHS
|
||||
${MATIO_ROOT_USER_DEFINED}/lib
|
||||
${MATIO_ROOT_USER_DEFINED}/lib64
|
||||
${GNSSSDR_LIB_PATHS}
|
||||
${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib
|
||||
PATHS ${_MATIO_LIBRARY_HINTS}
|
||||
DOC "The MATIO library"
|
||||
)
|
||||
|
||||
if(MATIO_INCLUDE_DIR)
|
||||
# ---------------------------------------------------
|
||||
# Extract version information from MATIO
|
||||
# ---------------------------------------------------
|
||||
|
||||
# If the file is missing, set all values to 0
|
||||
########################################################################
|
||||
# Extract version information from MATIO
|
||||
########################################################################
|
||||
if(MATIO_INCLUDE_DIR)
|
||||
set(MATIO_MAJOR_VERSION 0)
|
||||
set(MATIO_MINOR_VERSION 0)
|
||||
set(MATIO_RELEASE_LEVEL 0)
|
||||
unset(MATIO_CONFIG_FILE)
|
||||
|
||||
# new versions of MATIO have `matio_pubconf.h`
|
||||
if(EXISTS ${MATIO_INCLUDE_DIR}/matio_pubconf.h)
|
||||
if(EXISTS "${MATIO_INCLUDE_DIR}/matio_pubconf.h")
|
||||
set(MATIO_CONFIG_FILE "matio_pubconf.h")
|
||||
else()
|
||||
elseif(EXISTS "${MATIO_INCLUDE_DIR}/matioConfig.h")
|
||||
set(MATIO_CONFIG_FILE "matioConfig.h")
|
||||
endif()
|
||||
|
||||
if(MATIO_CONFIG_FILE)
|
||||
# Read and parse MATIO config header file for version number
|
||||
file(STRINGS "${MATIO_INCLUDE_DIR}/${MATIO_CONFIG_FILE}" _matio_HEADER_CONTENTS REGEX "#define MATIO_((MAJOR|MINOR)_VERSION)|(RELEASE_LEVEL) ")
|
||||
file(STRINGS
|
||||
"${MATIO_INCLUDE_DIR}/${MATIO_CONFIG_FILE}"
|
||||
_matio_header_contents
|
||||
REGEX
|
||||
"#define MATIO_((MAJOR|MINOR)_VERSION|RELEASE_LEVEL) "
|
||||
)
|
||||
|
||||
foreach(line ${_matio_HEADER_CONTENTS})
|
||||
foreach(line ${_matio_header_contents})
|
||||
if(line MATCHES "#define ([A-Z_]+) ([0-9]+)")
|
||||
set("${CMAKE_MATCH_1}" "${CMAKE_MATCH_2}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
unset(_matio_HEADER_CONTENTS)
|
||||
unset(_matio_header_contents)
|
||||
endif()
|
||||
|
||||
set(MATIO_VERSION_STRING "${MATIO_MAJOR_VERSION}.${MATIO_MINOR_VERSION}.${MATIO_RELEASE_LEVEL}")
|
||||
set(MATIO_VERSION_STRING
|
||||
"${MATIO_MAJOR_VERSION}.${MATIO_MINOR_VERSION}.${MATIO_RELEASE_LEVEL}"
|
||||
)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(MATIO_INCLUDE_DIR MATIO_LIBRARY)
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set MATIO_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
########################################################################
|
||||
# Standard result handling
|
||||
########################################################################
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(MATIO REQUIRED_VARS MATIO_LIBRARY MATIO_INCLUDE_DIR VERSION_VAR MATIO_VERSION_STRING)
|
||||
find_package_handle_standard_args(MATIO
|
||||
REQUIRED_VARS
|
||||
MATIO_LIBRARY
|
||||
MATIO_INCLUDE_DIR
|
||||
VERSION_VAR
|
||||
MATIO_VERSION_STRING
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Compatibility variables
|
||||
########################################################################
|
||||
if(MATIO_FOUND)
|
||||
set(MATIO_LIBRARIES ${MATIO_LIBRARY})
|
||||
set(MATIO_INCLUDE_DIRS ${MATIO_INCLUDE_DIR})
|
||||
set(MATIO_LIBRARIES "${MATIO_LIBRARY}")
|
||||
set(MATIO_INCLUDE_DIRS "${MATIO_INCLUDE_DIR}")
|
||||
else()
|
||||
set(MATIO_LIBRARIES)
|
||||
set(MATIO_INCLUDE_DIRS)
|
||||
set(MATIO_LIBRARIES "")
|
||||
set(MATIO_INCLUDE_DIRS "")
|
||||
endif()
|
||||
|
||||
mark_as_advanced(
|
||||
MATIO_INCLUDE_DIR
|
||||
MATIO_LIBRARY
|
||||
MATIO_LIBRARIES
|
||||
MATIO_INCLUDE_DIRS
|
||||
MATIO_VERSION_STRING
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Package metadata
|
||||
########################################################################
|
||||
if(MATIO_FOUND AND MATIO_VERSION_STRING)
|
||||
set_package_properties(MATIO PROPERTIES
|
||||
DESCRIPTION "MATLAB MAT File I/O Library (found: v${MATIO_VERSION_STRING})"
|
||||
DESCRIPTION
|
||||
"MATLAB MAT File I/O Library (found: v${MATIO_VERSION_STRING})"
|
||||
)
|
||||
else()
|
||||
set_package_properties(MATIO PROPERTIES
|
||||
@@ -154,13 +181,24 @@ set_package_properties(MATIO PROPERTIES
|
||||
URL "https://github.com/tbeu/matio"
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Imported target
|
||||
########################################################################
|
||||
if(MATIO_FOUND AND NOT TARGET Matio::matio)
|
||||
add_library(Matio::matio SHARED IMPORTED)
|
||||
add_library(Matio::matio UNKNOWN IMPORTED)
|
||||
set_target_properties(Matio::matio PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
|
||||
IMPORTED_LOCATION "${MATIO_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${MATIO_INCLUDE_DIR}"
|
||||
INTERFACE_LINK_LIBRARIES "${MATIO_LIBRARY}"
|
||||
IMPORTED_IMPLIB "${MATIO_LIBRARY}"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Cleanup internal variables
|
||||
########################################################################
|
||||
unset(_MATIO_ROOT_HINTS)
|
||||
unset(_MATIO_INCLUDE_HINTS)
|
||||
unset(_MATIO_LIBRARY_HINTS)
|
||||
unset(_matio_prefix)
|
||||
unset(MATIO_CONFIG_FILE)
|
||||
+147
-54
@@ -1,9 +1,13 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-FileCopyrightText: 2011-2026 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
########################################################################
|
||||
# Find ORC (Optimized Inner Loops Runtime Compiler)
|
||||
########################################################################
|
||||
|
||||
if(DEFINED __INCLUDED_GNSSSDR_CMAKE_FIND_ORC)
|
||||
return()
|
||||
endif()
|
||||
@@ -17,92 +21,142 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
pkg_check_modules(PC_ORC "orc-0.4 > 0.4.22")
|
||||
pkg_check_modules(PC_ORC QUIET "orc-0.4 > 0.4.22")
|
||||
|
||||
if(NOT ORC_ROOT)
|
||||
set(ORC_ROOT_USER_PROVIDED /usr/local)
|
||||
else()
|
||||
set(ORC_ROOT_USER_PROVIDED ${ORC_ROOT})
|
||||
|
||||
########################################################################
|
||||
# Build candidate root list
|
||||
########################################################################
|
||||
set(_ORC_ROOT_HINTS)
|
||||
|
||||
if(ORC_ROOT)
|
||||
list(APPEND _ORC_ROOT_HINTS "${ORC_ROOT}")
|
||||
endif()
|
||||
if(DEFINED ENV{ORC_ROOT})
|
||||
set(ORC_ROOT_USER_PROVIDED
|
||||
${ORC_ROOT_USER_PROVIDED}
|
||||
$ENV{ORC_ROOT}
|
||||
)
|
||||
|
||||
if(DEFINED ENV{ORC_ROOT} AND NOT "$ENV{ORC_ROOT}" STREQUAL "")
|
||||
list(APPEND _ORC_ROOT_HINTS "$ENV{ORC_ROOT}")
|
||||
endif()
|
||||
set(ORC_ROOT_USER_PROVIDED
|
||||
${ORC_ROOT_USER_PROVIDED}
|
||||
${CMAKE_INSTALL_PREFIX}
|
||||
)
|
||||
|
||||
if(CMAKE_INSTALL_PREFIX)
|
||||
list(APPEND _ORC_ROOT_HINTS "${CMAKE_INSTALL_PREFIX}")
|
||||
endif()
|
||||
|
||||
if(DEFINED _ORC_ROOT_HINTS)
|
||||
list(REMOVE_DUPLICATES _ORC_ROOT_HINTS)
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Search paths for binaries, headers, and libraries
|
||||
########################################################################
|
||||
set(_ORC_BIN_HINTS)
|
||||
set(_ORC_INCLUDE_HINTS)
|
||||
set(_ORC_LIBRARY_HINTS)
|
||||
|
||||
if(PC_ORC_PREFIX)
|
||||
list(APPEND _ORC_BIN_HINTS "${PC_ORC_PREFIX}/bin")
|
||||
endif()
|
||||
|
||||
if(PC_ORC_TOOLSDIR)
|
||||
set(ORC_ROOT_USER_PROVIDED
|
||||
${ORC_ROOT_USER_PROVIDED}
|
||||
${PC_ORC_TOOLSDIR}
|
||||
)
|
||||
list(APPEND _ORC_BIN_HINTS "${PC_ORC_TOOLSDIR}")
|
||||
endif()
|
||||
|
||||
find_program(ORCC_EXECUTABLE orcc
|
||||
HINTS ${ORC_ROOT_USER_PROVIDED}/bin
|
||||
PATHS ${CMAKE_SYSTEM_PREFIX_PATH}/bin
|
||||
if(PC_ORC_INCLUDEDIR)
|
||||
list(APPEND _ORC_INCLUDE_HINTS "${PC_ORC_INCLUDEDIR}")
|
||||
endif()
|
||||
|
||||
if(PC_ORC_LIBDIR)
|
||||
list(APPEND _ORC_LIBRARY_HINTS "${PC_ORC_LIBDIR}")
|
||||
endif()
|
||||
|
||||
foreach(_orc_prefix ${_ORC_ROOT_HINTS})
|
||||
list(APPEND _ORC_BIN_HINTS "${_orc_prefix}/bin")
|
||||
list(APPEND _ORC_INCLUDE_HINTS "${_orc_prefix}/include")
|
||||
list(APPEND _ORC_LIBRARY_HINTS
|
||||
"${_orc_prefix}/lib"
|
||||
"${_orc_prefix}/lib64"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
foreach(_orc_system_prefix ${CMAKE_SYSTEM_PREFIX_PATH})
|
||||
list(APPEND _ORC_BIN_HINTS "${_orc_system_prefix}/bin")
|
||||
endforeach()
|
||||
list(APPEND _ORC_INCLUDE_HINTS ${GNSSSDR_INCLUDE_PATHS})
|
||||
list(APPEND _ORC_LIBRARY_HINTS ${GNSSSDR_LIB_PATHS})
|
||||
|
||||
list(REMOVE_DUPLICATES _ORC_BIN_HINTS)
|
||||
list(REMOVE_DUPLICATES _ORC_INCLUDE_HINTS)
|
||||
list(REMOVE_DUPLICATES _ORC_LIBRARY_HINTS)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Find executable, headers, and libraries
|
||||
########################################################################
|
||||
find_program(ORCC_EXECUTABLE
|
||||
NAMES orcc
|
||||
PATHS ${_ORC_BIN_HINTS}
|
||||
)
|
||||
|
||||
find_path(ORC_INCLUDE_DIR
|
||||
NAMES orc/orc.h
|
||||
HINTS ${PC_ORC_INCLUDEDIR}
|
||||
PATHS ${ORC_ROOT_USER_PROVIDED}/include
|
||||
${GNSSSDR_INCLUDE_PATHS}
|
||||
PATHS ${_ORC_INCLUDE_HINTS}
|
||||
PATH_SUFFIXES orc-0.4
|
||||
)
|
||||
|
||||
find_path(ORC_LIBRARY_DIR
|
||||
NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}orc-0.4${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||
HINTS ${PC_ORC_LIBDIR}
|
||||
PATHS ${ORC_ROOT_USER_PROVIDED}/lib
|
||||
${ORC_ROOT_USER_PROVIDED}/lib64
|
||||
${GNSSSDR_LIB_PATHS}
|
||||
find_library(ORC_LIBRARY
|
||||
NAMES orc-0.4
|
||||
HINTS ${PC_ORC_LIBDIR} ${PC_ORC_LIBRARY_DIRS}
|
||||
PATHS ${_ORC_LIBRARY_HINTS}
|
||||
)
|
||||
|
||||
find_library(ORC_LIB orc-0.4
|
||||
HINTS ${PC_ORC_LIBRARY_DIRS}
|
||||
PATHS ${ORC_ROOT_USER_PROVIDED}/lib
|
||||
${ORC_ROOT_USER_PROVIDED}/lib64
|
||||
${GNSSSDR_LIB_PATHS}
|
||||
find_library(ORC_LIBRARY_STATIC
|
||||
NAMES
|
||||
${CMAKE_STATIC_LIBRARY_PREFIX}orc-0.4${CMAKE_STATIC_LIBRARY_SUFFIX}
|
||||
HINTS ${PC_ORC_LIBDIR} ${PC_ORC_LIBRARY_DIRS}
|
||||
PATHS ${_ORC_LIBRARY_HINTS}
|
||||
)
|
||||
|
||||
find_library(ORC_LIBRARY_STATIC ${CMAKE_STATIC_LIBRARY_PREFIX}orc-0.4${CMAKE_STATIC_LIBRARY_SUFFIX}
|
||||
HINTS ${PC_ORC_LIBRARY_DIRS}
|
||||
PATHS ${ORC_ROOT}/lib
|
||||
${ORC_ROOT}/lib64
|
||||
${ORC_ROOT_USER_PROVIDED}/lib
|
||||
${ORC_ROOT_USER_PROVIDED}/lib64
|
||||
${GNSSSDR_LIB_PATHS}
|
||||
)
|
||||
|
||||
if(PC_ORC_VERSION)
|
||||
set(ORC_VERSION ${PC_ORC_VERSION})
|
||||
########################################################################
|
||||
# Derive library directory and version
|
||||
########################################################################
|
||||
if(ORC_LIBRARY)
|
||||
get_filename_component(ORC_LIBRARY_DIR "${ORC_LIBRARY}" DIRECTORY)
|
||||
endif()
|
||||
|
||||
list(APPEND ORC_LIBRARY ${ORC_LIB})
|
||||
if(PC_ORC_VERSION)
|
||||
set(ORC_VERSION "${PC_ORC_VERSION}")
|
||||
endif()
|
||||
|
||||
set(ORC_INCLUDE_DIRS ${ORC_INCLUDE_DIR})
|
||||
set(ORC_LIBRARIES ${ORC_LIBRARY})
|
||||
set(ORC_LIBRARY_DIRS ${ORC_LIBRARY_DIR})
|
||||
set(ORC_LIBRARIES_STATIC ${ORC_LIBRARY_STATIC})
|
||||
|
||||
########################################################################
|
||||
# Standard result handling
|
||||
########################################################################
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(ORC "orc files" ORC_LIBRARY ORC_INCLUDE_DIR ORCC_EXECUTABLE)
|
||||
find_package_handle_standard_args(ORC
|
||||
"orc files"
|
||||
ORC_LIBRARY
|
||||
ORC_INCLUDE_DIR
|
||||
ORCC_EXECUTABLE
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Package metadata
|
||||
########################################################################
|
||||
set_package_properties(ORC PROPERTIES
|
||||
URL "https://gstreamer.freedesktop.org/modules/orc.html"
|
||||
)
|
||||
|
||||
if(ORC_FOUND AND ORC_VERSION)
|
||||
set_package_properties(ORC PROPERTIES
|
||||
DESCRIPTION "The Optimized Inner Loops Runtime Compiler (found: v${ORC_VERSION})"
|
||||
DESCRIPTION
|
||||
"The Optimized Inner Loops Runtime Compiler (found: v${ORC_VERSION})"
|
||||
)
|
||||
else()
|
||||
set_package_properties(ORC PROPERTIES
|
||||
@@ -110,4 +164,43 @@ else()
|
||||
)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(ORC_INCLUDE_DIR ORC_LIBRARY ORCC_EXECUTABLE)
|
||||
|
||||
########################################################################
|
||||
# Compatibility variables
|
||||
########################################################################
|
||||
set(ORC_INCLUDE_DIRS "${ORC_INCLUDE_DIR}")
|
||||
set(ORC_LIBRARIES "${ORC_LIBRARY}")
|
||||
set(ORC_LIBRARY_DIRS "${ORC_LIBRARY_DIR}")
|
||||
set(ORC_LIBRARIES_STATIC "${ORC_LIBRARY_STATIC}")
|
||||
|
||||
if(ORC_FOUND AND NOT TARGET ORC::orc)
|
||||
add_library(ORC::orc UNKNOWN IMPORTED)
|
||||
set_target_properties(ORC::orc PROPERTIES
|
||||
IMPORTED_LOCATION "${ORC_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${ORC_INCLUDE_DIR}"
|
||||
)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(
|
||||
ORCC_EXECUTABLE
|
||||
ORC_INCLUDE_DIR
|
||||
ORC_INCLUDE_DIRS
|
||||
ORC_LIBRARY
|
||||
ORC_LIBRARIES
|
||||
ORC_LIBRARY_DIR
|
||||
ORC_LIBRARY_DIRS
|
||||
ORC_LIBRARY_STATIC
|
||||
ORC_LIBRARIES_STATIC
|
||||
ORC_VERSION
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Cleanup internal variables
|
||||
########################################################################
|
||||
unset(_ORC_ROOT_HINTS)
|
||||
unset(_ORC_BIN_HINTS)
|
||||
unset(_ORC_INCLUDE_HINTS)
|
||||
unset(_ORC_LIBRARY_HINTS)
|
||||
unset(_orc_prefix)
|
||||
unset(_orc_system_prefix)
|
||||
|
||||
@@ -27,7 +27,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-FileCopyrightText: 2011-2026 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
# Find the pugixml XML parsing library.
|
||||
@@ -24,63 +24,68 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
pkg_check_modules(PC_PUGIXML pugixml QUIET)
|
||||
|
||||
if(NOT PUGIXML_ROOT)
|
||||
set(PUGIXML_ROOT_USER_DEFINED /usr)
|
||||
set(PUGIXML_ROOT_USER_DEFINED "")
|
||||
if(DEFINED PUGIXML_ROOT AND NOT "${PUGIXML_ROOT}" STREQUAL "")
|
||||
list(APPEND PUGIXML_ROOT_USER_DEFINED "${PUGIXML_ROOT}")
|
||||
else()
|
||||
set(PUGIXML_ROOT_USER_DEFINED ${PUGIXML_ROOT})
|
||||
list(APPEND PUGIXML_ROOT_USER_DEFINED "/usr")
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{PUGIXML_ROOT})
|
||||
set(PUGIXML_ROOT_USER_DEFINED
|
||||
${PUGIXML_ROOT_USER_DEFINED}
|
||||
$ENV{PUGIXML_ROOT}
|
||||
)
|
||||
list(APPEND PUGIXML_ROOT_USER_DEFINED "$ENV{PUGIXML_ROOT}")
|
||||
endif()
|
||||
if(PUGIXML_HOME)
|
||||
set(PUGIXML_ROOT_USER_DEFINED
|
||||
${PUGIXML_ROOT_USER_DEFINED}
|
||||
${PUGIXML_HOME}
|
||||
)
|
||||
|
||||
if(DEFINED PUGIXML_HOME AND NOT "${PUGIXML_HOME}" STREQUAL "")
|
||||
list(APPEND PUGIXML_ROOT_USER_DEFINED "${PUGIXML_HOME}")
|
||||
endif()
|
||||
|
||||
find_path(PUGIXML_INCLUDE_DIR
|
||||
NAMES pugixml.hpp
|
||||
HINTS ${PC_PUGIXML_INCLUDEDIR}
|
||||
PATHS ${PUGIXML_ROOT_USER_DEFINED}/include
|
||||
${GNSSSDR_INCLUDE_PATHS}
|
||||
PATH_SUFFIXES pugixml-${PC_PUGIXML_VERSION} pugixml-1.9
|
||||
PATHS
|
||||
${PUGIXML_ROOT_USER_DEFINED}/include
|
||||
${GNSSSDR_INCLUDE_PATHS}
|
||||
PATH_SUFFIXES
|
||||
pugixml-${PC_PUGIXML_VERSION}
|
||||
pugixml-1.9
|
||||
)
|
||||
|
||||
find_library(PUGIXML_LIBRARY
|
||||
NAMES pugixml
|
||||
HINTS ${PC_PUGIXML_LIBDIR}
|
||||
PATHS ${PUGIXML_ROOT_USER_DEFINED}/lib
|
||||
${PUGIXML_ROOT_USER_DEFINED}/lib64
|
||||
${GNSSSDR_LIB_PATHS}
|
||||
PATH_SUFFIXES pugixml-${PC_PUGIXML_VERSION} pugixml-1.9
|
||||
PATHS
|
||||
${PUGIXML_ROOT_USER_DEFINED}/lib
|
||||
${PUGIXML_ROOT_USER_DEFINED}/lib64
|
||||
${GNSSSDR_LIB_PATHS}
|
||||
PATH_SUFFIXES
|
||||
pugixml-${PC_PUGIXML_VERSION}
|
||||
pugixml-1.9
|
||||
)
|
||||
|
||||
# Support the REQUIRED and QUIET arguments, and set PUGIXML_FOUND if found.
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(PUGIXML DEFAULT_MSG PUGIXML_LIBRARY
|
||||
PUGIXML_INCLUDE_DIR)
|
||||
find_package_handle_standard_args(PUGIXML DEFAULT_MSG
|
||||
PUGIXML_LIBRARY
|
||||
PUGIXML_INCLUDE_DIR
|
||||
)
|
||||
|
||||
if(PUGIXML_FOUND)
|
||||
set(PUGIXML_LIBRARIES ${PUGIXML_LIBRARY})
|
||||
set(PUGIXML_LIBRARIES "${PUGIXML_LIBRARY}")
|
||||
|
||||
if(NOT PUGIXML_FIND_QUIETLY)
|
||||
message(STATUS "PugiXML include = ${PUGIXML_INCLUDE_DIR}")
|
||||
message(STATUS "PugiXML library = ${PUGIXML_LIBRARY}")
|
||||
endif()
|
||||
|
||||
if(PC_PUGIXML_VERSION)
|
||||
set(PUGIXML_VERSION ${PC_PUGIXML_VERSION})
|
||||
set(PUGIXML_VERSION "${PC_PUGIXML_VERSION}")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "PugiXML not found.")
|
||||
endif()
|
||||
|
||||
set_package_properties(PUGIXML PROPERTIES
|
||||
@@ -89,7 +94,8 @@ set_package_properties(PUGIXML PROPERTIES
|
||||
|
||||
if(PUGIXML_FOUND AND PUGIXML_VERSION)
|
||||
set_package_properties(PUGIXML PROPERTIES
|
||||
DESCRIPTION "Light-weight, simple and fast XML parser for C++ (found: v${PUGIXML_VERSION})"
|
||||
DESCRIPTION
|
||||
"Light-weight, simple and fast XML parser for C++ (found: v${PUGIXML_VERSION})"
|
||||
)
|
||||
else()
|
||||
set_package_properties(PUGIXML PROPERTIES
|
||||
@@ -100,11 +106,10 @@ endif()
|
||||
mark_as_advanced(PUGIXML_LIBRARY PUGIXML_INCLUDE_DIR)
|
||||
|
||||
if(PUGIXML_FOUND AND NOT TARGET Pugixml::pugixml)
|
||||
add_library(Pugixml::pugixml SHARED IMPORTED)
|
||||
add_library(Pugixml::pugixml UNKNOWN IMPORTED)
|
||||
set_target_properties(Pugixml::pugixml PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
|
||||
IMPORTED_LOCATION "${PUGIXML_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${PUGIXML_INCLUDE_DIR}"
|
||||
INTERFACE_LINK_LIBRARIES "${PUGIXML_LIBRARY}"
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -17,7 +17,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
@@ -62,7 +62,7 @@ if(PC_TELEORBIT_VERSION)
|
||||
set(TELEORBIT_VERSION ${PC_TELEORBIT_VERSION})
|
||||
endif()
|
||||
|
||||
if(NOT TELEORBIT_VERSION)
|
||||
if(TELEORBIT_FOUND AND NOT TELEORBIT_VERSION)
|
||||
set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION})
|
||||
unset(PACKAGE_VERSION)
|
||||
list(GET TELEORBIT_LIBRARIES 0 FIRST_DIR)
|
||||
|
||||
+129
-32
@@ -1,7 +1,7 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-FileCopyrightText: 2011-2026 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
#
|
||||
@@ -20,69 +20,167 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
pkg_check_modules(PC_UHD uhd)
|
||||
|
||||
if(NOT UHD_ROOT)
|
||||
set(UHD_ROOT_USER_PROVIDED /usr/local)
|
||||
set(UHD_ROOT_USER_PROVIDED "")
|
||||
if(DEFINED UHD_ROOT AND NOT "${UHD_ROOT}" STREQUAL "")
|
||||
list(APPEND UHD_ROOT_USER_PROVIDED "${UHD_ROOT}")
|
||||
else()
|
||||
set(UHD_ROOT_USER_PROVIDED ${UHD_ROOT})
|
||||
list(APPEND UHD_ROOT_USER_PROVIDED "/usr/local")
|
||||
endif()
|
||||
|
||||
if(GNURADIO_INSTALL_PREFIX)
|
||||
set(UHD_ROOT_USER_PROVIDED
|
||||
${UHD_ROOT_USER_PROVIDED}
|
||||
${GNURADIO_INSTALL_PREFIX}
|
||||
list(APPEND UHD_ROOT_USER_PROVIDED
|
||||
"${GNURADIO_INSTALL_PREFIX}"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{UHD_ROOT})
|
||||
set(UHD_ROOT_USER_PROVIDED
|
||||
${UHD_ROOT_USER_PROVIDED}
|
||||
$ENV{UHD_ROOT}
|
||||
list(APPEND UHD_ROOT_USER_PROVIDED
|
||||
"$ENV{UHD_ROOT}"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{UHD_DIR})
|
||||
set(UHD_ROOT_USER_PROVIDED
|
||||
${UHD_ROOT_USER_PROVIDED}
|
||||
$ENV{UHD_DIR}
|
||||
list(APPEND UHD_ROOT_USER_PROVIDED
|
||||
"$ENV{UHD_DIR}"
|
||||
)
|
||||
endif()
|
||||
|
||||
find_path(UHD_INCLUDE_DIRS
|
||||
NAMES uhd/config.hpp
|
||||
HINTS ${PC_UHD_INCLUDEDIR}
|
||||
PATHS ${UHD_ROOT_USER_PROVIDED}/include
|
||||
${GNSSSDR_INCLUDE_PATHS}
|
||||
PATHS
|
||||
${UHD_ROOT_USER_PROVIDED}/include
|
||||
${GNSSSDR_INCLUDE_PATHS}
|
||||
)
|
||||
|
||||
find_library(UHD_LIBRARIES
|
||||
NAMES uhd
|
||||
HINTS ${PC_UHD_LIBDIR}
|
||||
PATHS ${UHD_ROOT_USER_PROVIDED}/lib
|
||||
${UHD_ROOT_USER_PROVIDED}/lib64
|
||||
${GNSSSDR_LIB_PATHS}
|
||||
PATHS
|
||||
${UHD_ROOT_USER_PROVIDED}/lib
|
||||
${UHD_ROOT_USER_PROVIDED}/lib64
|
||||
${GNSSSDR_LIB_PATHS}
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(UHD DEFAULT_MSG UHD_LIBRARIES UHD_INCLUDE_DIRS)
|
||||
find_package_handle_standard_args(UHD DEFAULT_MSG
|
||||
UHD_LIBRARIES
|
||||
UHD_INCLUDE_DIRS
|
||||
)
|
||||
|
||||
if(PC_UHD_VERSION)
|
||||
set(UHD_VERSION ${PC_UHD_VERSION})
|
||||
endif()
|
||||
if(NOT PC_UHD_VERSION)
|
||||
set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION})
|
||||
set(UHD_VERSION "${PC_UHD_VERSION}")
|
||||
else()
|
||||
if(DEFINED PACKAGE_VERSION)
|
||||
set(_UHD_OLD_PACKAGE_VERSION "${PACKAGE_VERSION}")
|
||||
set(_UHD_HAD_PACKAGE_VERSION TRUE)
|
||||
else()
|
||||
unset(_UHD_OLD_PACKAGE_VERSION)
|
||||
set(_UHD_HAD_PACKAGE_VERSION FALSE)
|
||||
endif()
|
||||
unset(PACKAGE_VERSION)
|
||||
list(GET UHD_LIBRARIES 0 FIRST_DIR)
|
||||
get_filename_component(UHD_LIBRARIES_DIR ${FIRST_DIR} DIRECTORY)
|
||||
if(EXISTS ${UHD_LIBRARIES_DIR}/cmake/uhd/UHDConfigVersion.cmake)
|
||||
include(${UHD_LIBRARIES_DIR}/cmake/uhd/UHDConfigVersion.cmake)
|
||||
|
||||
unset(_UHD_VERSION_CMAKE_FILES)
|
||||
unset(_UHD_VERSION_HEADER)
|
||||
unset(_UHD_VERSION_FROM_HEADER)
|
||||
|
||||
if(UHD_LIBRARIES)
|
||||
get_filename_component(UHD_LIBRARIES_DIR "${UHD_LIBRARIES}" DIRECTORY)
|
||||
get_filename_component(UHD_PREFIX_DIR "${UHD_LIBRARIES_DIR}" DIRECTORY)
|
||||
|
||||
set(_UHD_VERSION_CMAKE_FILES
|
||||
"${UHD_LIBRARIES_DIR}/cmake/uhd/UHDConfigVersion.cmake"
|
||||
"${UHD_LIBRARIES_DIR}/cmake/UHD/UHDConfigVersion.cmake"
|
||||
"${UHD_PREFIX_DIR}/lib/cmake/uhd/UHDConfigVersion.cmake"
|
||||
"${UHD_PREFIX_DIR}/lib/cmake/UHD/UHDConfigVersion.cmake"
|
||||
"${UHD_PREFIX_DIR}/lib64/cmake/uhd/UHDConfigVersion.cmake"
|
||||
"${UHD_PREFIX_DIR}/lib64/cmake/UHD/UHDConfigVersion.cmake"
|
||||
"${UHD_PREFIX_DIR}/share/uhd/cmake/UHDConfigVersion.cmake"
|
||||
"${UHD_PREFIX_DIR}/share/UHD/cmake/UHDConfigVersion.cmake"
|
||||
)
|
||||
|
||||
foreach(_uhd_version_file IN LISTS _UHD_VERSION_CMAKE_FILES)
|
||||
if(EXISTS "${_uhd_version_file}")
|
||||
include("${_uhd_version_file}")
|
||||
if(PACKAGE_VERSION)
|
||||
break()
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
if(PACKAGE_VERSION)
|
||||
set(UHD_VERSION ${PACKAGE_VERSION})
|
||||
set(UHD_VERSION "${PACKAGE_VERSION}")
|
||||
elseif(UHD_INCLUDE_DIRS)
|
||||
set(_UHD_VERSION_HEADER "${UHD_INCLUDE_DIRS}/uhd/version.hpp")
|
||||
|
||||
if(EXISTS "${_UHD_VERSION_HEADER}")
|
||||
file(STRINGS "${_UHD_VERSION_HEADER}"
|
||||
_uhd_version_major_line
|
||||
REGEX "^#define[ \t]+UHD_VERSION_MAJOR[ \t]+[0-9]+"
|
||||
)
|
||||
file(STRINGS "${_UHD_VERSION_HEADER}"
|
||||
_uhd_version_api_line
|
||||
REGEX "^#define[ \t]+UHD_VERSION_API[ \t]+[0-9]+"
|
||||
)
|
||||
file(STRINGS "${_UHD_VERSION_HEADER}"
|
||||
_uhd_version_abi_line
|
||||
REGEX "^#define[ \t]+UHD_VERSION_ABI[ \t]+[0-9]+"
|
||||
)
|
||||
file(STRINGS "${_UHD_VERSION_HEADER}"
|
||||
_uhd_version_abi_string_line
|
||||
REGEX "^#define[ \t]+UHD_VERSION_ABI_STRING[ \t]+\"[^\"]+\""
|
||||
)
|
||||
|
||||
if(_uhd_version_abi_string_line)
|
||||
string(REGEX REPLACE
|
||||
"^#define[ \t]+UHD_VERSION_ABI_STRING[ \t]+\"([^\"]+)\"$"
|
||||
"\\1"
|
||||
_uhd_version_abi_string
|
||||
"${_uhd_version_abi_string_line}"
|
||||
)
|
||||
set(_UHD_VERSION_FROM_HEADER "${_uhd_version_abi_string}")
|
||||
elseif(_uhd_version_major_line AND _uhd_version_api_line
|
||||
AND _uhd_version_abi_line)
|
||||
string(REGEX REPLACE
|
||||
"^#define[ \t]+UHD_VERSION_MAJOR[ \t]+([0-9]+)$"
|
||||
"\\1"
|
||||
_uhd_version_major
|
||||
"${_uhd_version_major_line}"
|
||||
)
|
||||
string(REGEX REPLACE
|
||||
"^#define[ \t]+UHD_VERSION_API[ \t]+([0-9]+)$"
|
||||
"\\1"
|
||||
_uhd_version_api
|
||||
"${_uhd_version_api_line}"
|
||||
)
|
||||
string(REGEX REPLACE
|
||||
"^#define[ \t]+UHD_VERSION_ABI[ \t]+([0-9]+)$"
|
||||
"\\1"
|
||||
_uhd_version_abi
|
||||
"${_uhd_version_abi_line}"
|
||||
)
|
||||
set(_UHD_VERSION_FROM_HEADER
|
||||
"${_uhd_version_major}.${_uhd_version_api}.${_uhd_version_abi}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(_UHD_VERSION_FROM_HEADER)
|
||||
set(UHD_VERSION "${_UHD_VERSION_FROM_HEADER}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(_UHD_HAD_PACKAGE_VERSION)
|
||||
set(PACKAGE_VERSION "${_UHD_OLD_PACKAGE_VERSION}")
|
||||
else()
|
||||
unset(PACKAGE_VERSION)
|
||||
endif()
|
||||
set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION})
|
||||
endif()
|
||||
|
||||
set_package_properties(UHD PROPERTIES
|
||||
@@ -100,12 +198,11 @@ else()
|
||||
endif()
|
||||
|
||||
if(UHD_FOUND AND NOT TARGET Uhd::uhd)
|
||||
add_library(Uhd::uhd SHARED IMPORTED)
|
||||
add_library(Uhd::uhd UNKNOWN IMPORTED)
|
||||
set_target_properties(Uhd::uhd PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
|
||||
IMPORTED_LOCATION "${UHD_LIBRARIES}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${UHD_INCLUDE_DIRS}"
|
||||
INTERFACE_LINK_LIBRARIES "${UHD_LIBRARIES}"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
+172
-58
@@ -1,7 +1,7 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-FileCopyrightText: 2011-2026 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
#
|
||||
@@ -20,78 +20,145 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
pkg_check_modules(PC_VOLK volk QUIET)
|
||||
|
||||
if(NOT VOLK_ROOT)
|
||||
set(VOLK_ROOT_USER_PROVIDED /usr)
|
||||
else()
|
||||
set(VOLK_ROOT_USER_PROVIDED ${VOLK_ROOT})
|
||||
endif()
|
||||
if(DEFINED ENV{VOLK_ROOT})
|
||||
set(VOLK_ROOT_USER_PROVIDED
|
||||
${VOLK_ROOT_USER_PROVIDED}
|
||||
$ENV{VOLK_ROOT}
|
||||
)
|
||||
endif()
|
||||
if(DEFINED ENV{VOLK_DIR})
|
||||
set(VOLK_ROOT_USER_PROVIDED
|
||||
${VOLK_ROOT_USER_PROVIDED}
|
||||
$ENV{VOLK_DIR}
|
||||
)
|
||||
endif()
|
||||
set(VOLK_ROOT_USER_PROVIDED
|
||||
${VOLK_ROOT_USER_PROVIDED}
|
||||
${CMAKE_INSTALL_PREFIX}
|
||||
)
|
||||
|
||||
find_path(VOLK_INCLUDE_DIRS
|
||||
########################################################################
|
||||
# Build candidate root list
|
||||
########################################################################
|
||||
set(_VOLK_ROOT_HINTS)
|
||||
|
||||
if(VOLK_ROOT)
|
||||
list(APPEND _VOLK_ROOT_HINTS "${VOLK_ROOT}")
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{VOLK_ROOT} AND NOT "$ENV{VOLK_ROOT}" STREQUAL "")
|
||||
list(APPEND _VOLK_ROOT_HINTS "$ENV{VOLK_ROOT}")
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{VOLK_DIR} AND NOT "$ENV{VOLK_DIR}" STREQUAL "")
|
||||
list(APPEND _VOLK_ROOT_HINTS "$ENV{VOLK_DIR}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_INSTALL_PREFIX)
|
||||
list(APPEND _VOLK_ROOT_HINTS "${CMAKE_INSTALL_PREFIX}")
|
||||
endif()
|
||||
|
||||
if(DEFINED _VOLK_ROOT_HINTS)
|
||||
list(REMOVE_DUPLICATES _VOLK_ROOT_HINTS)
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Search paths for headers and libraries
|
||||
########################################################################
|
||||
set(_VOLK_INCLUDE_HINTS)
|
||||
set(_VOLK_LIBRARY_HINTS)
|
||||
|
||||
if(PC_VOLK_INCLUDEDIR)
|
||||
list(APPEND _VOLK_INCLUDE_HINTS "${PC_VOLK_INCLUDEDIR}")
|
||||
endif()
|
||||
|
||||
if(PC_VOLK_LIBDIR)
|
||||
list(APPEND _VOLK_LIBRARY_HINTS "${PC_VOLK_LIBDIR}")
|
||||
endif()
|
||||
|
||||
foreach(_volk_prefix ${_VOLK_ROOT_HINTS})
|
||||
list(APPEND _VOLK_INCLUDE_HINTS "${_volk_prefix}/include")
|
||||
list(APPEND _VOLK_LIBRARY_HINTS
|
||||
"${_volk_prefix}/lib"
|
||||
"${_volk_prefix}/lib64"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
list(APPEND _VOLK_INCLUDE_HINTS ${GNSSSDR_INCLUDE_PATHS})
|
||||
list(APPEND _VOLK_LIBRARY_HINTS ${GNSSSDR_LIB_PATHS})
|
||||
|
||||
list(REMOVE_DUPLICATES _VOLK_INCLUDE_HINTS)
|
||||
list(REMOVE_DUPLICATES _VOLK_LIBRARY_HINTS)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Find headers and library
|
||||
########################################################################
|
||||
find_path(VOLK_INCLUDE_DIR
|
||||
NAMES volk/volk.h
|
||||
HINTS ${PC_VOLK_INCLUDEDIR}
|
||||
PATHS ${VOLK_ROOT_USER_PROVIDED}/include
|
||||
${GNSSSDR_INCLUDE_PATHS}
|
||||
PATHS ${_VOLK_INCLUDE_HINTS}
|
||||
)
|
||||
|
||||
find_library(VOLK_LIBRARIES
|
||||
find_library(VOLK_LIBRARY
|
||||
NAMES volk
|
||||
HINTS ${PC_VOLK_LIBDIR}
|
||||
PATHS ${VOLK_ROOT_USER_PROVIDED}/lib
|
||||
${VOLK_ROOT_USER_PROVIDED}/lib64
|
||||
${GNSSSDR_LIB_PATHS}
|
||||
PATHS ${_VOLK_LIBRARY_HINTS}
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Standard result handling
|
||||
########################################################################
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS)
|
||||
find_package_handle_standard_args(VOLK DEFAULT_MSG
|
||||
VOLK_LIBRARY
|
||||
VOLK_INCLUDE_DIR
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Determine version
|
||||
########################################################################
|
||||
if(PC_VOLK_VERSION)
|
||||
set(VOLK_VERSION ${PC_VOLK_VERSION})
|
||||
set(VOLK_VERSION "${PC_VOLK_VERSION}")
|
||||
endif()
|
||||
|
||||
if(NOT VOLK_VERSION)
|
||||
set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION})
|
||||
unset(PACKAGE_VERSION)
|
||||
list(GET VOLK_LIBRARIES 0 FIRST_DIR)
|
||||
get_filename_component(VOLK_LIB_DIR ${FIRST_DIR} DIRECTORY)
|
||||
if(EXISTS ${VOLK_LIB_DIR}/cmake/volk/VolkConfigVersion.cmake)
|
||||
if(VOLK_FOUND AND NOT VOLK_VERSION)
|
||||
get_filename_component(_VOLK_LIB_DIR "${VOLK_LIBRARY}" DIRECTORY)
|
||||
if(EXISTS "${_VOLK_LIB_DIR}/cmake/volk/VolkConfigVersion.cmake")
|
||||
if(DEFINED PACKAGE_VERSION)
|
||||
set(_VOLK_PACKAGE_VERSION_WAS_DEFINED TRUE)
|
||||
set(_VOLK_OLD_PACKAGE_VERSION "${PACKAGE_VERSION}")
|
||||
else()
|
||||
set(_VOLK_PACKAGE_VERSION_WAS_DEFINED FALSE)
|
||||
endif()
|
||||
|
||||
unset(PACKAGE_VERSION)
|
||||
set(PACKAGE_FIND_VERSION_MAJOR 0)
|
||||
include(${VOLK_LIB_DIR}/cmake/volk/VolkConfigVersion.cmake)
|
||||
include("${_VOLK_LIB_DIR}/cmake/volk/VolkConfigVersion.cmake")
|
||||
|
||||
if(PACKAGE_VERSION)
|
||||
set(VOLK_VERSION "${PACKAGE_VERSION}")
|
||||
endif()
|
||||
|
||||
unset(PACKAGE_VERSION)
|
||||
unset(PACKAGE_FIND_VERSION_MAJOR)
|
||||
|
||||
if(_VOLK_PACKAGE_VERSION_WAS_DEFINED)
|
||||
set(PACKAGE_VERSION "${_VOLK_OLD_PACKAGE_VERSION}")
|
||||
else()
|
||||
unset(PACKAGE_VERSION)
|
||||
endif()
|
||||
|
||||
unset(_VOLK_PACKAGE_VERSION_WAS_DEFINED)
|
||||
unset(_VOLK_OLD_PACKAGE_VERSION)
|
||||
endif()
|
||||
if(PACKAGE_VERSION)
|
||||
set(VOLK_VERSION ${PACKAGE_VERSION})
|
||||
endif()
|
||||
set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION})
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Package metadata
|
||||
########################################################################
|
||||
set_package_properties(VOLK PROPERTIES
|
||||
URL "https://www.libvolk.org"
|
||||
)
|
||||
|
||||
if(VOLK_FOUND AND VOLK_VERSION)
|
||||
set_package_properties(VOLK PROPERTIES
|
||||
DESCRIPTION "Vector-Optimized Library of Kernels (found: v${VOLK_VERSION})"
|
||||
DESCRIPTION
|
||||
"Vector-Optimized Library of Kernels (found: v${VOLK_VERSION})"
|
||||
)
|
||||
else()
|
||||
set_package_properties(VOLK PROPERTIES
|
||||
@@ -99,24 +166,71 @@ else()
|
||||
)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(VOLK_LIBRARIES VOLK_INCLUDE_DIRS VOLK_VERSION)
|
||||
|
||||
########################################################################
|
||||
# ORC support
|
||||
########################################################################
|
||||
if(NOT ORC_FOUND)
|
||||
find_package(ORC QUIET)
|
||||
endif()
|
||||
if(ORC_LIBRARIES_STATIC)
|
||||
set(VOLK_LINK_LIBRARIES ${VOLK_LIBRARIES} ${ORC_LIBRARIES_STATIC})
|
||||
set(VOLK_INCLUDE_DIRS ${VOLK_INCLUDE_DIRS} ${ORC_INCLUDE_DIRS})
|
||||
else()
|
||||
set(VOLK_LINK_LIBRARIES ${VOLK_LIBRARIES})
|
||||
|
||||
set(VOLK_LINK_LIBRARIES)
|
||||
set(VOLK_INTERFACE_INCLUDE_DIRS "${VOLK_INCLUDE_DIR}")
|
||||
|
||||
if(ORC_FOUND AND ORC_LIBRARIES_STATIC)
|
||||
list(APPEND VOLK_LINK_LIBRARIES ${ORC_LIBRARIES_STATIC})
|
||||
if(VOLK_VERSION AND VOLK_VERSION VERSION_LESS "2.3.0")
|
||||
if(ORC_INCLUDE_DIRS)
|
||||
list(APPEND VOLK_INTERFACE_INCLUDE_DIRS ${ORC_INCLUDE_DIRS})
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(VOLK_FOUND AND NOT TARGET Volk::volk)
|
||||
add_library(Volk::volk SHARED IMPORTED)
|
||||
set_target_properties(Volk::volk PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
|
||||
IMPORTED_LOCATION "${VOLK_LIBRARIES}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${VOLK_INCLUDE_DIRS}"
|
||||
INTERFACE_LINK_LIBRARIES "${VOLK_LINK_LIBRARIES}"
|
||||
)
|
||||
list(REMOVE_DUPLICATES VOLK_INTERFACE_INCLUDE_DIRS)
|
||||
if(DEFINED VOLK_LINK_LIBRARIES)
|
||||
list(REMOVE_DUPLICATES VOLK_LINK_LIBRARIES)
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Compatibility variables
|
||||
########################################################################
|
||||
set(VOLK_LIBRARIES "${VOLK_LIBRARY}")
|
||||
set(VOLK_INCLUDE_DIRS "${VOLK_INTERFACE_INCLUDE_DIRS}")
|
||||
|
||||
mark_as_advanced(
|
||||
VOLK_LIBRARY
|
||||
VOLK_INCLUDE_DIR
|
||||
VOLK_LIBRARIES
|
||||
VOLK_INCLUDE_DIRS
|
||||
VOLK_VERSION
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Define imported target
|
||||
########################################################################
|
||||
if(VOLK_FOUND AND NOT TARGET Volk::volk)
|
||||
add_library(Volk::volk UNKNOWN IMPORTED)
|
||||
set_target_properties(Volk::volk PROPERTIES
|
||||
IMPORTED_LOCATION "${VOLK_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${VOLK_INTERFACE_INCLUDE_DIRS}"
|
||||
)
|
||||
if(VOLK_LINK_LIBRARIES)
|
||||
set_target_properties(Volk::volk PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "${VOLK_LINK_LIBRARIES}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Cleanup internal variables
|
||||
########################################################################
|
||||
unset(_VOLK_ROOT_HINTS)
|
||||
unset(_VOLK_INCLUDE_HINTS)
|
||||
unset(_VOLK_LIBRARY_HINTS)
|
||||
unset(_VOLK_LIB_DIR)
|
||||
unset(_volk_prefix)
|
||||
unset(VOLK_INTERFACE_INCLUDE_DIRS)
|
||||
unset(VOLK_LINK_LIBRARIES)
|
||||
|
||||
@@ -21,7 +21,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ if(NOT COMMAND feature_summary)
|
||||
include(FeatureSummary)
|
||||
endif()
|
||||
|
||||
if(NOT GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
||||
include(GnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
@@ -73,7 +73,7 @@ else()
|
||||
message(" The GnuTLS library with openssl compatibility enabled has not been found.")
|
||||
message(" You can try to install the required libraries by typing:")
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(" sudo yum install openssl-devel")
|
||||
else()
|
||||
message(" sudo apt install libgnutls28-dev")
|
||||
|
||||
+334
-153
@@ -1,33 +1,137 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-FileCopyrightText: 2011-2026 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
|
||||
########################################################################
|
||||
# Check for the existence of a python module:
|
||||
# - desc a string description of the check
|
||||
# - mod the name of the module to import
|
||||
# - cmd an additional command to run
|
||||
# - have the result variable to set
|
||||
# Internal helper:
|
||||
# Run a Python snippet with the selected interpreter.
|
||||
#
|
||||
# Usage:
|
||||
# gnsssdr_python_run("<python code>" result_var)
|
||||
#
|
||||
# The Python code must exit with code 0 on success and non-zero on failure.
|
||||
########################################################################
|
||||
macro(GNSSSDR_PYTHON_CHECK_MODULE desc mod cmd have)
|
||||
message(STATUS "Python checking for ${desc}")
|
||||
macro(GNSSSDR_PYTHON_RUN code result_var)
|
||||
execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} -c "
|
||||
#########################################
|
||||
try: import ${mod}
|
||||
except:
|
||||
try: ${mod}
|
||||
except: exit(-1)
|
||||
try: assert ${cmd}
|
||||
except: exit(-1)
|
||||
#########################################"
|
||||
OUTPUT_QUIET ERROR_QUIET
|
||||
RESULT_VARIABLE ${have}
|
||||
COMMAND ${PYTHON_EXECUTABLE} -c "${code}"
|
||||
OUTPUT_QUIET
|
||||
ERROR_QUIET
|
||||
RESULT_VARIABLE _gnsssdr_python_run_result
|
||||
)
|
||||
if(${have} EQUAL 0)
|
||||
set(${result_var} ${_gnsssdr_python_run_result})
|
||||
endmacro()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Internal helper:
|
||||
# Read Python version information from the selected interpreter.
|
||||
#
|
||||
# Sets:
|
||||
# PYTHON_VERSION_STRING
|
||||
# PYTHON_VERSION_MAJOR
|
||||
########################################################################
|
||||
macro(GNSSSDR_PYTHON_GET_VERSION)
|
||||
unset(PYTHON_VERSION_STRING)
|
||||
unset(PYTHON_VERSION_MAJOR)
|
||||
execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} -c
|
||||
"import sys; sys.stdout.write(sys.version.split()[0])"
|
||||
OUTPUT_VARIABLE PYTHON_VERSION_STRING
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if(NOT "${PYTHON_VERSION_STRING}" STREQUAL "")
|
||||
string(SUBSTRING "${PYTHON_VERSION_STRING}" 0 1 PYTHON_VERSION_MAJOR)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Check that Python satisfies a minimum version.
|
||||
#
|
||||
# Arguments:
|
||||
# minver Minimum version string, e.g. 2.7 or 3.6
|
||||
# have Output variable set to TRUE/FALSE
|
||||
########################################################################
|
||||
macro(GNSSSDR_PYTHON_CHECK_MIN_VERSION minver have)
|
||||
message(STATUS "Python checking for python >= ${minver}")
|
||||
gnsssdr_python_run(
|
||||
"import sys
|
||||
|
||||
def norm(v):
|
||||
out = []
|
||||
for p in str(v).split('.'):
|
||||
n = ''.join([c for c in p if '0' <= c <= '9'])
|
||||
out.append(int(n or '0'))
|
||||
while len(out) < 3:
|
||||
out.append(0)
|
||||
return tuple(out)
|
||||
|
||||
sys.exit(0 if norm(sys.version.split()[0]) >= norm('${minver}') else 1)"
|
||||
_gnsssdr_python_minver_result
|
||||
)
|
||||
if(_gnsssdr_python_minver_result EQUAL 0)
|
||||
message(STATUS "Python checking for python >= ${minver} - found")
|
||||
set(${have} TRUE)
|
||||
else()
|
||||
message(STATUS "Python checking for python >= ${minver} - not found")
|
||||
set(${have} FALSE)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Check for a Python module, optionally with a minimum version.
|
||||
#
|
||||
# Arguments:
|
||||
# desc Human-readable description
|
||||
# mod Module name to import
|
||||
# minver Minimum module version, or empty string to skip version check
|
||||
# have Output variable set to TRUE/FALSE
|
||||
#
|
||||
########################################################################
|
||||
macro(GNSSSDR_PYTHON_CHECK_MODULE desc mod minver have)
|
||||
message(STATUS "Python checking for ${desc}")
|
||||
if("${minver}" STREQUAL "")
|
||||
gnsssdr_python_run(
|
||||
"import sys
|
||||
try:
|
||||
import ${mod}
|
||||
except Exception:
|
||||
sys.exit(1)
|
||||
sys.exit(0)"
|
||||
_gnsssdr_python_module_result
|
||||
)
|
||||
else()
|
||||
gnsssdr_python_run(
|
||||
"import sys
|
||||
try:
|
||||
import ${mod}
|
||||
except Exception:
|
||||
sys.exit(1)
|
||||
|
||||
def norm(v):
|
||||
out = []
|
||||
for p in str(v).split('.'):
|
||||
n = ''.join([c for c in p if '0' <= c <= '9'])
|
||||
out.append(int(n or '0'))
|
||||
while len(out) < 3:
|
||||
out.append(0)
|
||||
return tuple(out)
|
||||
|
||||
try:
|
||||
modver = ${mod}.__version__
|
||||
except Exception:
|
||||
sys.exit(1)
|
||||
|
||||
sys.exit(0 if norm(modver) >= norm('${minver}') else 1)"
|
||||
_gnsssdr_python_module_result
|
||||
)
|
||||
endif()
|
||||
if(_gnsssdr_python_module_result EQUAL 0)
|
||||
message(STATUS "Python checking for ${desc} - found")
|
||||
set(${have} TRUE)
|
||||
else()
|
||||
@@ -38,159 +142,236 @@ endmacro()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Setup the python interpreter:
|
||||
# This allows the user to specify a specific interpreter,
|
||||
# or finds the interpreter via the built-in cmake module.
|
||||
# Internal helper:
|
||||
# Test whether a given interpreter is suitable.
|
||||
#
|
||||
# Conditions:
|
||||
# - Python version >= GNSSSDR_PYTHON_MIN_VERSION
|
||||
# - mako >= GNSSSDR_MAKO_MIN_VERSION
|
||||
# - six present if Python 2
|
||||
#
|
||||
# Arguments:
|
||||
# candidate Full path to Python interpreter
|
||||
# have Output variable set to TRUE/FALSE
|
||||
########################################################################
|
||||
function(GNSSSDR_PYTHON_EVALUATE_CANDIDATE candidate have)
|
||||
set(${have} FALSE PARENT_SCOPE)
|
||||
|
||||
if(CMAKE_VERSION VERSION_LESS 3.12 OR CMAKE_CROSSCOMPILING)
|
||||
if(PYTHON_EXECUTABLE)
|
||||
message(STATUS "User set python executable ${PYTHON_EXECUTABLE}")
|
||||
string(FIND "${PYTHON_EXECUTABLE}" "python3" IS_PYTHON3)
|
||||
if(IS_PYTHON3 EQUAL -1)
|
||||
if(CMAKE_VERSION VERSION_LESS "3.24")
|
||||
find_package(PythonInterp ${GNSSSDR_PYTHON_MIN_VERSION} REQUIRED)
|
||||
else()
|
||||
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||
find_package(Python2 COMPONENTS Interpreter)
|
||||
set(PYTHONINTERP_FOUND Python2_Interpreter_FOUND)
|
||||
set(PYTHON_VERSION_MAJOR "${Python2_VERSION_MAJOR}")
|
||||
set(PYTHON_VERSION_STRING "${Python2_VERSION_MAJOR}.${Python2_VERSION_MINOR}")
|
||||
endif()
|
||||
else()
|
||||
if(CMAKE_VERSION VERSION_LESS "3.24")
|
||||
find_package(PythonInterp ${GNSSSDR_PYTHON3_MIN_VERSION} REQUIRED)
|
||||
else()
|
||||
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||
find_package(Python3 COMPONENTS Interpreter)
|
||||
set(PYTHONINTERP_FOUND Python3_Interpreter_FOUND)
|
||||
set(PYTHON_VERSION_MAJOR "${Python3_VERSION_MAJOR}")
|
||||
set(PYTHON_VERSION_STRING "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}")
|
||||
endif()
|
||||
endif()
|
||||
gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND)
|
||||
gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND)
|
||||
if(IS_PYTHON3 EQUAL -1)
|
||||
gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
|
||||
if("${candidate}" STREQUAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${candidate}")
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(PYTHON_EXECUTABLE "${candidate}")
|
||||
gnsssdr_python_get_version()
|
||||
|
||||
if("${PYTHON_VERSION_STRING}" STREQUAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
gnsssdr_python_check_min_version(
|
||||
${GNSSSDR_PYTHON_MIN_VERSION}
|
||||
_GNSSSDR_PYTHON_MIN_VER_FOUND
|
||||
)
|
||||
if(NOT _GNSSSDR_PYTHON_MIN_VER_FOUND)
|
||||
return()
|
||||
endif()
|
||||
|
||||
gnsssdr_python_check_module(
|
||||
"mako >= ${GNSSSDR_MAKO_MIN_VERSION}"
|
||||
mako
|
||||
${GNSSSDR_MAKO_MIN_VERSION}
|
||||
_GNSSSDR_MAKO_FOUND
|
||||
)
|
||||
if(NOT _GNSSSDR_MAKO_FOUND)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(PYTHON_VERSION_STRING VERSION_LESS "3.0")
|
||||
gnsssdr_python_check_module(
|
||||
"six - python 2 and 3 compatibility library"
|
||||
six
|
||||
""
|
||||
_GNSSSDR_SIX_FOUND
|
||||
)
|
||||
if(NOT _GNSSSDR_SIX_FOUND)
|
||||
return()
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "PYTHON_EXECUTABLE not set - trying by default python3")
|
||||
if(CMAKE_VERSION VERSION_LESS "3.24")
|
||||
set(Python_ADDITIONAL_VERSIONS 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11)
|
||||
find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION})
|
||||
else()
|
||||
find_package(Python COMPONENTS Interpreter)
|
||||
set(PYTHONINTERP_FOUND Python_Interpreter_FOUND)
|
||||
set(PYTHON_EXECUTABLE "${Python_EXECUTABLE}")
|
||||
set(PYTHON_VERSION_MAJOR "${Python_VERSION_MAJOR}")
|
||||
set(PYTHON_VERSION_STRING "${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}")
|
||||
endif()
|
||||
if(NOT PYTHONINTERP_FOUND)
|
||||
message(STATUS "python3 not found - trying with python2.7")
|
||||
if(CMAKE_VERSION VERSION_LESS "3.24")
|
||||
set(Python_ADDITIONAL_VERSIONS 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11)
|
||||
find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION})
|
||||
else()
|
||||
find_package(Python2 COMPONENTS Interpreter)
|
||||
set(PYTHONINTERP_FOUND Python2_Interpreter_FOUND)
|
||||
set(PYTHON_EXECUTABLE "${Python2_EXECUTABLE}")
|
||||
set(PYTHON_VERSION_MAJOR "${Python2_VERSION_MAJOR}")
|
||||
set(PYTHON_VERSION_STRING "${Python2_VERSION_MAJOR}.${Python2_VERSION_MINOR}")
|
||||
endif()
|
||||
endif()
|
||||
gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND)
|
||||
gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND)
|
||||
if(PYTHON_VERSION_STRING VERSION_LESS "3.0")
|
||||
gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
|
||||
endif()
|
||||
set(_GNSSSDR_SIX_FOUND TRUE)
|
||||
endif()
|
||||
else()
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(_previous ${CMAKE_FIND_FRAMEWORK})
|
||||
|
||||
set(_GNSSSDR_CANDIDATE_VERSION_STRING "${PYTHON_VERSION_STRING}"
|
||||
PARENT_SCOPE)
|
||||
set(_GNSSSDR_CANDIDATE_VERSION_MAJOR "${PYTHON_VERSION_MAJOR}"
|
||||
PARENT_SCOPE)
|
||||
set(_GNSSSDR_CANDIDATE_PYTHON_MIN_VER_FOUND
|
||||
"${_GNSSSDR_PYTHON_MIN_VER_FOUND}" PARENT_SCOPE)
|
||||
set(_GNSSSDR_CANDIDATE_MAKO_FOUND "${_GNSSSDR_MAKO_FOUND}"
|
||||
PARENT_SCOPE)
|
||||
set(_GNSSSDR_CANDIDATE_SIX_FOUND "${_GNSSSDR_SIX_FOUND}"
|
||||
PARENT_SCOPE)
|
||||
set(${have} TRUE PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Select the Python interpreter
|
||||
#
|
||||
# Strategy:
|
||||
# 1) Respect user-provided PYTHON_EXECUTABLE
|
||||
# 2) On modern CMake, try Python3 then Python2
|
||||
# 3) On old CMake, collect candidates from PythonInterp and explicit names
|
||||
# 4) Last resort: find_program()
|
||||
#
|
||||
# The selected interpreter must satisfy all required module checks.
|
||||
########################################################################
|
||||
set(_GNSSSDR_PYTHON_CANDIDATES "")
|
||||
set(_GNSSSDR_SELECTED_PYTHON "")
|
||||
set(_GNSSSDR_USER_PYTHON_EXECUTABLE "")
|
||||
|
||||
if(DEFINED PYTHON_EXECUTABLE AND NOT "${PYTHON_EXECUTABLE}" STREQUAL "")
|
||||
set(_GNSSSDR_USER_PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
||||
endif()
|
||||
|
||||
set(PYTHONINTERP_FOUND FALSE)
|
||||
set(PYTHON_MIN_VER_FOUND FALSE)
|
||||
set(MAKO_FOUND FALSE)
|
||||
set(SIX_FOUND FALSE)
|
||||
unset(PYTHON_VERSION_MAJOR)
|
||||
unset(PYTHON_VERSION_STRING)
|
||||
unset(PYTHON3)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Build candidate list
|
||||
########################################################################
|
||||
|
||||
# 1) Respect user-provided interpreter first
|
||||
if(NOT "${_GNSSSDR_USER_PYTHON_EXECUTABLE}" STREQUAL "")
|
||||
message(STATUS
|
||||
"User set python executable ${_GNSSSDR_USER_PYTHON_EXECUTABLE}"
|
||||
)
|
||||
list(APPEND _GNSSSDR_PYTHON_CANDIDATES
|
||||
"${_GNSSSDR_USER_PYTHON_EXECUTABLE}"
|
||||
)
|
||||
endif()
|
||||
|
||||
# 2) Modern CMake (>= 3.12): prefer Python3, then Python2
|
||||
if(NOT CMAKE_VERSION VERSION_LESS "3.12" AND NOT CMAKE_CROSSCOMPILING)
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
set(_GNSSSDR_PREVIOUS_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
|
||||
set(CMAKE_FIND_FRAMEWORK LAST)
|
||||
endif()
|
||||
if(PYTHON_EXECUTABLE)
|
||||
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||
endif()
|
||||
|
||||
unset(Python3_EXECUTABLE)
|
||||
unset(Python2_EXECUTABLE)
|
||||
unset(Python3_FOUND)
|
||||
unset(Python2_FOUND)
|
||||
|
||||
find_package(Python3 COMPONENTS Interpreter)
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(CMAKE_FIND_FRAMEWORK ${_previous})
|
||||
endif()
|
||||
if(Python3_FOUND)
|
||||
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
|
||||
set(PYTHON_VERSION_MAJOR "${Python3_VERSION_MAJOR}")
|
||||
set(PYTHON_VERSION_STRING "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}")
|
||||
gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND)
|
||||
gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND)
|
||||
endif()
|
||||
if(NOT Python3_FOUND OR NOT MAKO_FOUND)
|
||||
list(APPEND _GNSSSDR_PYTHON_CANDIDATES "${Python3_EXECUTABLE}")
|
||||
else()
|
||||
find_package(Python2 COMPONENTS Interpreter)
|
||||
if(Python2_FOUND)
|
||||
set(PYTHON_EXECUTABLE ${Python2_EXECUTABLE})
|
||||
set(PYTHON_VERSION_MAJOR ${Python2_VERSION_MAJOR})
|
||||
set(PYTHON_VERSION_STRING "${Python2_VERSION_MAJOR}.${Python2_VERSION_MINOR}")
|
||||
gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND)
|
||||
gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND)
|
||||
gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
|
||||
endif()
|
||||
if(NOT MAKO_FOUND OR NOT SIX_FOUND)
|
||||
unset(PYTHON_EXECUTABLE)
|
||||
if(CMAKE_VERSION VERSION_LESS "3.24")
|
||||
find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION})
|
||||
else()
|
||||
find_package(Python COMPONENTS Interpreter)
|
||||
set(PYTHONINTERP_FOUND Python_Interpreter_FOUND)
|
||||
set(PYTHON_EXECUTABLE "${Python_EXECUTABLE}")
|
||||
set(PYTHON_VERSION_STRING "${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}")
|
||||
set(PYTHON_VERSION_MAJOR "${Python_VERSION_MAJOR}")
|
||||
endif()
|
||||
gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND)
|
||||
gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND)
|
||||
if(NOT MAKO_FOUND)
|
||||
unset(PYTHON_EXECUTABLE)
|
||||
unset(PYTHON_VERSION_STRING)
|
||||
unset(PYTHON_VERSION_MAJOR)
|
||||
find_program(PYTHON_EXECUTABLE NAMES python3 python)
|
||||
if(PYTHON_EXECUTABLE)
|
||||
set(PYTHONINTERP_FOUND TRUE)
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} --version OUTPUT_VARIABLE PYTHON_VERSION_STRING_AUX)
|
||||
string(FIND "${PYTHON_VERSION_STRING_AUX}" " " blank_char_index)
|
||||
if(blank_char_index GREATER -1)
|
||||
math(EXPR start_index "${blank_char_index} + 1")
|
||||
string(SUBSTRING "${PYTHON_VERSION_STRING_AUX}" ${start_index} -1 PYTHON_VERSION_STRING)
|
||||
string(STRIP ${PYTHON_VERSION_STRING} PYTHON_VERSION_STRING)
|
||||
string(SUBSTRING "${PYTHON_VERSION_STRING_AUX}" ${start_index} 1 PYTHON_VERSION_MAJOR)
|
||||
message(STATUS "Found Python: ${PYTHON_EXECUTABLE} (found version: ${PYTHON_VERSION_STRING})")
|
||||
else()
|
||||
string(FIND ${PYTHON_EXECUTABLE} "python3" is_python3)
|
||||
if(is_python3 GREATER -1)
|
||||
set(PYTHON_VERSION_MAJOR "3")
|
||||
set(PYTHON_VERSION_STRING "3.10") # ?
|
||||
else()
|
||||
set(PYTHON_VERSION_MAJOR "2")
|
||||
set(PYTHON_VERSION_STRING "2.7")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
gnsssdr_python_check_module("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND)
|
||||
endif()
|
||||
if(MAKO_FOUND AND PYTHON_VERSION_STRING VERSION_LESS "3.0")
|
||||
gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
|
||||
endif()
|
||||
list(APPEND _GNSSSDR_PYTHON_CANDIDATES "${Python2_EXECUTABLE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
set(CMAKE_FIND_FRAMEWORK ${_GNSSSDR_PREVIOUS_CMAKE_FIND_FRAMEWORK})
|
||||
endif()
|
||||
|
||||
# 3) Old CMake: use PythonInterp as a candidate source,
|
||||
# but still validate the interpreter before accepting it
|
||||
else()
|
||||
set(Python_ADDITIONAL_VERSIONS
|
||||
3.11 3.10 3.9 3.8 3.7 3.6 3.5 3.4 2.7
|
||||
)
|
||||
if(CMAKE_VERSION VERSION_LESS "2.8.12")
|
||||
find_package(PythonInterp)
|
||||
else()
|
||||
find_package(PythonInterp ${GNSSSDR_PYTHON_MIN_VERSION})
|
||||
endif()
|
||||
if(PYTHONINTERP_FOUND AND NOT "${PYTHON_EXECUTABLE}" STREQUAL "")
|
||||
list(APPEND _GNSSSDR_PYTHON_CANDIDATES "${PYTHON_EXECUTABLE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if("${PYTHON_VERSION_MAJOR}" VERSION_EQUAL 3)
|
||||
# 4) Last-resort program-name fallbacks, in preferred order
|
||||
find_program(_GNSSSDR_PYTHON3 NAMES python3)
|
||||
find_program(_GNSSSDR_PYTHON2 NAMES python2.7 python2)
|
||||
find_program(_GNSSSDR_PYTHON NAMES python)
|
||||
|
||||
foreach(_gnsssdr_python_prog
|
||||
${_GNSSSDR_PYTHON3}
|
||||
${_GNSSSDR_PYTHON2}
|
||||
${_GNSSSDR_PYTHON}
|
||||
)
|
||||
if(NOT "${_gnsssdr_python_prog}" STREQUAL "")
|
||||
list(APPEND _GNSSSDR_PYTHON_CANDIDATES "${_gnsssdr_python_prog}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
list(REMOVE_DUPLICATES _GNSSSDR_PYTHON_CANDIDATES)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Evaluate candidates and accept the first fully suitable interpreter
|
||||
########################################################################
|
||||
foreach(_GNSSSDR_PYTHON_CANDIDATE IN LISTS _GNSSSDR_PYTHON_CANDIDATES)
|
||||
message(STATUS
|
||||
"Trying Python candidate: ${_GNSSSDR_PYTHON_CANDIDATE}")
|
||||
gnsssdr_python_evaluate_candidate(
|
||||
"${_GNSSSDR_PYTHON_CANDIDATE}"
|
||||
_GNSSSDR_PYTHON_CANDIDATE_OK
|
||||
)
|
||||
if(_GNSSSDR_PYTHON_CANDIDATE_OK)
|
||||
set(_GNSSSDR_SELECTED_PYTHON "${_GNSSSDR_PYTHON_CANDIDATE}")
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT "${_GNSSSDR_SELECTED_PYTHON}" STREQUAL "")
|
||||
set(PYTHON_EXECUTABLE "${_GNSSSDR_SELECTED_PYTHON}")
|
||||
set(PYTHONINTERP_FOUND TRUE)
|
||||
set(PYTHON_VERSION_STRING "${_GNSSSDR_CANDIDATE_VERSION_STRING}")
|
||||
set(PYTHON_VERSION_MAJOR "${_GNSSSDR_CANDIDATE_VERSION_MAJOR}")
|
||||
set(PYTHON_MIN_VER_FOUND "${_GNSSSDR_CANDIDATE_PYTHON_MIN_VER_FOUND}")
|
||||
set(MAKO_FOUND "${_GNSSSDR_CANDIDATE_MAKO_FOUND}")
|
||||
set(SIX_FOUND "${_GNSSSDR_CANDIDATE_SIX_FOUND}")
|
||||
else()
|
||||
set(PYTHONINTERP_FOUND FALSE)
|
||||
unset(PYTHON_EXECUTABLE)
|
||||
unset(PYTHON_VERSION_MAJOR)
|
||||
unset(PYTHON_VERSION_STRING)
|
||||
set(PYTHON_MIN_VER_FOUND FALSE)
|
||||
set(MAKO_FOUND FALSE)
|
||||
set(SIX_FOUND FALSE)
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Set convenience variables
|
||||
########################################################################
|
||||
if(DEFINED PYTHON_VERSION_MAJOR AND "${PYTHON_VERSION_MAJOR}" STREQUAL "3")
|
||||
set(PYTHON3 TRUE)
|
||||
endif()
|
||||
|
||||
if(CMAKE_CROSSCOMPILING)
|
||||
set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
|
||||
else()
|
||||
set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||
set(QA_PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
||||
endif()
|
||||
|
||||
# make the path to the executable appear in the cmake gui
|
||||
set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
|
||||
set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
|
||||
# Make the path to the executable appear in the CMake GUI
|
||||
set(PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE}" CACHE FILEPATH
|
||||
"python interpreter"
|
||||
)
|
||||
set(QA_PYTHON_EXECUTABLE "${QA_PYTHON_EXECUTABLE}" CACHE FILEPATH
|
||||
"python interpreter for QA tests"
|
||||
)
|
||||
|
||||
@@ -12,6 +12,19 @@ SPDX-FileCopyrightText: 2011-2026 Carles Fernandez-Prades <carles.fernandez@cttc
|
||||
|
||||
All notable changes to GNSS-SDR will be documented in this file.
|
||||
|
||||
## [Unreleased](https://github.com/gnss-sdr/gnss-sdr/tree/next)
|
||||
|
||||
### Improvements in Portability:
|
||||
|
||||
- Refactored Python interpreter detection and improved CMake portability and
|
||||
robustness across dependency discovery, distro detection, and
|
||||
cross-compilation handling.
|
||||
|
||||
See the definitions of concepts and metrics at
|
||||
https://gnss-sdr.org/design-forces/
|
||||
|
||||
|
||||
|
||||
## [GNSS-SDR v0.0.21](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.21) - 2026-04-14
|
||||
|
||||
### Improvements in Availability:
|
||||
|
||||
@@ -530,7 +530,7 @@ install(
|
||||
)
|
||||
|
||||
install(EXPORT VOLK_GNSSSDR-export FILE VolkGnsssdrTargets.cmake
|
||||
NAMESPACE VolkGnsssdr:: DESTINATION ${CMAKE_MODULES_DIR}/volk_gnsssdr
|
||||
NAMESPACE Volkgnsssdr:: DESTINATION ${CMAKE_MODULES_DIR}/volk_gnsssdr
|
||||
)
|
||||
|
||||
########################################################################
|
||||
|
||||
+6
-5
@@ -6,13 +6,13 @@
|
||||
|
||||
set(MACOS_PACKAGES_PREFIX "")
|
||||
# Detect if MacPorts is installed on this system; if so, return base path and version
|
||||
execute_process(COMMAND which port RESULT_VARIABLE DETECT_MACPORTS OUTPUT_VARIABLE MACPORTS_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(${DETECT_MACPORTS} EQUAL 0)
|
||||
find_program(MACPORTS_EXECUTABLE port)
|
||||
if(MACPORTS_EXECUTABLE)
|
||||
# "/opt/local/bin/port", so we get the parent directory
|
||||
get_filename_component(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY)
|
||||
get_filename_component(MACPORTS_PREFIX "${MACPORTS_EXECUTABLE}" DIRECTORY)
|
||||
# "/opt/local/bin", so we get the parent directory
|
||||
get_filename_component(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY)
|
||||
execute_process(COMMAND port version RESULT_VARIABLE DETECT_MACPORTS_VERSION OUTPUT_VARIABLE MACPORTS_VERSION ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
get_filename_component(MACPORTS_PREFIX "${MACPORTS_PREFIX}" DIRECTORY)
|
||||
execute_process(COMMAND "${MACPORTS_EXECUTABLE}" version RESULT_VARIABLE DETECT_MACPORTS_VERSION OUTPUT_VARIABLE MACPORTS_VERSION ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" MACPORTS_VERSION "${MACPORTS_VERSION}")
|
||||
set(MACOS_PACKAGES_PREFIX ${MACPORTS_PREFIX})
|
||||
endif()
|
||||
@@ -24,3 +24,4 @@ if(${DETECT_HOMEBREW} EQUAL 0)
|
||||
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" HOMEBREW_VERSION "${HOMEBREW_VERSION}")
|
||||
set(MACOS_PACKAGES_PREFIX ${HOMEBREW_PREFIX})
|
||||
endif()
|
||||
unset(MACPORTS_EXECUTABLE)
|
||||
|
||||
+135
-30
@@ -1,62 +1,167 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2021-2025 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-FileCopyrightText: 2021-2026 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
########################################################################
|
||||
# Find cpu_features
|
||||
#
|
||||
# Provides the following imported target:
|
||||
# CpuFeature::cpu_features
|
||||
########################################################################
|
||||
set(FPHSA_NAME_MISMATCHED ON)
|
||||
|
||||
if(NOT VOLK_GNSSSDR_LIB_PATHS)
|
||||
if(NOT DEFINED VOLK_GNSSSDR_LIB_PATHS)
|
||||
include(VolkGnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
find_library(CPUFEATURES_LIBRARIES
|
||||
|
||||
########################################################################
|
||||
# Build candidate root list
|
||||
########################################################################
|
||||
set(_CPUFEATURES_ROOT_HINTS)
|
||||
|
||||
if(CPUFEATURES_DIR)
|
||||
list(APPEND _CPUFEATURES_ROOT_HINTS "${CPUFEATURES_DIR}")
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{CPUFEATURES_DIR} AND NOT "$ENV{CPUFEATURES_DIR}" STREQUAL "")
|
||||
list(APPEND _CPUFEATURES_ROOT_HINTS "$ENV{CPUFEATURES_DIR}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_INSTALL_PREFIX)
|
||||
list(APPEND _CPUFEATURES_ROOT_HINTS "${CMAKE_INSTALL_PREFIX}")
|
||||
endif()
|
||||
|
||||
if(DEFINED _CPUFEATURES_ROOT_HINTS)
|
||||
list(REMOVE_DUPLICATES _CPUFEATURES_ROOT_HINTS)
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Search paths for headers and libraries
|
||||
########################################################################
|
||||
set(_CPUFEATURES_INCLUDE_HINTS)
|
||||
set(_CPUFEATURES_LIBRARY_HINTS)
|
||||
|
||||
foreach(_cpufeatures_prefix ${_CPUFEATURES_ROOT_HINTS})
|
||||
list(APPEND _CPUFEATURES_INCLUDE_HINTS
|
||||
"${_cpufeatures_prefix}"
|
||||
"${_cpufeatures_prefix}/include"
|
||||
)
|
||||
list(APPEND _CPUFEATURES_LIBRARY_HINTS
|
||||
"${_cpufeatures_prefix}/lib"
|
||||
"${_cpufeatures_prefix}/lib64"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
list(APPEND _CPUFEATURES_INCLUDE_HINTS ${VOLK_GNSSSDR_INCLUDE_PATHS})
|
||||
list(APPEND _CPUFEATURES_LIBRARY_HINTS ${VOLK_GNSSSDR_LIB_PATHS})
|
||||
|
||||
list(REMOVE_DUPLICATES _CPUFEATURES_INCLUDE_HINTS)
|
||||
list(REMOVE_DUPLICATES _CPUFEATURES_LIBRARY_HINTS)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Find headers and library
|
||||
########################################################################
|
||||
find_library(CPUFEATURES_LIBRARY
|
||||
NAMES cpu_features
|
||||
PATHS $ENV{CPUFEATURES_DIR}/lib
|
||||
${VOLK_GNSSSDR_LIB_PATHS}
|
||||
PATHS ${_CPUFEATURES_LIBRARY_HINTS}
|
||||
)
|
||||
|
||||
find_path(CPUFEATURES_INCLUDE_DIR cpu_features_macros.h
|
||||
PATHS $ENV{CPUFEATURES_DIR}/include
|
||||
$ENV{CPUFEATURES_DIR}
|
||||
${VOLK_GNSSSDR_INCLUDE_PATHS}
|
||||
find_path(CPUFEATURES_INCLUDE_DIR
|
||||
NAMES cpu_features_macros.h
|
||||
PATHS ${_CPUFEATURES_INCLUDE_HINTS}
|
||||
PATH_SUFFIXES cpu_features
|
||||
)
|
||||
|
||||
if(CPUFEATURES_INCLUDE_DIR AND CPUFEATURES_LIBRARIES)
|
||||
if(NOT PACKAGE_VERSION)
|
||||
set(PACKAGE_VERSION "")
|
||||
endif()
|
||||
set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION})
|
||||
unset(PACKAGE_VERSION)
|
||||
list(GET CPUFEATURES_LIBRARIES 0 FIRST_DIR)
|
||||
get_filename_component(CPUFEATURES_LIBRARIES_PATH ${FIRST_DIR} DIRECTORY)
|
||||
if(EXISTS ${CPUFEATURES_LIBRARIES_PATH}/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake)
|
||||
include(${CPUFEATURES_LIBRARIES_PATH}/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake)
|
||||
endif()
|
||||
if(PACKAGE_VERSION)
|
||||
set(CPUFEATURES_VERSION ${PACKAGE_VERSION})
|
||||
|
||||
########################################################################
|
||||
# Determine version
|
||||
########################################################################
|
||||
if(CPUFEATURES_INCLUDE_DIR AND CPUFEATURES_LIBRARY)
|
||||
get_filename_component(_CPUFEATURES_LIBRARY_PATH
|
||||
"${CPUFEATURES_LIBRARY}" DIRECTORY
|
||||
)
|
||||
|
||||
if(EXISTS
|
||||
"${_CPUFEATURES_LIBRARY_PATH}/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake")
|
||||
if(DEFINED PACKAGE_VERSION)
|
||||
set(_CPUFEATURES_PACKAGE_VERSION_WAS_DEFINED TRUE)
|
||||
set(_CPUFEATURES_OLD_PACKAGE_VERSION "${PACKAGE_VERSION}")
|
||||
else()
|
||||
set(_CPUFEATURES_PACKAGE_VERSION_WAS_DEFINED FALSE)
|
||||
endif()
|
||||
|
||||
unset(PACKAGE_VERSION)
|
||||
include(
|
||||
"${_CPUFEATURES_LIBRARY_PATH}/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake"
|
||||
)
|
||||
|
||||
if(DEFINED PACKAGE_VERSION AND NOT "${PACKAGE_VERSION}" STREQUAL "")
|
||||
set(CPUFEATURES_VERSION "${PACKAGE_VERSION}")
|
||||
else()
|
||||
set(CPUFEATURES_VERSION "Unknown")
|
||||
endif()
|
||||
|
||||
unset(PACKAGE_VERSION)
|
||||
|
||||
if(_CPUFEATURES_PACKAGE_VERSION_WAS_DEFINED)
|
||||
set(PACKAGE_VERSION "${_CPUFEATURES_OLD_PACKAGE_VERSION}")
|
||||
else()
|
||||
unset(PACKAGE_VERSION)
|
||||
endif()
|
||||
|
||||
unset(_CPUFEATURES_PACKAGE_VERSION_WAS_DEFINED)
|
||||
unset(_CPUFEATURES_OLD_PACKAGE_VERSION)
|
||||
else()
|
||||
set(CPUFEATURES_VERSION "Unknown")
|
||||
endif()
|
||||
set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION})
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Standard result handling
|
||||
########################################################################
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(CPUFEATURES
|
||||
DEFAULT_MSG
|
||||
CPUFEATURES_LIBRARIES
|
||||
CPUFEATURES_LIBRARY
|
||||
CPUFEATURES_INCLUDE_DIR
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Compatibility variables
|
||||
########################################################################
|
||||
set(CPUFEATURES_LIBRARIES "${CPUFEATURES_LIBRARY}")
|
||||
|
||||
mark_as_advanced(
|
||||
CPUFEATURES_LIBRARY
|
||||
CPUFEATURES_LIBRARIES
|
||||
CPUFEATURES_INCLUDE_DIR
|
||||
CPUFEATURES_VERSION
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Define imported target
|
||||
########################################################################
|
||||
if(CPUFEATURES_FOUND AND NOT TARGET CpuFeature::cpu_features)
|
||||
add_library(CpuFeature::cpu_features STATIC IMPORTED)
|
||||
add_library(CpuFeature::cpu_features UNKNOWN IMPORTED)
|
||||
set_target_properties(CpuFeature::cpu_features PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
IMPORTED_LOCATION "${CPUFEATURES_LIBRARIES}"
|
||||
IMPORTED_LOCATION "${CPUFEATURES_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CPUFEATURES_INCLUDE_DIR}"
|
||||
INTERFACE_LINK_LIBRARIES "${CPUFEATURES_LIBRARIES}"
|
||||
)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(CPUFEATURES_LIBRARIES)
|
||||
|
||||
########################################################################
|
||||
# Cleanup internal variables
|
||||
########################################################################
|
||||
unset(_CPUFEATURES_ROOT_HINTS)
|
||||
unset(_CPUFEATURES_INCLUDE_HINTS)
|
||||
unset(_CPUFEATURES_LIBRARY_HINTS)
|
||||
unset(_CPUFEATURES_LIBRARY_PATH)
|
||||
unset(_cpufeatures_prefix)
|
||||
+28
-20
@@ -66,11 +66,6 @@ Imported Targets
|
||||
Variables
|
||||
*********
|
||||
|
||||
.. variable:: CXX_FILESYSTEM_IS_EXPERIMENTAL
|
||||
|
||||
Set to ``TRUE`` when the :find-component:`fs.Experimental` version of C++
|
||||
filesystem library was found, otherwise ``FALSE``.
|
||||
|
||||
.. variable:: CXX_FILESYSTEM_HAVE_FS
|
||||
|
||||
Set to ``TRUE`` when a filesystem header was found.
|
||||
@@ -119,21 +114,30 @@ if(FILESYSTEM_FIND_QUIETLY)
|
||||
set(CMAKE_REQUIRED_QUIET ${FILESYSTEM_FIND_QUIETLY})
|
||||
endif()
|
||||
|
||||
if(DEFINED CMAKE_CXX_STANDARD)
|
||||
set(_FILESYSTEM_OLD_CMAKE_CXX_STANDARD_DEFINED TRUE)
|
||||
set(_FILESYSTEM_OLD_CMAKE_CXX_STANDARD "${CMAKE_CXX_STANDARD}")
|
||||
else()
|
||||
set(_FILESYSTEM_OLD_CMAKE_CXX_STANDARD_DEFINED FALSE)
|
||||
endif()
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(_filesystem_required_flag "")
|
||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "8.0.0"))
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.99")
|
||||
set(UNDEFINED_BEHAVIOR_WITHOUT_LINKING TRUE)
|
||||
set(_filesystem_required_flag "-std=c++17")
|
||||
elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.99"))
|
||||
set(_filesystem_required_flag "-std=c++17")
|
||||
elseif((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11"))
|
||||
set(_filesystem_required_flag "-std=c++17")
|
||||
elseif(MSVC AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "18"))
|
||||
set(_filesystem_required_flag "/std:c++17")
|
||||
endif()
|
||||
|
||||
if(_filesystem_required_flag)
|
||||
if(CMAKE_REQUIRED_FLAGS)
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${_filesystem_required_flag}")
|
||||
else()
|
||||
set(CMAKE_REQUIRED_FLAGS "${_filesystem_required_flag}")
|
||||
endif()
|
||||
set(CMAKE_REQUIRED_FLAGS "-std=c++17")
|
||||
endif()
|
||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.99"))
|
||||
set(CMAKE_REQUIRED_FLAGS "-std=c++17")
|
||||
endif()
|
||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11"))
|
||||
set(CMAKE_REQUIRED_FLAGS "-std=c++17")
|
||||
endif()
|
||||
if(MSVC AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "18"))
|
||||
set(CMAKE_REQUIRED_FLAGS "/std:c++17")
|
||||
endif()
|
||||
|
||||
# Normalize and check the component list we were given
|
||||
@@ -215,7 +219,6 @@ if(CXX_FILESYSTEM_HAVE_FS)
|
||||
|
||||
if(NOT CXX_FILESYSTEM_NO_LINK_NEEDED)
|
||||
set(prev_libraries ${CMAKE_REQUIRED_LIBRARIES})
|
||||
set(CMAKE_REQUIRED_FLAGS "-std=c++17")
|
||||
# Add the libstdc++ flag
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${prev_libraries} -lstdc++fs)
|
||||
check_cxx_source_compiles("${code}" CXX_FILESYSTEM_STDCPPFS_NEEDED)
|
||||
@@ -247,8 +250,10 @@ if(CXX_FILESYSTEM_HAVE_FS)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT ${_found})
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
if(_FILESYSTEM_OLD_CMAKE_CXX_STANDARD_DEFINED)
|
||||
set(CMAKE_CXX_STANDARD "${_FILESYSTEM_OLD_CMAKE_CXX_STANDARD}")
|
||||
else()
|
||||
unset(CMAKE_CXX_STANDARD)
|
||||
endif()
|
||||
|
||||
cmake_pop_check_state()
|
||||
@@ -261,3 +266,6 @@ find_package_handle_standard_args(FILESYSTEM DEFAULT_MSG FILESYSTEM_FOUND)
|
||||
if(FILESYSTEM_FIND_REQUIRED AND NOT FILESYSTEM_FOUND)
|
||||
message(FATAL_ERROR "Cannot compile a simple program using std::filesystem")
|
||||
endif()
|
||||
|
||||
unset(_FILESYSTEM_OLD_CMAKE_CXX_STANDARD_DEFINED)
|
||||
unset(_FILESYSTEM_OLD_CMAKE_CXX_STANDARD)
|
||||
|
||||
@@ -1,96 +1,199 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# Copyright (C) 2015-2025 (see AUTHORS file for a list of contributors)
|
||||
# Copyright (C) 2015-2026 (see AUTHORS file for a list of contributors)
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
########################################################################
|
||||
# Find ORC (Optimized Inner Loops Runtime Compiler)
|
||||
########################################################################
|
||||
|
||||
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH TRUE)
|
||||
set(FPHSA_NAME_MISMATCHED ON)
|
||||
include(FindPkgConfig)
|
||||
|
||||
if(NOT VOLK_GNSSSDR_LIB_PATHS)
|
||||
if(NOT PKG_CONFIG_FOUND)
|
||||
include(FindPkgConfig)
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED VOLK_GNSSSDR_LIB_PATHS)
|
||||
include(VolkGnsssdrFindPaths)
|
||||
endif()
|
||||
|
||||
pkg_check_modules(PC_ORC "orc-0.4 > 0.4.22")
|
||||
pkg_check_modules(PC_ORC QUIET "orc-0.4 > 0.4.22")
|
||||
|
||||
if(NOT ORC_ROOT)
|
||||
set(ORC_ROOT_USER_PROVIDED /usr/local)
|
||||
else()
|
||||
set(ORC_ROOT_USER_PROVIDED ${ORC_ROOT})
|
||||
|
||||
########################################################################
|
||||
# Build candidate root list
|
||||
########################################################################
|
||||
set(_ORC_ROOT_HINTS)
|
||||
|
||||
if(ORC_ROOT)
|
||||
list(APPEND _ORC_ROOT_HINTS "${ORC_ROOT}")
|
||||
endif()
|
||||
if(DEFINED ENV{ORC_ROOT})
|
||||
set(ORC_ROOT_USER_PROVIDED
|
||||
${ORC_ROOT_USER_PROVIDED}
|
||||
$ENV{ORC_ROOT}
|
||||
)
|
||||
|
||||
if(DEFINED ENV{ORC_ROOT} AND NOT "$ENV{ORC_ROOT}" STREQUAL "")
|
||||
list(APPEND _ORC_ROOT_HINTS "$ENV{ORC_ROOT}")
|
||||
endif()
|
||||
set(ORC_ROOT_USER_PROVIDED
|
||||
${ORC_ROOT_USER_PROVIDED}
|
||||
${CMAKE_INSTALL_PREFIX}
|
||||
)
|
||||
|
||||
if(CMAKE_INSTALL_PREFIX)
|
||||
list(APPEND _ORC_ROOT_HINTS "${CMAKE_INSTALL_PREFIX}")
|
||||
endif()
|
||||
|
||||
if(DEFINED _ORC_ROOT_HINTS)
|
||||
list(REMOVE_DUPLICATES _ORC_ROOT_HINTS)
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Search paths for binaries, headers, and libraries
|
||||
########################################################################
|
||||
set(_ORC_BIN_HINTS)
|
||||
set(_ORC_INCLUDE_HINTS)
|
||||
set(_ORC_LIBRARY_HINTS)
|
||||
|
||||
if(PC_ORC_PREFIX)
|
||||
list(APPEND _ORC_BIN_HINTS "${PC_ORC_PREFIX}/bin")
|
||||
endif()
|
||||
|
||||
if(PC_ORC_TOOLSDIR)
|
||||
set(ORC_ROOT_USER_PROVIDED
|
||||
${ORC_ROOT_USER_PROVIDED}
|
||||
${PC_ORC_TOOLSDIR}
|
||||
)
|
||||
list(APPEND _ORC_BIN_HINTS "${PC_ORC_TOOLSDIR}")
|
||||
endif()
|
||||
|
||||
find_program(ORCC_EXECUTABLE orcc
|
||||
HINTS ${ORC_ROOT_USER_PROVIDED}/bin
|
||||
PATHS /usr/bin
|
||||
/usr/local/bin
|
||||
${CMAKE_SYSTEM_PREFIX_PATH}/bin
|
||||
if(PC_ORC_INCLUDEDIR)
|
||||
list(APPEND _ORC_INCLUDE_HINTS "${PC_ORC_INCLUDEDIR}")
|
||||
endif()
|
||||
|
||||
if(PC_ORC_LIBDIR)
|
||||
list(APPEND _ORC_LIBRARY_HINTS "${PC_ORC_LIBDIR}")
|
||||
endif()
|
||||
|
||||
if(PC_ORC_LIBRARY_DIRS)
|
||||
list(APPEND _ORC_LIBRARY_HINTS ${PC_ORC_LIBRARY_DIRS})
|
||||
endif()
|
||||
|
||||
foreach(_orc_prefix ${_ORC_ROOT_HINTS})
|
||||
list(APPEND _ORC_BIN_HINTS "${_orc_prefix}/bin")
|
||||
list(APPEND _ORC_INCLUDE_HINTS "${_orc_prefix}/include")
|
||||
list(APPEND _ORC_LIBRARY_HINTS
|
||||
"${_orc_prefix}/lib"
|
||||
"${_orc_prefix}/lib64"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
list(APPEND _ORC_BIN_HINTS
|
||||
/usr/bin
|
||||
/usr/local/bin
|
||||
)
|
||||
foreach(_orc_system_prefix ${CMAKE_SYSTEM_PREFIX_PATH})
|
||||
list(APPEND _ORC_BIN_HINTS "${_orc_system_prefix}/bin")
|
||||
endforeach()
|
||||
list(APPEND _ORC_INCLUDE_HINTS ${VOLK_GNSSSDR_INCLUDE_PATHS})
|
||||
list(APPEND _ORC_LIBRARY_HINTS ${VOLK_GNSSSDR_LIB_PATHS})
|
||||
|
||||
list(REMOVE_DUPLICATES _ORC_BIN_HINTS)
|
||||
list(REMOVE_DUPLICATES _ORC_INCLUDE_HINTS)
|
||||
list(REMOVE_DUPLICATES _ORC_LIBRARY_HINTS)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Find executable, headers, and libraries
|
||||
########################################################################
|
||||
find_program(ORCC_EXECUTABLE
|
||||
NAMES orcc
|
||||
PATHS ${_ORC_BIN_HINTS}
|
||||
)
|
||||
|
||||
find_path(ORC_INCLUDE_DIR
|
||||
NAMES orc/orc.h
|
||||
HINTS ${PC_ORC_INCLUDEDIR}
|
||||
PATHS ${ORC_ROOT_USER_PROVIDED}/include
|
||||
${VOLK_GNSSSDR_INCLUDE_PATHS}
|
||||
PATHS ${_ORC_INCLUDE_HINTS}
|
||||
PATH_SUFFIXES orc-0.4
|
||||
)
|
||||
|
||||
find_path(ORC_LIBRARY_DIR
|
||||
NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}orc-0.4${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||
HINTS ${PC_ORC_LIBDIR}
|
||||
PATHS ${ORC_ROOT_USER_PROVIDED}/lib
|
||||
${ORC_ROOT_USER_PROVIDED}/lib64
|
||||
${VOLK_GNSSSDR_LIB_PATHS}
|
||||
find_library(ORC_LIBRARY
|
||||
NAMES orc-0.4
|
||||
HINTS ${PC_ORC_LIBDIR} ${PC_ORC_LIBRARY_DIRS}
|
||||
PATHS ${_ORC_LIBRARY_HINTS}
|
||||
)
|
||||
|
||||
find_library(ORC_LIB orc-0.4
|
||||
HINTS ${PC_ORC_LIBRARY_DIRS}
|
||||
PATHS ${ORC_ROOT_USER_PROVIDED}/lib
|
||||
${ORC_ROOT_USER_PROVIDED}/lib64
|
||||
${VOLK_GNSSSDR_LIB_PATHS}
|
||||
find_library(ORC_LIBRARY_STATIC
|
||||
NAMES
|
||||
${CMAKE_STATIC_LIBRARY_PREFIX}orc-0.4${CMAKE_STATIC_LIBRARY_SUFFIX}
|
||||
HINTS ${PC_ORC_LIBDIR} ${PC_ORC_LIBRARY_DIRS}
|
||||
PATHS ${_ORC_LIBRARY_HINTS}
|
||||
)
|
||||
|
||||
find_library(ORC_LIBRARY_STATIC ${CMAKE_STATIC_LIBRARY_PREFIX}orc-0.4${CMAKE_STATIC_LIBRARY_SUFFIX}
|
||||
HINTS ${PC_ORC_LIBRARY_DIRS}
|
||||
PATHS ${ORC_ROOT}/lib
|
||||
${ORC_ROOT}/lib64
|
||||
${ORC_ROOT_USER_PROVIDED}/lib
|
||||
${ORC_ROOT_USER_PROVIDED}/lib64
|
||||
${VOLK_GNSSSDR_LIB_PATHS}
|
||||
)
|
||||
|
||||
########################################################################
|
||||
# Derive library directory and version
|
||||
########################################################################
|
||||
if(ORC_LIBRARY)
|
||||
get_filename_component(ORC_LIBRARY_DIR "${ORC_LIBRARY}" DIRECTORY)
|
||||
endif()
|
||||
|
||||
if(PC_ORC_VERSION)
|
||||
set(ORC_VERSION ${PC_ORC_VERSION})
|
||||
set(ORC_VERSION "${PC_ORC_VERSION}")
|
||||
endif()
|
||||
|
||||
list(APPEND ORC_LIBRARY ${ORC_LIB})
|
||||
|
||||
set(ORC_INCLUDE_DIRS ${ORC_INCLUDE_DIR})
|
||||
set(ORC_LIBRARIES ${ORC_LIBRARY})
|
||||
set(ORC_LIBRARY_DIRS ${ORC_LIBRARY_DIR})
|
||||
set(ORC_LIBRARIES_STATIC ${ORC_LIBRARY_STATIC})
|
||||
########################################################################
|
||||
# Compatibility variables
|
||||
########################################################################
|
||||
set(ORC_INCLUDE_DIRS "${ORC_INCLUDE_DIR}")
|
||||
set(ORC_LIBRARIES "${ORC_LIBRARY}")
|
||||
set(ORC_LIBRARY_DIRS "${ORC_LIBRARY_DIR}")
|
||||
set(ORC_LIBRARIES_STATIC "${ORC_LIBRARY_STATIC}")
|
||||
|
||||
|
||||
########################################################################
|
||||
# Standard result handling
|
||||
########################################################################
|
||||
include(FindPackageHandleStandardArgs)
|
||||
if(ENABLE_STATIC_LIBS)
|
||||
find_package_handle_standard_args(ORC "orc files" ORC_LIBRARY ORC_INCLUDE_DIR ORCC_EXECUTABLE ORC_LIBRARY_STATIC)
|
||||
find_package_handle_standard_args(ORC
|
||||
"orc files"
|
||||
ORC_LIBRARY
|
||||
ORC_INCLUDE_DIR
|
||||
ORCC_EXECUTABLE
|
||||
ORC_LIBRARY_STATIC
|
||||
)
|
||||
else()
|
||||
find_package_handle_standard_args(ORC "orc files" ORC_LIBRARY ORC_INCLUDE_DIR ORCC_EXECUTABLE)
|
||||
find_package_handle_standard_args(ORC
|
||||
"orc files"
|
||||
ORC_LIBRARY
|
||||
ORC_INCLUDE_DIR
|
||||
ORCC_EXECUTABLE
|
||||
)
|
||||
endif()
|
||||
mark_as_advanced(ORC_INCLUDE_DIR ORC_LIBRARY ORCC_EXECUTABLE ORC_LIBRARY_STATIC)
|
||||
|
||||
if(ORC_FOUND AND NOT TARGET ORC::orc)
|
||||
add_library(ORC::orc UNKNOWN IMPORTED)
|
||||
set_target_properties(ORC::orc PROPERTIES
|
||||
IMPORTED_LOCATION "${ORC_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${ORC_INCLUDE_DIR}"
|
||||
)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(
|
||||
ORCC_EXECUTABLE
|
||||
ORC_INCLUDE_DIR
|
||||
ORC_INCLUDE_DIRS
|
||||
ORC_LIBRARY
|
||||
ORC_LIBRARIES
|
||||
ORC_LIBRARY_DIR
|
||||
ORC_LIBRARY_DIRS
|
||||
ORC_LIBRARY_STATIC
|
||||
ORC_LIBRARIES_STATIC
|
||||
ORC_VERSION
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Cleanup internal variables
|
||||
########################################################################
|
||||
unset(_ORC_ROOT_HINTS)
|
||||
unset(_ORC_BIN_HINTS)
|
||||
unset(_ORC_INCLUDE_HINTS)
|
||||
unset(_ORC_LIBRARY_HINTS)
|
||||
unset(_orc_prefix)
|
||||
unset(_orc_system_prefix)
|
||||
|
||||
+2
-7
@@ -6,7 +6,7 @@
|
||||
|
||||
get_filename_component(VOLK_GNSSSDR_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||
|
||||
if(NOT TARGET VolkGnsssdr::volkgnsssdr)
|
||||
if(NOT TARGET Volkgnsssdr::volkgnsssdr)
|
||||
include("${VOLK_GNSSSDR_CMAKE_DIR}/VolkGnsssdrTargets.cmake")
|
||||
endif()
|
||||
|
||||
@@ -19,19 +19,14 @@ else()
|
||||
set(VOLKGNSSSDR_FOUND TRUE)
|
||||
endif()
|
||||
|
||||
# cache whether a compatible VolkGnsssdr was found for
|
||||
# use anywhere in the calling project
|
||||
set(VOLKGNSSSDR_FOUND ${VOLKGNSSSDR_FOUND} CACHE BOOL "Whether a compatible Volk GNSS-SDR was found" FORCE)
|
||||
|
||||
if(VOLKGNSSSDR_FOUND)
|
||||
# use the new target library, regardless of whether new or old style
|
||||
# we still need to set a variable with the library name so that there
|
||||
# is a variable to reference in the using-project's cmake scripts!
|
||||
set(VOLK_GNSSSDR_LIBRARIES Volkgnsssdr::volkgnsssdr CACHE STRING "Volk GNSS-SDR Library" FORCE)
|
||||
set(VOLK_GNSSSDR_LIBRARIES Volkgnsssdr::volkgnsssdr)
|
||||
|
||||
# INTERFACE_INCLUDE_DIRECTORIES should always be set
|
||||
get_target_property(VOLK_GNSSSDR_INCLUDE_DIRS Volkgnsssdr::volkgnsssdr INTERFACE_INCLUDE_DIRECTORIES)
|
||||
set(VOLK_GNSSSDR_INCLUDE_DIRS ${VOLK_GNSSSDR_INCLUDE_DIRS} CACHE STRING "Volk GNSS-SDR Include Directories" FORCE)
|
||||
|
||||
# for backward compatibility with old-CMake non-target project finding
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
+338
-214
@@ -1,7 +1,7 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# Copyright (C) 2015-2020 (see AUTHORS file for a list of contributors)
|
||||
# Copyright (C) 2015-2026 (see AUTHORS file for a list of contributors)
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
if(DEFINED __INCLUDED_VOLK_PYTHON_CMAKE)
|
||||
@@ -10,7 +10,7 @@ endif()
|
||||
set(__INCLUDED_VOLK_PYTHON_CMAKE TRUE)
|
||||
|
||||
########################################################################
|
||||
# Check for the existence of a python module:
|
||||
# Check for the existence of a Python module:
|
||||
# - desc a string description of the check
|
||||
# - mod the name of the module to import
|
||||
# - cmd an additional command to run
|
||||
@@ -19,19 +19,27 @@ set(__INCLUDED_VOLK_PYTHON_CMAKE TRUE)
|
||||
macro(VOLK_PYTHON_CHECK_MODULE desc mod cmd have)
|
||||
message(STATUS "Python checking for ${desc}")
|
||||
execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} -c "
|
||||
#########################################
|
||||
try: import ${mod}
|
||||
except:
|
||||
try: ${mod}
|
||||
except: exit(-1)
|
||||
try: assert ${cmd}
|
||||
except: exit(-1)
|
||||
#########################################"
|
||||
OUTPUT_QUIET ERROR_QUIET
|
||||
RESULT_VARIABLE ${have}
|
||||
COMMAND ${PYTHON_EXECUTABLE} -c
|
||||
"import sys
|
||||
try:
|
||||
import ${mod}
|
||||
except Exception:
|
||||
try:
|
||||
${mod}
|
||||
except Exception:
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
assert ${cmd}
|
||||
except Exception:
|
||||
sys.exit(1)
|
||||
|
||||
sys.exit(0)"
|
||||
OUTPUT_QUIET
|
||||
ERROR_QUIET
|
||||
RESULT_VARIABLE _volk_python_check_module_result
|
||||
)
|
||||
if(${have} EQUAL 0)
|
||||
if(_volk_python_check_module_result EQUAL 0)
|
||||
message(STATUS "Python checking for ${desc} - found")
|
||||
set(${have} TRUE)
|
||||
else()
|
||||
@@ -42,302 +50,418 @@ endmacro()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Setup the python interpreter:
|
||||
# This allows the user to specify a specific interpreter,
|
||||
# or finds the interpreter via the built-in cmake module.
|
||||
# Check that Python itself satisfies a minimum version
|
||||
########################################################################
|
||||
macro(VOLK_PYTHON_CHECK_MIN_VERSION minver have)
|
||||
message(STATUS "Python checking for python >= ${minver}")
|
||||
execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} -c
|
||||
"import sys
|
||||
|
||||
def norm(v):
|
||||
out = []
|
||||
for p in str(v).split('.'):
|
||||
n = ''.join([c for c in p if '0' <= c <= '9'])
|
||||
out.append(int(n or '0'))
|
||||
while len(out) < 3:
|
||||
out.append(0)
|
||||
return tuple(out)
|
||||
|
||||
sys.exit(0 if norm(sys.version.split()[0]) >= norm('${minver}') else 1)"
|
||||
OUTPUT_QUIET
|
||||
ERROR_QUIET
|
||||
RESULT_VARIABLE _volk_python_minver_result
|
||||
)
|
||||
if(_volk_python_minver_result EQUAL 0)
|
||||
message(STATUS "Python checking for python >= ${minver} - found")
|
||||
set(${have} TRUE)
|
||||
else()
|
||||
message(STATUS "Python checking for python >= ${minver} - not found")
|
||||
set(${have} FALSE)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Get version information for the selected interpreter
|
||||
########################################################################
|
||||
macro(VOLK_PYTHON_GET_VERSION)
|
||||
unset(PYTHON_VERSION_MAJOR)
|
||||
unset(PYTHON_VERSION_STRING)
|
||||
|
||||
execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} -c
|
||||
"import sys; sys.stdout.write(sys.version.split()[0])"
|
||||
OUTPUT_VARIABLE PYTHON_VERSION_STRING
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
if(NOT "${PYTHON_VERSION_STRING}" STREQUAL "")
|
||||
string(SUBSTRING "${PYTHON_VERSION_STRING}" 0 1
|
||||
PYTHON_VERSION_MAJOR)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Evaluate whether a candidate interpreter is suitable
|
||||
#
|
||||
# Conditions:
|
||||
# - Python version >= VOLK_PYTHON_MIN_VERSION
|
||||
# - mako >= VOLK_MAKO_MIN_VERSION
|
||||
# - six present if Python 2
|
||||
########################################################################
|
||||
function(VOLK_PYTHON_EVALUATE_CANDIDATE candidate have)
|
||||
set(${have} FALSE PARENT_SCOPE)
|
||||
|
||||
if("${candidate}" STREQUAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${candidate}")
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(PYTHON_EXECUTABLE "${candidate}")
|
||||
volk_python_get_version()
|
||||
|
||||
if("${PYTHON_VERSION_STRING}" STREQUAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
volk_python_check_min_version(${VOLK_PYTHON_MIN_VERSION}
|
||||
_VOLK_PYTHON_MIN_VER_FOUND)
|
||||
if(NOT _VOLK_PYTHON_MIN_VER_FOUND)
|
||||
return()
|
||||
endif()
|
||||
|
||||
volk_python_check_module(
|
||||
"mako >= ${VOLK_MAKO_MIN_VERSION}"
|
||||
mako
|
||||
"tuple(int(x) for x in mako.__version__.split('.')) >= tuple(int(x) for x in '${VOLK_MAKO_MIN_VERSION}'.split('.'))"
|
||||
_VOLK_MAKO_FOUND
|
||||
)
|
||||
if(NOT _VOLK_MAKO_FOUND)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(PYTHON_VERSION_STRING VERSION_LESS "3.0")
|
||||
volk_python_check_module(
|
||||
"six - python 2 and 3 compatibility library"
|
||||
six
|
||||
"True"
|
||||
_VOLK_SIX_FOUND
|
||||
)
|
||||
if(NOT _VOLK_SIX_FOUND)
|
||||
return()
|
||||
endif()
|
||||
else()
|
||||
set(_VOLK_SIX_FOUND TRUE)
|
||||
endif()
|
||||
|
||||
set(_VOLK_CANDIDATE_VERSION_STRING "${PYTHON_VERSION_STRING}"
|
||||
PARENT_SCOPE)
|
||||
set(_VOLK_CANDIDATE_VERSION_MAJOR "${PYTHON_VERSION_MAJOR}"
|
||||
PARENT_SCOPE)
|
||||
set(_VOLK_CANDIDATE_PYTHON_MIN_VER_FOUND
|
||||
"${_VOLK_PYTHON_MIN_VER_FOUND}" PARENT_SCOPE)
|
||||
set(_VOLK_CANDIDATE_MAKO_FOUND "${_VOLK_MAKO_FOUND}"
|
||||
PARENT_SCOPE)
|
||||
set(_VOLK_CANDIDATE_SIX_FOUND "${_VOLK_SIX_FOUND}"
|
||||
PARENT_SCOPE)
|
||||
set(${have} TRUE PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Setup the Python interpreter
|
||||
########################################################################
|
||||
set(VOLK_PYTHON_MIN_VERSION "2.7")
|
||||
set(VOLK_PYTHON3_MIN_VERSION "3.4")
|
||||
set(VOLK_MAKO_MIN_VERSION "0.4.2")
|
||||
|
||||
if(CMAKE_VERSION VERSION_LESS 3.12 OR CMAKE_CROSSCOMPILING)
|
||||
if(PYTHON_EXECUTABLE)
|
||||
message(STATUS "User set python executable ${PYTHON_EXECUTABLE}")
|
||||
if(CMAKE_VERSION VERSION_LESS "3.24") # For cross-compiling
|
||||
find_package(PythonInterp ${VOLK_PYTHON_MIN3_VERSION} REQUIRED)
|
||||
else()
|
||||
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||
find_package(Python COMPONENTS Interpreter)
|
||||
set(PYTHONINTERP_FOUND Python_Interpreter_FOUND)
|
||||
set(PYTHON_VERSION_MAJOR "${Python_VERSION_MAJOR}")
|
||||
set(PYTHON_VERSION_STRING "${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}")
|
||||
endif()
|
||||
if(PYTHON_VERSION_STRING VERSION_LESS "3.0")
|
||||
volk_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
|
||||
endif()
|
||||
set(PYTHONINTERP_FOUND FALSE)
|
||||
set(PYTHON_MIN_VER_FOUND FALSE)
|
||||
set(MAKO_FOUND FALSE)
|
||||
set(SIX_FOUND FALSE)
|
||||
unset(PYTHON_VERSION_MAJOR)
|
||||
unset(PYTHON_VERSION_STRING)
|
||||
unset(PYTHON3)
|
||||
|
||||
set(_VOLK_USER_PYTHON_EXECUTABLE "")
|
||||
set(_VOLK_PYTHON_CANDIDATES "")
|
||||
set(_VOLK_SELECTED_PYTHON "")
|
||||
|
||||
if(DEFINED PYTHON_EXECUTABLE AND NOT "${PYTHON_EXECUTABLE}" STREQUAL "")
|
||||
set(_VOLK_USER_PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Build candidate list
|
||||
########################################################################
|
||||
|
||||
# 1) User-provided interpreter first
|
||||
if(NOT "${_VOLK_USER_PYTHON_EXECUTABLE}" STREQUAL "")
|
||||
message(STATUS "User set python executable ${_VOLK_USER_PYTHON_EXECUTABLE}")
|
||||
list(APPEND _VOLK_PYTHON_CANDIDATES "${_VOLK_USER_PYTHON_EXECUTABLE}")
|
||||
endif()
|
||||
|
||||
# 2) Modern CMake: prefer Python3, then Python2
|
||||
if(NOT CMAKE_VERSION VERSION_LESS "3.12" AND NOT CMAKE_CROSSCOMPILING)
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
set(_volk_previous_cmake_find_framework ${CMAKE_FIND_FRAMEWORK})
|
||||
set(CMAKE_FIND_FRAMEWORK LAST)
|
||||
endif()
|
||||
|
||||
find_package(Python3 COMPONENTS Interpreter)
|
||||
if(Python3_FOUND)
|
||||
list(APPEND _VOLK_PYTHON_CANDIDATES "${Python3_EXECUTABLE}")
|
||||
else()
|
||||
message(STATUS "PYTHON_EXECUTABLE not set - trying by default python3")
|
||||
message(STATUS "Use -DPYTHON_EXECUTABLE=/path/to/python to build for python 2.7")
|
||||
if(CMAKE_VERSION VERSION_LESS "3.24") # For cross-compiling
|
||||
set(Python_ADDITIONAL_VERSIONS 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11)
|
||||
find_package(PythonInterp ${VOLK_PYTHON_MIN3_VERSION} REQUIRED)
|
||||
else()
|
||||
find_package(Python COMPONENTS Interpreter)
|
||||
set(PYTHONINTERP_FOUND Python_Interpreter_FOUND)
|
||||
set(PYTHON_EXECUTABLE "${Python_EXECUTABLE}")
|
||||
set(PYTHON_VERSION_MAJOR "${Python_VERSION_MAJOR}")
|
||||
set(PYTHON_VERSION_STRING "${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}")
|
||||
endif()
|
||||
if(NOT PYTHONINTERP_FOUND)
|
||||
message(STATUS "python3 not found - trying with python2.7")
|
||||
if(CMAKE_VERSION VERSION_LESS "3.24")
|
||||
find_package(PythonInterp ${VOLK_PYTHON_MIN3_VERSION} REQUIRED)
|
||||
else()
|
||||
find_package(Python2 COMPONENTS Interpreter)
|
||||
set(PYTHONINTERP_FOUND Python2_Interpreter_FOUND)
|
||||
set(PYTHON_VERSION_MAJOR "${Python2_VERSION_MAJOR}")
|
||||
set(PYTHON_EXECUTABLE "${Python2_EXECUTABLE}")
|
||||
set(PYTHON_VERSION_STRING "${Python2_VERSION_MAJOR}.${Python2_VERSION_MINOR}")
|
||||
volk_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
|
||||
endif()
|
||||
find_package(Python2 COMPONENTS Interpreter)
|
||||
if(Python2_FOUND)
|
||||
list(APPEND _VOLK_PYTHON_CANDIDATES "${Python2_EXECUTABLE}")
|
||||
endif()
|
||||
endif()
|
||||
volk_python_check_module("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
set(CMAKE_FIND_FRAMEWORK ${_volk_previous_cmake_find_framework})
|
||||
endif()
|
||||
|
||||
# 3) Old CMake or cross-compiling: use PythonInterp as a candidate source,
|
||||
# but still validate the interpreter before accepting it
|
||||
else()
|
||||
if(PYTHON_EXECUTABLE)
|
||||
message(STATUS "User set python executable ${PYTHON_EXECUTABLE}")
|
||||
if(CMAKE_VERSION VERSION_LESS "3.24")
|
||||
find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION} REQUIRED)
|
||||
else()
|
||||
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||
find_package(Python COMPONENTS Interpreter)
|
||||
set(PYTHONINTERP_FOUND Python_Interpreter_FOUND)
|
||||
set(PYTHON_VERSION_MAJOR "${Python_VERSION_MAJOR}")
|
||||
set(PYTHON_VERSION_STRING "${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}")
|
||||
endif()
|
||||
volk_python_check_module("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND)
|
||||
if(PYTHON_VERSION_STRING VERSION_LESS "3.0")
|
||||
volk_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
|
||||
endif()
|
||||
set(Python_ADDITIONAL_VERSIONS
|
||||
3.11 3.10 3.9 3.8 3.7 3.6 3.5 3.4 2.7
|
||||
)
|
||||
|
||||
if(CMAKE_VERSION VERSION_LESS "2.8.12")
|
||||
find_package(PythonInterp)
|
||||
else()
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(_previous ${CMAKE_FIND_FRAMEWORK})
|
||||
set(CMAKE_FIND_FRAMEWORK LAST)
|
||||
endif()
|
||||
find_package(Python3 COMPONENTS Interpreter)
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(CMAKE_FIND_FRAMEWORK ${_previous})
|
||||
endif()
|
||||
if(Python3_FOUND)
|
||||
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
|
||||
set(PYTHON_VERSION_MAJOR ${Python3_VERSION_MAJOR})
|
||||
set(PYTHON_VERSION_STRING ${Python3_VERSION})
|
||||
volk_python_check_module("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND)
|
||||
endif()
|
||||
if(NOT Python3_FOUND OR NOT MAKO_FOUND)
|
||||
find_package(Python2 COMPONENTS Interpreter)
|
||||
if(Python2_FOUND)
|
||||
set(PYTHON_EXECUTABLE ${Python2_EXECUTABLE})
|
||||
set(PYTHON_VERSION_MAJOR ${Python2_VERSION_MAJOR})
|
||||
set(PYTHON_VERSION_STRING ${Python2_VERSION})
|
||||
volk_python_check_module("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND)
|
||||
volk_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
|
||||
endif()
|
||||
if(NOT MAKO_FOUND OR NOT SIX_FOUND)
|
||||
unset(PYTHON_EXECUTABLE)
|
||||
if(CMAKE_VERSION VERSION_LESS "3.24")
|
||||
find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION})
|
||||
else()
|
||||
find_package(Python COMPONENTS Interpreter)
|
||||
set(PYTHONINTERP_FOUND Python_Interpreter_FOUND)
|
||||
set(PYTHON_EXECUTABLE "${Python_EXECUTABLE}")
|
||||
set(PYTHON_VERSION_MAJOR "${Python_VERSION_MAJOR}")
|
||||
set(PYTHON_VERSION_STRING "${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}")
|
||||
endif()
|
||||
volk_python_check_module("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND)
|
||||
if(NOT MAKO_FOUND)
|
||||
unset(PYTHON_EXECUTABLE)
|
||||
unset(PYTHON_VERSION_STRING)
|
||||
find_program(PYTHON_EXECUTABLE NAMES python3 python)
|
||||
if(PYTHON_EXECUTABLE)
|
||||
set(PYTHONINTERP_FOUND TRUE)
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} --version OUTPUT_VARIABLE PYTHON_VERSION_STRING_AUX)
|
||||
string(FIND "${PYTHON_VERSION_STRING_AUX}" " " blank_char_index)
|
||||
if(blank_char_index GREATER -1)
|
||||
math(EXPR start_index "${blank_char_index} + 1")
|
||||
string(SUBSTRING "${PYTHON_VERSION_STRING_AUX}" ${start_index} -1 PYTHON_VERSION_STRING)
|
||||
string(STRIP ${PYTHON_VERSION_STRING} PYTHON_VERSION_STRING)
|
||||
string(SUBSTRING "${PYTHON_VERSION_STRING_AUX}" ${start_index} 1 PYTHON_VERSION_MAJOR)
|
||||
message(STATUS "Found Python: ${PYTHON_EXECUTABLE} (found version: ${PYTHON_VERSION_STRING})")
|
||||
else()
|
||||
string(FIND ${PYTHON_EXECUTABLE} "python3" is_python3)
|
||||
if(is_python3 GREATER -1)
|
||||
set(PYTHON_VERSION_MAJOR "3")
|
||||
set(PYTHON_VERSION_STRING "3.10") # ?
|
||||
else()
|
||||
set(PYTHON_VERSION_MAJOR "2")
|
||||
set(PYTHON_VERSION_STRING "2.7")
|
||||
endif()
|
||||
endif()
|
||||
volk_python_check_module("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND)
|
||||
if(MAKO_FOUND AND PYTHON_VERSION_STRING VERSION_LESS "3.0")
|
||||
gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION})
|
||||
endif()
|
||||
|
||||
if(PYTHONINTERP_FOUND AND NOT "${PYTHON_EXECUTABLE}" STREQUAL "")
|
||||
list(APPEND _VOLK_PYTHON_CANDIDATES "${PYTHON_EXECUTABLE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if("${PYTHON_VERSION_MAJOR}" VERSION_EQUAL 3)
|
||||
# 4) Generic last-resort program-name fallbacks
|
||||
find_program(_VOLK_PYTHON3 NAMES python3)
|
||||
find_program(_VOLK_PYTHON2 NAMES python2.7 python2)
|
||||
find_program(_VOLK_PYTHON NAMES python)
|
||||
|
||||
foreach(_volk_python_prog
|
||||
${_VOLK_PYTHON3}
|
||||
${_VOLK_PYTHON2}
|
||||
${_VOLK_PYTHON}
|
||||
)
|
||||
if(NOT "${_volk_python_prog}" STREQUAL "")
|
||||
list(APPEND _VOLK_PYTHON_CANDIDATES "${_volk_python_prog}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
list(REMOVE_DUPLICATES _VOLK_PYTHON_CANDIDATES)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Evaluate candidates and accept the first fully suitable interpreter
|
||||
########################################################################
|
||||
foreach(_VOLK_PYTHON_CANDIDATE IN LISTS _VOLK_PYTHON_CANDIDATES)
|
||||
message(STATUS "Trying Python candidate: ${_VOLK_PYTHON_CANDIDATE}")
|
||||
volk_python_evaluate_candidate("${_VOLK_PYTHON_CANDIDATE}"
|
||||
_VOLK_PYTHON_CANDIDATE_OK)
|
||||
if(_VOLK_PYTHON_CANDIDATE_OK)
|
||||
set(_VOLK_SELECTED_PYTHON "${_VOLK_PYTHON_CANDIDATE}")
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT "${_VOLK_SELECTED_PYTHON}" STREQUAL "")
|
||||
set(PYTHON_EXECUTABLE "${_VOLK_SELECTED_PYTHON}")
|
||||
set(PYTHONINTERP_FOUND TRUE)
|
||||
set(PYTHON_VERSION_STRING "${_VOLK_CANDIDATE_VERSION_STRING}")
|
||||
set(PYTHON_VERSION_MAJOR "${_VOLK_CANDIDATE_VERSION_MAJOR}")
|
||||
set(PYTHON_MIN_VER_FOUND "${_VOLK_CANDIDATE_PYTHON_MIN_VER_FOUND}")
|
||||
set(MAKO_FOUND "${_VOLK_CANDIDATE_MAKO_FOUND}")
|
||||
set(SIX_FOUND "${_VOLK_CANDIDATE_SIX_FOUND}")
|
||||
else()
|
||||
set(PYTHONINTERP_FOUND FALSE)
|
||||
unset(PYTHON_EXECUTABLE)
|
||||
unset(PYTHON_VERSION_MAJOR)
|
||||
unset(PYTHON_VERSION_STRING)
|
||||
set(PYTHON_MIN_VER_FOUND FALSE)
|
||||
set(MAKO_FOUND FALSE)
|
||||
set(SIX_FOUND FALSE)
|
||||
endif()
|
||||
|
||||
if("${PYTHON_VERSION_MAJOR}" STREQUAL "3")
|
||||
set(PYTHON3 TRUE)
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
########################################################################
|
||||
# Sets the python installation directory VOLK_PYTHON_DIR
|
||||
# Sets the Python installation directory VOLK_PYTHON_DIR
|
||||
########################################################################
|
||||
if(NOT DEFINED VOLK_PYTHON_DIR)
|
||||
if(PYTHON_VERSION_STRING VERSION_GREATER "3.9.99")
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
|
||||
import os
|
||||
execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} -c
|
||||
"import os
|
||||
import sys
|
||||
if os.name == 'posix':
|
||||
print(os.path.join('lib', 'python' + sys.version[:4], 'dist-packages'))
|
||||
if os.name == 'nt':
|
||||
print(os.path.join('Lib', 'site-packages'))
|
||||
" OUTPUT_VARIABLE VOLK_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
else()
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
|
||||
import os
|
||||
import sys
|
||||
if os.name == 'posix':
|
||||
print(os.path.join('lib', 'python' + sys.version[:3], 'dist-packages'))
|
||||
if os.name == 'nt':
|
||||
print(os.path.join('Lib', 'site-packages'))
|
||||
" OUTPUT_VARIABLE VOLK_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
endif()
|
||||
print(os.path.join(
|
||||
'lib',
|
||||
'python{0}.{1}'.format(sys.version_info[0], sys.version_info[1]),
|
||||
'dist-packages'))
|
||||
elif os.name == 'nt':
|
||||
print(os.path.join('Lib', 'site-packages'))"
|
||||
OUTPUT_VARIABLE VOLK_PYTHON_DIR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
endif()
|
||||
file(TO_CMAKE_PATH ${VOLK_PYTHON_DIR} VOLK_PYTHON_DIR)
|
||||
file(TO_CMAKE_PATH "${VOLK_PYTHON_DIR}" VOLK_PYTHON_DIR)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Create an always-built target with a unique name
|
||||
# Usage: VOLK_UNIQUE_TARGET(<description> <dependencies list>)
|
||||
# Usage: volk_unique_target(<description> <dependencies list>)
|
||||
########################################################################
|
||||
function(VOLK_UNIQUE_TARGET desc)
|
||||
file(RELATIVE_PATH reldir ${PROJECT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
|
||||
file(RELATIVE_PATH reldir "${PROJECT_BINARY_DIR}"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}")
|
||||
execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} -c
|
||||
"import re, hashlib
|
||||
unique = hashlib.sha256(b'${reldir}${ARGN}').hexdigest()[:5]
|
||||
print(re.sub(r'\\W', '_', '${desc} ${reldir} ' + unique))"
|
||||
OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
OUTPUT_VARIABLE _target
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
add_custom_target(${_target} ALL DEPENDS ${ARGN})
|
||||
endfunction()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Install python sources (also builds and installs byte-compiled python)
|
||||
# Install Python sources (also builds and installs byte-compiled Python)
|
||||
########################################################################
|
||||
function(VOLK_PYTHON_INSTALL)
|
||||
include(CMakeParseArgumentsCopy)
|
||||
cmake_parse_arguments(VOLK_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
|
||||
cmake_parse_arguments(
|
||||
VOLK_PYTHON_INSTALL
|
||||
""
|
||||
"DESTINATION;COMPONENT"
|
||||
"FILES;PROGRAMS"
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
####################################################################
|
||||
if(VOLK_PYTHON_INSTALL_FILES)
|
||||
####################################################################
|
||||
install(${ARGN}) #installs regular python files
|
||||
install(${ARGN})
|
||||
|
||||
#create a list of all generated files
|
||||
unset(pysrcfiles)
|
||||
unset(pycfiles)
|
||||
unset(pyofiles)
|
||||
foreach(pyfile ${VOLK_PYTHON_INSTALL_FILES})
|
||||
get_filename_component(pyfile ${pyfile} ABSOLUTE)
|
||||
list(APPEND pysrcfiles ${pyfile})
|
||||
|
||||
#determine if this file is in the source or binary directory
|
||||
file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
|
||||
foreach(pyfile ${VOLK_PYTHON_INSTALL_FILES})
|
||||
get_filename_component(pyfile "${pyfile}" ABSOLUTE)
|
||||
list(APPEND pysrcfiles "${pyfile}")
|
||||
|
||||
file(RELATIVE_PATH source_rel_path
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}" "${pyfile}")
|
||||
string(LENGTH "${source_rel_path}" source_rel_path_len)
|
||||
file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
|
||||
|
||||
file(RELATIVE_PATH binary_rel_path
|
||||
"${CMAKE_CURRENT_BINARY_DIR}" "${pyfile}")
|
||||
string(LENGTH "${binary_rel_path}" binary_rel_path_len)
|
||||
|
||||
#and set the generated path appropriately
|
||||
if(${source_rel_path_len} GREATER ${binary_rel_path_len})
|
||||
set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
|
||||
set(pygenfile "${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path}")
|
||||
else()
|
||||
set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
|
||||
set(pygenfile "${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path}")
|
||||
endif()
|
||||
list(APPEND pycfiles ${pygenfile}c)
|
||||
list(APPEND pyofiles ${pygenfile}o)
|
||||
|
||||
#ensure generation path exists
|
||||
get_filename_component(pygen_path ${pygenfile} PATH)
|
||||
file(MAKE_DIRECTORY ${pygen_path})
|
||||
list(APPEND pycfiles "${pygenfile}c")
|
||||
list(APPEND pyofiles "${pygenfile}o")
|
||||
|
||||
get_filename_component(pygen_path "${pygenfile}" PATH)
|
||||
file(MAKE_DIRECTORY "${pygen_path}")
|
||||
endforeach()
|
||||
|
||||
#the command to generate the pyc files
|
||||
add_custom_command(
|
||||
DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
|
||||
DEPENDS ${pysrcfiles}
|
||||
OUTPUT ${pycfiles}
|
||||
COMMAND ${PYTHON_EXECUTABLE}
|
||||
${PROJECT_BINARY_DIR}/python_compile_helper.py
|
||||
${pysrcfiles} ${pycfiles}
|
||||
)
|
||||
|
||||
#the command to generate the pyo files
|
||||
add_custom_command(
|
||||
DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
|
||||
COMMAND ${PYTHON_EXECUTABLE} -O ${PROJECT_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
|
||||
DEPENDS ${pysrcfiles}
|
||||
OUTPUT ${pyofiles}
|
||||
COMMAND ${PYTHON_EXECUTABLE} -O
|
||||
${PROJECT_BINARY_DIR}/python_compile_helper.py
|
||||
${pysrcfiles} ${pyofiles}
|
||||
)
|
||||
|
||||
#create install rule and add generated files to target list
|
||||
set(python_install_gen_targets ${pycfiles} ${pyofiles})
|
||||
|
||||
install(FILES ${python_install_gen_targets}
|
||||
DESTINATION ${VOLK_PYTHON_INSTALL_DESTINATION}
|
||||
COMPONENT ${VOLK_PYTHON_INSTALL_COMPONENT}
|
||||
)
|
||||
|
||||
|
||||
####################################################################
|
||||
elseif(VOLK_PYTHON_INSTALL_PROGRAMS)
|
||||
####################################################################
|
||||
file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
|
||||
file(TO_NATIVE_PATH "${PYTHON_EXECUTABLE}" pyexe_native)
|
||||
|
||||
if(CMAKE_CROSSCOMPILING)
|
||||
set(pyexe_native "/usr/bin/env python")
|
||||
endif()
|
||||
|
||||
foreach(pyfile ${VOLK_PYTHON_INSTALL_PROGRAMS})
|
||||
get_filename_component(pyfile_name ${pyfile} NAME)
|
||||
get_filename_component(pyfile ${pyfile} ABSOLUTE)
|
||||
string(REPLACE "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}" pyexefile "${pyfile}.exe")
|
||||
list(APPEND python_install_gen_targets ${pyexefile})
|
||||
get_filename_component(pyfile_name "${pyfile}" NAME)
|
||||
get_filename_component(pyfile "${pyfile}" ABSOLUTE)
|
||||
|
||||
get_filename_component(pyexefile_path ${pyexefile} PATH)
|
||||
file(MAKE_DIRECTORY ${pyexefile_path})
|
||||
string(REPLACE "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}"
|
||||
pyexefile "${pyfile}.exe")
|
||||
list(APPEND python_install_gen_targets "${pyexefile}")
|
||||
|
||||
get_filename_component(pyexefile_path "${pyexefile}" PATH)
|
||||
file(MAKE_DIRECTORY "${pyexefile_path}")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${pyexefile} DEPENDS ${pyfile}
|
||||
OUTPUT ${pyexefile}
|
||||
DEPENDS ${pyfile}
|
||||
COMMAND ${PYTHON_EXECUTABLE} -c
|
||||
"open('${pyexefile}','w').write(r'\#!${pyexe_native}'+'\\n'+open('${pyfile}').read())"
|
||||
"open('${pyexefile}','w').write(r'\#!${pyexe_native}'+'\\n'+open('${pyfile}').read())"
|
||||
COMMENT "Shebangin ${pyfile_name}"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
#on windows, python files need an extension to execute
|
||||
get_filename_component(pyfile_ext ${pyfile} EXT)
|
||||
get_filename_component(pyfile_ext "${pyfile}" EXT)
|
||||
if(WIN32 AND NOT pyfile_ext)
|
||||
set(pyfile_name "${pyfile_name}.py")
|
||||
endif()
|
||||
|
||||
install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
|
||||
install(PROGRAMS ${pyexefile}
|
||||
RENAME ${pyfile_name}
|
||||
DESTINATION ${VOLK_PYTHON_INSTALL_DESTINATION}
|
||||
COMPONENT ${VOLK_PYTHON_INSTALL_COMPONENT}
|
||||
)
|
||||
endforeach()
|
||||
|
||||
endif()
|
||||
|
||||
volk_unique_target("pygen" ${python_install_gen_targets})
|
||||
|
||||
endfunction()
|
||||
|
||||
|
||||
########################################################################
|
||||
# Write the python helper script that generates byte code files
|
||||
# Write the Python helper script that generates byte code files
|
||||
########################################################################
|
||||
file(WRITE ${PROJECT_BINARY_DIR}/python_compile_helper.py "
|
||||
import sys, py_compile
|
||||
file(WRITE ${PROJECT_BINARY_DIR}/python_compile_helper.py
|
||||
"import sys, py_compile
|
||||
files = sys.argv[1:]
|
||||
srcs, gens = files[:len(files)//2], files[len(files)//2:]
|
||||
for src, gen in zip(srcs, gens):
|
||||
py_compile.compile(file=src, cfile=gen, doraise=True)
|
||||
")
|
||||
"
|
||||
)
|
||||
|
||||
@@ -140,9 +140,9 @@ else()
|
||||
message(STATUS " The rinex2assist utility tool will not be built.")
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU")
|
||||
message(STATUS " You can install the Boost Iostreams library by doing:")
|
||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
||||
if("${LINUX_DISTRIBUTION}" MATCHES "Fedora" OR "${LINUX_DISTRIBUTION}" MATCHES "Red Hat")
|
||||
message(STATUS " sudo yum install boost-iostreams")
|
||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
||||
elseif("${LINUX_DISTRIBUTION}" MATCHES "openSUSE")
|
||||
message(STATUS " sudo zypper install libboost_iostreams-devel")
|
||||
else()
|
||||
message(STATUS " sudo apt install libboost-iostreams-dev")
|
||||
|
||||
Reference in New Issue
Block a user