1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-11-06 01:56:25 +00:00

Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into next

This commit is contained in:
Carles Fernandez 2019-06-09 10:40:00 +02:00
commit f19cc76ca6
No known key found for this signature in database
GPG Key ID: 4C583C52B0C3877D
5 changed files with 151 additions and 72 deletions

View File

@ -1,9 +1,14 @@
## [Unreleased](https://github.com/gnss-sdr/gnss-sdr/tree/next)
### Improvements in Accuracy
- Local clock correction based on PVT solution (error kept below 1 ms).
### Improvements in Availability
- Fixed bug that caused a random deadlock in the Observables block, preventing the computation of PVT fixes.
- Fixed bug in Galileo INAV message decoding when PLL is locked at 180 degrees, which prevented from correct navigation message decoding in some situations.
- Fixed bug in Galileo INAV/FNAV message decoding when PLL is locked at 180 degrees, which prevented from correct navigation message decoding in some situations.
- Fixed PVT computation continuity through the TOW rollover.
@ -27,7 +32,7 @@
- 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.
- Custom output formats described with .proto files, making easier to other applications reading them in a forward and backward-compatible fashion upon future format changes.
- Custom output formats described with .proto files, making easier to other applications reading them in a forward and backward-compatible fashion upon future format changes. New dependency: Protocol Buffers >= 3.0.0
- Fixes in RINEX generation: week rollover, annotations are not repeated anymore in navigation files. Parameter rinexnav_rate_ms has been removed, annotations are made as new ephemeris arrive.
- Fixes in RTCM messages generation: week rollover.
@ -45,6 +50,7 @@
- Added interfaces for FPGA off-loading.
- CMake scripts now follow a modern approach (targets and properties) but still work with 2.8.12.
- Improvements for macOS users using Homebrew.
- The volk_gnsssdr library can now be built without requiring Boost if the compiler supports C++17.
### Improvements in Reliability

View File

