diff --git a/CMakeLists.txt b/CMakeLists.txt
index 492169801..94548314a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,77 +16,116 @@
# along with GNSS-SDR. If not, see .
#
-########################################################################
+################################################################################
# Project setup
-########################################################################
+################################################################################
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
- message(WARNING "In-tree build is bad practice. Try 'cd build && cmake ../' ")
+ message(WARNING "In-tree build is bad practice. Try 'cd build && cmake ..'")
endif()
cmake_minimum_required(VERSION 2.8.12)
project(gnss-sdr CXX C)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
-file(RELATIVE_PATH RELATIVE_CMAKE_CALL ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
-
-if(NOT CMAKE_PREFIX_PATH)
- if(DEFINED ENV{PYBOMBS_PREFIX})
- set(CMAKE_PREFIX_PATH $ENV{PYBOMBS_PREFIX})
- endif()
- if(DEFINED ENV{SNAP})
- set(CMAKE_PREFIX_PATH $ENV{SNAP})
- endif()
-endif()
-
-########################################################################
+################################################################################
# Determine optional blocks/libraries to be built (default: not built)
# Enable them at the command line by doing 'cmake -DENABLE_XXX=ON ..'
-########################################################################
+################################################################################
+include(FeatureSummary)
# Support of optional RF front-ends
option(ENABLE_UHD "Enable the use of UHD (driver for all USRP devices)" ON)
+add_feature_info(ENABLE_UHD ENABLE_UHD "Enables UHD_Signal_Source for using RF front-ends from the USRP family. Requires gr-uhd.")
+
option(ENABLE_OSMOSDR "Enable the use of OsmoSDR and other front-ends (RTL-based dongles, HackRF, bladeRF, etc.) as signal source" OFF)
-option(ENABLE_FLEXIBAND "Enable the use of the signal source adater for the Teleorbit Flexiband GNURadio driver" OFF)
-option(ENABLE_ARRAY "Enable the use of CTTC's antenna array front-end as signal source (experimental)" OFF)
-option(ENABLE_GN3S "Enable the use of the GN3S dongle as signal source (experimental)" OFF)
-option(ENABLE_PLUTOSDR "Enable the use of ADALM-PLUTO Evaluation Boards (Analog Devices Inc.), requires gr-iio" OFF)
+add_feature_info(ENABLE_OSMOSDR ENABLE_OSMOSDR "Enables Osmosdr_Signal_Source and RtlTcp_Signal_Source for using RF front-ends compatible with the OsmoSDR driver. Requires gr-osmosdr.")
+
option(ENABLE_FMCOMMS2 "Enable the use of FMCOMMS4-EBZ + ZedBoard hardware, requires gr-iio" OFF)
-option(ENABLE_AD9361 "Enable the use of AD9361 directo to FPGA hardware, requires libiio" OFF)
+add_feature_info(ENABLE_FMCOMMS2 ENABLE_FMCOMMS2 "Enables Fmcomms2_Signal_Source for FMCOMMS2/3/4 devices. Requires gr-iio.")
+
+option(ENABLE_PLUTOSDR "Enable the use of ADALM-PLUTO Evaluation Boards (Analog Devices Inc.), requires gr-iio" OFF)
+add_feature_info(ENABLE_PLUTOSDR ENABLE_PLUTOSDR "Enables Plutosdr_Signal_Source for using ADALM-PLUTO boards. Requires gr-iio.")
+
+option(ENABLE_AD9361 "Enable the use of AD9361 direct to FPGA hardware, requires libiio" OFF)
+add_feature_info(ENABLE_AD9361 ENABLE_AD9361 "Enables Ad9361_Fpga_Signal_Source for devices with the AD9361 chipset. Requires libiio.")
+
option(ENABLE_RAW_UDP "Enable the use of high-optimized custom UDP packet sample source, requires libpcap" OFF)
+add_feature_info(ENABLE_RAW_UDP ENABLE_RAW_UDP "Enables Custom_UDP_Signal_Source for custom UDP packet sample source. Requires libpcap.")
+
+option(ENABLE_FLEXIBAND "Enable the use of the signal source adater for the Teleorbit Flexiband GNU Radio driver" OFF)
+add_feature_info(ENABLE_FLEXIBAND ENABLE_FLEXIBAND "Enables Flexiband_Signal_Source for using Teleorbit's Flexiband RF front-end. Requires gr-teleorbit.")
+
+option(ENABLE_GN3S "Enable the use of the GN3S dongle as signal source (experimental)" OFF)
+add_feature_info(ENABLE_GN3S ENABLE_GN3S "Enables Gn3s_Signal_Source for using the GN3S v2 dongle. Requires gr-gn3s.")
+
+option(ENABLE_ARRAY "Enable the use of CTTC's antenna array front-end as signal source (experimental)" OFF)
+add_feature_info(ENABLE_ARRAY ENABLE_ARRAY "Enables Raw_Array_Signal_Source and Array_Signal_Conditioner for using CTTC's antenna array. Requires gr-dbfcttc.")
# Performance analysis tools
option(ENABLE_GPERFTOOLS "Enable linking to Gperftools libraries (tcmalloc and profiler)" OFF)
+add_feature_info(ENABLE_GPERFTOOLS ENABLE_GPERFTOOLS "Enables performance analysis. Requires Gperftools.")
+
option(ENABLE_GPROF "Enable the use of the GNU profiler tool 'gprof'" OFF)
+add_feature_info(ENABLE_GPROF ENABLE_GPROF "Enables performance analysis with 'gprof'.")
# Code correctness
option(ENABLE_CLANG_TIDY "Enable the use of clang-tidy when compiling" OFF)
+add_feature_info(ENABLE_CLANG_TIDY ENABLE_CLANG_TIDY "Runs clang-tidy along with the compiler. Requires Clang.")
# Acceleration
option(ENABLE_PROFILING "Enable execution of volk_gnsssdr_profile at the end of the building" OFF)
+add_feature_info(ENABLE_PROFILING ENABLE_PROFILING "Runs volk_gnsssdr_profile at the end of the building.")
+
option(ENABLE_OPENCL "Enable building of processing blocks implemented with OpenCL (experimental)" OFF)
+add_feature_info(ENABLE_OPENCL ENABLE_OPENCL "Enables GPS_L1_CA_PCPS_OpenCl_Acquisition (experimental). Requires OpenCL.")
+
option(ENABLE_CUDA "Enable building of processing blocks implemented with CUDA (experimental, requires CUDA SDK)" OFF)
-option(ENABLE_FPGA "Enable building of processing blocks implemented with FPGA (experimental, requires EZDMA driver)" OFF)
+add_feature_info(ENABLE_CUDA ENABLE_CUDA "Enables GPS_L1_CA_DLL_PLL_Tracking_GPU (experimental). Requires CUDA.")
+
+option(ENABLE_FPGA "Enable building of processing blocks implemented with FPGA" OFF)
+add_feature_info(ENABLE_FPGA ENABLE_FPGA "Enables building of processing blocks for FPGA off-loading.")
# Building and packaging options
option(ENABLE_GENERIC_ARCH "Builds a portable binary" OFF)
+
option(ENABLE_PACKAGING "Enable software packaging" OFF)
+add_feature_info(ENABLE_PACKAGING ENABLE_PACKAGING "Enables software packaging.")
+
option(ENABLE_OWN_GLOG "Download glog and link it to gflags" OFF)
+add_feature_info(ENABLE_OWN_GLOG ENABLE_OWN_GLOG "Forces the downloading and building of Google glog.")
+
option(ENABLE_OWN_ARMADILLO "Download and build Armadillo locally" OFF)
+add_feature_info(ENABLE_OWN_ARMADILLO ENABLE_OWN_ARMADILLO "Forces the downloading and building of Armadillo.")
+
option(ENABLE_LOG "Enable logging" ON)
+add_feature_info(ENABLE_LOG ENABLE_LOG "Enables runtime internal logging with Google glog.")
+
if(ENABLE_PACKAGING)
set(ENABLE_GENERIC_ARCH ON)
endif()
# Testing
option(ENABLE_UNIT_TESTING "Build unit tests" ON)
+add_feature_info(ENABLE_UNIT_TESTING ENABLE_UNIT_TESTING "Enables building of Unit Tests.")
+
option(ENABLE_UNIT_TESTING_MINIMAL "Build a minimal set of unit tests" OFF)
+add_feature_info(ENABLE_UNIT_TESTING_MINIMAL ENABLE_UNIT_TESTING_MINIMAL "Enables building a minimal set of Unit Tests.")
+
option(ENABLE_UNIT_TESTING_EXTRA "Download external files and build extra unit tests" OFF)
+add_feature_info(ENABLE_UNIT_TESTING_EXTRA ENABLE_UNIT_TESTING_EXTRA "Enables building of Extra Unit Tests and downloading of external data files.")
+
option(ENABLE_SYSTEM_TESTING "Build system tests" OFF)
+add_feature_info(ENABLE_SYSTEM_TESTING ENABLE_SYSTEM_TESTING "Enables building of System Tests.")
+
option(ENABLE_SYSTEM_TESTING_EXTRA "Download external tools and build extra system tests" OFF)
+add_feature_info(ENABLE_SYSTEM_TESTING_EXTRA ENABLE_SYSTEM_TESTING_EXTRA "Enables building of Extra System Tests and downloading of external tools.")
+
if(ENABLE_SYSTEM_TESTING_EXTRA)
set(ENABLE_SYSTEM_TESTING ON)
endif()
option(ENABLE_OWN_GPSTK "Force to download, build and link GPSTk for system tests, even if it is already installed" OFF)
+add_feature_info(ENABLE_OWN_GPSTK ENABLE_OWN_GPSTK "Forces the downloading and building of GPSTk for system tests.")
+
option(ENABLE_INSTALL_TESTS "Install QA code system-wide" OFF)
if(ENABLE_FPGA)
set(ENABLE_INSTALL_TESTS ON)
@@ -94,25 +133,42 @@ endif()
-###############################
+################################################################################
# GNSS-SDR version information
-###############################
+################################################################################
set(THIS_IS_A_RELEASE OFF) # only related to version name, no further implications.
if(NOT ${THIS_IS_A_RELEASE})
- # Get the current working branch
- execute_process(
- COMMAND git rev-parse --abbrev-ref HEAD
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- OUTPUT_VARIABLE GIT_BRANCH
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- # Get the latest abbreviated commit hash of the working branch
- execute_process(
- COMMAND git log -1 --format=%h
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- OUTPUT_VARIABLE GIT_COMMIT_HASH
- OUTPUT_STRIP_TRAILING_WHITESPACE
+ find_package(Git)
+ set_package_properties(Git PROPERTIES
+ URL "https://git-scm.com"
+ DESCRIPTION "A free and open source distributed version control system"
+ PURPOSE "Manage version control, get MINOR_VERSION name for version number."
+ TYPE REQUIRED
)
+ if(Git_FOUND)
+ # was this info set in the CMake commandline?
+ if(NOT GIT_BRANCH)
+ # no: try to find it
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE GIT_BRANCH
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_QUIET ERROR_QUIET
+ )
+ endif(NOT GIT_BRANCH)
+ # was this info set in the CMake commandline?
+ if(NOT GIT_COMMIT_HASH)
+ # Get the latest abbreviated commit hash of the working branch
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} log -1 --format=%h
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE GIT_COMMIT_HASH
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_QUIET ERROR_QUIET
+ )
+ endif(NOT GIT_COMMIT_HASH)
+ endif()
endif()
set(VERSION_INFO_MAJOR_VERSION 0)
@@ -127,17 +183,25 @@ set(VERSION ${VERSION_INFO_MAJOR_VERSION}.${VERSION_INFO_API_COMPAT}.${VERSION_I
-########################################################################
+################################################################################
# Environment setup
-########################################################################
+################################################################################
include(ExternalProject)
+
# Detect 64-bits machine
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(ARCH_64BITS TRUE)
endif()
-set(OS_IS_MACOSX "")
-set(OS_IS_LINUX "")
+# Set prefix path for PyBOMBS and Snaps, if defined in environment variables
+if(NOT CMAKE_PREFIX_PATH)
+ if(DEFINED ENV{PYBOMBS_PREFIX})
+ set(CMAKE_PREFIX_PATH $ENV{PYBOMBS_PREFIX})
+ endif()
+ if(DEFINED ENV{SNAP})
+ set(CMAKE_PREFIX_PATH $ENV{SNAP})
+ endif()
+endif()
# Detect Linux Distribution
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
@@ -321,13 +385,13 @@ endif()
if(NOT CMAKE_MAKE_PROGRAM_PRETTY_NAME)
set(CMAKE_MAKE_PROGRAM_PRETTY_NAME "${CMAKE_MAKE_PROGRAM}")
endif()
+add_feature_info(ENABLE_INSTALL_TESTS ENABLE_INSTALL_TESTS "Install test binaries when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} install'.")
################################################################################
# Minimum required versions
################################################################################
-set(GNSSSDR_CMAKE_MIN_VERSION "2.8.12")
set(GNSSSDR_GCC_MIN_VERSION "4.7.2")
set(GNSSSDR_CLANG_MIN_VERSION "3.4.0")
set(GNSSSDR_APPLECLANG_MIN_VERSION "500")
@@ -359,16 +423,6 @@ endif()
-################################################################################
-# Check CMake version
-################################################################################
-if(CMAKE_VERSION VERSION_LESS ${GNSSSDR_CMAKE_MIN_VERSION})
- message(STATUS "Your CMake version is too old and does not support some features required by GNSS-SDR. CMake version must be at least ${GNSSSDR_CMAKE_MIN_VERSION}.")
- message(FATAL_ERROR "Fatal error: CMake >= ${GNSSSDR_CMAKE_MIN_VERSION} required.")
-endif()
-
-
-
################################################################################
# Check compiler version
################################################################################
@@ -501,6 +555,12 @@ else()
endif()
find_package(Threads REQUIRED)
endif()
+set_package_properties(Threads PROPERTIES
+ URL "https://computing.llnl.gov/tutorials/pthreads/"
+ DESCRIPTION "Implements the POSIX Threads execution model"
+ PURPOSE "Used to implement parallelism."
+ TYPE REQUIRED
+)
@@ -511,26 +571,23 @@ enable_testing()
if(ENABLE_UNIT_TESTING OR ENABLE_SYSTEM_TESTING)
if(EXISTS $ENV{GTEST_DIR})
set(GTEST_DIR $ENV{GTEST_DIR})
- endif()
- if(GTEST_DIR)
message(STATUS "Googletest root folder set at ${GTEST_DIR}")
- find_path(LIBGTEST_DEV_DIR NAMES src/gtest-all.cc PATHS ${GTEST_DIR} ${GTEST_DIR}/googletest)
- if(LIBGTEST_DEV_DIR)
- message(STATUS "Googletest has been found.")
- else()
- message(FATAL_ERROR " Googletest source code has not been found at ${GTEST_DIR}.")
- endif()
- find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h PATHS ${GTEST_DIR}/googletest/include)
- else()
- find_path(LIBGTEST_DEV_DIR NAMES src/gtest-all.cc PATHS /usr/src/googletest/googletest /usr/src/gtest /usr/include/gtest /opt/local/src/gtest-1.7.0)
- find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h PATHS /usr/include /opt/local/src/gtest-1.7.0/include)
- if(LIBGTEST_DEV_DIR)
- message(STATUS "Googletest package has been found.")
- else()
- message(STATUS " Googletest has not been found.")
- message(STATUS " Googletest v${GNSSSDR_GTEST_LOCAL_VERSION} will be downloaded and built automatically ")
- message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'. ")
- endif()
+ endif()
+endif()
+
+find_package(GOOGLETEST)
+set_package_properties(GOOGLETEST PROPERTIES
+ URL "https://github.com/google/googletest"
+ DESCRIPTION "Source code of Google's Testing Framework"
+ PURPOSE "Used for Unit and System Tests."
+ TYPE REQUIRED
+)
+if(NOT GOOGLETEST_FOUND)
+ set_package_properties(GOOGLETEST PROPERTIES
+ PURPOSE "Googletest v${GNSSSDR_GTEST_LOCAL_VERSION} will be downloaded and built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'."
+ )
+ if(GTEST_DIR)
+ message(FATAL_ERROR " Googletest source code has not been found at ${GTEST_DIR}.")
endif()
endif()
@@ -554,6 +611,12 @@ set(Boost_ADDITIONAL_VERSIONS
set(Boost_USE_MULTITHREAD ON)
set(Boost_USE_STATIC_LIBS OFF)
find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} COMPONENTS atomic chrono date_time filesystem serialization system thread REQUIRED)
+set_package_properties(Boost PROPERTIES
+ URL "https://www.boost.org"
+ DESCRIPTION "Portable C++ source libraries"
+ PURPOSE "Used widely across the source code."
+ TYPE REQUIRED
+)
if(NOT Boost_FOUND)
message(FATAL_ERROR "Fatal error: Boost (version >=${GNSSSDR_BOOST_MIN_VERSION}) required.")
endif()
@@ -625,7 +688,7 @@ if(CMAKE_VERSION VERSION_LESS 3.5)
set_property(TARGET Boost::atomic PROPERTY
INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIR})
set_property(TARGET Boost::atomic PROPERTY
- INTERFACE_LINK_LIBRARIES ${Boost_ATOMIC_LIBRARIES})
+ INTERFACE_LINK_LIBRARIES ${Boost_ATOMIC_LIBRARIES})
set_property(TARGET Boost::atomic PROPERTY
IMPORTED_LOCATION ${Boost_ATOMIC_LIBRARIES})
endif()
@@ -637,10 +700,32 @@ endif()
# GNU Radio - https://gnuradio.org
################################################################################
set(GR_REQUIRED_COMPONENTS RUNTIME ANALOG BLOCKS FFT FILTER PMT)
+
+find_package(UHD)
+set_package_properties(UHD PROPERTIES
+ URL "https://www.ettus.com/sdr-software/detail/usrp-hardware-driver"
+ DESCRIPTION "USRP Hardware Driver"
+ PURPOSE "Used for communication with front-ends of the USRP family."
+ TYPE OPTIONAL
+)
+if(ENABLE_UHD)
+ if(NOT UHD_FOUND)
+ set(ENABLE_UHD OFF)
+ else()
+ set(GR_REQUIRED_COMPONENTS ${GR_REQUIRED_COMPONENTS} UHD)
+ endif()
+endif()
+
find_package(GNURADIO)
+set_package_properties(GNURADIO PROPERTIES
+ URL "https://www.gnuradio.org/"
+ DESCRIPTION "The free and open software radio ecosystem"
+ PURPOSE "Implements flowgraph scheduler, provides some processing blocks and classes to create new ones."
+ TYPE REQUIRED
+)
if(PC_GNURADIO_RUNTIME_VERSION)
if(PC_GNURADIO_RUNTIME_VERSION VERSION_LESS ${GNSSSDR_GNURADIO_MIN_VERSION})
- set(GNURADIO_RUNTIME_FOUND)
+ unset(GNURADIO_RUNTIME_FOUND)
message(STATUS "The GNU Radio version installed in your system is too old.")
endif()
endif()
@@ -752,12 +837,32 @@ else()
endif()
endif()
+if(ENABLE_UHD AND UHD_FOUND AND GNURADIO_UHD_FOUND)
+ if(NOT TARGET Gnuradio::uhd)
+ add_library(Gnuradio::uhd SHARED IMPORTED)
+ list(GET GNURADIO_UHD_LIBRARIES 0 FIRST_DIR)
+ get_filename_component(GNURADIO_UHD_DIR ${FIRST_DIR} ABSOLUTE)
+ set_target_properties(Gnuradio::uhd PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+ IMPORTED_LOCATION "${GNURADIO_UHD_DIR}"
+ INTERFACE_INCLUDE_DIRECTORIES "${GNURADIO_UHD_INCLUDE_DIRS}"
+ INTERFACE_LINK_LIBRARIES "${GNURADIO_UHD_LIBRARIES}"
+ )
+ endif()
+endif()
+
################################################################################
# VOLK - Vector-Optimized Library of Kernels
################################################################################
find_package(VOLK)
+set_package_properties(VOLK PROPERTIES
+ URL "http://libvolk.org"
+ DESCRIPTION "Vector-Optimized Library of Kernels"
+ PURPOSE "Provides an abstraction of optimized math routines targeting several SIMD processors."
+ TYPE REQUIRED
+)
if(NOT VOLK_FOUND)
message(FATAL_ERROR "*** VOLK is required to build gnss-sdr")
endif()
@@ -768,6 +873,12 @@ endif()
# Log4cpp - http://log4cpp.sourceforge.net/
################################################################################
find_package(LOG4CPP)
+set_package_properties(LOG4CPP PROPERTIES
+ URL "http://log4cpp.sourceforge.net/"
+ DESCRIPTION "Library of C++ classes for flexible logging to files"
+ PURPOSE "Required by GNU Radio."
+ TYPE REQUIRED
+)
if(NOT LOG4CPP_FOUND)
message(FATAL_ERROR "*** Log4cpp is required to build gnss-sdr")
endif()
@@ -778,8 +889,13 @@ endif()
# volk_gnsssdr module - GNSS-SDR's own VOLK library
################################################################################
find_package(VOLKGNSSSDR)
+set_package_properties(VOLKGNSSSDR PROPERTIES
+ DESCRIPTION "Vector-Optimized Library of Kernels for GNSS-SDR."
+ PURPOSE "Accelerates math routines targeting several SIMD processors."
+ TYPE REQUIRED
+)
if(NOT VOLKGNSSSDR_FOUND)
- message(STATUS " volk_gnsssdr will be built along with gnss-sdr when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'")
+ message(STATUS " volk_gnsssdr will be built along with gnss-sdr when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.")
###############################
# Find Python required modules
###############################
@@ -800,11 +916,11 @@ if(NOT VOLKGNSSSDR_FOUND)
message(STATUS "Mako template library not found. See http://www.makotemplates.org/ ")
message(STATUS " You can try to install it by typing:")
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(STATUS " sudo yum install ${PYTHON_NAME}-mako")
+ message(STATUS " sudo yum install ${PYTHON_NAME}-mako")
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
- message(STATUS " sudo zypper install ${PYTHON_NAME}-Mako")
+ message(STATUS " sudo zypper install ${PYTHON_NAME}-Mako")
else()
- message(STATUS " sudo apt-get install ${PYTHON_NAME}-mako")
+ message(STATUS " sudo apt-get install ${PYTHON_NAME}-mako")
endif()
message(FATAL_ERROR "Mako templates required to build VOLK_GNSSSDR")
endif()
@@ -814,15 +930,36 @@ if(NOT VOLKGNSSSDR_FOUND)
message(STATUS "python-six not found. See https://pythonhosted.org/six/ ")
message(STATUS " You can try to install it by typing:")
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
- message(STATUS " sudo yum install ${PYTHON_NAME}-six")
+ message(STATUS " sudo yum install ${PYTHON_NAME}-six")
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
- message(STATUS " sudo zypper install ${PYTHON_NAME}-six")
+ message(STATUS " sudo zypper install ${PYTHON_NAME}-six")
else()
- message(STATUS " sudo apt-get install ${PYTHON_NAME}-six")
+ message(STATUS " sudo apt-get install ${PYTHON_NAME}-six")
endif()
message(FATAL_ERROR "six - python 2 and 3 compatibility library required to build VOLK_GNSSSDR")
endif()
+ set_package_properties(Python3 PROPERTIES
+ URL "https://www.python.org/"
+ DESCRIPTION "An interpreted, high-level, general-purpose programming language"
+ PURPOSE "Required to build volk_gnsssdr."
+ TYPE REQUIRED
+ )
+
+ set_package_properties(Python2 PROPERTIES
+ URL "https://www.python.org/"
+ DESCRIPTION "An interpreted, high-level, general-purpose programming language"
+ PURPOSE "Required to build volk_gnsssdr."
+ TYPE REQUIRED
+ )
+
+ set_package_properties(PythonInterp PROPERTIES
+ URL "https://www.python.org/"
+ DESCRIPTION "An interpreted, high-level, general-purpose programming language"
+ PURPOSE "Required to build volk_gnsssdr."
+ TYPE REQUIRED
+ )
+
set(READ_ENVIRO "")
if(ENABLE_PACKAGING)
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32)
@@ -855,11 +992,13 @@ if(NOT VOLKGNSSSDR_FOUND)
-DCMAKE_INCLUDE_PATH=${Boost_INCLUDE_DIR}
-DENABLE_ORC=OFF
${STRIP_VOLK_GNSSSDR_PROFILE}
- ${USE_THIS_PYTHON})
+ ${USE_THIS_PYTHON}
+ )
if(EXISTS $ENV{OECORE_TARGET_SYSROOT})
set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS}
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/Toolchains/oe-sdk_cross.cmake
- -DCROSSCOMPILE_MULTILIB=TRUE)
+ -DCROSSCOMPILE_MULTILIB=TRUE
+ )
endif()
if(CMAKE_VERSION VERSION_LESS 3.2)
ExternalProject_Add(volk_gnsssdr_module
@@ -889,6 +1028,12 @@ if(NOT VOLKGNSSSDR_FOUND)
)
endif()
find_package(ORC)
+ set_package_properties(ORC PROPERTIES
+ URL "https://gstreamer.freedesktop.org/modules/orc.html"
+ DESCRIPTION "The Optimized Inner Loops Runtime Compiler"
+ PURPOSE "Used by volk_gnsssdr."
+ TYPE OPTIONAL
+ )
if(NOT ORC_FOUND)
set(ORC_LIBRARIES "")
set(ORC_INCLUDE_DIRS "")
@@ -915,17 +1060,24 @@ if(NOT VOLKGNSSSDR_FOUND)
if(CMAKE_VERSION VERSION_LESS 3.2)
add_custom_command(TARGET volk_gnsssdr_module POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr_profile
- ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr_profile)
+ ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr_profile
+ )
else()
add_custom_command(TARGET volk_gnsssdr_module POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr_profile
${CMAKE_SOURCE_DIR}/install/volk_gnsssdr_profile
- BYPRODUCTS ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr_profile)
+ BYPRODUCTS ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr_profile
+ )
endif()
add_custom_command(TARGET volk_gnsssdr_module POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr-config-info
- ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr-config-info)
+ ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr-config-info
+ )
+
+ set_package_properties(VOLKGNSSSDR PROPERTIES
+ PURPOSE "volk_gnsssdr will be built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'."
+ )
endif()
@@ -935,10 +1087,16 @@ endif()
################################################################################
set(LOCAL_GFLAGS false)
find_package(GFLAGS)
+set_package_properties(GFLAGS PROPERTIES
+ URL "https://github.com/gflags/gflags"
+ DESCRIPTION "C++ library that implements commandline flags processing"
+ PURPOSE "Used for commandline flags management."
+ TYPE REQUIRED
+)
if(NOT GFLAGS_FOUND)
message(STATUS " gflags library has not been found.")
message(STATUS " gflags v${GNSSSDR_GFLAGS_LOCAL_VERSION} will be downloaded and built automatically ")
- message(STATUS " when doing 'make'. ")
+ message(STATUS " when doing 'make'.")
if(CMAKE_VERSION VERSION_LESS 3.2)
ExternalProject_Add(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}
@@ -991,6 +1149,9 @@ if(NOT GFLAGS_FOUND)
endif()
set(LOCAL_GFLAGS true CACHE STRING "GFlags downloaded and built automatically" FORCE)
+ set_package_properties(GFLAGS PROPERTIES
+ PURPOSE "Gflags v${GNSSSDR_GFLAGS_LOCAL_VERSION} will be downloaded and built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'."
+ )
endif()
@@ -1004,14 +1165,19 @@ if(NOT ${ENABLE_OWN_GLOG})
set(GLOG_FOUND ON)
endif()
endif()
-set(glog_RELEASE ${GNSSSDR_GLOG_LOCAL_VERSION})
+set_package_properties(GLOG PROPERTIES
+ URL "https://github.com/google/glog"
+ DESCRIPTION "C++ implementation of the Google logging module"
+ PURPOSE "Used for runtime internal logging."
+ TYPE REQUIRED
+)
if(NOT GLOG_FOUND OR ${LOCAL_GFLAGS})
message(STATUS " glog library has not been found")
if(NOT GFLAGS_FOUND)
message(STATUS " or it is likely not linked to gflags.")
endif()
message(STATUS " glog v${GNSSSDR_GLOG_LOCAL_VERSION} will be downloaded and built automatically ")
- message(STATUS " when doing 'make'. ")
+ message(STATUS " when doing 'make'.")
if(NOT ${LOCAL_GFLAGS})
add_library(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} UNKNOWN IMPORTED)
set_property(TARGET gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} PROPERTY IMPORTED_LOCATION "${GFlags_LIBS}")
@@ -1150,6 +1316,10 @@ ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/c
endif()
set(LOCAL_GLOG true CACHE STRING "Glog downloaded and built automatically" FORCE)
+
+ set_package_properties(GLOG PROPERTIES
+ PURPOSE "Glog v${GNSSSDR_GLOG_LOCAL_VERSION} will be downloaded and built when doing 'make'."
+ )
endif()
if(NOT ENABLE_LOG)
@@ -1158,10 +1328,10 @@ endif()
-#############################################################################
+################################################################################
# Check that BLAS (Basic Linear Algebra Subprograms) is found in the system
# See http://www.netlib.org/blas/
-#############################################################################
+################################################################################
find_library(BLAS blas)
if(NOT BLAS)
message(" The BLAS library has not been found.")
@@ -1176,10 +1346,10 @@ endif()
-#############################################################################
+################################################################################
# Check that LAPACK (Linear Algebra PACKage) is found in the system
# See http://www.netlib.org/lapack/
-#############################################################################
+################################################################################
find_library(LAPACK lapack)
if(NOT LAPACK)
message(" The LAPACK library has not been found.")
@@ -1200,6 +1370,12 @@ endif()
# Armadillo - http://arma.sourceforge.net/
################################################################################
find_package(Armadillo)
+set_package_properties(Armadillo PROPERTIES
+ URL "http://arma.sourceforge.net/"
+ DESCRIPTION "C++ library for linear algebra and scientific computing"
+ PURPOSE "Used for matrix computations."
+ TYPE REQUIRED
+)
if(ARMADILLO_FOUND)
if(${ARMADILLO_VERSION_STRING} VERSION_LESS ${GNSSSDR_ARMADILLO_MIN_VERSION})
set(ARMADILLO_FOUND false)
@@ -1218,7 +1394,7 @@ endif()
if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO)
message(STATUS " Armadillo has not been found.")
message(STATUS " Armadillo ${GNSSSDR_ARMADILLO_LOCAL_VERSION} will be downloaded and built automatically")
- message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'. ")
+ message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.")
set(armadillo_BRANCH ${GNSSSDR_ARMADILLO_LOCAL_VERSION})
set(armadillo_RELEASE ${armadillo_BRANCH})
@@ -1227,6 +1403,12 @@ if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO)
#############################################
if(NOT OS_IS_MACOSX)
find_package(GFORTRAN)
+ set_package_properties(GFORTRAN PROPERTIES
+ URL "http://gcc.gnu.org/wiki/GFortran"
+ DESCRIPTION "GNU Fortran project"
+ PURPOSE "Required by Armadillo."
+ TYPE REQUIRED
+ )
if(NOT GFORTRAN)
message(STATUS "The gfortran library has not been found.")
message(STATUS " You can try to install it by typing:")
@@ -1271,9 +1453,8 @@ if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO)
)
endif()
- # Set up variables
+ # Create imported target
ExternalProject_Get_Property(armadillo-${armadillo_RELEASE} binary_dir)
- #set(ARMADILLO_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/armadillo/armadillo-${armadillo_RELEASE}/include)
if(NOT GFORTRAN)
set(GFORTRAN "")
endif()
@@ -1289,6 +1470,9 @@ if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO)
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/armadillo/armadillo-${armadillo_RELEASE}/include"
INTERFACE_LINK_LIBRARIES "${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
+ set_package_properties(Armadillo PROPERTIES
+ PURPOSE "Armadillo ${GNSSSDR_ARMADILLO_LOCAL_VERSION} will be downloaded and built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'."
+ )
endif()
@@ -1297,6 +1481,12 @@ endif()
# GnuTLS - https://www.gnutls.org/
################################################################################
find_package(GnuTLS)
+set_package_properties(GnuTLS PROPERTIES
+ URL "https://www.gnutls.org/"
+ DESCRIPTION "Transport Layer Security Library"
+ PURPOSE "Used for the SUPL protocol implementation."
+ TYPE REQUIRED
+)
find_library(GNUTLS_OPENSSL_LIBRARY NAMES gnutls-openssl libgnutls-openssl.so.27
HINTS /usr/lib
/usr/lib64
@@ -1328,11 +1518,19 @@ find_library(GNUTLS_OPENSSL_LIBRARY NAMES gnutls-openssl libgnutls-openssl.so.27
/usr/lib/x86_64-linux-gnux32
/usr/lib/sh4-linux-gnu
)
-
if(NOT GNUTLS_OPENSSL_LIBRARY)
message(STATUS "Looking for OpenSSL instead...")
find_package(OpenSSL)
+ set_package_properties(OpenSSL PROPERTIES
+ URL "https://www.openssl.org"
+ DESCRIPTION "Cryptography and SSL/TLS Toolkit"
+ PURPOSE "Used for the SUPL protocol implementation."
+ TYPE REQUIRED
+ )
if(OPENSSL_FOUND)
+ set_package_properties(GnuTLS PROPERTIES
+ PURPOSE "Not found, but OpenSSL can replace it."
+ )
set(GNUTLS_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR})
set(GNUTLS_LIBRARIES "")
set(GNUTLS_OPENSSL_LIBRARY ${OPENSSL_SSL_LIBRARY})
@@ -1355,17 +1553,29 @@ endif()
-########################################################################
+################################################################################
# Matio - https://github.com/tbeu/matio
-########################################################################
+################################################################################
find_package(MATIO)
+set_package_properties(MATIO PROPERTIES
+ URL "https://github.com/tbeu/matio"
+ DESCRIPTION "MATLAB MAT File I/O Library"
+ PURPOSE "Used to store processing block's results in MAT files readable from MATLAB/Octave."
+ TYPE REQUIRED
+)
if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERSION})
if(MATIO_FOUND)
message(STATUS " Matio installed version (${MATIO_VERSION_STRING}) is too old (>= ${GNSSSDR_MATIO_MIN_VERSION} is required).")
endif()
message(STATUS " Matio v${GNSSSDR_MATIO_LOCAL_VERSION} will be downloaded and built automatically")
- message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'. ")
+ message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.")
find_package(ZLIB)
+ set_package_properties(ZLIB PROPERTIES
+ URL "https://www.zlib.net/"
+ DESCRIPTION "A Massively Spiffy Yet Delicately Unobtrusive Compression Library"
+ PURPOSE "Required to build Matio."
+ TYPE REQUIRED
+ )
if(ZLIB_FOUND)
get_filename_component(ZLIB_BASE_DIR ${ZLIB_INCLUDE_DIRS} DIRECTORY)
if(OS_IS_LINUX)
@@ -1403,6 +1613,12 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS
endif()
endif()
find_package(HDF5)
+ set_package_properties(HDF5 PROPERTIES
+ URL "https://support.hdfgroup.org/HDF5/"
+ DESCRIPTION "A versatile data model, a portable file format and a software library"
+ PURPOSE "Required to build Matio."
+ TYPE REQUIRED
+ )
if(HDF5_FOUND)
list(GET HDF5_LIBRARIES 0 HDF5_FIRST_DIR)
get_filename_component(HDF5_BASE_DIR2 ${HDF5_FIRST_DIR} DIRECTORY)
@@ -1424,7 +1640,7 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}
UPDATE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/autogen.sh
CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/configure --with-hdf5=${HDF5_BASE_DIR} --with-zlib=${ZLIB_BASE_DIR} --with-default-file-ver=7.3 --enable-mat73=yes --prefix=
- BUILD_COMMAND $(MAKE)
+ BUILD_COMMAND ${CMAKE_MAKE_PROGRAM}
)
else()
ExternalProject_Add(matio-${GNSSSDR_MATIO_LOCAL_VERSION}
@@ -1445,10 +1661,10 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS
add_library(Matio::matio SHARED IMPORTED)
add_dependencies(Matio::matio matio-${GNSSSDR_MATIO_LOCAL_VERSION})
set_target_properties(Matio::matio PROPERTIES
- IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
- IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_SHARED_LIBRARY_SUFFIX}"
- INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/matio/include"
- INTERFACE_LINK_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+ IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/matio/include"
+ INTERFACE_LINK_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_SHARED_LIBRARY_SUFFIX}"
)
endif()
else()
@@ -1467,6 +1683,9 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS
else()
message(FATAL_ERROR "*** The zlib library is required to build gnss-sdr")
endif()
+ set_package_properties(MATIO PROPERTIES
+ PURPOSE "Matio v${GNSSSDR_MATIO_LOCAL_VERSION} will be downloaded and built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'."
+ )
endif()
@@ -1474,11 +1693,15 @@ endif()
################################################################################
# PugiXML - https://pugixml.org/
################################################################################
-find_package(PUGIXML QUIET)
-if(PUGIXML_FOUND)
- message(STATUS "PugiXML has been found.")
-else()
- message(STATUS " PugiXML v${GNSSSDR_PUGIXML_LOCAL_VERSION} will be downloaded and built automatically when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.")
+find_package(PUGIXML)
+set_package_properties(PUGIXML PROPERTIES
+ URL "https://pugixml.org/"
+ DESCRIPTION "Light-weight, simple and fast XML parser for C++"
+ PURPOSE "Used to handle Galileo almanac XML files published by the European GNSS Service Centre."
+ TYPE REQUIRED
+)
+if(NOT PUGIXML_FOUND)
+ message(STATUS " PugiXML v${GNSSSDR_PUGIXML_LOCAL_VERSION} will be downloaded and built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.")
set(PUGIXML_COMPILER -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER})
set(TOOLCHAIN_ARG "")
if(EXISTS $ENV{OECORE_TARGET_SYSROOT})
@@ -1523,14 +1746,31 @@ else()
INTERFACE_LINK_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}pugixml${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
endif()
+
+ set_package_properties(PUGIXML PROPERTIES
+ PURPOSE "PugiXML v${GNSSSDR_PUGIXML_LOCAL_VERSION} will be downloaded and built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'."
+ )
endif()
################################################################################
-# Doxygen - http://www.stack.nl/~dimitri/doxygen/index.html (OPTIONAL, used if found)
+# Doxygen - http://www.doxygen.nl (OPTIONAL, used if found)
################################################################################
find_package(Doxygen)
+set_package_properties(Doxygen PROPERTIES
+ URL "http://www.doxygen.nl"
+ DESCRIPTION "Generates documentation from annotated C++ sources"
+ PURPOSE "Used to generate code documentation by doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} doc'"
+ TYPE OPTIONAL
+)
+find_package(LATEX)
+set_package_properties(LATEX PROPERTIES
+ URL "https://www.latex-project.org"
+ DESCRIPTION "High-quality typesetting system"
+ PURPOSE "Used to generate a PDF manual by doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} pdfmanual'"
+ TYPE OPTIONAL
+)
if(DOXYGEN_FOUND)
message(STATUS "Doxygen found.")
message(STATUS " You can build the documentation with '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} doc'.")
@@ -1538,7 +1778,6 @@ if(DOXYGEN_FOUND)
set(HAVE_DOT ${DOXYGEN_DOT_FOUND})
file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} top_srcdir)
file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} top_builddir)
- find_package(LATEX)
if(PDFLATEX_COMPILER)
set(GENERATE_PDF_DOCUMENTATION "YES")
set(GNSSSDR_USE_MATHJAX "NO")
@@ -1553,9 +1792,9 @@ if(DOXYGEN_FOUND)
add_custom_target(doc
${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/docs/doxygen/Doxyfile
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- COMMENT "Generating API documentation with Doxygen." VERBATIM
+ COMMENT "Generating source code documentation with Doxygen." VERBATIM
)
- if(LATEX_COMPILER)
+ if(PDFLATEX_COMPILER)
message(STATUS " '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} pdfmanual' will generate a manual at ${CMAKE_BINARY_DIR}/docs/GNSS-SDR_manual.pdf")
add_custom_target(pdfmanual
COMMAND ${CMAKE_MAKE_PROGRAM}
@@ -1591,9 +1830,16 @@ endif()
-###############################################################################
+################################################################################
# OpenCL (OPTIONAL)
-###############################################################################
+################################################################################
+find_package(OPENCL QUIET)
+set_package_properties(OPENCL PROPERTIES
+ URL "https://www.khronos.org/opencl/"
+ DESCRIPTION "Library for parallel programming"
+ PURPOSE "Used in some processing block implementations."
+ TYPE OPTIONAL
+)
if(ENABLE_OPENCL)
find_package(OPENCL)
if($ENV{DISABLE_OPENCL})
@@ -1620,9 +1866,9 @@ endif()
-###############################################################################
+################################################################################
# CUDA (OPTIONAL)
-###############################################################################
+################################################################################
if($ENV{CUDA_GPU_ACCEL})
message(STATUS "CUDA_GPU_ACCEL environment variable found.")
set(ENABLE_CUDA ON)
@@ -1630,6 +1876,12 @@ endif()
if(ENABLE_CUDA)
find_package(CUDA REQUIRED)
+ set_package_properties(CUDA PROPERTIES
+ URL "https://developer.nvidia.com/cuda-downloads"
+ DESCRIPTION "Library for parallel programming in Nvidia GPUs"
+ PURPOSE "Used in some processing block implementations."
+ TYPE REQUIRED
+ )
message(STATUS "NVIDIA CUDA GPU Acceleration will be enabled.")
message(STATUS " You can disable it with 'cmake -DENABLE_CUDA=OFF ..'")
else()
@@ -1639,13 +1891,19 @@ endif()
-###############################################################################
+################################################################################
# CUSTOM UDP PACKET SOURCE (OPTIONAL)
-###############################################################################
+################################################################################
+find_package(PCAP)
+set_package_properties(PCAP PROPERTIES
+ URL "https://www.tcpdump.org"
+ DESCRIPTION "A portable C/C++ library for network traffic capture"
+ PURPOSE "Used for the custom UDP IP packet source."
+ TYPE OPTIONAL
+)
if(ENABLE_RAW_UDP)
message(STATUS "High-optimized custom UDP IP packet source is enabled.")
message(STATUS " You can disable it with 'cmake -DENABLE_RAW_UDP=OFF ..'")
- find_package(PCAP)
if(NOT PCAP_FOUND)
message(FATAL_ERROR "PCAP required to compile custom UDP packet sample source (with ENABLE_RAW_UDP=ON)")
endif()
@@ -1653,9 +1911,9 @@ endif()
-###############################################################################
+################################################################################
# FPGA (OPTIONAL)
-###############################################################################
+################################################################################
if(ENABLE_FPGA)
message(STATUS "FPGA Acceleration will be enabled.")
message(STATUS " You can disable it with 'cmake -DENABLE_FPGA=OFF ..'")
@@ -1670,34 +1928,6 @@ endif()
# Setup of optional drivers
################################################################################
-########################################
-# USRP Hardware Driver (UHD) - OPTIONAL
-########################################
-if(ENABLE_UHD)
- find_package(UHD)
- if(NOT UHD_FOUND)
- set(ENABLE_UHD OFF)
- message(STATUS " The USRP Hardware Driver (UHD) signal source will not be built,")
- message(STATUS " so all USRP-based front-ends will not be usable.")
- message(STATUS " Please check https://files.ettus.com/manual/")
- else()
- set(GR_REQUIRED_COMPONENTS UHD)
- find_package(Gnuradio)
- if(NOT TARGET Gnuradio::uhd)
- add_library(Gnuradio::uhd SHARED IMPORTED)
- list(GET GNURADIO_UHD_LIBRARIES 0 FIRST_DIR)
- get_filename_component(GNURADIO_UHD_DIR ${FIRST_DIR} ABSOLUTE)
- set_target_properties(Gnuradio::uhd PROPERTIES
- IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
- IMPORTED_LOCATION "${GNURADIO_UHD_DIR}"
- INTERFACE_INCLUDE_DIRECTORIES "${GNURADIO_UHD_INCLUDE_DIRS}"
- INTERFACE_LINK_LIBRARIES "${GNURADIO_UHD_LIBRARIES}"
- )
- endif()
- endif()
-endif()
-
-
##########################################
# gr-osmosdr - OPTIONAL
# https://github.com/osmocom/gr-osmosdr
@@ -1707,8 +1937,14 @@ if($ENV{RTLSDR_DRIVER})
set(ENABLE_OSMOSDR ON)
endif()
+find_package(GROSMOSDR)
+set_package_properties(GROSMOSDR PROPERTIES
+ URL "https://osmocom.org/projects/gr-osmosdr/wiki"
+ DESCRIPTION "osmocom GNU Radio blocks"
+ PURPOSE "Used for communication with OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based dongles, etc.)."
+ TYPE OPTIONAL
+)
if(ENABLE_OSMOSDR)
- find_package(GROSMOSDR)
if(GROSMOSDR_FOUND)
message(STATUS "The driver for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based dongles, etc.) will be compiled.")
message(STATUS " You can disable it with 'cmake -DENABLE_OSMOSDR=OFF ..'")
@@ -1730,20 +1966,27 @@ endif()
# IIO blocks for GNU Radio
# https://github.com/analogdevicesinc/gr-iio
##############################################
-if(ENABLE_PLUTOSDR OR ENABLE_FMCOMMS2)
- find_package(GRIIO)
- find_package(LIBIIO)
-endif()
+find_package(GRIIO)
+set_package_properties(GRIIO PROPERTIES
+ URL "https://github.com/analogdevicesinc/gr-iio"
+ DESCRIPTION "IIO blocks for GNU Radio"
+ PURPOSE "Used for communication with PlutoSDR and FMCOMMS devices."
+ TYPE OPTIONAL
+)
-###################################################################################
+#####################################################################
# libiio - OPTIONAL
-# A cross platform library for interfacing with local and remote Linux IIO devices
+# A library for interfacing with local and remote Linux IIO devices
# https://github.com/analogdevicesinc/libiio
-###################################################################################
-if(ENABLE_AD9361)
- find_package(LIBIIO)
-endif()
+#####################################################################
+find_package(LIBIIO)
+set_package_properties(LIBIIO PROPERTIES
+ URL "https://github.com/analogdevicesinc/libiio"
+ DESCRIPTION "A library for interfacing with Linux IIO devices"
+ PURPOSE "Used for communication with the AD9361 chipset."
+ TYPE OPTIONAL
+)
##############################################
@@ -1765,17 +2008,22 @@ else()
message(STATUS "The (optional) Teleorbit Flexiband front-end driver adapter is not enabled.")
message(STATUS " Enable it with 'cmake -DENABLE_FLEXIBAND=ON ..' to add support for the Teleorbit Flexiband front-end.")
endif()
+find_package(TELEORBIT)
+set_package_properties(TELEORBIT PROPERTIES
+ DESCRIPTION "The Teleorbit's Flexiband GNU Radio block."
+ PURPOSE "Used for communication with the Flexiband front-end."
+ TYPE OPTIONAL
+)
if(ENABLE_FLEXIBAND)
- find_package(TELEORBIT)
if(NOT TELEORBIT_FOUND)
message(FATAL_ERROR "Teleorbit Flexiband GNU Radio driver required to build gnss-sdr with the optional FLEXIBAND adapter")
endif()
endif()
-##############################################
+######################
# GN3S - OPTIONAL
-##############################################
+######################
if($ENV{GN3S_DRIVER})
message(STATUS "GN3S_DRIVER environment variable found.")
set(ENABLE_GN3S ON)
@@ -1783,10 +2031,16 @@ endif()
if(GN3S_DRIVER)
set(ENABLE_GN3S ON)
endif()
+find_package(GRGN3S QUIET)
+set_package_properties(GRGN3S PROPERTIES
+ URL "https://github.com/gnss-sdr/gr-gn3s"
+ DESCRIPTION "The GN3S v2 front-end GNU Radio block."
+ PURPOSE "Used for communication with the GN3S v2 front-end."
+ TYPE OPTIONAL
+)
if(ENABLE_GN3S)
message(STATUS "The GN3S driver will be compiled.")
message(STATUS " You can disable it with 'cmake -DENABLE_GN3S=OFF ..'")
- find_package(GRGN3S QUIET)
else()
message(STATUS "The (optional and experimental) GN3S driver is not enabled.")
message(STATUS " Enable it with 'cmake -DENABLE_GN3S=ON ..' to add support for the GN3S dongle.")
@@ -1805,10 +2059,16 @@ if(RAW_ARRAY_DRIVER)
set(ENABLE_ARRAY ON)
endif()
+find_package(GRDBFCTTC QUIET)
+set_package_properties(GRDBFCTTC PROPERTIES
+ URL "https://github.com/gnss-sdr/gr-dbfcttcs"
+ DESCRIPTION "CTTC's array prototype GNU Radio block."
+ PURPOSE "Used for communication with CTTC's antenna array."
+ TYPE OPTIONAL
+)
if(ENABLE_ARRAY)
message(STATUS "CTTC's Antenna Array front-end driver will be compiled.")
message(STATUS " You can disable it with 'cmake -DENABLE_ARRAY=OFF ..'")
- find_package(GRDBFCTTC QUIET)
else()
message(STATUS "The (optional) CTTC's Antenna Array front-end driver is not enabled.")
message(STATUS " Enable it with 'cmake -DENABLE_ARRAY=ON ..' to add support for the CTTC experimental array front-end.")
@@ -1819,8 +2079,14 @@ endif()
################################################################################
# GPerftools - https://github.com/gperftools/gperftools - OPTIONAL)
################################################################################
+find_package(GPERFTOOLS)
+set_package_properties(GPERFTOOLS PROPERTIES
+ URL "https://github.com/gperftools/gperftools"
+ DESCRIPTION "Collection of performance analysis tools"
+ PURPOSE "Used for performance analysis."
+ TYPE OPTIONAL
+)
if(ENABLE_GPERFTOOLS)
- find_package(GPERFTOOLS)
if(NOT GPERFTOOLS_FOUND)
message(STATUS "Although ENABLE_GPERFTOOLS has been set to ON, GPerftools has not been found.")
message(STATUS " Binaries will be compiled without 'tcmalloc' and 'profiler' libraries.")
@@ -1829,8 +2095,6 @@ if(ENABLE_GPERFTOOLS)
message(STATUS "GPerftools libraries found.")
message(STATUS " Binaries will be compiled with 'tcmalloc' and 'profiler' libraries.")
endif()
-endif()
-if(ENABLE_GPERFTOOLS)
# Set GPerftools related flags if it is available
# See https://github.com/gperftools/gperftools/blob/master/README
if(GPERFTOOLS_FOUND)
@@ -1845,9 +2109,9 @@ endif()
-########################################################################
+################################################################################
# GNU gprof (OPTIONAL) - https://sourceware.org/binutils/docs/gprof/
-########################################################################
+################################################################################
if(ENABLE_GPROF)
add_compile_options(-pg)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
@@ -1855,9 +2119,10 @@ if(ENABLE_GPROF)
endif()
-########################################################################
+
+################################################################################
# Set compiler flags
-########################################################################
+################################################################################
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32)
# Add warning flags
# For "-Wall" see https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
@@ -1902,9 +2167,9 @@ endif()
-########################################################################
+################################################################################
# clang-tidy https://clang.llvm.org/extra/clang-tidy/index.html
-########################################################################
+################################################################################
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if(NOT (CMAKE_VERSION VERSION_LESS "3.6"))
find_program(
@@ -1928,9 +2193,10 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
endif()
-########################################################################
+
+################################################################################
# Create uninstall target
-########################################################################
+################################################################################
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
@@ -1941,7 +2207,38 @@ add_custom_target(uninstall
-########################################################################
-# Add subdirectories (in order of deps)
-########################################################################
+################################################################################
+# Add subdirectories
+################################################################################
add_subdirectory(src)
+
+
+
+################################################################################
+# Print summary
+################################################################################
+message(STATUS "")
+message(STATUS "***************************************")
+message(STATUS "* SUMMARY REPORT *")
+message(STATUS "***************************************")
+message(STATUS "")
+if(CMAKE_VERSION VERSION_LESS 3.4)
+ feature_summary(WHAT ALL)
+ feature_summary(FILENAME ${CMAKE_CURRENT_BINARY_DIR}/features.log WHAT ALL)
+else()
+ feature_summary(WHAT
+ REQUIRED_PACKAGES_FOUND
+ REQUIRED_PACKAGES_NOT_FOUND
+ OPTIONAL_PACKAGES_FOUND
+ OPTIONAL_PACKAGES_NOT_FOUND
+ ENABLED_FEATURES DISABLED_FEATURES
+ )
+ feature_summary(FILENAME ${CMAKE_CURRENT_BINARY_DIR}/features.log WHAT
+ REQUIRED_PACKAGES_FOUND
+ REQUIRED_PACKAGES_NOT_FOUND
+ OPTIONAL_PACKAGES_FOUND
+ OPTIONAL_PACKAGES_NOT_FOUND
+ ENABLED_FEATURES DISABLED_FEATURES
+ )
+endif()
+message(STATUS "GNSS-SDR is ready to be built.")
diff --git a/README.md b/README.md
index f8f48bfd2..020b9907e 100644
--- a/README.md
+++ b/README.md
@@ -542,7 +542,7 @@ In a terminal, type:
~~~~~~
$ sudo port selfupdate
$ sudo port upgrade outdated
-$ sudo port install doxygen +latex
+$ sudo port install doxygen +docs
$ sudo port install gnuradio
$ sudo port install armadillo
$ sudo port install gnutls
diff --git a/cmake/Modules/FindGNURADIO.cmake b/cmake/Modules/FindGNURADIO.cmake
index 7f5deb3ab..f56223662 100644
--- a/cmake/Modules/FindGNURADIO.cmake
+++ b/cmake/Modules/FindGNURADIO.cmake
@@ -43,6 +43,9 @@ macro(LIST_CONTAINS var value)
endforeach()
endmacro()
+# Trick for feature_summary
+set(GNURADIO_FOUND TRUE)
+
function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE)
list_contains(REQUIRED_MODULE ${EXTVAR} ${GR_REQUIRED_COMPONENTS})
if(NOT REQUIRED_MODULE)
@@ -140,6 +143,7 @@ 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
endif()
mark_as_advanced(GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS)
@@ -200,3 +204,6 @@ if(NOT PC_GNURADIO_RUNTIME_VERSION)
set(PC_GNURADIO_RUNTIME_VERSION "3.8.0+")
endif()
endif()
+
+# Trick for feature_summary
+set(GNURADIO_FOUND TRUE)
diff --git a/cmake/Modules/FindGOOGLETEST.cmake b/cmake/Modules/FindGOOGLETEST.cmake
new file mode 100644
index 000000000..4544f5127
--- /dev/null
+++ b/cmake/Modules/FindGOOGLETEST.cmake
@@ -0,0 +1,51 @@
+# Copyright (C) 2011-2019 (see AUTHORS file for a list of contributors)
+#
+# This file is part of GNSS-SDR.
+#
+# GNSS-SDR is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNSS-SDR is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNSS-SDR. If not, see .
+
+
+# - Try to find Googletest source code
+#
+# The following environment variable is optionally searched for:
+# GTEST_DIR: Base directory where Googletest source code is found.
+#
+# The following are set after configuration is done:
+# GOOGLETEST_FOUND
+# LIBGTEST_DEV_DIR
+# GTEST_INCLUDE_DIRS
+
+
+find_path(LIBGTEST_DEV_DIR
+ NAMES src/gtest-all.cc
+ PATHS
+ ${GTEST_DIR}
+ ${GTEST_DIR}/googletest
+ /usr/src/googletest/googletest
+ /usr/src/gtest
+ /usr/include/gtest
+ /opt/local/src/gtest-1.7.0
+)
+
+find_path(GTEST_INCLUDE_DIRS
+ NAMES gtest/gtest.h
+ PATHS
+ ${GTEST_DIR}/googletest/include
+ /usr/include
+ /opt/local/src/gtest-1.7.0/include
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GOOGLETEST DEFAULT_MSG LIBGTEST_DEV_DIR GTEST_INCLUDE_DIRS)
+mark_as_advanced(LIBGTEST_DEV_DIR GTEST_INCLUDE_DIRS)
diff --git a/cmake/Modules/SetupPython.cmake b/cmake/Modules/SetupPython.cmake
index f3d59c900..5c3a0a75a 100644
--- a/cmake/Modules/SetupPython.cmake
+++ b/cmake/Modules/SetupPython.cmake
@@ -82,7 +82,6 @@ if(CMAKE_VERSION VERSION_LESS 3.12)
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()
- find_package(PythonLibs ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} EXACT)
else()
find_package(Python3 COMPONENTS Interpreter)
if(Python3_FOUND)
diff --git a/docs/changelog b/docs/changelog
index b1c6e6397..42942beff 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -8,19 +8,22 @@
### Improvements in Efficiency
- Improved preamble detection implementation in the decoding of navigation messages (acceleration by x1.6 on average).
-- Applied clang-tidy checks and fixes related to performance.
+- Applied clang-tidy checks and fixes related to performance: performance-faster-string-find, performance-inefficient-algorithm, performance-move-const-arg, performance-type-promotion-in-math-fn, performance-unnecessary-copy-initialization, performance-unnecessary-value-param, readability-string-compare.
### Improvements in Interoperability:
- Added the BeiDou B1I receiver chain.
- Fix bug in GLONASS dual frequency receiver.
+- Added a custom UDP/IP output for PVT data streaming.
+- Improved Monitor block with UDP/IP output for internal receiver's data streaming.
### Improvements in Maintainability:
- Usage of clang-tidy integrated into CMake scripts. New option -DENABLE_CLANG_TIDY=ON executes clang-tidy along with compilation. Requires clang compiler.
-- Applied clang-tidy checks and fixes related to readability.
+- Applied clang-tidy checks and fixes related to readability: readability-container-size-empty, readability-identifier-naming, readability-inconsistent-declaration-parameter-name, readability-named-parameter, readability-non-const-parameter, readability-string-compare.
+- Improved includes selection following suggestions by include-what-you-use (see https://include-what-you-use.org/), allowing faster compiles, fewer recompiles and making refactoring easier.
### Improvements in Portability:
@@ -31,13 +34,14 @@
### Improvements in Reliability
-- Applied clang-tidy checks and fixes related to High Integrity C++.
+- Applied clang-tidy checks and fixes related to High Integrity C++: performance-move-const-arg, modernize-use-auto, modernize-use-equals-default, modernize-use-equals-delete, modernize-use-noexcept, modernize-use-nullptr, cert-dcl21-cpp, misc-new-delete-overloads, cert-dcl58-cpp, cert-err52-cpp, cert-err60-cpp.
### Improvements in Usability
- The receiver now admits FPGA off-loading, allowing for real time operation at high sampling rates and higher number of signals and channels.
- Fixed program termination (avoiding hangs and segfaults in some platforms/configurations).
+- CMake now generates a summary of enabled/disabled features. This info is also stored in a file called features.log in the building directory.
- Improved information provided to the user in case of failure.
diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/VolkPython.cmake b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/VolkPython.cmake
index 06c51883c..9af2d35b1 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/VolkPython.cmake
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/VolkPython.cmake
@@ -41,15 +41,23 @@ if(CMAKE_VERSION VERSION_LESS 3.12)
find_package(PythonInterp ${VOLK_PYTHON3_MIN_VERSION} REQUIRED)
endif()
endif()
- find_package(PythonLibs ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} EXACT)
else()
if(PYTHON_EXECUTABLE)
message(STATUS "User set python executable ${PYTHON_EXECUTABLE}")
find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION} REQUIRED)
else()
- find_package(Python COMPONENTS Interpreter)
- set(PYTHON_VERSION_MAJOR ${Python_VERSION_MAJOR})
- set(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
+ find_package(Python3 COMPONENTS Interpreter)
+ if(Python3_FOUND)
+ set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
+ set(PYTHON_VERSION_MAJOR ${Python3_VERSION_MAJOR})
+ endif()
+ if(NOT Python3_FOUND OR NOT MAKO_FOUND OR NOT SIX_FOUND)
+ find_package(Python2 COMPONENTS Interpreter)
+ if(Python2_FOUND)
+ set(PYTHON_EXECUTABLE ${Python2_EXECUTABLE})
+ set(PYTHON_VERSION_MAJOR ${Python2_VERSION_MAJOR})
+ endif()
+ endif()
endif()
endif()
diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/CMakeLists.txt b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/CMakeLists.txt
index 5211c1cf5..095028f60 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/CMakeLists.txt
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/CMakeLists.txt
@@ -313,6 +313,9 @@ if(NOT CROSSCOMPILE_MULTILIB AND CPU_IS_x86)
#MSVC 64 bit does not have MMX, overrule it
if(${SIZEOF_CPU} EQUAL 64 AND MSVC)
overrule_arch(mmx "No MMX for Win64")
+ if(MSVC_VERSION GREATER 1700)
+ OVERRULE_ARCH(sse "No SSE for Win64 Visual Studio 2013")
+ endif()
endif()
endif()
@@ -582,7 +585,7 @@ target_include_directories(volk_gnsssdr_obj
#Add dynamic library
add_library(volk_gnsssdr SHARED $)
-target_link_libraries(volk_gnsssdr ${volk_gnsssdr_libraries} m)
+target_link_libraries(volk_gnsssdr ${volk_gnsssdr_libraries})
target_include_directories(volk_gnsssdr
PUBLIC $
PUBLIC $
@@ -593,7 +596,10 @@ target_include_directories(volk_gnsssdr
)
#Configure target properties
-set_target_properties(volk_gnsssdr_obj PROPERTIES COMPILE_FLAGS "-fPIC")
+if(NOT MSVC)
+ set_target_properties(volk_gnsssdr_obj PROPERTIES COMPILE_FLAGS "-fPIC")
+ target_link_libraries(volk_gnsssdr m)
+endif()
set_target_properties(volk_gnsssdr PROPERTIES SOVERSION ${LIBVER})
set_target_properties(volk_gnsssdr PROPERTIES DEFINE_SYMBOL "volk_gnsssdr_EXPORTS")
@@ -608,7 +614,10 @@ install(TARGETS volk_gnsssdr
#Configure static library
if(ENABLE_STATIC_LIBS)
add_library(volk_gnsssdr_static STATIC $)
- target_link_libraries(volk_gnsssdr_static ${volk_gnsssdr_libraries} pthread m)
+ target_link_libraries(volk_gnsssdr_static ${volk_gnsssdr_libraries} pthread)
+ if(NOT MSVC)
+ target_link_libraries(volk_gnsssdr_static m)
+ endif()
target_include_directories(volk_gnsssdr_static
PUBLIC $
PUBLIC $
diff --git a/src/algorithms/signal_source/adapters/custom_udp_signal_source.h b/src/algorithms/signal_source/adapters/custom_udp_signal_source.h
index 87ed44496..37e80caf7 100644
--- a/src/algorithms/signal_source/adapters/custom_udp_signal_source.h
+++ b/src/algorithms/signal_source/adapters/custom_udp_signal_source.h
@@ -64,7 +64,7 @@ public:
}
/*!
- * \brief Returns "UDP_Signal_Source"
+ * \brief Returns "Custom_UDP_Signal_Source"
*/
inline std::string implementation() override
{
diff --git a/src/algorithms/signal_source/adapters/gn3s_signal_source.h b/src/algorithms/signal_source/adapters/gn3s_signal_source.h
index 8fb7637f5..df799f019 100644
--- a/src/algorithms/signal_source/adapters/gn3s_signal_source.h
+++ b/src/algorithms/signal_source/adapters/gn3s_signal_source.h
@@ -59,11 +59,11 @@ public:
}
/*!
- * \brief Returns "Gn3sSignalSource".
+ * \brief Returns "Gn3s_Signal_Source".
*/
inline std::string implementation() override
{
- return "Gn3sSignalSource";
+ return "Gn3s_Signal_Source";
}
inline size_t item_size() override
diff --git a/src/core/libs/gnss_sdr_fpga_sample_counter.h b/src/core/libs/gnss_sdr_fpga_sample_counter.h
index f30bb78c0..1f5db0b2d 100644
--- a/src/core/libs/gnss_sdr_fpga_sample_counter.h
+++ b/src/core/libs/gnss_sdr_fpga_sample_counter.h
@@ -48,6 +48,7 @@ gnss_sdr_fpga_sample_counter_sptr gnss_sdr_make_fpga_sample_counter(double _fs,
class gnss_sdr_fpga_sample_counter : public gr::block
{
private:
+ friend gnss_sdr_fpga_sample_counter_sptr gnss_sdr_make_fpga_sample_counter(double _fs, int32_t _interval_ms);
gnss_sdr_fpga_sample_counter(double _fs, int32_t _interval_ms);
uint32_t test_register(uint32_t writeval);
void configure_samples_per_output(uint32_t interval);
@@ -76,7 +77,6 @@ private:
bool is_open;
public:
- friend gnss_sdr_fpga_sample_counter_sptr gnss_sdr_make_fpga_sample_counter(double _fs, int32_t _interval_ms);
~gnss_sdr_fpga_sample_counter();
int general_work(int noutput_items,
gr_vector_int &ninput_items,
diff --git a/src/core/libs/gnss_sdr_sample_counter.cc b/src/core/libs/gnss_sdr_sample_counter.cc
index 954d5d674..a20032edd 100644
--- a/src/core/libs/gnss_sdr_sample_counter.cc
+++ b/src/core/libs/gnss_sdr_sample_counter.cc
@@ -65,6 +65,9 @@ gnss_sdr_sample_counter::gnss_sdr_sample_counter(
}
+gnss_sdr_sample_counter::~gnss_sdr_sample_counter() = default;
+
+
gnss_sdr_sample_counter_sptr gnss_sdr_make_sample_counter(double _fs, int32_t _interval_ms, size_t _size)
{
gnss_sdr_sample_counter_sptr sample_counter_(new gnss_sdr_sample_counter(_fs, _interval_ms, _size));
diff --git a/src/core/libs/gnss_sdr_sample_counter.h b/src/core/libs/gnss_sdr_sample_counter.h
index a20502b9f..af36ba869 100644
--- a/src/core/libs/gnss_sdr_sample_counter.h
+++ b/src/core/libs/gnss_sdr_sample_counter.h
@@ -51,6 +51,7 @@ gnss_sdr_sample_counter_sptr gnss_sdr_make_sample_counter(
class gnss_sdr_sample_counter : public gr::sync_decimator
{
private:
+ friend gnss_sdr_sample_counter_sptr gnss_sdr_make_sample_counter(double _fs, int32_t _interval_ms, size_t _size);
gnss_sdr_sample_counter(double _fs, int32_t _interval_ms, size_t _size);
uint32_t samples_per_output;
double fs;
@@ -68,7 +69,7 @@ private:
bool flag_enable_send_msg;
public:
- friend gnss_sdr_sample_counter_sptr gnss_sdr_make_sample_counter(double _fs, int32_t _interval_ms, size_t _size);
+ ~gnss_sdr_sample_counter();
int work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
diff --git a/src/core/libs/gnss_sdr_time_counter.cc b/src/core/libs/gnss_sdr_time_counter.cc
index 2bf29fa77..1daabf071 100644
--- a/src/core/libs/gnss_sdr_time_counter.cc
+++ b/src/core/libs/gnss_sdr_time_counter.cc
@@ -52,6 +52,9 @@ gnss_sdr_time_counter::gnss_sdr_time_counter() : gr::block("time_counter",
}
+gnss_sdr_time_counter::~gnss_sdr_time_counter() = default;
+
+
gnss_sdr_time_counter_sptr gnss_sdr_make_time_counter()
{
gnss_sdr_time_counter_sptr counter_(new gnss_sdr_time_counter());
diff --git a/src/core/libs/gnss_sdr_time_counter.h b/src/core/libs/gnss_sdr_time_counter.h
index 7be810ec7..76a7e09ed 100644
--- a/src/core/libs/gnss_sdr_time_counter.h
+++ b/src/core/libs/gnss_sdr_time_counter.h
@@ -59,6 +59,7 @@ private:
friend gnss_sdr_time_counter_sptr gnss_sdr_make_time_counter();
public:
+ ~gnss_sdr_time_counter();
int general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
gr_vector_const_void_star &input_items __attribute__((unused)), gr_vector_void_star &output_items);
};
diff --git a/src/core/monitor/gnss_synchro_monitor.h b/src/core/monitor/gnss_synchro_monitor.h
index 632fa72ed..03c37ab28 100644
--- a/src/core/monitor/gnss_synchro_monitor.h
+++ b/src/core/monitor/gnss_synchro_monitor.h
@@ -35,6 +35,8 @@
#define GNSS_SDR_GNSS_SYNCHRO_MONITOR_H
#include "gnss_synchro_udp_sink.h"
+#include
+#include // for gr_vector_void_star
#include
#include
#include
@@ -51,7 +53,9 @@ gnss_synchro_monitor_sptr gnss_synchro_make_monitor(unsigned int n_channels,
const std::vector& udp_addresses);
/*!
- * \brief This class implements a block that computes the PVT solution with Galileo E1 signals
+ * \brief This class implements a monitoring block which allows sending
+ * a data stream with the receiver internal parameters (Gnss_Synchro objects)
+ * to local or remote clients over UDP.
*/
class gnss_synchro_monitor : public gr::sync_block
{
@@ -61,21 +65,17 @@ private:
int udp_port,
const std::vector& udp_addresses);
- unsigned int d_nchannels;
-
- int d_decimation_factor;
-
- std::unique_ptr udp_sink_ptr;
-
- int count;
-
-
-public:
gnss_synchro_monitor(unsigned int n_channels,
int decimation_factor,
int udp_port,
const std::vector& udp_addresses);
+ unsigned int d_nchannels;
+ int d_decimation_factor;
+ std::unique_ptr udp_sink_ptr;
+ int count;
+
+public:
~gnss_synchro_monitor(); //!< Default destructor
int work(int noutput_items, gr_vector_const_void_star& input_items,
diff --git a/src/core/monitor/gnss_synchro_udp_sink.cc b/src/core/monitor/gnss_synchro_udp_sink.cc
index 2978537ea..23cb236c4 100644
--- a/src/core/monitor/gnss_synchro_udp_sink.cc
+++ b/src/core/monitor/gnss_synchro_udp_sink.cc
@@ -44,6 +44,7 @@ Gnss_Synchro_Udp_Sink::Gnss_Synchro_Udp_Sink(std::vector addresses,
}
}
+
bool Gnss_Synchro_Udp_Sink::write_gnss_synchro(const std::vector& stocks)
{
std::ostringstream archive_stream;
diff --git a/src/core/monitor/gnss_synchro_udp_sink.h b/src/core/monitor/gnss_synchro_udp_sink.h
index d72b2f18a..bfaebf45d 100644
--- a/src/core/monitor/gnss_synchro_udp_sink.h
+++ b/src/core/monitor/gnss_synchro_udp_sink.h
@@ -35,10 +35,15 @@
#include "gnss_synchro.h"
#include
#include
+#include
#include
#include
+/*!
+ * \brief This class sends serialized Gnss_Synchro objects
+ * over UDP to one or multiple endpoints.
+ */
class Gnss_Synchro_Udp_Sink
{
public:
diff --git a/src/core/receiver/gnss_flowgraph.cc b/src/core/receiver/gnss_flowgraph.cc
index 5881a3c49..898461d16 100644
--- a/src/core/receiver/gnss_flowgraph.cc
+++ b/src/core/receiver/gnss_flowgraph.cc
@@ -1664,10 +1664,10 @@ void GNSSFlowgraph::init()
if (enable_monitor_)
{
- GnssSynchroMonitor_ = gr::basic_block_sptr(new gnss_synchro_monitor(channels_count_,
+ GnssSynchroMonitor_ = gnss_synchro_make_monitor(channels_count_,
configuration_->property("Monitor.decimation_factor", 1),
configuration_->property("Monitor.udp_port", 1234),
- udp_addr_vec));
+ udp_addr_vec);
}
}
diff --git a/src/core/system_parameters/GLONASS_L1_L2_CA.h b/src/core/system_parameters/GLONASS_L1_L2_CA.h
index b8c796b4f..585ab48d0 100644
--- a/src/core/system_parameters/GLONASS_L1_L2_CA.h
+++ b/src/core/system_parameters/GLONASS_L1_L2_CA.h
@@ -52,7 +52,7 @@ const double GLONASS_F_M_A = 0.35e9; //!< Gravitationa
const double GLONASS_SEMI_MAJOR_AXIS = 6378136; //!< Semi-major axis of Earth [m]
const double GLONASS_FLATTENING = 1 / 29825784; //!< Flattening parameter
const double GLONASS_GRAVITY = 97803284; //!< Equatorial acceleration of gravity [mGal]
-const double GLONASS_GRAVITY_CORRECTION = 0.87; //!< Correction to acceleration of gravity at sea-level due to Atmosphere[мGal]
+const double GLONASS_GRAVITY_CORRECTION = 0.87; //!< Correction to acceleration of gravity at sea-level due to Atmosphere[uGal]
const double GLONASS_J2 = 1082625.75e-9; //!< Second zonal harmonic of the geopotential
const double GLONASS_J4 = -2370.89e-9; //!< Fourth zonal harmonic of the geopotential
const double GLONASS_J6 = 6.08e-9; //!< Sixth zonal harmonic of the geopotential
@@ -74,7 +74,7 @@ const double GLONASS_MOON_SEMI_MAJOR_AXIS = 3.84385243e5; //!< Semi-major ax
const double GLONASS_MOON_ECCENTRICITY = 0.054900489; //!< Eccentricity of lunar orbit
const double GLONASS_MOON_INCLINATION = 0.000089803977407e3; //!< Inclination of lunar orbit to ecliptic plane (5 deg 08 min 43.4 sec) [rad]
-const double GLONASS_SUN_OMEGA = 0.004908229466869e3; //!< TODO What is this operation in the seconds with T?(281 deg 13 min 15.0 + 6189.03*Т sec) [rad]
+const double GLONASS_SUN_OMEGA = 0.004908229466869e3; //!< TODO What is this operation in the seconds with T?(281 deg 13 min 15.0 + 6189.03 x T sec) [rad]
const double GLONASS_SUN_Q0 = 0.006256583774423e3; //!< (358 deg 28 min 33.04 sec) [rad]
const double GLONASS_SUN_Q1 = 0e3; //!< TODO Why is the value greater than 60?(129596579.10 sec) [rad]
const double GLONASS_SUN_GM = 0.1325263e12; //!< Solar gravitational constant [km^3/s^2]
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index d7763d66c..f9f07b097 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -184,6 +184,12 @@ find_package(Gnuplot)
if(GNUPLOT_FOUND)
add_definitions(-DGNUPLOT_EXECUTABLE="${GNUPLOT_EXECUTABLE}")
endif()
+set_package_properties(Gnuplot PROPERTIES
+ URL "http://www.gnuplot.info"
+ DESCRIPTION "A portable command-line driven graphing utility"
+ PURPOSE "Used to generate plots in some tests."
+ TYPE OPTIONAL
+)
if(ENABLE_UNIT_TESTING_MINIMAL)
add_definitions(-DUNIT_TESTING_MINIMAL=1)
@@ -194,6 +200,15 @@ endif()
# Optional generator
################################################################################
option(ENABLE_GNSS_SIM_INSTALL "Enable the installation of gnss_sim on the fly" ON)
+add_feature_info(ENABLE_GNSS_SIM_INSTALL ENABLE_GNSS_SIM_INSTALL "Enables downloading and building of gnss-sim.")
+
+find_package(GPSTK)
+set_package_properties(GPSTK PROPERTIES
+ URL "http://www.gpstk.org"
+ DESCRIPTION "Library and suite of applications for satellite navigation"
+ PURPOSE "Used in some Extra Tests."
+ TYPE OPTIONAL
+)
if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA)
if(ENABLE_FPGA)
set(CROSS_INSTALL_DIR "-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}")
@@ -239,7 +254,6 @@ if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA)
################################################################################
# Local installation of GPSTk http://www.gpstk.org/
################################################################################
- find_package(GPSTK)
if(NOT GPSTK_FOUND OR ENABLE_OWN_GPSTK)
message(STATUS " GPSTk v${GNSSSDR_GPSTK_LOCAL_VERSION} will be automatically downloaded and built when doing 'make'.")
if("${TOOLCHAIN_ARG}" STREQUAL "")