@ -59,42 +59,87 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
endif()
endif()
# Enable C++17 support in GCC >= 8.0.0
# Enable C++14 support in 8.0.0 > GCC >= 6.1.1
# Fallback to C++11 when using GCC < 6.1.1
#### Set C++ standard
set(CMAKE_CXX_EXTENSIONS OFF)
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32)
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.1.1")
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++11")
else()
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0.0")
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++14")
else()
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++17")
# Check if we have std::filesystem
if(POLICY CMP0075)
cmake_policy(SET CMP0075 NEW)
endif()
if(CMAKE_VERSION VERSION_LESS 3.8)
set(has_std_filesystem FALSE)
else()
set(CMAKE_REQUIRED_FLAGS "-std=c++17")
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0.0"))
set(CMAKE_REQUIRED_LIBRARIES -lstdc++fs)
endif()
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_REQUIRED_LIBRARIES -lc++)
endif()
endif()
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -Wall -Wextra") #Add warning flags: For "-Wall" see http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
include(CheckCXXSymbolExists)
check_cxx_symbol_exists(std::filesystem::path::preferred_separator filesystem has_std_filesystem)
endif()
# Enable C++17 support in Clang >= 6.0.0
# Enable C++14 support in 6.0.0 > Clang >= 3.5.0 or AppleClang >= 600
# Fallback to C++11 if older version
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
# See https://trac.macports.org/wiki/XcodeVersionInfo for Apple Clang version equivalences
if(CLANG_VERSION VERSION_LESS "600")
set(USE_CXX17 FALSE)
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32)
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.1.1")
if(CMAKE_VERSION VERSION_LESS "3.1")
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++11")
else()
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++14")
set(CMAKE_CXX_STANDARD 11)
endif()
else()
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0.0")
set(CMAKE_CXX_STANDARD 14)
else()
if(${has_std_filesystem})
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(USE_CXX17 TRUE)
else()
set(CMAKE_CXX_STANDARD 14)
endif()
endif()
endif()
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -Wall -Wextra") # Add warning flags: For "-Wall" see http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
# See https://trac.macports.org/wiki/XcodeVersionInfo for Apple Clang version equivalences
if(CLANG_VERSION VERSION_LESS "600")
set(CMAKE_CXX_STANDARD 11)
else()
if(CLANG_VERSION VERSION_LESS "1000")
set(CMAKE_CXX_STANDARD 14)
else()
if(${has_std_filesystem})
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(USE_CXX17 TRUE)
else()
set(CMAKE_CXX_STANDARD 14)
endif()
endif()
endif()
else()
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5.0")
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_STANDARD 11)
else()
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.0.0")
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++14")
set(CMAKE_CXX_STANDARD 14)
else()
set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++17")
if(${has_std_filesystem})
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") AND NOT WIN32)
set(USE_CXX17 TRUE)
endif()
else()
set(CMAKE_CXX_STANDARD 14)
endif()
endif()
endif()
endif()
@ -110,21 +155,21 @@ endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_CXX_FLAGS} -Wall")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
if(CMAKE_VERSION VERSION_GREATER "3.0")
if(POLICY CMP0042)
cmake_policy(SET CMP0042 NEW)
if(CMAKE_VERSION VERSION_GREATER "3.9")
cmake_policy(SET CMP0068 NEW)
endif()
endif()
if(POLICY CMP0068)
cmake_policy(SET CMP0068 NEW)
endif()
option(ENABLE_STRIP "Create a stripped volk_gnsssdr_profile binary (without shared libraries)" OFF)
set(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) #allows this to be a sub-project
set(PROJECT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) #allows this to be a sub-project
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules) #location for custom "Modules"
set(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # allows this to be a sub-project
set(PROJECT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) # allows this to be a sub-project
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules) # location for custom "Modules"
include(VolkBuildTypes)
#select the release build type by default to get optimization flags
# select the release build type by default to get optimization flags
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
message(STATUS "Build type not specified: defaulting to release.")
@ -136,7 +181,7 @@ message(STATUS "Build type set to ${CMAKE_BUILD_TYPE}.")
set(VERSION_INFO_MAJOR_VERSION 0)
set(VERSION_INFO_MINOR_VERSION 0)
set(VERSION_INFO_MAINT_VERSION 10.git)
include(VolkVersion) #setup version info
include(VolkVersion) # setup version info
@ -154,8 +199,8 @@ endif()
set(CROSSCOMPILE_MULTILIB ${CROSSCOMPILE_MULTILIB} CACHE STRING "Define \"true\" if you have and want to use multiple C development libs installed for cross compile")
if(MSVC)
add_definitions(-D_USE_MATH_DEFINES) #enables math constants on all supported versions of MSVC
add_compile_options(/W1) #reduce warnings
add_definitions(-D_USE_MATH_DEFINES) # enables math constants on all supported versions of MSVC
add_compile_options(/W1) # reduce warnings
add_compile_options(/wo4309)
add_compile_options(/wd4752)
add_compile_options(/wo4273)
@ -177,7 +222,7 @@ endif()
########################################################################
# Python
include(VolkPython) #sets PYTHON_EXECUTABLE and PYTHON_DASH_B
include(VolkPython) # sets PYTHON_EXECUTABLE and PYTHON_DASH_B
volk_python_check_module("python >= 2.7" sys "sys.version.split()[0] >= '2.7'" PYTHON_MIN_VER_FOUND)
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)
@ -204,20 +249,24 @@ if(MSVC)
endif()
set(BOOST_ALL_DYN_LINK "${BOOST_ALL_DYN_LINK}" CACHE BOOL "boost enable dynamic linking")
if(BOOST_ALL_DYN_LINK)
add_definitions(-DBOOST_ALL_DYN_LINK) #setup boost auto-linking in msvc
add_definitions(-DBOOST_ALL_DYN_LINK) # setup boost auto-linking in msvc
else()
unset(BOOST_REQUIRED_COMPONENTS) #empty components list for static link
unset(BOOST_REQUIRED_COMPONENTS) # empty components list for static link
endif()
endif()
if(${USE_CXX17})
set(Boost_LIBRARIES "")
set(Boost_INCLUDE_DIRS "")
set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH})
else()
include(VolkBoost)
if(NOT Boost_FOUND)
message(FATAL_ERROR "VOLK-GNSSSDR requires Boost to build")
endif()
endif()
include(VolkBoost)
if(NOT Boost_FOUND)
message(FATAL_ERROR "VOLK_GNSSSDR Requires boost to build")
endif()
# Orc
option(ENABLE_ORC "Enable Orc" True)
option(ENABLE_ORC "Enable Orc" TRUE)
if(ENABLE_ORC)
find_package(ORC)
else()
@ -246,7 +295,7 @@ endif()
########################################################################
# Setup the package config file
########################################################################
#set variables found in the pc.in file
# set variables found in the pc.in file
set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix "\${prefix}")
set(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
@ -335,7 +384,6 @@ endif()
########################################################################
# Install our Cmake modules into $prefix/lib/cmake/volk_gnsssdr
# See "Package Configuration Files" on page:

View File

@ -6,7 +6,7 @@ VOLK's. Please see http://libvolk.org for documentation, source code,
and contact information about the original VOLK library.
The boilerplate of this code was initially generated with
```volk_modtool```, an application provided by VOLK that creates the
`volk_modtool`, an application provided by VOLK that creates the
skeleton that can then be filled with custom kernels. Some modifications
were added to accommodate the specificities of Global Navigation
Satellite Systems (GNSS) signal processing. Those changes are clearly
@ -16,7 +16,7 @@ This library contains kernels of hand-written SIMD code for different
mathematical operations, mainly with 8-bit and 16-bit real and complex
data types, offering a platform/architecture agnostic version that will
run in all machines, plus other versions for different SIMD instruction
sets. Then, the application ```volk_gnsssdr_profile``` runs some
sets. Then, the application `volk_gnsssdr_profile` runs some
iterations of all versions that your machine can execute and annotates
which is the fastest, which will then be selected at runtime when
executing GNSS-SDR. In this way, we can address at the same time
@ -49,6 +49,12 @@ $ sudo apt-get install cmake python-mako python-six libboost-dev \
libboost-filesystem-dev libboost-system-dev
~~~~~~
Please note that if you are using a compiler supporting the C++17 standard
(for instance, gcc >= 8.0), specifically the std::filesystem library, packages
`libboost-dev`, `libboost-filesystem-dev` and `libboost-system-dev` are no
longer required dependencies. The CMake script will detect that availability for
you.
In order to build and install the library, go to the base folder of the
source code and do:
@ -62,7 +68,7 @@ $ sudo make install
That's it!
Before its first use, please execute ```volk_gnsssdr_profile``` to let
Before its first use, please execute `volk_gnsssdr_profile` to let
your system know which is the fastest available implementation. This
only has to be done once:
@ -74,7 +80,7 @@ From now on, GNSS-SDR (and any other program of your own that makes use
of VOLK_GNSSSDR) will benefit from the acceleration provided by SIMD
instructions available in your processor.
The execution of ```volk_gnsssdr_profile``` can be set automatically
The execution of `volk_gnsssdr_profile` can be set automatically
after building, leaving your system ready to use:
~~~~~~

View File

@ -35,13 +35,21 @@ include_directories(
)
set(Clang_required_link "")
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(Clang_required_link "c++")
set(CXX_REQUIRED_LINK "")
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CXX_REQUIRED_LINK "c++")
else()
if(${USE_CXX17} AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0.0"))
set(CXX_REQUIRED_LINK "stdc++fs")
endif()
endif()
endif()
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0.0"))
if(${USE_CXX17})
set(CXX_REQUIRED_LINK "stdc++fs")
endif()
endif()
if(ORC_FOUND)
set(orc_lib ${ORC_LIBRARIES})
@ -66,10 +74,14 @@ add_executable(volk_gnsssdr_profile
${CMAKE_CURRENT_SOURCE_DIR}/volk_gnsssdr_option_helpers.cc
)
if(${USE_CXX17})
add_definitions(-DHAS_STD_FILESYSTEM=1)
endif()
if(ENABLE_STATIC_LIBS)
target_link_libraries(volk_gnsssdr_profile volk_gnsssdr_static ${Boost_LIBRARIES} ${Clang_required_link} ${orc_lib})
target_link_libraries(volk_gnsssdr_profile ${CXX_REQUIRED_LINK} volk_gnsssdr_static ${Boost_LIBRARIES} ${orc_lib})
else()
target_link_libraries(volk_gnsssdr_profile volk_gnsssdr ${Boost_LIBRARIES} ${Clang_required_link} ${orc_lib})
target_link_libraries(volk_gnsssdr_profile ${CXX_REQUIRED_LINK} volk_gnsssdr ${Boost_LIBRARIES} ${orc_lib})
add_dependencies(volk_gnsssdr_profile volk_gnsssdr)
endif()
@ -92,9 +104,9 @@ install(
# MAKE volk_gnsssdr-config-info
add_executable(volk_gnsssdr-config-info volk_gnsssdr-config-info.cc ${CMAKE_CURRENT_SOURCE_DIR}/volk_gnsssdr_option_helpers.cc)
if(ENABLE_STATIC_LIBS)
target_link_libraries(volk_gnsssdr-config-info volk_gnsssdr_static ${Clang_required_link} ${orc_lib})
target_link_libraries(volk_gnsssdr-config-info ${CXX_REQUIRED_LINK} volk_gnsssdr_static ${orc_lib})
else()
target_link_libraries(volk_gnsssdr-config-info volk_gnsssdr ${Clang_required_link} ${orc_lib})
target_link_libraries(volk_gnsssdr-config-info ${CXX_REQUIRED_LINK} volk_gnsssdr ${orc_lib})
add_dependencies(volk_gnsssdr-config-info volk_gnsssdr)
endif()

View File

@ -22,19 +22,26 @@
#include "volk_gnsssdr/volk_gnsssdr_complex.h" // for lv_32fc_t
#include "volk_gnsssdr/volk_gnsssdr_prefs.h" // for volk_gnsssdr_get_config_path
#include "volk_gnsssdr_option_helpers.h" // for option_list, option_t
#include <boost/filesystem/operations.hpp> // for create_directories, exists
#include <boost/filesystem/path.hpp> // for path, operator<<
#include <boost/filesystem/path_traits.hpp> // for filesystem
#include <cstddef> // for size_t
#include <fstream> // IWYU pragma: keep
#include <iostream> // for operator<<, basic_ostream
#include <map> // for map, map<>::iterator
#include <sys/stat.h> // for stat
#include <utility> // for pair
#include <vector> // for vector, vector<>::const_..
#if HAS_STD_FILESYSTEM
#include <filesystem>
#else
#include <boost/filesystem/operations.hpp> // for create_directories, exists
#include <boost/filesystem/path.hpp> // for path, operator<<
#include <boost/filesystem/path_traits.hpp> // for filesystem
#endif
#include <cstddef> // for size_t
#include <fstream> // IWYU pragma: keep
#include <iostream> // for operator<<, basic_ostream
#include <map> // for map, map<>::iterator
#include <sys/stat.h> // for stat
#include <utility> // for pair
#include <vector> // for vector, vector<>::const_..
#if HAS_STD_FILESYSTEM
namespace fs = std::filesystem;
#else
namespace fs = boost::filesystem;
#endif
volk_gnsssdr_test_params_t test_params(1e-6f, 327.f, 8111, 1987, false, "");