diff --git a/.clang-tidy b/.clang-tidy index 0ef91e2ecb..3ddbd1a517 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -120,7 +120,6 @@ Checks: '-*, readability-uppercase-literal-suffix' WarningsAsErrors: '' HeaderFilterRegex: '' -AnalyzeTemporaryDtors: false FormatStyle: 'file' CheckOptions: - key: performance-unnecessary-copy-initialization.ExcludedContainerTypes diff --git a/.github/workflows/citation.yml b/.github/workflows/citation.yml index 9de637fed4..db667992c9 100644 --- a/.github/workflows/citation.yml +++ b/.github/workflows/citation.yml @@ -24,7 +24,7 @@ jobs: uses: dieghernan/cff-validator@main # Upload artifact in case of failure - name: Update artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: citation-cff-errors diff --git a/.github/workflows/gnss-sdr_archs.yml b/.github/workflows/gnss-sdr_archs.yml index 6ba71fb648..ca95951878 100644 --- a/.github/workflows/gnss-sdr_archs.yml +++ b/.github/workflows/gnss-sdr_archs.yml @@ -41,7 +41,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: uraimo/run-on-arch-action@v2.6.0 + - uses: uraimo/run-on-arch-action@v2.7.1 name: Test in non-x86 container continue-on-error: ${{ contains(fromJson('["ppc64le", "s390x"]'), matrix.arch) }} id: test diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 183a871efb..8323fdea84 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2020-2022 Carles Fernandez-Prades +# SPDX-FileCopyrightText: 2020-2024 Carles Fernandez-Prades name: Simple CI on: @@ -40,6 +40,9 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.12' - name: install dependencies run: | brew update @@ -53,8 +56,8 @@ jobs: rm /usr/local/bin/pydoc3.1* || true rm /usr/local/bin/python3.1* || true export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 - brew install ninja hdf5 automake armadillo lapack libmatio \ - gflags glog gnuradio log4cpp openssl pugixml protobuf + brew link --overwrite python@3.12 + brew install ninja hdf5 automake armadillo lapack libmatio gnuradio openssl pugixml protobuf pip3 install mako - name: configure run: cd build && cmake -GNinja .. @@ -69,6 +72,9 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.12' - name: install dependencies run: | brew update @@ -82,9 +88,9 @@ jobs: rm /usr/local/bin/pydoc3.1* || true rm /usr/local/bin/python3.1* || true export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 - brew install ninja pkg-config hdf5 automake armadillo lapack libmatio \ - gflags glog gnuradio log4cpp openssl pugixml protobuf - pip3 install mako + brew link --overwrite python@3.12 + brew install ninja pkg-config hdf5 automake armadillo lapack libmatio gnuradio openssl pugixml protobuf + pip3 install mako - name: configure run: cd build && cmake -GXcode .. - name: build @@ -117,6 +123,9 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.12' - name: install dependencies run: | brew update @@ -130,16 +139,16 @@ jobs: rm /usr/local/bin/pydoc3.1* || true rm /usr/local/bin/python3.1* || true export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 - brew install llvm pkg-config hdf5 armadillo lapack gflags glog gnuradio libmatio \ - log4cpp openssl pugixml protobuf + brew link --overwrite python@3.12 + brew install ninja pkg-config hdf5 automake armadillo lapack libmatio gnuradio openssl pugixml protobuf llvm pip3 install mako ln -s $(brew --prefix llvm)/bin/clang-tidy /usr/local/bin ln -s $(brew --prefix llvm)/bin/clang-apply-replacements /usr/local/bin - ln -s $(brew --prefix llvm)/bin/run-clang-tidy /usr/local/bin + ln -s $(brew --prefix llvm)/bin/run-clang-tidy.py /usr/local/bin - name: Prepare run - run: cd build && cmake .. && make volk_gnsssdr_module gtest-1.13.0 core_monitor core_libs pvt_libs + run: cd build && cmake .. && make volk_gnsssdr_module gtest-1.14.0 core_monitor core_libs pvt_libs - name: run clang-tidy - run: cd build && run-clang-tidy -fix + run: cd build && /opt/homebrew/opt/llvm/bin/run-clang-tidy -fix - name: check run: | git diff > clang_tidy.patch @@ -192,7 +201,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install dependencies @@ -231,8 +240,13 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - name: install dependencies - run: pip3 install mako + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install mako - name: configure run: cd build && cmake ../src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr - name: build @@ -244,8 +258,13 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - name: install dependencies - run: pip3 install mako + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install mako - name: configure run: cd build && cmake -GXcode ../src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr - name: build diff --git a/.github/workflows/volk_gnsssdr_archs.yml b/.github/workflows/volk_gnsssdr_archs.yml index 0e34896476..6f4e314543 100644 --- a/.github/workflows/volk_gnsssdr_archs.yml +++ b/.github/workflows/volk_gnsssdr_archs.yml @@ -45,7 +45,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: uraimo/run-on-arch-action@v2.6.0 + - uses: uraimo/run-on-arch-action@v2.7.1 name: Build in non-x86 container # continue-on-error: ${{ contains(fromJson('["ppc64le", "s390x"]'), matrix.arch) }} id: build diff --git a/CMakeLists.txt b/CMakeLists.txt index 99e567462f..f0fbcae719 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ endif() # Build type can still be overridden by setting -DCMAKE_BUILD_TYPE= set(CMAKE_BUILD_TYPE "Release" CACHE STRING "") -cmake_minimum_required(VERSION 2.8.12...3.28) +cmake_minimum_required(VERSION 2.8.12...3.30) project(gnss-sdr CXX C) set(GNSSSDR_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # Allows to be a sub-project @@ -74,9 +74,20 @@ option(ENABLE_PACKAGING "Enable software packaging" OFF) option(ENABLE_OWN_GLOG "Download glog and link it to gflags" OFF) +option(ENABLE_GLOG_AND_GFLAGS "Force using Google glog and Gflags instead of Abseil" OFF) + +option(ENABLE_OWN_ABSEIL "Forces downloading and building of Abseil" OFF) +if(CMAKE_VERSION VERSION_LESS 3.24) + set(ENABLE_OWN_ABSEIL OFF) +endif() +if(ENABLE_OWN_ABSEIL) + set(ENABLE_OWN_GLOG OFF) + set(ENABLE_GLOG_AND_GFLAGS OFF) +endif() + option(ENABLE_OWN_ARMADILLO "Download and build Armadillo locally" OFF) -option(ENABLE_LOG "Enable logging" ON) +option(ENABLE_LOG "Enable internal logging" ON) option(ENABLE_ARMA_NO_DEBUG OFF) @@ -211,7 +222,7 @@ endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") include(DetectLinuxDistro) if(CMAKE_CROSSCOMPILING) - message(STATUS "Configuring GNSS-SDR v${VERSION} to be cross-compiled on ${LINUX_DISTRIBUTION} ${LINUX_VER} (${CMAKE_HOST_SYSTEM_PROCESSOR}) for ${CMAKE_SYSTEM_PROCESSOR} ${ARCHITECTURE_STRING}") + message(STATUS "Configuring GNSS-SDR v${VERSION} to be cross-compiled on ${LINUX_DISTRIBUTION} ${LINUX_VER} (${CMAKE_HOST_SYSTEM_PROCESSOR}) for ${CMAKE_SYSTEM_PROCESSOR}") else() message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on GNU/Linux ${LINUX_DISTRIBUTION} ${LINUX_VER} ${ARCHITECTURE_STRING}") endif() @@ -329,25 +340,34 @@ set(GNSSSDR_MATIO_MIN_VERSION "1.5.3") set(GNSSSDR_PROTOBUF_MIN_VERSION "3.0.0") set(GNSSSDR_PYTHON_MIN_VERSION "2.7") set(GNSSSDR_PYTHON3_MIN_VERSION "3.4") +set(GNSSSDR_ABSEIL_MIN_VERSION "20240116") ################################################################################ # Versions to download and build (but not to install system-wide) if not found ################################################################################ -set(GNSSSDR_ARMADILLO_LOCAL_VERSION "12.6.x") +set(GNSSSDR_ARMADILLO_LOCAL_VERSION "14.0.x") set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.2") -set(GNSSSDR_GLOG_LOCAL_VERSION "0.6.0") -set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.26") -set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "25.0") +set(GNSSSDR_GLOG_LOCAL_VERSION "0.7.1") +set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.27") +set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "27.2") set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.14") -set(GNSSSDR_GTEST_LOCAL_VERSION "1.13.0") -set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master") -set(GNSSSDR_GNSSTK_LOCAL_VERSION "14.0.0") -set(GNSSSDR_BENCHMARK_LOCAL_VERSION "1.8.3") +set(GNSSSDR_GTEST_LOCAL_VERSION "1.14.0") +set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "origin/master") +set(GNSSSDR_GNSSTK_LOCAL_VERSION "14.3.0") +set(GNSSSDR_BENCHMARK_LOCAL_VERSION "1.8.5") set(GNSSSDR_MATHJAX_EXTERNAL_VERSION "2.7.7") +set(GNSSSDR_ABSL_LOCAL_VERSION "origin/master") # live at head (see https://abseil.io/about/releases) # Downgrade versions if requirements are not met +if(CMAKE_VERSION VERSION_LESS "3.5") + set(GNSSSDR_ARMADILLO_LOCAL_VERSION "12.8.x") +endif() + +if(CMAKE_VERSION VERSION_LESS "3.22") + set(GNSSSDR_GLOG_LOCAL_VERSION "0.6.0") +endif() if(CMAKE_VERSION VERSION_LESS "3.16") set(GNSSSDR_GLOG_LOCAL_VERSION "0.5.0") endif() @@ -368,10 +388,19 @@ if(CMAKE_VERSION VERSION_LESS "3.4") set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.10") endif() -if(CMAKE_CROSSCOMPILING OR CMAKE_VERSION VERSION_LESS "3.13") +if(CMAKE_CROSSCOMPILING OR CMAKE_VERSION VERSION_LESS "3.13" OR + ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0.0)) OR + ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0")) OR + ((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11"))) set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "21.12") endif() +if(CMAKE_VERSION VERSION_LESS "3.13" OR + (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3.1) OR + (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0.0)) + set(GNSSSDR_GTEST_LOCAL_VERSION "1.13.0") +endif() + if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) OR CMAKE_VERSION VERSION_LESS 3.5) @@ -729,8 +758,18 @@ set(BOOST_COMPONENTS atomic chrono date_time serialization system thread) if(NOT ${FILESYSTEM_FOUND}) set(BOOST_COMPONENTS ${BOOST_COMPONENTS} filesystem) endif() -find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} COMPONENTS ${BOOST_COMPONENTS} REQUIRED) - +if(CMAKE_VERSION VERSION_LESS 3.30) + find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} COMPONENTS ${BOOST_COMPONENTS} REQUIRED) +else() + find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} COMPONENTS ${BOOST_COMPONENTS}) + if(NOT Boost_FOUND) + message(STATUS "Trying deprecated FindBoost Module ...") + if(POLICY CMP0167) + cmake_policy(SET CMP0167 OLD) + find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} REQUIRED COMPONENTS ${BOOST_COMPONENTS}) + endif() + endif() +endif() if(NOT Boost_FOUND) message(FATAL_ERROR "Fatal error: Boost (version >=${GNSSSDR_BOOST_MIN_VERSION}) required.") endif() @@ -1145,7 +1184,7 @@ if(NOT VOLKGNSSSDR_FOUND) if(CMAKE_GENERATOR STREQUAL Xcode) set(VOLK_GNSSSDR_BUILD_COMMAND "xcodebuild" - "-configuration" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel> + "-configuration" $<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:Debug>:RelWithDebInfo>$<$:Debug> ) endif() @@ -1380,316 +1419,427 @@ endif() ################################################################################ -# gflags - https://github.com/gflags/gflags +# Abseil C++ - https://abseil.io/docs/cpp/ ################################################################################ -set(LOCAL_GFLAGS FALSE) -if(ENABLE_OWN_GLOG) - unset(Glog::glog CACHE) - unset(GLOG_FOUND CACHE) - unset(Gflags::gflags CACHE) - unset(GLAGS_FOUND CACHE) - set(GFLAGS_GREATER_20 TRUE) -else() - unset(Glog::glog CACHE) - unset(GLOG_FOUND CACHE) - find_package(GLOG) - if(GLOG_FOUND) - unset(GFLAGS_GREATER_20 CACHE) - find_package(GFLAGS) - endif() -endif() -set_package_properties(GFLAGS PROPERTIES - PURPOSE "Used for commandline flags management." - TYPE REQUIRED -) -if(NOT GFLAGS_FOUND) - set(ENABLE_OWN_GLOG ON) - if(GFLAGS_VERSION) - message(STATUS " A version of the gflags library equal or higher than v${GNSSSDR_GFLAGS_MIN_VERSION} has not been found.") - else() - message(STATUS " The gflags library has not been found.") - endif() - message(STATUS " gflags v${GNSSSDR_GFLAGS_LOCAL_VERSION} will be downloaded, built, and statically linked automatically") - message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") - set(GFLAGS_BUILD_COMMAND ${CMAKE_COMMAND} - "--build" "${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}" - "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> - ) - if(CMAKE_GENERATOR STREQUAL Xcode) - set(GFLAGS_BUILD_COMMAND "xcodebuild" "-configuration" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>) - endif() - if(CMAKE_TOOLCHAIN_FILE) - set(GFLAGS_TOOLCHAIN_FILE -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) - endif() +if(NOT CMAKE_VERSION VERSION_LESS 3.24 + AND NOT CMAKE_CXX_STANDARD VERSION_LESS 17 + AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3.1) + AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0.0) + AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12) + AND NOT ENABLE_OWN_GLOG + AND NOT ENABLE_GLOG_AND_GFLAGS) + # See https://github.com/google/oss-policies-info/blob/main/foundational-cxx-support-matrix.md - if(CMAKE_VERSION VERSION_LESS 3.2) - ExternalProject_Add(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} - PREFIX ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} - GIT_REPOSITORY https://github.com/gflags/gflags.git - GIT_TAG v${GNSSSDR_GFLAGS_LOCAL_VERSION} - SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gflags/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} - BINARY_DIR ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} - CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF - -DBUILD_STATIC_LIBS=ON - -DBUILD_gflags_LIB=ON - -DBUILD_gflags_nothreads_LIB=ON - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - ${GFLAGS_TOOLCHAIN_FILE} - -DGFLAGS_NAMESPACE=google - -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> - BUILD_COMMAND ${GFLAGS_BUILD_COMMAND} - UPDATE_COMMAND "" - PATCH_COMMAND "" - INSTALL_COMMAND "" + if(ENABLE_OWN_ABSEIL) + include(FetchContent) + set(ABSEIL_BUILD_COMMAND ${CMAKE_COMMAND} + "--build" "${GNSSSDR_BINARY_DIR}/abseil-cpp" + "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> + "--target" "install" + ) + if(CMAKE_GENERATOR STREQUAL Xcode) + set(ABSEIL_BUILD_COMMAND "xcodebuild" "-configuration" $<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:Debug>) + endif() + if(CMAKE_TOOLCHAIN_FILE) + set(ABSEIL_TOOLCHAIN_FILE -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) + endif() + set(ABSL_PROPAGATE_CXX_STD ON) + FetchContent_Declare( + absl + GIT_REPOSITORY https://github.com/abseil/abseil-cpp + GIT_TAG ${GNSSSDR_ABSL_LOCAL_VERSION} + SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/abseil-cpp + CMAKE_ARGS -DABSL_PROPAGATE_CXX_STD=ON -ABSL_BUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=${GNSSSDR_BINARY_DIR}/abseil-cpp ${ABSEIL_TOOLCHAIN_FILE} + BINARY_DIR ${GNSSSDR_BINARY_DIR}/abseil-cpp + BUILD_COMMAND ${ABSEIL_BUILD_COMMAND} + OVERRIDE_FIND_PACKAGE # Requires CMake 3.24 ) + FetchContent_MakeAvailable(absl) + set(absl_FOUND TRUE) + set(ENABLE_GLOG_AND_GFLAGS OFF) else() - set(GFLAGS_BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX}) - if((CMAKE_BUILD_TYPE STREQUAL Debug) OR (CMAKE_BUILD_TYPE STREQUAL NoOptWithASM) OR - (CMAKE_BUILD_TYPE STREQUAL Coverage) OR (CMAKE_BUILD_TYPE STREQUAL ASAN)) # Workaround for Ninja generator - set(GFLAGS_BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags_debug${CMAKE_STATIC_LIBRARY_SUFFIX}) + find_package(absl) + set_package_properties(absl PROPERTIES + URL "https://github.com/abseil/abseil-cpp" + PURPOSE "Making use of Abseil's log and flags libraries." + TYPE OPTIONAL + ) + if(absl_FOUND) + set_package_properties(absl PROPERTIES + DESCRIPTION "A collection of C++ library code designed to augment the C++ standard library (found: v${absl_VERSION})" + ) + else() + set_package_properties(absl PROPERTIES + DESCRIPTION "A collection of C++ library code designed to augment the C++ standard library" + ) endif() - if((CMAKE_VERSION VERSION_GREATER 3.12.0) AND NOT (CMAKE_GENERATOR STREQUAL Xcode)) - set(PARALLEL_BUILD "--parallel 2") + if("${absl_VERSION}" VERSION_LESS ${GNSSSDR_ABSEIL_MIN_VERSION}) + unset(absl_FOUND CACHE) + set(absl_FOUND FALSE) + set(ENABLE_GLOG_AND_GFLAGS ON) + set_package_properties(absl PROPERTIES + DESCRIPTION "A collection of C++ library code designed to augment the C++ standard library (found: v${absl_VERSION}, but it is too old and it will not be used)" + ) endif() - ExternalProject_Add(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} - PREFIX ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} - GIT_REPOSITORY https://github.com/gflags/gflags.git - GIT_TAG v${GNSSSDR_GFLAGS_LOCAL_VERSION} - SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gflags/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} - BINARY_DIR ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} - CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF - -DBUILD_STATIC_LIBS=ON - -DBUILD_gflags_LIB=ON - -DBUILD_gflags_nothreads_LIB=ON - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - ${GFLAGS_TOOLCHAIN_FILE} - -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> - BUILD_COMMAND "${GFLAGS_BUILD_COMMAND} ${PARALLEL_BUILD}" - BUILD_BYPRODUCTS ${GFLAGS_BUILD_BYPRODUCTS} - UPDATE_COMMAND "" - PATCH_COMMAND "" - INSTALL_COMMAND "" - ) endif() - # Note: -DBUILD_gflags_nothreads_LIB=ON is required as a workaround to a bug in gflags 2.2.2. This is fixed in gflags master branch +endif() - set(GFlags_INCLUDE_DIRS - ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/include CACHE PATH "Local Gflags headers" - ) - if(CMAKE_VERSION VERSION_LESS "3.0.2") - set(GFlags_LIBS - ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} - ) +if(NOT absl_FOUND) + set(ENABLE_GLOG_AND_GFLAGS ON) + ################################################################################ + # gflags - https://github.com/gflags/gflags + ################################################################################ + set(LOCAL_GFLAGS FALSE) + if(ENABLE_OWN_GLOG) + unset(Glog::glog CACHE) + unset(GLOG_FOUND CACHE) + unset(Gflags::gflags CACHE) + unset(GLAGS_FOUND CACHE) + set(GFLAGS_GREATER_20 TRUE) + else() + unset(Glog::glog CACHE) + unset(GLOG_FOUND CACHE) + find_package(GLOG) + if(GLOG_FOUND) + unset(GFLAGS_GREATER_20 CACHE) + find_package(GFLAGS) + endif() endif() - - if(NOT TARGET Gflags::gflags) - file(MAKE_DIRECTORY ${GFlags_INCLUDE_DIRS}) - add_library(Gflags::gflags STATIC IMPORTED) - add_dependencies(Gflags::gflags gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) - set_target_properties(Gflags::gflags PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" - IMPORTED_CONFIGURATIONS "None;Debug;Release;RelWithDebInfo;MinSizeRel" - MAP_IMPORTED_CONFIG_NOOPTWITHASM Debug - MAP_IMPORTED_CONFIG_COVERAGE Debug - MAP_IMPORTED_CONFIG_O2WITHASM RelWithDebInfo - MAP_IMPORTED_CONFIG_O3WITHASM RelWithDebInfo - MAP_IMPORTED_CONFIG_ASAN Debug - IMPORTED_LOCATION_NONE ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags_debug${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} - INTERFACE_INCLUDE_DIRECTORIES ${GFlags_INCLUDE_DIRS} - INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags$<$:_debug>${CMAKE_STATIC_LIBRARY_SUFFIX} + set_package_properties(GFLAGS PROPERTIES + PURPOSE "Used for commandline flags management." + TYPE REQUIRED + ) + if(NOT GFLAGS_FOUND) + set(ENABLE_OWN_GLOG ON) + if(GFLAGS_VERSION) + message(STATUS " A version of the gflags library equal or higher than v${GNSSSDR_GFLAGS_MIN_VERSION} has not been found.") + else() + message(STATUS " The gflags library has not been found.") + endif() + message(STATUS " gflags v${GNSSSDR_GFLAGS_LOCAL_VERSION} will be downloaded, built, and statically linked automatically") + message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") + set(GFLAGS_BUILD_COMMAND ${CMAKE_COMMAND} + "--build" "${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}" + "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> ) - if((CMAKE_GENERATOR STREQUAL Xcode) OR MSVC) - if(MSVC) - set(MSVC_POSTFIX _static) + if(CMAKE_GENERATOR STREQUAL Xcode) + set(GFLAGS_BUILD_COMMAND "xcodebuild" "-configuration" $<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:Debug>) + endif() + if(CMAKE_TOOLCHAIN_FILE) + set(GFLAGS_TOOLCHAIN_FILE -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) + endif() + + if(CMAKE_VERSION VERSION_LESS 3.2) + ExternalProject_Add(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} + PREFIX ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} + GIT_REPOSITORY https://github.com/gflags/gflags.git + GIT_TAG v${GNSSSDR_GFLAGS_LOCAL_VERSION} + SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gflags/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} + BINARY_DIR ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} + CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF + -DBUILD_STATIC_LIBS=ON + -DBUILD_gflags_LIB=ON + -DBUILD_gflags_nothreads_LIB=ON + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + ${GFLAGS_TOOLCHAIN_FILE} + -DGFLAGS_NAMESPACE=google + -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> + BUILD_COMMAND ${GFLAGS_BUILD_COMMAND} + UPDATE_COMMAND "" + PATCH_COMMAND "" + INSTALL_COMMAND "" + ) + else() + set(GFLAGS_BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX}) + if((CMAKE_BUILD_TYPE STREQUAL Debug) OR (CMAKE_BUILD_TYPE STREQUAL NoOptWithASM) OR + (CMAKE_BUILD_TYPE STREQUAL Coverage) OR (CMAKE_BUILD_TYPE STREQUAL ASAN)) # Workaround for Ninja generator + set(GFLAGS_BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags_debug${CMAKE_STATIC_LIBRARY_SUFFIX}) + endif() + if((CMAKE_VERSION VERSION_GREATER 3.12.0) AND NOT (CMAKE_GENERATOR STREQUAL Xcode)) + set(PARALLEL_BUILD "--parallel 2") endif() + ExternalProject_Add(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} + PREFIX ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} + GIT_REPOSITORY https://github.com/gflags/gflags.git + GIT_TAG v${GNSSSDR_GFLAGS_LOCAL_VERSION} + SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gflags/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} + BINARY_DIR ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} + CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF + -DBUILD_STATIC_LIBS=ON + -DBUILD_gflags_LIB=ON + -DBUILD_gflags_nothreads_LIB=ON + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + ${GFLAGS_TOOLCHAIN_FILE} + -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> + BUILD_COMMAND "${GFLAGS_BUILD_COMMAND} ${PARALLEL_BUILD}" + BUILD_BYPRODUCTS ${GFLAGS_BUILD_BYPRODUCTS} + UPDATE_COMMAND "" + PATCH_COMMAND "" + INSTALL_COMMAND "" + ) + endif() + # Note: -DBUILD_gflags_nothreads_LIB=ON is required as a workaround to a bug in gflags 2.2.2. This is fixed in gflags master branch + + set(GFlags_INCLUDE_DIRS + ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/include CACHE PATH "Local Gflags headers" + ) + + if(CMAKE_VERSION VERSION_LESS "3.0.2") + set(GFlags_LIBS + ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} + ) + endif() + + if(NOT TARGET Gflags::gflags) + file(MAKE_DIRECTORY ${GFlags_INCLUDE_DIRS}) + add_library(Gflags::gflags STATIC IMPORTED) + add_dependencies(Gflags::gflags gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) set_target_properties(Gflags::gflags PROPERTIES - IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}_debug${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/Release/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/MinSizeRel/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} - INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/$<$:Debug/>$<$:Release/>$<$:RelWithDebInfo/>$<$:MinSizeRel/>${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}$<$:_debug>${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" + IMPORTED_CONFIGURATIONS "None;Debug;Release;RelWithDebInfo;MinSizeRel" + MAP_IMPORTED_CONFIG_NOOPTWITHASM Debug + MAP_IMPORTED_CONFIG_COVERAGE Debug + MAP_IMPORTED_CONFIG_O2WITHASM RelWithDebInfo + MAP_IMPORTED_CONFIG_O3WITHASM RelWithDebInfo + MAP_IMPORTED_CONFIG_ASAN Debug + IMPORTED_LOCATION_NONE ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags_debug${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} + INTERFACE_INCLUDE_DIRECTORIES ${GFlags_INCLUDE_DIRS} + INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags$<$:_debug>${CMAKE_STATIC_LIBRARY_SUFFIX} ) + if((CMAKE_GENERATOR STREQUAL Xcode) OR MSVC) + if(MSVC) + set(MSVC_POSTFIX _static) + endif() + set_target_properties(Gflags::gflags PROPERTIES + IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}_debug${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/Release/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/MinSizeRel/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} + INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/$<$:Debug/>$<$:Release/>$<$:RelWithDebInfo/>$<$:MinSizeRel/>${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}$<$:_debug>${CMAKE_STATIC_LIBRARY_SUFFIX} + ) + endif() endif() - endif() - if(MSVC) - target_link_libraries(Gflags::gflags INTERFACE shlwapi.lib) - endif() + if(MSVC) + target_link_libraries(Gflags::gflags INTERFACE shlwapi.lib) + endif() - set(LOCAL_GFLAGS TRUE CACHE STRING "GFlags downloaded, built, and statically linked automatically" FORCE) - set_package_properties(GFLAGS PROPERTIES - PURPOSE "Gflags v${GNSSSDR_GFLAGS_LOCAL_VERSION} and Glog v${GNSSSDR_GLOG_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." - ) - if(CMAKE_VERSION VERSION_LESS 3.2) - set_property(TARGET Gflags::gflags APPEND PROPERTY - INTERFACE_COMPILE_DEFINITIONS GFLAGS_OLD_NAMESPACE=1 + set(LOCAL_GFLAGS TRUE CACHE STRING "GFlags downloaded, built, and statically linked automatically" FORCE) + set_package_properties(GFLAGS PROPERTIES + PURPOSE "Gflags v${GNSSSDR_GFLAGS_LOCAL_VERSION} and Glog v${GNSSSDR_GLOG_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." ) + if(CMAKE_VERSION VERSION_LESS 3.2) + set_property(TARGET Gflags::gflags APPEND PROPERTY + INTERFACE_COMPILE_DEFINITIONS GFLAGS_OLD_NAMESPACE=1 + ) + endif() endif() -endif() -################################################################################ -# glog - https://github.com/google/glog -################################################################################ -set_package_properties(GLOG PROPERTIES - 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, built, and statically linked automatically") - message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") - find_package(LIBUNWIND) - set_package_properties(LIBUNWIND PROPERTIES - PURPOSE "Needed by glog." - TYPE OPTIONAL - ) - if(NOT ${LOCAL_GFLAGS}) - if(NOT TARGET gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) - add_library(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} UNKNOWN IMPORTED) - endif() - set_property(TARGET gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} PROPERTY IMPORTED_LOCATION "${GFlags_LIBS}") - string(REPLACE /include "" GFLAGS_PREFIX_PATH ${GFlags_INCLUDE_DIRS}) - else() - set(GFLAGS_PREFIX_PATH ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) - endif() - set(TARGET_GFLAGS gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) - set(GLOG_MAKE_PROGRAM ${CMAKE_COMMAND} - "--build" "${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}" - "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> + ################################################################################ + # glog - https://github.com/google/glog + ################################################################################ + set_package_properties(GLOG PROPERTIES + PURPOSE "Used for runtime internal logging." + TYPE REQUIRED ) - if(CMAKE_GENERATOR STREQUAL Xcode) - set(GLOG_MAKE_PROGRAM "xcodebuild" "-configuration" - $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel> + 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, built, and statically linked automatically") + message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") + find_package(LIBUNWIND) + set_package_properties(LIBUNWIND PROPERTIES + PURPOSE "Needed by glog." + TYPE OPTIONAL ) - endif() - if(CMAKE_TOOLCHAIN_FILE) - set(GLOG_TOOLCHAIN_FILE -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) - endif() - - if(CMAKE_VERSION VERSION_LESS 3.3) - if(CMAKE_VERSION VERSION_LESS 3.0) - set(GLOG_MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}) - set(GFLAGS_LIBRARIES_TO_LINK ${GFlags_LIBS}) - if(${LOCAL_GFLAGS}) - set(GFLAGS_LIBRARY_DIR_TO_LINK ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib) - else() - set(GFLAGS_LIBRARY_DIR_TO_LINK ${GFlags_LIBRARY_DIRS}) - endif() - if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(GFLAGS_LIBRARIES_TO_LINK "${GFLAGS_LIBRARIES_TO_LINK} -lc++") - set(GLOG_EXPORT_CXX_LIBRARIES "export CXXFLAGS=\"-stdlib=libc++\"") + if(NOT ${LOCAL_GFLAGS}) + if(NOT TARGET gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) + add_library(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} UNKNOWN IMPORTED) endif() - if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(GLOG_EXPORT_C_COMPILER "export CC=clang") - set(GLOG_EXPORT_CXX_COMPILER "export CXX=clang++") - endif() - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(GLOG_EXPORT_C_COMPILER "export CC=gcc") - set(GLOG_EXPORT_CXX_COMPILER "export CXX=g++") - endif() - file(WRITE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/tmp/configure_with_gflags -"#!/bin/sh -export CPPFLAGS=-I${GFlags_INCLUDE_DIRS} -export LDFLAGS=-L${GFLAGS_LIBRARY_DIR_TO_LINK} -export LIBS=\"${GFLAGS_LIBRARIES_TO_LINK}\" -${GLOG_EXPORT_CXX_LIBRARIES} -${GLOG_EXPORT_C_COMPILER} -${GLOG_EXPORT_CXX_COMPILER} -cd ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/ -aclocal -automake --add-missing -autoreconf -vfi -cd ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} -${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/configure --enable-shared=no" + set_property(TARGET gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} PROPERTY IMPORTED_LOCATION "${GFlags_LIBS}") + string(REPLACE /include "" GFLAGS_PREFIX_PATH ${GFlags_INCLUDE_DIRS}) + else() + set(GFLAGS_PREFIX_PATH ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) + endif() + set(TARGET_GFLAGS gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) + set(GLOG_MAKE_PROGRAM ${CMAKE_COMMAND} + "--build" "${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}" + "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> + ) + if(CMAKE_GENERATOR STREQUAL Xcode) + set(GLOG_MAKE_PROGRAM "xcodebuild" "-configuration" + $<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:Debug> ) + endif() + if(CMAKE_TOOLCHAIN_FILE) + set(GLOG_TOOLCHAIN_FILE -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) + endif() - file(COPY ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/tmp/configure_with_gflags - DESTINATION ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} - FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ - GROUP_EXECUTE WORLD_READ WORLD_EXECUTE - ) + if(CMAKE_VERSION VERSION_LESS 3.3) + if(CMAKE_VERSION VERSION_LESS 3.0) + set(GLOG_MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}) + set(GFLAGS_LIBRARIES_TO_LINK ${GFlags_LIBS}) + if(${LOCAL_GFLAGS}) + set(GFLAGS_LIBRARY_DIR_TO_LINK ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib) + else() + set(GFLAGS_LIBRARY_DIR_TO_LINK ${GFlags_LIBRARY_DIRS}) + endif() + if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(GFLAGS_LIBRARIES_TO_LINK "${GFLAGS_LIBRARIES_TO_LINK} -lc++") + set(GLOG_EXPORT_CXX_LIBRARIES "export CXXFLAGS=\"-stdlib=libc++\"") + endif() + if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(GLOG_EXPORT_C_COMPILER "export CC=clang") + set(GLOG_EXPORT_CXX_COMPILER "export CXX=clang++") + endif() + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(GLOG_EXPORT_C_COMPILER "export CC=gcc") + set(GLOG_EXPORT_CXX_COMPILER "export CXX=g++") + endif() + file(WRITE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/tmp/configure_with_gflags + "#!/bin/sh + export CPPFLAGS=-I${GFlags_INCLUDE_DIRS} + export LDFLAGS=-L${GFLAGS_LIBRARY_DIR_TO_LINK} + export LIBS=\"${GFLAGS_LIBRARIES_TO_LINK}\" + ${GLOG_EXPORT_CXX_LIBRARIES} + ${GLOG_EXPORT_C_COMPILER} + ${GLOG_EXPORT_CXX_COMPILER} + cd ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/ + aclocal + automake --add-missing + autoreconf -vfi + cd ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} + ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/configure --enable-shared=no" + ) - set(GLOG_CONFIGURE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/configure_with_gflags) + file(COPY ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/tmp/configure_with_gflags + DESTINATION ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} + FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ + GROUP_EXECUTE WORLD_READ WORLD_EXECUTE + ) - # Ensure that aclocal and libtool are present - if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") - if(EXISTS "/usr/bin/libtoolize") - if(EXISTS "/usr/bin/aclocal" OR - EXISTS "/usr/bin/aclocal-1.16" OR - EXISTS "/usr/bin/aclocal-1.15" OR - EXISTS "/usr/bin/aclocal-1.14" OR - EXISTS "/usr/bin/aclocal-1.13" OR - EXISTS "/usr/bin/aclocal-1.11" OR - EXISTS "/usr/bin/aclocal-1.10") - # Everything ok, we can move on + set(GLOG_CONFIGURE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/configure_with_gflags) + + # Ensure that aclocal and libtool are present + if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") + if(EXISTS "/usr/bin/libtoolize") + if(EXISTS "/usr/bin/aclocal" OR + EXISTS "/usr/bin/aclocal-1.16" OR + EXISTS "/usr/bin/aclocal-1.15" OR + EXISTS "/usr/bin/aclocal-1.14" OR + EXISTS "/usr/bin/aclocal-1.13" OR + EXISTS "/usr/bin/aclocal-1.11" OR + EXISTS "/usr/bin/aclocal-1.10") + # Everything ok, we can move on + 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") + message(" sudo yum groupinstall 'Development Tools'") + elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") + message(" sudo zypper install automake") + else() + message(" sudo apt-get install automake") + endif() + message(FATAL_ERROR "aclocal is required to build glog from source") + endif() else() - message(" aclocal has not been found.") + 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") message(" sudo yum groupinstall 'Development Tools'") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") - message(" sudo zypper install automake") + message(" sudo zypper install libtoool") else() - message(" sudo apt-get install automake") + message(" sudo apt-get install libtool") endif() - message(FATAL_ERROR "aclocal is required to build glog from source") + message(FATAL_ERROR "libtool is required to build glog from source") endif() - 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") - message(" sudo yum groupinstall 'Development Tools'") - elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") - message(" sudo zypper install libtoool") - else() - message(" sudo apt-get install libtool") - endif() - message(FATAL_ERROR "libtool is required to build glog from source") endif() - endif() - if(GLOG_MAKE_PROGRAM MATCHES "ninja") - find_program(GLOG_MAKE_EXECUTABLE make - PATHS - /usr/bin - /usr/local/bin - ) - if(NOT GLOG_MAKE_EXECUTABLE) - message(FATAL_ERROR "make is required to build Glog from source.") + if(GLOG_MAKE_PROGRAM MATCHES "ninja") + find_program(GLOG_MAKE_EXECUTABLE make + PATHS + /usr/bin + /usr/local/bin + ) + if(NOT GLOG_MAKE_EXECUTABLE) + message(FATAL_ERROR "make is required to build Glog from source.") + endif() + set(GLOG_MAKE_PROGRAM ${GLOG_MAKE_EXECUTABLE}) endif() - set(GLOG_MAKE_PROGRAM ${GLOG_MAKE_EXECUTABLE}) + ExternalProject_Add(glog-${GNSSSDR_GLOG_LOCAL_VERSION} + DEPENDS ${TARGET_GFLAGS} + PREFIX ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} + GIT_REPOSITORY https://github.com/google/glog/ + GIT_TAG v${GNSSSDR_GLOG_LOCAL_VERSION} + SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION} + BINARY_DIR ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} + CONFIGURE_COMMAND ${GLOG_CONFIGURE} --prefix= + BUILD_COMMAND "${GLOG_MAKE_PROGRAM}" + UPDATE_COMMAND "" + PATCH_COMMAND "" + INSTALL_COMMAND "" + ) + set(GLOG_LIBRARIES + ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/.libs/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} + ) + set(GLOG_INCLUDE_DIRS + ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src + ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src + ) + else() # CMake > 3.0 but < 3.3 + ExternalProject_Add(glog-${GNSSSDR_GLOG_LOCAL_VERSION} + DEPENDS ${TARGET_GFLAGS} + PREFIX ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} + GIT_REPOSITORY https://github.com/google/glog/ + GIT_TAG v${GNSSSDR_GLOG_LOCAL_VERSION} + SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION} + BINARY_DIR ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} + CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_PREFIX_PATH=${GFLAGS_PREFIX_PATH} + ${GLOG_TOOLCHAIN_FILE} + -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> + BUILD_COMMAND ${GLOG_MAKE_PROGRAM} + UPDATE_COMMAND "" + PATCH_COMMAND "" + INSTALL_COMMAND "" + ) + set(GLOG_INCLUDE_DIRS + ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src + ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} + ${GFlags_INCLUDE_DIRS} + ) endif() - ExternalProject_Add(glog-${GNSSSDR_GLOG_LOCAL_VERSION} - DEPENDS ${TARGET_GFLAGS} - PREFIX ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} - GIT_REPOSITORY https://github.com/google/glog/ - GIT_TAG v${GNSSSDR_GLOG_LOCAL_VERSION} - SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION} - BINARY_DIR ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} - CONFIGURE_COMMAND ${GLOG_CONFIGURE} --prefix= - BUILD_COMMAND "${GLOG_MAKE_PROGRAM}" - UPDATE_COMMAND "" - PATCH_COMMAND "" - INSTALL_COMMAND "" - ) - set(GLOG_LIBRARIES - ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/.libs/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} - ) - set(GLOG_INCLUDE_DIRS - ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src - ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src + else() # CMake > 3.3 + set(GLOG_BUILD_BYPRODUCTS + ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} ) - else() # CMake > 3.0 but < 3.3 + if((CMAKE_BUILD_TYPE STREQUAL Debug) OR (CMAKE_BUILD_TYPE STREQUAL NoOptWithASM) OR + (CMAKE_BUILD_TYPE STREQUAL Coverage) OR (CMAKE_BUILD_TYPE STREQUAL ASAN)) # Workaround for Ninja generator + set(GLOG_BUILD_BYPRODUCTS + ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glogd${CMAKE_STATIC_LIBRARY_SUFFIX} + ) + endif() + if((CMAKE_VERSION VERSION_GREATER 3.12.0) AND NOT (CMAKE_GENERATOR STREQUAL Xcode) AND NOT CMAKE_CROSSCOMPILING) + set(PARALLEL_BUILD "--parallel 2") + endif() + if(GNSSSDR_GLOG_LOCAL_VERSION VERSION_GREATER 0.5.0) + set(GLOG_GTEST -DWITH_GTEST=FALSE) + endif() + if(NOT (CMAKE_VERSION VERSION_LESS "3.22")) + set(GNSSSDR_GLOG_LOCAL_GFLAGS -DCMAKE_REQUIRED_INCLUDES=${GFlags_INCLUDE_DIRS}) + endif() ExternalProject_Add(glog-${GNSSSDR_GLOG_LOCAL_VERSION} DEPENDS ${TARGET_GFLAGS} PREFIX ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} @@ -1698,11 +1848,15 @@ ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/configu SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_PREFIX_PATH=${GFLAGS_PREFIX_PATH} ${GLOG_TOOLCHAIN_FILE} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> - BUILD_COMMAND ${GLOG_MAKE_PROGRAM} + -DBUILD_SHARED_LIBS=OFF + ${GLOG_GTEST} + -DBUILD_TESTING=OFF + "${GNSSSDR_GLOG_LOCAL_GFLAGS}" + BUILD_COMMAND "${GLOG_MAKE_PROGRAM} ${PARALLEL_BUILD}" + BUILD_BYPRODUCTS ${GLOG_BUILD_BYPRODUCTS} UPDATE_COMMAND "" PATCH_COMMAND "" INSTALL_COMMAND "" @@ -1713,111 +1867,64 @@ ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/configu ${GFlags_INCLUDE_DIRS} ) endif() - else() # CMake > 3.3 - set(GLOG_BUILD_BYPRODUCTS - ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} - ) - if((CMAKE_BUILD_TYPE STREQUAL Debug) OR (CMAKE_BUILD_TYPE STREQUAL NoOptWithASM) OR - (CMAKE_BUILD_TYPE STREQUAL Coverage) OR (CMAKE_BUILD_TYPE STREQUAL ASAN)) # Workaround for Ninja generator - set(GLOG_BUILD_BYPRODUCTS - ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glogd${CMAKE_STATIC_LIBRARY_SUFFIX} - ) - endif() - if((CMAKE_VERSION VERSION_GREATER 3.12.0) AND NOT (CMAKE_GENERATOR STREQUAL Xcode) AND NOT CMAKE_CROSSCOMPILING) - set(PARALLEL_BUILD "--parallel 2") - endif() - if(GNSSSDR_GLOG_LOCAL_VERSION VERSION_GREATER 0.5.0) - set(GLOG_GTEST -DWITH_GTEST=FALSE) - endif() - ExternalProject_Add(glog-${GNSSSDR_GLOG_LOCAL_VERSION} - DEPENDS ${TARGET_GFLAGS} - PREFIX ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} - GIT_REPOSITORY https://github.com/google/glog/ - GIT_TAG v${GNSSSDR_GLOG_LOCAL_VERSION} - SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION} - BINARY_DIR ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} - CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_PREFIX_PATH=${GFLAGS_PREFIX_PATH} - ${GLOG_TOOLCHAIN_FILE} - -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> - -DBUILD_SHARED_LIBS=OFF - ${GLOG_GTEST} - -DBUILD_TESTING=OFF - BUILD_COMMAND "${GLOG_MAKE_PROGRAM} ${PARALLEL_BUILD}" - BUILD_BYPRODUCTS ${GLOG_BUILD_BYPRODUCTS} - UPDATE_COMMAND "" - PATCH_COMMAND "" - INSTALL_COMMAND "" - ) - set(GLOG_INCLUDE_DIRS - ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src - ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} - ${GFlags_INCLUDE_DIRS} - ) - endif() - add_dependencies(glog-${GNSSSDR_GLOG_LOCAL_VERSION} Gflags::gflags) + add_dependencies(glog-${GNSSSDR_GLOG_LOCAL_VERSION} Gflags::gflags) - # Create Glog::glog target - if(NOT TARGET Glog::glog) - file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src) - file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}) - add_library(Glog::glog STATIC IMPORTED) - add_dependencies(Glog::glog glog-${GNSSSDR_GLOG_LOCAL_VERSION}) - if(CMAKE_VERSION VERSION_LESS 3.0) - set_target_properties(Glog::glog PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" - IMPORTED_LOCATION "${GLOG_LIBRARIES}" - INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIRS}" - INTERFACE_INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${GLOG_LIBRARIES}" - ) - else() - set_target_properties(Glog::glog PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" - IMPORTED_CONFIGURATIONS "None;Debug;Release;RelWithDebInfo;MinSizeRel" - MAP_IMPORTED_CONFIG_NOOPTWITHASM Debug - MAP_IMPORTED_CONFIG_COVERAGE Debug - MAP_IMPORTED_CONFIG_O2WITHASM RelWithDebInfo - MAP_IMPORTED_CONFIG_O3WITHASM RelWithDebInfo - MAP_IMPORTED_CONFIG_ASAN Debug - IMPORTED_LOCATION_NONE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glogd${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} - INTERFACE_INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog$<$:d>${CMAKE_STATIC_LIBRARY_SUFFIX} - ) - if((CMAKE_GENERATOR STREQUAL Xcode) OR MSVC) + # Create Glog::glog target + if(NOT TARGET Glog::glog) + file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src) + file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}) + add_library(Glog::glog STATIC IMPORTED) + add_dependencies(Glog::glog glog-${GNSSSDR_GLOG_LOCAL_VERSION}) + if(CMAKE_VERSION VERSION_LESS 3.0) set_target_properties(Glog::glog PROPERTIES - IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}glogd${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/Release/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} - IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/MinSizeRel/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} - INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/$<$:Debug/>$<$:Release/>$<$:RelWithDebInfo/>$<$:MinSizeRel/>${CMAKE_FIND_LIBRARY_PREFIXES}glog$<$:d>${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" + IMPORTED_LOCATION "${GLOG_LIBRARIES}" + INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIRS}" + INTERFACE_INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${GLOG_LIBRARIES}" ) + else() + set_target_properties(Glog::glog PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" + IMPORTED_CONFIGURATIONS "None;Debug;Release;RelWithDebInfo;MinSizeRel" + MAP_IMPORTED_CONFIG_NOOPTWITHASM Debug + MAP_IMPORTED_CONFIG_COVERAGE Debug + MAP_IMPORTED_CONFIG_O2WITHASM RelWithDebInfo + MAP_IMPORTED_CONFIG_O3WITHASM RelWithDebInfo + MAP_IMPORTED_CONFIG_ASAN Debug + IMPORTED_LOCATION_NONE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glogd${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} + INTERFACE_INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog$<$:d>${CMAKE_STATIC_LIBRARY_SUFFIX} + ) + if((CMAKE_GENERATOR STREQUAL Xcode) OR MSVC) + set_target_properties(Glog::glog PROPERTIES + IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}glogd${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/Release/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} + IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/MinSizeRel/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} + INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/$<$:Debug/>$<$:Release/>$<$:RelWithDebInfo/>$<$:MinSizeRel/>${CMAKE_FIND_LIBRARY_PREFIXES}glog$<$:d>${CMAKE_STATIC_LIBRARY_SUFFIX} + ) + endif() endif() endif() - endif() - - if(LIBUNWIND_FOUND) - target_link_libraries(Glog::glog INTERFACE Libunwind::libunwind) - endif() - set(LOCAL_GLOG TRUE CACHE STRING "Glog downloaded, built, and statically linked automatically" FORCE) + if(NOT (CMAKE_VERSION VERSION_LESS "3.22")) + set_target_properties(Glog::glog PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "GLOG_USE_GLOG_EXPORT;GLOG_USE_GFLAGS" + INTERFACE_COMPILE_FEATURES "cxx_std_14") + endif() - set_package_properties(GLOG PROPERTIES - PURPOSE "Glog v${GNSSSDR_GLOG_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." - ) -endif() + if(LIBUNWIND_FOUND) + target_link_libraries(Glog::glog INTERFACE Libunwind::libunwind) + endif() + set(LOCAL_GLOG TRUE CACHE STRING "Glog downloaded, built, and statically linked automatically" FORCE) -if(NOT ENABLE_LOG) - message(STATUS "Internal logging is not enabled") - if(CMAKE_VERSION VERSION_GREATER 3.11.0) - target_compile_definitions(Glog::glog INTERFACE -DGOOGLE_STRIP_LOG=1) - else() - set_property(TARGET Glog::glog APPEND PROPERTY - INTERFACE_COMPILE_DEFINITIONS GOOGLE_STRIP_LOG=1 + set_package_properties(GLOG PROPERTIES + PURPOSE "Glog v${GNSSSDR_GLOG_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." ) endif() endif() @@ -1909,7 +2016,7 @@ endif() ################################################################################ -# Armadillo - http://arma.sourceforge.net/ +# Armadillo - https://arma.sourceforge.net/ ################################################################################ if(ENABLE_OWN_ARMADILLO) unset(Armadillo::armadillo CACHE) @@ -1921,7 +2028,7 @@ else() endif() set_package_properties(Armadillo PROPERTIES - URL "http://arma.sourceforge.net/" + URL "https://arma.sourceforge.net/" PURPOSE "Used for matrix computations." TYPE REQUIRED ) @@ -2025,7 +2132,7 @@ if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO) CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> -DCMAKE_INSTALL_PREFIX=${GNSSSDR_BINARY_DIR}/armadillo-${armadillo_RELEASE} - -DBUILD_SHARED_LIBS=OFF + -DSTATIC_LIB=ON -DBUILD_SMOKE_TEST=OFF -DALLOW_BLAS_LAPACK_MACOS=ON ${ARMADILLO_CXX_VERSION} @@ -2150,6 +2257,7 @@ find_library(GNUTLS_OPENSSL_LIBRARY /usr/lib/sparc64-linux-gnu /usr/lib/x86_64-linux-gnux32 /usr/lib/sh4-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib @@ -2517,9 +2625,29 @@ endif() ################################################################################ # Protocol Buffers https://github.com/protocolbuffers/protobuf ################################################################################ -find_package(Protobuf) +if(((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0.0")) OR + ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0")) OR + ((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11"))) + if(CMAKE_VERSION VERSION_LESS 3.19) + find_package(Protobuf) + else() + find_package(Protobuf 3.0...21.12) + endif() +else() + find_package(Protobuf) + + if((CMAKE_BUILD_TYPE STREQUAL "Debug") AND Protobuf_FOUND AND absl_FOUND) + # This Regular Expression is used to convert the version string provided by `find_package(Protobuf)` into the + # appropriate binary version string. So, for instance, "4.25.3" becomes "25.3.0". + string(REGEX REPLACE "^[0-9]+\.([0-9]+\.[0-9]+)$" "\\1.0" PROTOBUF_LIBRARY_VERSION "${Protobuf_VERSION}") + if((PROTOBUF_LIBRARY_VERSION VERSION_GREATER_EQUAL "22") AND (PROTOBUF_LIBRARY_VERSION VERSION_LESS "26")) + pkg_check_modules(protobuf REQUIRED IMPORTED_TARGET protobuf=${PROTOBUF_LIBRARY_VERSION}) + target_link_libraries(protobuf::libprotobuf INTERFACE PkgConfig::protobuf) + endif() + endif() +endif() set_package_properties(Protobuf PROPERTIES - URL "https://developers.google.com/protocol-buffers/" + URL "https://protobuf.dev/" PURPOSE "Used to serialize output data in a way that can be read by other applications." TYPE REQUIRED ) @@ -2624,12 +2752,6 @@ if((NOT Protobuf_FOUND) OR (NOT Protobuf_PROTOC_EXECUTABLE) OR (${Protobuf_VERSI endif() else() if(CMAKE_VERSION VERSION_GREATER "3.13") - find_package(absl) - set_package_properties(absl PROPERTIES - URL "https://github.com/abseil/abseil-cpp" - PURPOSE "Abseil-cpp >= 20230117 required to be installed before building Protocol Buffers >22.x on the fly." - TYPE OPTIONAL - ) if(absl_FOUND) if(absl_VERSION) if(${absl_VERSION} VERSION_LESS "20230117") @@ -2641,6 +2763,10 @@ if((NOT Protobuf_FOUND) OR (NOT Protobuf_PROTOC_EXECUTABLE) OR (${Protobuf_VERSI set(absl_FOUND OFF) endif() endif() + if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0.0")) + unset(absl_FOUND CACHE) + set(absl_FOUND OFF) + endif() if(absl_FOUND) set_package_properties(absl PROPERTIES DESCRIPTION "An open-source collection of C++ code designed to augment the C++ standard library (found: v${absl_VERSION})" @@ -2655,7 +2781,9 @@ if((NOT Protobuf_FOUND) OR (NOT Protobuf_PROTOC_EXECUTABLE) OR (${Protobuf_VERSI DESCRIPTION "An open-source collection of C++ code designed to augment the C++ standard library" ) endif() - message(STATUS "The Abseil library (https://github.com/abseil/abseil-cpp) >= v20230117 is required to be installed before building Protocol Buffers >22.x on the fly.") + if(NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0.0")) + message(STATUS "The Abseil library (https://github.com/abseil/abseil-cpp) >= v20230117 is required to be installed before building Protocol Buffers >22.x on the fly.") + endif() message(STATUS " Instead, Protocol Buffers v21.12 will be built, which does not require Abseil.") set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "21.12") endif() @@ -2768,8 +2896,8 @@ if((NOT Protobuf_FOUND) OR (NOT Protobuf_PROTOC_EXECUTABLE) OR (${Protobuf_VERSI if(NOT TARGET protobuf::protoc) add_executable(protobuf::protoc IMPORTED) - add_dependencies(protobuf::protoc protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}) endif() + add_dependencies(protobuf::protoc protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}) unset(Protobuf_PROTOC_EXECUTABLE) set(PROTOBUF_PROTOC_EXECUTABLE "${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/bin/protoc") set_target_properties(protobuf::protoc PROPERTIES @@ -3443,8 +3571,10 @@ add_feature_info(ENABLE_FPGA ENABLE_FPGA "Enables building of processing blocks add_feature_info(ENABLE_ARMA_NO_DEBUG ENABLE_ARMA_NO_DEBUG "Enables passing the ARMA_NO_DEBUG macro to Armadillo, hence disabling bound checking.") add_feature_info(ENABLE_PACKAGING ENABLE_PACKAGING "Enables software packaging.") add_feature_info(ENABLE_OWN_GLOG ENABLE_OWN_GLOG "Forces the downloading and building of Google glog.") +add_feature_info(ENABLE_GLOG_AND_GFLAGS ENABLE_GLOG_AND_GFLAGS "Forces the usage of Google glog and Gflags instead of Abseil.") +add_feature_info(ENABLE_OWN_ABSEIL ENABLE_OWN_ABSEIL "Forces downloading and building Abseil. Supersedes ENABLE_OWN_GLOG.") add_feature_info(ENABLE_OWN_ARMADILLO ENABLE_OWN_ARMADILLO "Forces the downloading and building of Armadillo.") -add_feature_info(ENABLE_LOG ENABLE_LOG "Enables runtime internal logging with Google glog.") +add_feature_info(ENABLE_LOG ENABLE_LOG "Enables runtime internal logging.") add_feature_info(ENABLE_ORC ENABLE_ORC "Use the Optimized Inner Loop Runtime Compiler (ORC) for building volk_gnsssdr.") add_feature_info(ENABLE_STRIP ENABLE_STRIP "Enables the generation of stripped binaries (without debugging symbols).") add_feature_info(ENABLE_UNIT_TESTING ENABLE_UNIT_TESTING "Enables building of Unit Tests.") @@ -3466,7 +3596,7 @@ message(STATUS "* SUMMARY REPORT *") message(STATUS "***************************************") message(STATUS "") if(CMAKE_CROSSCOMPILING) - message(STATUS "Cross-compiling on ${LINUX_DISTRIBUTION} ${LINUX_VER} (${CMAKE_HOST_SYSTEM_PROCESSOR}) for ${CMAKE_SYSTEM_PROCESSOR} ${ARCHITECTURE_STRING}") + message(STATUS "Cross-compiling on ${LINUX_DISTRIBUTION} ${LINUX_VER} (${CMAKE_HOST_SYSTEM_PROCESSOR}) for ${CMAKE_SYSTEM_PROCESSOR}") else() if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") message(STATUS "Building on GNU/Linux ${LINUX_DISTRIBUTION} ${LINUX_VER} ${ARCHITECTURE_STRING}") @@ -3489,7 +3619,7 @@ file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "******************************** file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "GNSS-SDR version: ${VERSION}\n") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") if(CMAKE_CROSSCOMPILING) - file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "Cross-compiling on ${LINUX_DISTRIBUTION} ${LINUX_VER} (${CMAKE_HOST_SYSTEM_PROCESSOR}) for ${CMAKE_SYSTEM_PROCESSOR} ${ARCHITECTURE_STRING}\n") + file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "Cross-compiling on ${LINUX_DISTRIBUTION} ${LINUX_VER} (${CMAKE_HOST_SYSTEM_PROCESSOR}) for ${CMAKE_SYSTEM_PROCESSOR}\n") else() file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "Building on GNU/Linux ${LINUX_DISTRIBUTION} ${LINUX_VER} ${ARCHITECTURE_STRING}\n") endif() diff --git a/README.md b/README.md index 7e9fd62d93..b9c64d1ff1 100644 --- a/README.md +++ b/README.md @@ -59,60 +59,59 @@ information about this open-source, software-defined GNSS receiver. (click to expand) -1. [Table of Contents](#table-of-contents) -2. [How to build GNSS-SDR](#how-to-build-gnss-sdr) - 1. [GNU/Linux](#gnulinux) - 1. [Alternative 1: Install dependencies using software packages](#alternative-1-install-dependencies-using-software-packages) - 1. [Debian / Ubuntu](#debian--ubuntu) - 2. [AlmaLinux](#almalinux) - 3. [Arch Linux](#arch-linux) - 4. [CentOS](#centos) - 5. [Fedora](#fedora) - 6. [openSUSE](#opensuse) - 7. [Rocky Linux](#rocky-linux) - 2. [Alternative 2: Install dependencies using PyBOMBS](#alternative-2-install-dependencies-using-pybombs) - 3. [Manual installation of other required dependencies](#manual-installation-of-other-required-dependencies) - 1. [Install Armadillo, a C++ linear algebra library](#install-armadillo-a-c-linear-algebra-library) - 2. [Install Gflags, a commandline flags processing module for C++](#install-gflags-a-commandline-flags-processing-module-for-c) - 3. [Install Glog, a library that implements application-level logging](#install-glog-a-library-that-implements-application-level-logging) - 4. [Install the GnuTLS or OpenSSL libraries](#install-the-gnutls-or-openssl-libraries) - 5. [Install Matio, MATLAB MAT file I/O library](#install-matio-matlab-mat-file-io-library) - 6. [Install Protocol Buffers, a portable mechanism for serialization of structured data](#install-protocol-buffers-a-portable-mechanism-for-serialization-of-structured-data) - 7. [Install Pugixml, a light-weight C++ XML processing library](#install-pugixml-a-light-weight-c-xml-processing-library) - 8. [Download GoogleTest](#download-googletest) - 4. [Clone GNSS-SDR's Git repository](#clone-gnss-sdrs-git-repository) - 5. [Build and install GNSS-SDR](#build-and-install-gnss-sdr) - 1. [Build OSMOSDR support (OPTIONAL)](#build-osmosdr-support-optional) - 2. [Build FMCOMMS2 based SDR Hardware support (OPTIONAL)](#build-fmcomms2-based-sdr-hardware-support-optional) - 3. [Build OpenCL support (OPTIONAL)](#build-opencl-support-optional) - 4. [Build CUDA support (OPTIONAL)](#build-cuda-support-optional) - 2. [macOS](#macos) - 1. [Macports](#macports) - 2. [Homebrew](#homebrew) - 3. [Other package managers](#other-package-managers) - 4. [Build GNSS-SDR](#build-gnss-sdr) - 3. [Other builds](#other-builds) -3. [Updating GNSS-SDR](#updating-gnss-sdr) -4. [Getting started](#getting-started) -5. [Using GNSS-SDR](#using-gnss-sdr) - 1. [Control plane](#control-plane) - 1. [Configuration](#configuration) - 2. [GNSS block factory](#gnss-block-factory) - 2. [Signal Processing plane](#signal-processing-plane) - 1. [Signal Source](#signal-source) - 2. [Signal Conditioner](#signal-conditioner) - 1. [Data type adapter](#data-type-adapter) - 2. [Input filter](#input-filter) - 3. [Resampler](#resampler) - 3. [Channel](#channel) - 1. [Acquisition](#acquisition) - 2. [Tracking](#tracking) - 3. [Decoding of the navigation message](#decoding-of-the-navigation-message) - 4. [Observables](#observables) - 5. [Computation of Position, Velocity, and Time](#computation-of-position-velocity-and-time) -6. [About the software license](#about-the-software-license) -7. [Publications and Credits](#publications-and-credits) -8. [Ok, now what?](#ok-now-what) +- [Table of Contents](#table-of-contents) +- [How to build GNSS-SDR](#how-to-build-gnss-sdr) + - [GNU/Linux](#gnulinux) + - [Alternative 1: Install dependencies using software packages](#alternative-1-install-dependencies-using-software-packages) + - [Debian / Ubuntu](#debian--ubuntu) + - [AlmaLinux](#almalinux) + - [Arch Linux](#arch-linux) + - [Fedora](#fedora) + - [openSUSE](#opensuse) + - [Rocky Linux](#rocky-linux) + - [Alternative 2: Install dependencies using PyBOMBS](#alternative-2-install-dependencies-using-pybombs) + - [Manual installation of other required dependencies](#manual-installation-of-other-required-dependencies) + - [Install Armadillo, a C++ linear algebra library](#install-armadillo-a-c-linear-algebra-library) + - [Install Gflags, a commandline flags processing module for C++](#install-gflags-a-commandline-flags-processing-module-for-c) + - [Install Glog, a library that implements application-level logging](#install-glog-a-library-that-implements-application-level-logging) + - [Install the GnuTLS or OpenSSL libraries](#install-the-gnutls-or-openssl-libraries) + - [Install Matio, MATLAB MAT file I/O library](#install-matio-matlab-mat-file-io-library) + - [Install Protocol Buffers, a portable mechanism for serialization of structured data](#install-protocol-buffers-a-portable-mechanism-for-serialization-of-structured-data) + - [Install Pugixml, a light-weight C++ XML processing library](#install-pugixml-a-light-weight-c-xml-processing-library) + - [Download GoogleTest](#download-googletest) + - [Clone GNSS-SDR's Git repository](#clone-gnss-sdrs-git-repository) + - [Build and install GNSS-SDR](#build-and-install-gnss-sdr) + - [Build OSMOSDR support (OPTIONAL)](#build-osmosdr-support-optional) + - [Build FMCOMMS2 based SDR Hardware support (OPTIONAL)](#build-fmcomms2-based-sdr-hardware-support-optional) + - [Build OpenCL support (OPTIONAL)](#build-opencl-support-optional) + - [Build CUDA support (OPTIONAL)](#build-cuda-support-optional) + - [macOS](#macos) + - [Macports](#macports) + - [Homebrew](#homebrew) + - [Other package managers](#other-package-managers) + - [Build GNSS-SDR](#build-gnss-sdr) + - [Other builds](#other-builds) +- [Updating GNSS-SDR](#updating-gnss-sdr) +- [Getting started](#getting-started) +- [Using GNSS-SDR](#using-gnss-sdr) + - [Control plane](#control-plane) + - [Configuration](#configuration) + - [GNSS block factory](#gnss-block-factory) + - [Signal Processing plane](#signal-processing-plane) + - [Signal Source](#signal-source) + - [Signal Conditioner](#signal-conditioner) + - [Data type adapter](#data-type-adapter) + - [Input filter](#input-filter) + - [Resampler](#resampler) + - [Channel](#channel) + - [Acquisition](#acquisition) + - [Tracking](#tracking) + - [Decoding of the navigation message](#decoding-of-the-navigation-message) + - [Observables](#observables) + - [Computation of Position, Velocity, and Time](#computation-of-position-velocity-and-time) +- [About the software license](#about-the-software-license) +- [Publications and Credits](#publications-and-credits) +- [Ok, now what?](#ok-now-what) @@ -126,7 +125,7 @@ This section describes how to set up the compilation environment in GNU/Linux or ## GNU/Linux - Tested distributions: Ubuntu 14.04 LTS and above; Debian 9.0 "stretch" and - above; Arch Linux; CentOS 7; Fedora 26 and above; OpenSUSE 42.3 and above. + above; Arch Linux; Fedora 26 and above; OpenSUSE 42.3 and above. - Supported microprocessor architectures: - i386: Intel x86 instruction set (32-bit microprocessors). - amd64: also known as x86-64, the 64-bit version of the x86 instruction set, @@ -222,28 +221,9 @@ Once you have installed these packages, you can jump directly to If you are using Arch Linux: ``` -$ pacman -S gcc make cmake pkgconf git boost boost-libs log4cpp libvolk gnuradio \ - blas lapack gflags google-glog openssl pugixml libmatio protobuf \ - python-mako libpcap gtest -``` - -Once you have installed these packages, you can jump directly to -[download the source code and build GNSS-SDR](#clone-gnss-sdrs-git-repository). - -#### CentOS - -If you are using CentOS 7, you can install the dependencies via Extra Packages -for Enterprise Linux ([EPEL](https://fedoraproject.org/wiki/EPEL)): - -``` -$ sudo yum install wget -$ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -$ sudo rpm -Uvh epel-release-latest-7.noarch.rpm -$ sudo yum install make automake gcc gcc-c++ kernel-devel libtool \ - hdf5-devel cmake git boost-devel boost-date-time boost-system \ - boost-filesystem boost-thread boost-chrono boost-serialization \ - log4cpp-devel gnuradio-devel gr-osmosdr-devel blas-devel lapack-devel \ - armadillo-devel openssl-devel libpcap-devel python-mako python-six pugixml-devel +$ pacman -S gcc make cmake pkgconf git boost boost-libs libvolk gnuradio \ + blas lapack hdf5 openssl pugixml libmatio protobuf libpcap gtest \ + python-mako ``` Once you have installed these packages, you can jump directly to @@ -278,7 +258,7 @@ $ zypper install cmake git gcc-c++ boost-devel libboost_atomic-devel \ libboost_system-devel libboost_filesystem-devel libboost_chrono-devel \ libboost_thread-devel libboost_serialization-devel log4cpp-devel \ gnuradio-devel pugixml-devel libpcap-devel armadillo-devel libtool \ - automake hdf5-devel openssl-devel python3-Mako protobuf-devel + automake hdf5-devel openssl-devel python3-Mako libmatio-devel ``` If you are using openSUSE Tumbleweed: @@ -396,16 +376,16 @@ or manually as explained below, and then please follow instructions on how to ### Manual installation of other required dependencies -#### Install [Armadillo](http://arma.sourceforge.net/ "Armadillo's Homepage"), a C++ linear algebra library +#### Install [Armadillo](https://arma.sourceforge.net/ "Armadillo's Homepage"), a C++ linear algebra library ``` $ sudo apt-get install libblas-dev liblapack-dev # For Debian/Ubuntu/LinuxMint -$ sudo yum install lapack-devel blas-devel # For Fedora/CentOS/RHEL +$ sudo yum install lapack-devel blas-devel # For Fedora/RHEL $ sudo zypper install lapack-devel blas-devel # For OpenSUSE $ sudo pacman -S blas lapack # For Arch Linux -$ wget https://sourceforge.net/projects/arma/files/armadillo-12.0.1.tar.xz -$ tar xvfz armadillo-12.0.1.tar.xz -$ cd armadillo-12.0.1 +$ wget https://sourceforge.net/projects/arma/files/armadillo-14.0.0.tar.xz +$ tar xvfz armadillo-14.0.0.tar.xz +$ cd armadillo-14.0.0 $ cmake . $ make $ sudo make install @@ -430,12 +410,16 @@ $ sudo make install $ sudo ldconfig ``` +Please note that GFlags is replaced by the +[Abseil Flags Library](https://abseil.io/docs/cpp/guides/flags) if Abseil >= +v20240116 is available in your system. + #### Install [Glog](https://github.com/google/glog "Glog's Homepage"), a library that implements application-level logging ``` -$ wget https://github.com/google/glog/archive/v0.6.0.tar.gz -$ tar xvfz v0.6.0.tar.gz -$ cd glog-0.6.0 +$ wget https://github.com/google/glog/archive/v0.7.1.tar.gz +$ tar xvfz v0.7.1.tar.gz +$ cd glog-0.7.1 $ mkdir build && cd build $ cmake .. $ make @@ -443,11 +427,15 @@ $ sudo make install $ sudo ldconfig ``` +Please note that Glog is replaced by the +[Abseil Logging Library](https://abseil.io/docs/cpp/guides/logging) if Abseil >= +v20240116 is available in your system. + #### Install the GnuTLS or OpenSSL libraries ``` $ sudo apt-get install libgnutls-openssl-dev # For Debian/Ubuntu/LinuxMint -$ sudo yum install openssl-devel # For Fedora/CentOS/RHEL +$ sudo yum install openssl-devel # For Fedora/RHEL $ sudo zypper install openssl-devel # For OpenSUSE $ sudo pacman -S openssl # For Arch Linux ``` @@ -460,16 +448,16 @@ GNSS-SDR can also work well with #### Install [Matio](https://github.com/tbeu/matio "Matio's Homepage"), MATLAB MAT file I/O library ``` -$ wget https://github.com/tbeu/matio/releases/download/v1.5.23/matio-1.5.23.tar.gz -$ tar xvfz matio-1.5.23.tar.gz -$ cd matio-1.5.23 +$ wget https://github.com/tbeu/matio/releases/download/v1.5.26/matio-1.5.27.tar.gz +$ tar xvfz matio-1.5.27.tar.gz +$ cd matio-1.5.27 $ ./configure $ make $ sudo make install $ sudo ldconfig ``` -#### Install [Protocol Buffers](https://developers.google.com/protocol-buffers/ "Protocol Buffers' Homepage"), a portable mechanism for serialization of structured data +#### Install [Protocol Buffers](https://protobuf.dev/ "Protocol Buffers' Homepage"), a portable mechanism for serialization of structured data GNSS-SDR requires Protocol Buffers v3.0.0 or later. If the packages that come with your distribution are older than that (_e.g._, Ubuntu 16.04 Xenial came @@ -489,9 +477,9 @@ For more options, please check the #### Install [Pugixml](https://pugixml.org/ "Pugixml's Homepage"), a light-weight C++ XML processing library ``` -$ wget https://github.com/zeux/pugixml/releases/download/v1.13/pugixml-1.13.tar.gz -$ tar xvfz pugixml-1.13.tar.gz -$ cd pugixml-1.13 +$ wget https://github.com/zeux/pugixml/releases/download/v1.14/pugixml-1.14.tar.gz +$ tar xvfz pugixml-1.14.tar.gz +$ cd pugixml-1.14 $ mkdir build && cd build $ cmake .. $ make @@ -502,8 +490,8 @@ $ sudo ldconfig #### Download [GoogleTest](https://github.com/google/googletest "Googletest Homepage") ``` -$ wget https://github.com/google/googletest/archive/refs/tags/v1.13.0.zip -$ unzip v1.13.0.zip +$ wget https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip +$ unzip v1.14.0.zip ``` Please **DO NOT build or install** Google Test. Every user needs to compile @@ -527,10 +515,10 @@ downloaded resides. Just type in your terminal (or add it to your `$HOME/.bashrc` file for a permanent solution) the following line: ``` -export GTEST_DIR=/home/username/googletest-1.13.0 +export GTEST_DIR=/home/username/googletest-1.14.0 ``` -changing `/home/username/googletest-1.13.0` by the actual path where you +changing `/home/username/googletest-1.14.0` by the actual path where you unpacked Google Test. If the CMake script does not find that folder, or the environment variable is not defined, or the source code is not installed by a package, then it will download a fresh copy of the Google Test source code and @@ -832,7 +820,7 @@ $ sudo port selfupdate $ sudo port upgrade outdated $ sudo port install armadillo cmake pkgconfig protobuf3-cpp pugixml gnutls $ sudo port install gnuradio +uhd +grc +zeromq -$ sudo port install boost matio libad9361-iio libiio google-glog +gflags +$ sudo port install boost matio libad9361-iio libiio $ sudo port install py311-mako $ sudo port install doxygen +docs ``` @@ -867,22 +855,14 @@ $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/inst The script explains what it will do, and then it pauses before doing it. There are more installation options [here](https://docs.brew.sh/Installation.html). -Install pip3: - -``` -$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py -$ sudo python3 get-pip.py -``` - Install the required dependencies: ``` $ brew update && brew upgrade -$ brew install armadillo cmake hdf5 gflags glog gnuradio libmatio log4cpp \ - openssl pkg-config protobuf pugixml -$ pip3 install mako +$ brew install armadillo cmake hdf5 gnuradio libmatio openssl pkg-config protobuf pugixml $ brew install --cask mactex # when completed, restart Terminal $ brew install graphviz doxygen +¢ pip3 install mako ``` For macOS versions older than Sonoma, you will also need LAPACK: @@ -894,7 +874,7 @@ $ brew install lapack ### Other package managers GNU Radio and other dependencies can also be installed using other package -managers than Macports, such as [Fink](http://www.finkproject.org/ "Fink"). +managers than Macports, such as [Fink](https://www.finkproject.org/ "Fink"). Since the version of Python that ships with OS X is great for learning but it is not good for development, you could have another Python executable in a non-standard location. If that is the case, you need to inform GNSS-SDR's @@ -984,7 +964,7 @@ do so.

- **GNSS-SDR in embedded platforms**: we provide a Software Development Kit - (SDK) based on [OpenEmbedded](http://www.openembedded.org/wiki/Main_Page) for + (SDK) based on [OpenEmbedded](https://www.openembedded.org/wiki/Main_Page) for cross-compiling GNSS-SDR in your desktop computer and for producing executables that can run in embedded platforms, such as Xilinx's Zynq and ZynqMP architectures, Raspberry Pi, and many others. Please check @@ -1999,11 +1979,11 @@ PVT.rtcm_MT1077_rate_ms=1000 Notation (JSON) supported by numerous mapping and GIS software packages, including [OpenLayers](https://openlayers.org), [Leaflet](https://leafletjs.com), [MapServer](https://mapserver.org/), - [GeoServer](http://geoserver.org), [GeoDjango](https://www.djangoproject.com), - [GDAL](https://gdal.org/), and [CartoDB](https://cartodb.com). It is also - possible to use GeoJSON with [PostGIS](https://postgis.net/) and - [Mapnik](https://mapnik.org/), both of which handle the format via the GDAL - OGR conversion library. The + [GeoServer](https://geoserver.org/), + [GeoDjango](https://www.djangoproject.com), [GDAL](https://gdal.org/), and + [CartoDB](https://cartodb.com). It is also possible to use GeoJSON with + [PostGIS](https://postgis.net/) and [Mapnik](https://mapnik.org/), both of + which handle the format via the GDAL OGR conversion library. The [Google Maps Javascript API](https://developers.google.com/maps/documentation/javascript/) v3 directly supports the [integration of GeoJSON data layers](https://developers.google.com/maps/documentation/javascript/examples/layer-data-simple), @@ -2016,8 +1996,9 @@ PVT.rtcm_MT1077_rate_ms=1000 (OGC KML), and it is maintained by the Open Geospatial Consortium, Inc. (OGC). KML files can be displayed in geobrowsers such as [Google Earth](https://www.google.com/earth/), - [Marble](https://marble.kde.org), [osgEarth](http://osgearth.org), or used - with the [NASA World Wind SDK for Java](https://worldwind.arc.nasa.gov/java/). + [Marble](https://marble.kde.org), + [osgEarth](https://github.com/gwaldron/osgearth), or used with the + [NASA World Wind SDK for Java](https://worldwind.arc.nasa.gov/java/). - **GPX** (the GPS Exchange Format) is a lightweight XML data format for the interchange of GPS data (waypoints, routes, and tracks) between applications @@ -2052,9 +2033,11 @@ PVT.rtcm_MT1077_rate_ms=1000 (usually with other data unknown to the original receiver, such as better models of the atmospheric conditions at time of measurement). RINEX files can be used by software packages such as - [GNSSTK](https://github.com/SGL-UT/gnsstk), [RTKLIB](http://www.rtklib.com/), - and [gLAB](https://gage.upc.edu/gLAB/). GNSS-SDR by default generates RINEX - version [3.02](ftp://igs.org/pub/data/format/rinex302.pdf). If + [GNSSTK](https://github.com/SGL-UT/gnsstk), [RTKLIB](https://www.rtklib.com/), + and + [gLAB](https://gage.upc.edu/en/learning-materials/software-tools/glab-tool-suite). + GNSS-SDR by default generates RINEX version + [3.02](ftp://igs.org/pub/data/format/rinex302.pdf). If [2.11](ftp://igs.org/pub/data/format/rinex211.txt) is needed, it can be requested through the `rinex_version` parameter in the configuration file: diff --git a/cmake/Modules/DetectLinuxDistro.cmake b/cmake/Modules/DetectLinuxDistro.cmake index 3fa556ba43..014b2a8d33 100644 --- a/cmake/Modules/DetectLinuxDistro.cmake +++ b/cmake/Modules/DetectLinuxDistro.cmake @@ -4,10 +4,14 @@ # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(ARCHITECTURE_STRING "(64 bits)") +if(CMAKE_VERSION VERSION_LESS 3.19) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCHITECTURE_STRING "(64 bits)") + else() + set(ARCHITECTURE_STRING "(32 bits)") + endif() else() - set(ARCHITECTURE_STRING "(32 bits)") + set(ARCHITECTURE_STRING "(${CMAKE_HOST_SYSTEM_PROCESSOR})") endif() if(EXISTS "/etc/lsb-release") diff --git a/cmake/Modules/FindCPUFEATURES.cmake b/cmake/Modules/FindCPUFEATURES.cmake index 6f25e91d23..7c25e69c27 100644 --- a/cmake/Modules/FindCPUFEATURES.cmake +++ b/cmake/Modules/FindCPUFEATURES.cmake @@ -34,6 +34,7 @@ find_library(CPUFEATURES_LIBRARIES /usr/lib/x86_64-linux-gnux32 /usr/lib/alpha-linux-gnu /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/cmake/Modules/FindGFLAGS.cmake b/cmake/Modules/FindGFLAGS.cmake index 2649380c99..08a5056b8f 100644 --- a/cmake/Modules/FindGFLAGS.cmake +++ b/cmake/Modules/FindGFLAGS.cmake @@ -78,6 +78,7 @@ else() /usr/lib/x86_64-linux-gnux32 /usr/lib/alpha-linux-gnu /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/cmake/Modules/FindGFORTRAN.cmake b/cmake/Modules/FindGFORTRAN.cmake index a6eb38a536..5a698ce899 100644 --- a/cmake/Modules/FindGFORTRAN.cmake +++ b/cmake/Modules/FindGFORTRAN.cmake @@ -55,6 +55,7 @@ find_library(GFORTRAN NAMES gfortran /usr/lib/gcc/sh4-linux-gnu /usr/lib/gcc/i686-redhat-linux # Fedora /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 @@ -89,6 +90,7 @@ find_library(GFORTRAN NAMES gfortran /usr/lib/x86_64-linux-gnux32 /usr/lib/alpha-linux-gnu /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /usr/local/lib/i386 diff --git a/cmake/Modules/FindGLOG.cmake b/cmake/Modules/FindGLOG.cmake index e483dfbe9e..6c506643e0 100644 --- a/cmake/Modules/FindGLOG.cmake +++ b/cmake/Modules/FindGLOG.cmake @@ -71,6 +71,7 @@ macro(_FIND_GLOG_LIBRARIES _var) /usr/lib/x86_64-linux-gnux32 /usr/lib/alpha-linux-gnu /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib @@ -178,3 +179,8 @@ if(GLOG_FOUND AND NOT TARGET Glog::glog) INTERFACE_LINK_LIBRARIES "${GLOG_LIBRARIES}" ) endif() + +# Fix for glog 0.7.0 +if(EXISTS ${GLOG_INCLUDE_DIRS}/export.h) + set_target_properties(Glog::glog PROPERTIES INTERFACE_COMPILE_DEFINITIONS "GLOG_USE_GLOG_EXPORT") +endif() \ No newline at end of file diff --git a/cmake/Modules/FindGNURADIO.cmake b/cmake/Modules/FindGNURADIO.cmake index 5ce37cba69..9855ddc296 100644 --- a/cmake/Modules/FindGNURADIO.cmake +++ b/cmake/Modules/FindGNURADIO.cmake @@ -131,6 +131,7 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE) /usr/lib/x86_64-linux-gnux32 /usr/lib/alpha-linux-gnu /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/cmake/Modules/FindGRIIO.cmake b/cmake/Modules/FindGRIIO.cmake index e08290252f..1abd5caf42 100644 --- a/cmake/Modules/FindGRIIO.cmake +++ b/cmake/Modules/FindGRIIO.cmake @@ -96,6 +96,7 @@ find_library(IIO_LIBRARIES /usr/lib/sparc64-linux-gnu /usr/lib/x86_64-linux-gnux32 /usr/lib/sh4-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/cmake/Modules/FindGRLIMESDR.cmake b/cmake/Modules/FindGRLIMESDR.cmake index cfd546feb8..2fb60cb3fb 100644 --- a/cmake/Modules/FindGRLIMESDR.cmake +++ b/cmake/Modules/FindGRLIMESDR.cmake @@ -96,6 +96,7 @@ find_library(GRLIMESDR_LIBRARIES /usr/lib/x86_64-linux-gnux32 /usr/lib/riscv64-linux-gnu /usr/lib/alpha-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/cmake/Modules/FindGROSMOSDR.cmake b/cmake/Modules/FindGROSMOSDR.cmake index cfaef14947..22ee7d51e8 100644 --- a/cmake/Modules/FindGROSMOSDR.cmake +++ b/cmake/Modules/FindGROSMOSDR.cmake @@ -96,6 +96,7 @@ find_library(GROSMOSDR_LIBRARIES /usr/lib/x86_64-linux-gnux32 /usr/lib/riscv64-linux-gnu /usr/lib/alpha-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/cmake/Modules/FindLIBAD9361.cmake b/cmake/Modules/FindLIBAD9361.cmake index 80df49673c..e1ff8e4a3b 100644 --- a/cmake/Modules/FindLIBAD9361.cmake +++ b/cmake/Modules/FindLIBAD9361.cmake @@ -75,6 +75,7 @@ find_library(LIBAD9361_LIBRARIES /usr/lib/x86_64-linux-gnux32 /usr/lib/sh4-linux-gnu /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/cmake/Modules/FindLIBIIO.cmake b/cmake/Modules/FindLIBIIO.cmake index 31f152b6f3..44f4d367eb 100644 --- a/cmake/Modules/FindLIBIIO.cmake +++ b/cmake/Modules/FindLIBIIO.cmake @@ -77,6 +77,7 @@ find_library( /usr/lib/x86_64-linux-gnux32 /usr/lib/sh4-linux-gnu /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/cmake/Modules/FindLOG4CPP.cmake b/cmake/Modules/FindLOG4CPP.cmake index 73876d1dad..95a14cf621 100644 --- a/cmake/Modules/FindLOG4CPP.cmake +++ b/cmake/Modules/FindLOG4CPP.cmake @@ -121,7 +121,7 @@ include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LOG4CPP DEFAULT_MSG LOG4CPP_INCLUDE_DIRS LOG4CPP_LIBRARIES) set_package_properties(LOG4CPP PROPERTIES - URL "http://log4cpp.sourceforge.net/" + URL "https://log4cpp.sourceforge.net/" ) if(LOG4CPP_FOUND AND PC_LOG4CPP_VERSION) diff --git a/cmake/Modules/FindMATIO.cmake b/cmake/Modules/FindMATIO.cmake index 49e0bf8cd1..d9a6cebd29 100644 --- a/cmake/Modules/FindMATIO.cmake +++ b/cmake/Modules/FindMATIO.cmake @@ -108,6 +108,7 @@ find_library(MATIO_LIBRARY /usr/lib/x86_64-linux-gnux32 /usr/lib/x86_64-kfreebsd-gnu /usr/lib/i386-kfreebsd-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/cmake/Modules/FindORC.cmake b/cmake/Modules/FindORC.cmake index 97cd0e4a80..b6a4ba3644 100644 --- a/cmake/Modules/FindORC.cmake +++ b/cmake/Modules/FindORC.cmake @@ -80,6 +80,8 @@ find_path(ORC_LIBRARY_DIR /usr/lib/powerpc64le-linux-gnu /usr/lib/hppa-linux-gnu /usr/lib/s390x-linux-gnu + /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib @@ -106,6 +108,8 @@ find_library(ORC_LIB orc-0.4 /usr/lib/powerpc64le-linux-gnu /usr/lib/hppa-linux-gnu /usr/lib/s390x-linux-gnu + /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib @@ -134,6 +138,8 @@ find_library(ORC_LIBRARY_STATIC ${CMAKE_STATIC_LIBRARY_PREFIX}orc-0.4${CMAKE_STA /usr/lib/powerpc64le-linux-gnu /usr/lib/hppa-linux-gnu /usr/lib/s390x-linux-gnu + /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/cmake/Modules/FindPCAP.cmake b/cmake/Modules/FindPCAP.cmake index b72b5f5d14..39a7aff150 100644 --- a/cmake/Modules/FindPCAP.cmake +++ b/cmake/Modules/FindPCAP.cmake @@ -6,7 +6,7 @@ # - Find pcap # Find the PCAP includes and library -# http://www.tcpdump.org/ +# https://www.tcpdump.org/ # # The environment variable PCAPDIR allows to specify where to find # libpcap in non standard location. @@ -105,6 +105,7 @@ else() /usr/lib/powerpc64-linux-gnu /usr/lib/powerpc64le-linux-gnu /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/lib/s390x-linux-gnu /usr/lib/sh4-linux-gnu /usr/lib/sparc64-linux-gnu diff --git a/cmake/Modules/FindPUGIXML.cmake b/cmake/Modules/FindPUGIXML.cmake index c5c1ea637d..5f7f5dcb27 100644 --- a/cmake/Modules/FindPUGIXML.cmake +++ b/cmake/Modules/FindPUGIXML.cmake @@ -88,6 +88,7 @@ find_library(PUGIXML_LIBRARY /usr/lib/sparc64-linux-gnu /usr/lib/x86_64-linux-gnux32 /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/lib/x86_64-kfreebsd-gnu /usr/lib/i386-kfreebsd-gnu /usr/local/lib diff --git a/cmake/Modules/FindTELEORBIT.cmake b/cmake/Modules/FindTELEORBIT.cmake index b0d5e6c208..db888984ae 100644 --- a/cmake/Modules/FindTELEORBIT.cmake +++ b/cmake/Modules/FindTELEORBIT.cmake @@ -38,6 +38,7 @@ set(TELEORBIT_ROOT_USER_DEFINED find_path(TELEORBIT_INCLUDE_DIRS NAMES teleorbit/api.h HINTS ${PC_TELEORBIT_INCLUDEDIR} + PATH_SUFFIXES gnuradio PATHS ${TELEORBIT_ROOT_USER_DEFINED}/include /usr/include /usr/local/include diff --git a/cmake/Modules/FindUHD.cmake b/cmake/Modules/FindUHD.cmake index 772cf436a7..a6ed654a31 100644 --- a/cmake/Modules/FindUHD.cmake +++ b/cmake/Modules/FindUHD.cmake @@ -86,6 +86,7 @@ find_library(UHD_LIBRARIES /usr/lib/x86_64-linux-gnux32 /usr/lib/alpha-linux-gnu /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/cmake/Modules/FindVOLK.cmake b/cmake/Modules/FindVOLK.cmake index f67efdfbbf..bda6621865 100644 --- a/cmake/Modules/FindVOLK.cmake +++ b/cmake/Modules/FindVOLK.cmake @@ -83,6 +83,7 @@ find_library(VOLK_LIBRARIES /usr/lib/x86_64-linux-gnux32 /usr/lib/alpha-linux-gnu /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/cmake/Modules/FindZEROMQ.cmake b/cmake/Modules/FindZEROMQ.cmake index 0ef9371393..6579d9ed70 100644 --- a/cmake/Modules/FindZEROMQ.cmake +++ b/cmake/Modules/FindZEROMQ.cmake @@ -46,6 +46,7 @@ find_library(ZEROMQ_LIBRARIES /usr/lib/powerpc64-linux-gnu /usr/lib/powerpc64le-linux-gnu /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/lib/s390x-linux-gnu /usr/lib/sh4-linux-gnu /usr/lib/sparc64-linux-gnu diff --git a/cmake/Modules/XcodeRemoveWarningDuplicates.cmake b/cmake/Modules/XcodeRemoveWarningDuplicates.cmake new file mode 100644 index 0000000000..f4e150fcc9 --- /dev/null +++ b/cmake/Modules/XcodeRemoveWarningDuplicates.cmake @@ -0,0 +1,23 @@ +# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. +# This file is part of GNSS-SDR. +# +# SPDX-FileCopyrightText: 2011-2024 C. Fernandez-Prades cfernandez(at)cttc.es +# SPDX-License-Identifier: BSD-3-Clause + +if(DEFINED __INCLUDED_XCODE_REMOVE_WARNING_DUPLICATES_CMAKE) + return() +endif() +set(__INCLUDED_XCODE_REMOVE_WARNING_DUPLICATES_CMAKE TRUE) + +function(xcode_remove_warning_duplicates target) + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") + if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "15.0.0") + # A bug in Xcode 15 adds duplicate flags to the linker. In addition, the + # `-warn_duplicate_libraries` is now enabled by default which may result + # in several 'duplicate libraries warning'. + # - https://gitlab.kitware.com/cmake/cmake/-/issues/25297 and + # - https://indiestack.com/2023/10/xcode-15-duplicate-library-linker-warnings/ + target_link_options(${target} PUBLIC "LINKER:-no_warn_duplicate_libraries") + endif() + endif() +endfunction() \ No newline at end of file diff --git a/conf/RealTime_input/gnss-sdr_multichannel_GPS_Galileo_Beidou_Glonass_L1_USRP_realtime.conf b/conf/RealTime_input/gnss-sdr_multichannel_GPS_Galileo_Beidou_Glonass_L1_USRP_realtime.conf new file mode 100644 index 0000000000..0c53dedb1a --- /dev/null +++ b/conf/RealTime_input/gnss-sdr_multichannel_GPS_Galileo_Beidou_Glonass_L1_USRP_realtime.conf @@ -0,0 +1,281 @@ +; This is a GNSS-SDR configuration file +; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ +; SPDX-License-Identifier: GPL-3.0-or-later +; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) + +; You can define your own receiver and invoke it by doing +; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf +; + +[GNSS-SDR] + +;######### GLOBAL OPTIONS ################## +GNSS-SDR.internal_fs_sps=8000000 +GNSS-SDR.Beidou_banned_prns=56,57,58 + + +;######### SIGNAL_SOURCE CONFIG ############ +SignalSource.implementation=Osmosdr_Signal_Source +SignalSource.item_type=gr_complex +SignalSource.sampling_frequency=56000000 +SignalSource.freq=1584000000 +SignalSource.osmosdr_args=uhd,type=b200,num_recv_frames=256 +SignalSource.gain=50 +SignalSource.antenna=TX/RX +SignalSource.if_bw=56000000 +SignalSource.AGC_enabled=false +SignalSource.samples=0 +SignalSource.repeat=false +SignalSource.RF_channels=3 +SignalSource.enable_throttle_control=false +SignalSource.dump=false + + + +;######### SIGNAL_CONDITIONER CONFIG ############ +SignalConditioner0.implementation=Signal_Conditioner +SignalConditioner1.implementation=Signal_Conditioner +SignalConditioner2.implementation=Signal_Conditioner + +;######### DATA_TYPE_ADAPTER CONFIG ############ +DataTypeAdapter0.implementation=Pass_Through +DataTypeAdapter1.implementation=Pass_Through +DataTypeAdapter2.implementation=Pass_Through + +;######### INPUT_FILTER CONFIG ############ +InputFilter0.implementation=Freq_Xlating_Fir_Filter +InputFilter0.decimation_factor=7 +InputFilter0.input_item_type=gr_complex +InputFilter0.output_item_type=gr_complex +InputFilter0.taps_item_type=float +InputFilter0.filter_type=lowpass +InputFilter0.bw=7000000 +InputFilter0.tw=500000 +InputFilter0.IF=-22902000 +InputFilter0.sampling_frequency=56000000 +InputFilter0.dump=false +InputFilter0.dump_filename=../data/input_filter.dat + +;######### INPUT_FILTER CONFIG ############ +InputFilter1.implementation=Freq_Xlating_Fir_Filter +InputFilter1.decimation_factor=7 +InputFilter1.input_item_type=gr_complex +InputFilter1.output_item_type=gr_complex +InputFilter1.taps_item_type=float +InputFilter1.filter_type=lowpass +InputFilter1.bw=7000000 +InputFilter1.tw=500000 +InputFilter1.IF=-8580000 +InputFilter1.sampling_frequency=56000000 +InputFilter1.dump=false +InputFilter1.dump_filename=../data/input_filter.dat + +;######### INPUT_FILTER CONFIG ############ +InputFilter2.implementation=Freq_Xlating_Fir_Filter +InputFilter2.decimation_factor=7 +InputFilter2.input_item_type=gr_complex +InputFilter2.output_item_type=gr_complex +InputFilter2.taps_item_type=float +InputFilter2.filter_type=lowpass +InputFilter2.bw=7000000 +InputFilter2.tw=500000 +InputFilter2.IF=18000000 +InputFilter2.sampling_frequency=56000000 +InputFilter2.dump=false +InputFilter2.dump_filename=../data/input_filter.dat + +;######### RESAMPLER CONFIG ############ +Resampler0.implementation=Pass_Through +Resampler1.implementation=Pass_Through +Resampler2.implementation=Pass_Through + +;######### CHANNELS GLOBAL CONFIG ############ +Channels_1B.count=10 +Channels_1C.count=10 +Channels_B1.count=14 +Channels_1G.count=8 + +Channels_1B.RF_channel_ID=1 +Channels_1C.RF_channel_ID=1 +Channels_B1.RF_channel_ID=0 +Channels_1G.RF_channel_ID=2 + + +Channels.in_acquisition=2 + +;######### ACQUISITION BEIDOU CONFIG ############ +Acquisition_B1.implementation=BEIDOU_B1I_PCPS_Acquisition +Acquisition_B1.item_type=gr_complex +Acquisition_B1.coherent_integration_time_ms=2 +;Acquisition_B1.max_dwells=2 +;Acquisition_B1.pfa=0.02 +Acquisition_B1.pfa=0.000002 +Acquisition_B1.doppler_max=6000 +Acquisition_B1.doppler_step=100 +Acquisition_B1.dump=false +Acquisition_B1.dump_filename=./bds_acq +;Acquisition_B1.blocking=true +Acquisition_B1.bit_transition_flag = false; + +;######### ACQUISITION GPS CONFIG ############ +Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition +Acquisition_1C.item_type=gr_complex +Acquisition_1C.coherent_integration_time_ms=1 +Acquisition_1C.pfa=0.015 +Acquisition_1C.doppler_max=6000 +Acquisition_1C.doppler_step=200 +Acquisition_1C.max_dwells=4 +;Acquisition_1C.blocking=true +Acquisition_1C.dump=false +Acquisition_1C.dump_filename=./acq_dump.dat + +;######### ACQUISITION GALILEO CONFIG ############ +Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition +Acquisition_1B.coherent_integration_time_ms=2 +;Acquisition_1B.pfa=0.000008 +Acquisition_1B.pfa=0.025 +Acquisition_1B.doppler_max=6000 +Acquisition_1B.doppler_step=200 +Acquisition_1B.max_dwells=4 +;Acquisition_1B.repeat_satellite=true +Acquisition_1B.cboc=true +;Acquisition_1B.blocking=true +Acquisition_1B.dump=false +Acquisition_1B.dump_filename=./acq_dump.dat + +;######### ACQUISITION GLONASS CONFIG ############ +Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition +Acquisition_1G.item_type=gr_complex +Acquisition_1G.coherent_integration_time_ms=1 +Acquisition_1G.max_dwells=4 +Acquisition_1G.pfa=0.02 +Acquisition_1G.doppler_max=6000 +Acquisition_1G.doppler_step=100 +Acquisition_1G.dump=false +Acquisition_1G.dump_filename=./G1_acq + + + +;######### TRACKING BEIDOU CONFIG ############ +Tracking_B1.implementation=BEIDOU_B1I_DLL_PLL_Tracking +Tracking_B1.item_type=gr_complex +Tracking_B1.extend_correlation_symbols=10 +Tracking_B1.pll_bw_hz=50.0 +Tracking_B1.dll_bw_hz=2.00 +Tracking_B1.pll_bw_narrow_hz=15.0 +Tracking_B1.dll_bw_narrow_hz=1.50 +;Tracking_B1.cn0_min=20 +;Tracking_B1.fll_bw_hz=20 +;Tracking_B1.enable_fll_pull_in=true +;Tracking_B1.enable_fll_steady_state=false +Tracking_B1.dump=false +Tracking_B1.dump_filename=./epl_tracking_ch_ + +;######### TRACKING GPS CONFIG ############ +Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking +Tracking_1C.item_type=gr_complex +Tracking_1C.extend_correlation_symbols=10 +Tracking_1C.early_late_space_chips=0.5 +Tracking_1C.early_late_space_narrow_chips=0.15 +Tracking_1C.pll_bw_hz=30.0 +Tracking_1C.dll_bw_hz=2.0 +Tracking_1C.pll_bw_narrow_hz=10.0 +Tracking_1C.dll_bw_narrow_hz=1.50 +Tracking_1C.fll_bw_hz=10 +Tracking_1C.enable_fll_pull_in=true +Tracking_1C.enable_fll_steady_state=false +Tracking_1C.dump=false +Tracking_1C.dump_filename=tracking_ch_ + +;######### TRACKING GALILEO CONFIG ############ +Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking +Tracking_1B.extend_correlation_symbols=4 +Tracking_1B.item_type=gr_complex +Tracking_1B.pll_bw_hz=30.0 +Tracking_1B.dll_bw_hz=2.0 +Tracking_1B.pll_bw_narrow_hz=20.0 +Tracking_1B.dll_bw_narrow_hz=1.50 +Tracking_1B.track_pilot=true +Tracking_1B.enable_fll_pull_in=true; +Tracking_1B.enable_fll_steady_state=false +Tracking_1B.fll_bw_hz=20 + +;######### TRACKING GLONASS CONFIG ############ +Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking +Tracking_1G.item_type=gr_complex +Tracking_1G.pll_bw_hz=40 +Tracking_1G.dll_bw_hz=2.5 +Tracking_1G.extend_correlation_ms=1 +Tracking_1G.pll_bw_narrow_hz=20 +Tracking_1G.dll_bw_narrow_hz=1.5 +Tracking_1G.dump=false +Tracking_1G.dump_filename=./epl_tracking_ch_ + + + +;######### TELEMETRY DECODER BEIDOU CONFIG ############ +TelemetryDecoder_B1.implementation=BEIDOU_B1I_Telemetry_Decoder +TelemetryDecoder_B1.dump=false + +;######### TELEMETRY DECODER GPS CONFIG ############ +TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder +TelemetryDecoder_1C.dump=false + +;######### TELEMETRY DECODER GALILEO E1B CONFIG ############ +TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder +TelemetryDecoder_1B.dump=false + +;######### TELEMETRY DECODER GLONASS CONFIG ############ +TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder +TelemetryDecoder_1G.dump=false + + +;######### OBSERVABLES CONFIG ############ +Observables.implementation=Hybrid_Observables +Observables.dump=false +Observables.dump_filename=./observables.dat + +;######### PVT CONFIG ############ +PVT.implementation=RTKLIB_PVT +PVT.threshold_reject_GDOP=100 +PVT.elevation_mask=3 +PVT.raim_fde=1 +PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic +PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX +PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad +PVT.output_rate_ms=100 +PVT.display_rate_ms=500 +PVT.enable_rx_clock_correction=true +PVT.flag_rtcm_server=true +PVT.flag_rtcm_tty_port=false +PVT.rtcm_dump_devname=/dev/pts/1 +PVT.rtcm_tcp_port=2101 +PVT.rtcm_MT1019_rate_ms=5000 +PVT.rtcm_MT1077_rate_ms=1000 +PVT.rinex_version=2 +PVT.flag_nmea_tty_port=true +PVT.nmea_dump_devname=/dev/pts/3 + +; To use gpsd with GNSS-SDR +; 1. run socat -d -d pty,raw,echo=0 pty,raw,echo=0 +; 2. Set PVT.nmea_dump_devname to first PTY from socat output +; 3. run gpsd -b -n -N /dev/pts/4 +; where /dev/pts/4 is the second PTY from socat output +; 4. run some gpsd client (xgps or other) + + + +PVT.enable_monitor=true +PVT.monitor_client_addresses=127.0.0.1 +PVT.monitor_udp_port=1111 + +Monitor.enable_monitor=true +Monitor.decimation_factor=4 +Monitor.client_addresses=127.0.0.1 +Monitor.udp_port=1112 + +;AcquisitionMonitor.enable_monitor=true +AcquisitionMonitor.client_addresses=127.0.0.1 +AcquisitionMonitor.udp_port=1112 + + diff --git a/conf/RealTime_input/gnss-sdr_multichannel_GPS_Galileo_Beidou_L1_hackrf_realtime.conf b/conf/RealTime_input/gnss-sdr_multichannel_GPS_Galileo_Beidou_L1_hackrf_realtime.conf new file mode 100644 index 0000000000..0844dd1dab --- /dev/null +++ b/conf/RealTime_input/gnss-sdr_multichannel_GPS_Galileo_Beidou_L1_hackrf_realtime.conf @@ -0,0 +1,237 @@ +; This is a GNSS-SDR configuration file +; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ +; SPDX-License-Identifier: GPL-3.0-or-later +; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) + +; You can define your own receiver and invoke it by doing +; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf +; + +[GNSS-SDR] + +;######### GLOBAL OPTIONS ################## +GNSS-SDR.internal_fs_sps=4000000 +GNSS-SDR.Beidou_banned_prns=56,57,58 + + +;######### SIGNAL_SOURCE CONFIG ############ +SignalSource.implementation=Osmosdr_Signal_Source +SignalSource.item_type=gr_complex +SignalSource.sampling_frequency=20000000 +SignalSource.freq=1567420000 +SignalSource.if_bw=18000000 +;# Next line enables the internal HackRF One bias (3.3 VDC) +SignalSource.osmosdr_args=hackrf=0,bias=1,buffers=256 +SignalSource.gain=0 +SignalSource.rf_gain=40 +SignalSource.if_gain=40 +SignalSource.AGC_enabled=false +SignalSource.samples=0 +SignalSource.repeat=false +SignalSource.RF_channels=2 +SignalSource.enable_throttle_control=false +SignalSource.dump=false + + + +;######### SIGNAL_CONDITIONER CONFIG ############ +SignalConditioner0.implementation=Signal_Conditioner +SignalConditioner1.implementation=Signal_Conditioner + +;######### DATA_TYPE_ADAPTER CONFIG ############ +DataTypeAdapter0.implementation=Pass_Through +DataTypeAdapter1.implementation=Pass_Through + +;######### INPUT_FILTER CONFIG ############ +InputFilter0.implementation=Freq_Xlating_Fir_Filter +;InputFilter0.implementation=Pass_Through +InputFilter0.decimation_factor=5 +InputFilter0.input_item_type=gr_complex +InputFilter0.output_item_type=gr_complex +InputFilter0.taps_item_type=float +InputFilter0.filter_type=lowpass +InputFilter0.bw=3000000 +InputFilter0.tw=1000000 +InputFilter0.IF=-6322000 +InputFilter0.sampling_frequency=20000000 +InputFilter0.dump=false +InputFilter0.dump_filename=../data/input_filter.dat + +;######### INPUT_FILTER CONFIG ############ +InputFilter1.implementation=Freq_Xlating_Fir_Filter +;InputFilter1.implementation=Pass_Through +InputFilter1.decimation_factor=5 +InputFilter1.input_item_type=gr_complex +InputFilter1.output_item_type=gr_complex +InputFilter1.taps_item_type=float +InputFilter1.filter_type=lowpass +InputFilter1.bw=3000000 +InputFilter1.tw=1000000 +InputFilter1.IF=8000000 +InputFilter1.sampling_frequency=20000000 +InputFilter1.dump=false +InputFilter1.dump_filename=../data/input_filter.dat + + + + + +;######### RESAMPLER CONFIG ############ +Resampler0.implementation=Pass_Through +Resampler1.implementation=Pass_Through + +;######### CHANNELS GLOBAL CONFIG ############ +Channels_1B.count=10 +Channels_1C.count=10 +Channels_B1.count=14 + +Channels_1B.RF_channel_ID=1 +Channels_1C.RF_channel_ID=1 +Channels_B1.RF_channel_ID=0 + + + +Channels.in_acquisition=10 + +;######### ACQUISITION BEIDOU CONFIG ############ +Acquisition_B1.implementation=BEIDOU_B1I_PCPS_Acquisition +Acquisition_B1.item_type=gr_complex +Acquisition_B1.coherent_integration_time_ms=2 +;Acquisition_B1.max_dwells=2 +;Acquisition_B1.pfa=0.02 +Acquisition_B1.pfa=0.000002 +Acquisition_B1.doppler_max=3800 +Acquisition_B1.doppler_step=100 +Acquisition_B1.dump=false +Acquisition_B1.dump_filename=./bds_acq +;Acquisition_B1.blocking=true +Acquisition_B1.bit_transition_flag = false; + +;######### ACQUISITION GPS CONFIG ############ +Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition +Acquisition_1C.item_type=gr_complex +Acquisition_1C.coherent_integration_time_ms=1 +Acquisition_1C.pfa=0.015 +Acquisition_1C.doppler_max=5000 +Acquisition_1C.doppler_step=200 +Acquisition_1C.max_dwells=4 +;Acquisition_1C.blocking=true +Acquisition_1C.dump=false +Acquisition_1C.dump_filename=./acq_dump.dat + +;######### ACQUISITION GALILEO CONFIG ############ +Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition +Acquisition_1B.coherent_integration_time_ms=2 +;Acquisition_1B.pfa=0.000008 +Acquisition_1B.pfa=0.025 +Acquisition_1B.doppler_max=5000 +Acquisition_1B.doppler_step=200 +Acquisition_1B.max_dwells=4 +;Acquisition_1B.repeat_satellite=true +Acquisition_1B.cboc=true +;Acquisition_1B.blocking=true +Acquisition_1B.dump=false +Acquisition_1B.dump_filename=./acq_dump.dat + + + + +;######### TRACKING BEIDOU CONFIG ############ +Tracking_B1.implementation=BEIDOU_B1I_DLL_PLL_Tracking +Tracking_B1.item_type=gr_complex +Tracking_B1.extend_correlation_symbols=10 +Tracking_B1.pll_bw_hz=30.0 +Tracking_B1.dll_bw_hz=2.00 +Tracking_B1.pll_bw_narrow_hz=15.0 +Tracking_B1.dll_bw_narrow_hz=0.50 +;Tracking_B1.cn0_min=20 +Tracking_B1.fll_bw_hz=20 +Tracking_B1.enable_fll_pull_in=true +Tracking_B1.enable_fll_steady_state=false +Tracking_B1.dump=false +Tracking_B1.dump_filename=./epl_tracking_ch_ + +;######### TRACKING GPS CONFIG ############ +Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking +Tracking_1C.item_type=gr_complex +Tracking_1C.extend_correlation_symbols=10 +Tracking_1C.early_late_space_chips=0.5 +Tracking_1C.early_late_space_narrow_chips=0.15 +Tracking_1C.pll_bw_hz=30.0 +Tracking_1C.dll_bw_hz=2.0 +Tracking_1C.pll_bw_narrow_hz=10.0 +Tracking_1C.dll_bw_narrow_hz=0.50 +Tracking_1C.fll_bw_hz=10 +Tracking_1C.enable_fll_pull_in=true +Tracking_1C.enable_fll_steady_state=false +Tracking_1C.dump=false +Tracking_1C.dump_filename=tracking_ch_ + +;######### TRACKING GALILEO CONFIG ############ +Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking +Tracking_1B.extend_correlation_symbols=4 +Tracking_1B.item_type=gr_complex +Tracking_1B.pll_bw_hz=30.0 +Tracking_1B.dll_bw_hz=2.0 +Tracking_1B.pll_bw_narrow_hz=20.0 +Tracking_1B.dll_bw_narrow_hz=0.50 +Tracking_1B.track_pilot=true +Tracking_1B.enable_fll_pull_in=true; +Tracking_1B.enable_fll_steady_state=false +Tracking_1B.fll_bw_hz=20 + + +;######### TELEMETRY DECODER BEIDOU CONFIG ############ +TelemetryDecoder_B1.implementation=BEIDOU_B1I_Telemetry_Decoder +TelemetryDecoder_B1.dump=false + +;######### TELEMETRY DECODER GPS CONFIG ############ +TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder +TelemetryDecoder_1C.dump=false + +;######### TELEMETRY DECODER GALILEO E1B CONFIG ############ +TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder +TelemetryDecoder_1B.dump=false + + + +;######### OBSERVABLES CONFIG ############ +Observables.implementation=Hybrid_Observables +Observables.dump=false +Observables.dump_filename=./observables.dat + +;######### PVT CONFIG ############ +PVT.implementation=RTKLIB_PVT +PVT.threshold_reject_GDOP=100 +PVT.elevation_mask=4 +PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic +PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX +PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad +PVT.output_rate_ms=100 +PVT.display_rate_ms=500 +PVT.enable_rx_clock_correction=true +PVT.flag_rtcm_server=true +PVT.flag_rtcm_tty_port=false +PVT.rtcm_dump_devname=/dev/pts/1 +PVT.rtcm_tcp_port=2101 +PVT.rtcm_MT1019_rate_ms=5000 +PVT.rtcm_MT1077_rate_ms=1000 +PVT.rinex_version=2 +PVT.flag_nmea_tty_port=true +PVT.nmea_dump_devname=/dev/pts/3 + + +PVT.enable_monitor=true +PVT.monitor_client_addresses=127.0.0.1 +PVT.monitor_udp_port=1111 + +Monitor.enable_monitor=true +Monitor.decimation_factor=4 +Monitor.client_addresses=127.0.0.1 +Monitor.udp_port=1112 + +AcquisitionMonitor.enable_monitor=true +AcquisitionMonitor.client_addresses=127.0.0.1 +AcquisitionMonitor.udp_port=1112 + + diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 0a1b7fee4d..e7e594fb97 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -14,10 +14,57 @@ All notable changes to GNSS-SDR will be documented in this file. ## [Unreleased](https://github.com/gnss-sdr/gnss-sdr/tree/next) -### Improvements in Usability +### Improvements in Interoperability: + +- Improved error handling in UDP connections. +- Make it possible to receive multiple constellations using a single channel + wideband device (HackRF/LimeSDR/USRP). Demonstration: + https://www.youtube.com/watch?v=ZQs2sFchJ6w + https://www.youtube.com/watch?v=HnZkKj9a-QM + +### Improvements in Portability: + +- Fix building against google-glog 0.7.x. +- Find dependencies in the loongarch64 architecture. +- Soft transition from [GFlags](https://github.com/gflags/gflags) and + [Google Logging (glog)](https://github.com/google/glog) to Abseil + [Logging](https://abseil.io/docs/cpp/guides/logging) and + [Flags](https://abseil.io/docs/cpp/guides/flags) libraries. While gflags and + glog have dutifully served GNSS-SDR for over a decade, they are now showing + signs of aging. The latest version of gflags dates back six years now, with + its last commit in the master branch occurring two years ago. Glog remains + well maintained, with its latest version v0.7.0 released in February 2024, but + with no active development of new features and stuck at C++14. Abseil, on the + other hand, represents a contemporary evolution in software development, + supports C++17 and C++20, and has absorbed the functionalities of flags and + logging from its predecessors. Furthermore, as Abseil has become a + prerequisite for the latest versions of Protocol Buffers, its eventual + inclusion in GNSS-SDR's indirect dependencies is inevitable. Leveraging Abseil + allows for eliminating the need for gflags and glog, thereby reducing the + number of mandatory dependencies for GNSS-SDR in forthcoming GNU/Linux + distributions. For seamless integration, GNSS-SDR requires a quite recent + minimum version of Abseil, v20240116. If an older version is detected, the + library will not be utilized, and GNSS-SDR will fall back to using gflags and + glog, which still can be used and are fully supported. A new CMake + configuration option `-DENABLE_GLOG_AND_GFLAGS=ON` is available to force the + usage of glog and gflags instead of Abseil, even if a valid version of that + library is present. If the Abseil version installed in your system is too old + but you still want to try it, you can also force the downloading and building + of a recent version with the new CMake configuration flag + `-DENABLE_OWN_ABSEIL=ON` (requires CMake >= 3.24, otherwise it has no effect). + This change has a downside in maintainability, since the source code becomes + plagued with preprocessor directives required to maintain compatibility both + with gflags and glog, and with Abseil. + +### Improvements in Usability: - Tidy up the `conf/` folder. +See the definitions of concepts and metrics at +https://gnss-sdr.org/design-forces/ + +  + ## [GNSS-SDR v0.0.19.1](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.19.1) - 2024-01-26 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10579595.svg)](https://doi.org/10.5281/zenodo.10579595) @@ -102,7 +149,7 @@ All notable changes to GNSS-SDR will be documented in this file. overkilling nine (the ninth decimal place worths up to 110 microns). Similarly, height in meters is now reported with two decimal places instead of three, and velocity in m/s also with two decimal places instead of three. -- Fixed the rate at which KLM, GPX, GeoJSON, and NMEA annotations are made. The +- Fixed the rate at which KML, GPX, GeoJSON, and NMEA annotations are made. The rate is now set by `PVT.output_rate_ms` (`500` ms by default), and can be particularized by `PVT.kml_rate_ms`, `PVT.gpx_rate_ms`, `PVT.geojson_rate_ms`, and `PVT.nmea_rate_ms`. Those values should be multiples of @@ -318,7 +365,7 @@ https://gnss-sdr.org/design-forces/ - Fixed building against GNU Radio v3.10.X.Y, which does not support the C++20 standard. - Fixed building against GNU Radio v3.10.X.Y, which replaced - [log4cpp](http://log4cpp.sourceforge.net/) by the + [log4cpp](https://log4cpp.sourceforge.net/) by the [spdlog](https://github.com/gabime/spdlog) and [fmt](https://github.com/fmtlib/fmt) libraries. - Updated `cpu_features` library for improved processor detection. @@ -465,8 +512,7 @@ https://gnss-sdr.org/design-forces/ inconsistencies in the configuration file. - Fix segmentation fault if the RINEX output was disabled. - Added a feature that optionally enables the remote monitoring of GPS and - Galileo ephemeris using UDP and - [Protocol Buffers](https://developers.google.com/protocol-buffers). + Galileo ephemeris using UDP and [Protocol Buffers](https://protobuf.dev/). - Now building the software passing the `-DENABLE_FPGA=ON` to CMake does not make the receiver unusable when running on non-FPGA-enabled platforms. On FPGA-enabled platforms, now it is possible to run non-FPGA-enabled diff --git a/docs/doxygen/other/main_page.dox b/docs/doxygen/other/main_page.dox index 0968c3eb91..5545c2baed 100644 --- a/docs/doxygen/other/main_page.dox +++ b/docs/doxygen/other/main_page.dox @@ -77,19 +77,19 @@ As outputs, it provides: In principle, GNSS-SDR can be built in any Unix-like system. In practice, it depends on being able to install all the required dependencies. See the building guide page for details about the project's dependencies and build process. Mainly, it consists on installing GNU Radio plus some few more libraries: -\li Armadillo, a C++ linear algebra library, +\li Armadillo, a C++ linear algebra library, \li Boost, a set of free peer-reviewed portable C++ source libraries, \li Gflags, a library that implements commandline flags processing, \li Glog, a library that implements application-level logging, \li Googletest, Google's framework for writing C++ tests, \li Mako, a template library written in Python, \li Matio, a MATLAB MAT File I/O Library, -\li Protocol Buffers, a language-neutral, platform-neutral extensible mechanism for serializing structured data, +\li Protocol Buffers, a language-neutral, platform-neutral extensible mechanism for serializing structured data, \li PugiXML, a light-weight, simple and fast XML parser for C++ with XPath support, \li Volk, a Vector-Optimized Library of Kernels which provides an abstraction of optimized math routines targeting several SIMD processors, and, optionally, -\li GNU Radio modules for hardware interface (gr-uhd, gr-osmosdr, gr-iio), +\li GNU Radio modules for hardware interface (gr-uhd, gr-osmosdr, gr-iio), \li Benchmark, a library to benchmark code snippets, \li Gperftools, which provides fast, multi-threaded malloc() and performance analysis tools. diff --git a/docs/doxygen/other/reference_docs.dox b/docs/doxygen/other/reference_docs.dox index 00af2e1a22..5871776d5b 100644 --- a/docs/doxygen/other/reference_docs.dox +++ b/docs/doxygen/other/reference_docs.dox @@ -153,7 +153,7 @@ automatically selected by the CMake script): You can get it from ISO, IEC - or ANSI. The closest free working document available is ISO, IEC - or ANSI. The closest free working document available is N4659.
  • C++14: A former ISO C++ standard was officially known as ISO International Standard ISO/IEC 14882:2014 – Programming languages – C++. You can get it from ISO or ANSI. The closest free working document available is N4296.
  • C++11: An older ISO C++ standard was ISO/IEC 14882:2011. You can get it from ISO. The closest free working document available is N3337.
  • @@ -207,7 +207,7 @@ User plane protocols: \li Open Mobile Alliance (OMA), Secure User Plane Location Architecture Version 2 (SUPL 2.0), April 2012. LTE Release 9 introduced extension hooks in LPP messages, so that the bodies external to 3GPP could extend the LPP feature set. OMA LPP extensions (LPPe), supported in SUPL 3.0, build on top of the 3GPP LPP reusing its procedures and data types. -Check the OMA Specifications webpage for updated information about LPP Extensions (LPPe) Specification. +Check the OMA Specifications webpage for updated information about LPP Extensions (LPPe) Specification. \li The OMA Mobile Location Protocol (MLP) V3.5 is an application-level protocol for getting the position of mobile stations diff --git a/docs/protobuf/README.md b/docs/protobuf/README.md index a555ae44ce..438a9d66d8 100644 --- a/docs/protobuf/README.md +++ b/docs/protobuf/README.md @@ -11,9 +11,8 @@ SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades Files in this folder describe structured data formats that are generated by -GNSS-SDR. They use -[Protocol Buffers](https://developers.google.com/protocol-buffers/)' -[proto3](https://developers.google.com/protocol-buffers/docs/proto3) syntax. +GNSS-SDR. They use [Protocol Buffers](https://protobuf.dev/)' +[proto3](https://protobuf.dev/programming-guides/proto3/) syntax. From those files, the protocol buffer compiler creates classes that implement automatic encoding and parsing of the protocol buffer data with an efficient diff --git a/src/algorithms/PVT/adapters/CMakeLists.txt b/src/algorithms/PVT/adapters/CMakeLists.txt index 658e493ac0..415fb13d40 100644 --- a/src/algorithms/PVT/adapters/CMakeLists.txt +++ b/src/algorithms/PVT/adapters/CMakeLists.txt @@ -23,10 +23,16 @@ target_link_libraries(pvt_adapters pvt_gr_blocks PRIVATE gnss_sdr_flags - Glog::glog pvt_libs ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(pvt_adapters PRIVATE Glog::glog) + target_compile_definitions(pvt_adapters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(pvt_adapters PRIVATE absl::flags absl::log) +endif() + target_include_directories(pvt_adapters PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/PVT/adapters/rtklib_pvt.cc b/src/algorithms/PVT/adapters/rtklib_pvt.cc index a81ccbdef7..140ac1203f 100644 --- a/src/algorithms/PVT/adapters/rtklib_pvt.cc +++ b/src/algorithms/PVT/adapters/rtklib_pvt.cc @@ -26,8 +26,12 @@ #include "gps_ephemeris.h" // for Gps_Ephemeris #include "pvt_conf.h" // for Pvt_Conf #include "rtklib_rtkpos.h" // for rtkfree, rtkinit -#include // for LOG #include // for std::cout +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif #if USE_STD_COMMON_FACTOR #include namespace bc = std; @@ -88,6 +92,7 @@ Rtklib_Pvt::Rtklib_Pvt(const ConfigurationInterface* configuration, // RINEX version pvt_output_parameters.rinex_version = configuration->property(role + ".rinex_version", 3); +#if USE_GLOG_AND_GFLAGS if (FLAGS_RINEX_version == "3.01" || FLAGS_RINEX_version == "3.02" || FLAGS_RINEX_version == "3") { pvt_output_parameters.rinex_version = 3; @@ -96,13 +101,29 @@ Rtklib_Pvt::Rtklib_Pvt(const ConfigurationInterface* configuration, { pvt_output_parameters.rinex_version = 2; } +#else + if (absl::GetFlag(FLAGS_RINEX_version) == "3.01" || absl::GetFlag(FLAGS_RINEX_version) == "3.02" || absl::GetFlag(FLAGS_RINEX_version) == "3") + { + pvt_output_parameters.rinex_version = 3; + } + else if (absl::GetFlag(FLAGS_RINEX_version) == "2.10" || absl::GetFlag(FLAGS_RINEX_version) == "2.11" || absl::GetFlag(FLAGS_RINEX_version) == "2") + { + pvt_output_parameters.rinex_version = 2; + } +#endif pvt_output_parameters.rinexobs_rate_ms = bc::lcm(configuration->property(role + ".rinexobs_rate_ms", 1000), pvt_output_parameters.output_rate_ms); pvt_output_parameters.rinex_name = configuration->property(role + ".rinex_name", std::string("-")); +#if USE_GLOG_AND_GFLAGS if (FLAGS_RINEX_name != "-") { pvt_output_parameters.rinex_name = FLAGS_RINEX_name; } - +#else + if (absl::GetFlag(FLAGS_RINEX_name) != "-") + { + pvt_output_parameters.rinex_name = absl::GetFlag(FLAGS_RINEX_name); + } +#endif // RTCM Printer settings pvt_output_parameters.flag_rtcm_tty_port = configuration->property(role + ".flag_rtcm_tty_port", false); pvt_output_parameters.rtcm_dump_devname = configuration->property(role + ".rtcm_dump_devname", default_rtcm_dump_devname); diff --git a/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt b/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt index ae1b728bf7..1964d15338 100644 --- a/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt @@ -27,11 +27,16 @@ target_link_libraries(pvt_gr_blocks PRIVATE algorithms_libs pvt_libs - Gflags::gflags - Glog::glog Boost::serialization ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(pvt_gr_blocks PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(pvt_gr_blocks PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(pvt_gr_blocks PRIVATE absl::log) +endif() + if(GNURADIO_USES_STD_POINTERS) target_compile_definitions(pvt_gr_blocks PUBLIC -DGNURADIO_USES_STD_POINTERS=1 diff --git a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc index 927c0aebb3..5ff357ff30 100644 --- a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc +++ b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc @@ -64,7 +64,6 @@ #include #include #include // for nvp, make_nvp -#include // for LOG #include // for io_signature #include // for mp #include // for sort, unique @@ -82,6 +81,12 @@ #include // for std::type_info, typeid #include // for pair +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include diff --git a/src/algorithms/PVT/libs/CMakeLists.txt b/src/algorithms/PVT/libs/CMakeLists.txt index 543cdc97c4..af888293e1 100644 --- a/src/algorithms/PVT/libs/CMakeLists.txt +++ b/src/algorithms/PVT/libs/CMakeLists.txt @@ -98,11 +98,18 @@ target_link_libraries(pvt_libs algorithms_libs_rtklib PRIVATE algorithms_libs - Gflags::gflags - Glog::glog + gnss_sdr_flags Matio::matio ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(pvt_libs PUBLIC Glog::glog) + + target_compile_definitions(pvt_libs PUBLIC -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(pvt_libs PUBLIC absl::log) +endif() + get_filename_component(PROTO_INCLUDE_HEADERS_DIR ${PROTO_HDRS} DIRECTORY) # for concurrent_queue.h diff --git a/src/algorithms/PVT/libs/an_packet_printer.cc b/src/algorithms/PVT/libs/an_packet_printer.cc index 6618d6982c..22d31371bc 100644 --- a/src/algorithms/PVT/libs/an_packet_printer.cc +++ b/src/algorithms/PVT/libs/an_packet_printer.cc @@ -20,7 +20,6 @@ #include "an_packet_printer.h" #include "rtklib_solver.h" // for Rtklib_Solver -#include // for DLOG #include // for M_PI #include // for memcpy #include // for fcntl @@ -29,6 +28,12 @@ #include // values for termios #include // for write(), read(), close() +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + An_Packet_Printer::An_Packet_Printer(const std::string& an_dump_devname) : d_start(std::chrono::system_clock::now()), diff --git a/src/algorithms/PVT/libs/geohash.cc b/src/algorithms/PVT/libs/geohash.cc index ecc1f6f3ad..44a06adda2 100644 --- a/src/algorithms/PVT/libs/geohash.cc +++ b/src/algorithms/PVT/libs/geohash.cc @@ -135,7 +135,7 @@ std::array Geohash::decode(std::string geohash) const std::array Geohash::bounds(std::string geohash) const { - if (geohash.length() == 0) + if (geohash.empty()) { throw std::runtime_error("Invalid geohash"); } diff --git a/src/algorithms/PVT/libs/geojson_printer.cc b/src/algorithms/PVT/libs/geojson_printer.cc index f57e9d5821..62c53e82ce 100644 --- a/src/algorithms/PVT/libs/geojson_printer.cc +++ b/src/algorithms/PVT/libs/geojson_printer.cc @@ -20,13 +20,18 @@ #include "gnss_sdr_filesystem.h" #include "pvt_solution.h" #include -#include #include // for tm #include // for exception #include // for operator<< #include // for cout, cerr #include // for stringstream +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GeoJSON_Printer::GeoJSON_Printer(const std::string& base_path) : geojson_base_path(base_path), first_pos(true) diff --git a/src/algorithms/PVT/libs/gpx_printer.cc b/src/algorithms/PVT/libs/gpx_printer.cc index 699f92db51..c2a16bee4d 100644 --- a/src/algorithms/PVT/libs/gpx_printer.cc +++ b/src/algorithms/PVT/libs/gpx_printer.cc @@ -20,13 +20,17 @@ #include "gnss_sdr_filesystem.h" #include "pvt_solution.h" #include -#include #include // for tm #include // for exception #include // for operator<< #include // for cout, cerr #include // for stringstream +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif Gpx_Printer::Gpx_Printer(const std::string& base_path) : indent(" "), gpx_base_path(base_path), diff --git a/src/algorithms/PVT/libs/has_simple_printer.cc b/src/algorithms/PVT/libs/has_simple_printer.cc index e29df9809e..e05c55f1ff 100644 --- a/src/algorithms/PVT/libs/has_simple_printer.cc +++ b/src/algorithms/PVT/libs/has_simple_printer.cc @@ -21,7 +21,6 @@ #include "galileo_has_data.h" #include "gnss_sdr_filesystem.h" #include -#include #include // for std::find, std::count #include // for std::bitset #include // for uint8_t, ... @@ -32,6 +31,12 @@ #include // for std::cout, std::cerr #include // for std::stringstream +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + Has_Simple_Printer::Has_Simple_Printer(const std::string& base_path, const std::string& filename, diff --git a/src/algorithms/PVT/libs/kml_printer.cc b/src/algorithms/PVT/libs/kml_printer.cc index 72ea272d9c..8a520aec3f 100644 --- a/src/algorithms/PVT/libs/kml_printer.cc +++ b/src/algorithms/PVT/libs/kml_printer.cc @@ -20,7 +20,6 @@ #include "gnss_sdr_filesystem.h" #include "pvt_solution.h" #include -#include #include // for mkstemp #include // for tm #include // for exception @@ -30,6 +29,11 @@ #include // for S_IXUSR | S_IRWXG | S_IRWXO #include // for mode_t +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif Kml_Printer::Kml_Printer(const std::string& base_path) : kml_base_path(base_path), indent(" "), diff --git a/src/algorithms/PVT/libs/monitor_ephemeris_udp_sink.cc b/src/algorithms/PVT/libs/monitor_ephemeris_udp_sink.cc index ca4ac6fbd4..f9f48f0bbd 100644 --- a/src/algorithms/PVT/libs/monitor_ephemeris_udp_sink.cc +++ b/src/algorithms/PVT/libs/monitor_ephemeris_udp_sink.cc @@ -55,22 +55,24 @@ bool Monitor_Ephemeris_Udp_Sink::write_galileo_ephemeris(const std::shared_ptr #include #include #include @@ -32,6 +31,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + Nmea_Printer::Nmea_Printer(const std::string& filename, bool flag_nmea_output_file, diff --git a/src/algorithms/PVT/libs/pvt_kf.cc b/src/algorithms/PVT/libs/pvt_kf.cc index 805a53a577..b75e5e17ff 100644 --- a/src/algorithms/PVT/libs/pvt_kf.cc +++ b/src/algorithms/PVT/libs/pvt_kf.cc @@ -16,8 +16,12 @@ */ #include "pvt_kf.h" -#include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif void Pvt_Kf::init_Kf(const arma::vec& p, const arma::vec& v, diff --git a/src/algorithms/PVT/libs/pvt_solution.cc b/src/algorithms/PVT/libs/pvt_solution.cc index c97a12d702..da14f8be4f 100644 --- a/src/algorithms/PVT/libs/pvt_solution.cc +++ b/src/algorithms/PVT/libs/pvt_solution.cc @@ -17,10 +17,14 @@ #include "pvt_solution.h" #include "MATH_CONSTANTS.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif int Pvt_Solution::cart2geo(double X, double Y, double Z, int elipsoid_selection) { diff --git a/src/algorithms/PVT/libs/rinex_printer.cc b/src/algorithms/PVT/libs/rinex_printer.cc index 6c2d322d58..0e4367ea2e 100644 --- a/src/algorithms/PVT/libs/rinex_printer.cc +++ b/src/algorithms/PVT/libs/rinex_printer.cc @@ -42,7 +42,6 @@ #include #include #include -#include #include // for min and max #include #include // for floor @@ -55,6 +54,11 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif Rinex_Printer::Rinex_Printer(int32_t conf_version, const std::string& base_path, diff --git a/src/algorithms/PVT/libs/rtcm.h b/src/algorithms/PVT/libs/rtcm.h index c7011eec39..1ce2bbd1a4 100644 --- a/src/algorithms/PVT/libs/rtcm.h +++ b/src/algorithms/PVT/libs/rtcm.h @@ -29,7 +29,6 @@ #include "gps_ephemeris.h" #include #include -#include #include // for std::max, std::min, std::copy_n #include #include @@ -47,6 +46,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + /** \addtogroup PVT * \{ */ /** \addtogroup PVT_libs @@ -723,10 +728,10 @@ class Rtcm { if (first == true) { - LOG(INFO) << "Client says:"; + DLOG(INFO) << "Client says:"; first = false; } - LOG(INFO) << client_says; + DLOG(INFO) << client_says; client_says = client_says.substr(80, client_says.length() - 80); } do_read_message_header(); diff --git a/src/algorithms/PVT/libs/rtcm_printer.cc b/src/algorithms/PVT/libs/rtcm_printer.cc index cb07b9eea9..f6e3822594 100644 --- a/src/algorithms/PVT/libs/rtcm_printer.cc +++ b/src/algorithms/PVT/libs/rtcm_printer.cc @@ -30,7 +30,6 @@ #include "rtcm.h" #include "rtklib_solver.h" #include -#include #include // for tm #include // for exception #include // for O_RDWR @@ -39,6 +38,11 @@ #include // for close, write #include // for std::vector +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif Rtcm_Printer::Rtcm_Printer(const std::string& filename, bool flag_rtcm_file_dump, diff --git a/src/algorithms/PVT/libs/rtklib_solver.cc b/src/algorithms/PVT/libs/rtklib_solver.cc index d9c90050b2..7dde00c89e 100644 --- a/src/algorithms/PVT/libs/rtklib_solver.cc +++ b/src/algorithms/PVT/libs/rtklib_solver.cc @@ -37,7 +37,6 @@ #include "rtklib_ephemeris.h" #include "rtklib_rtkpos.h" #include "rtklib_solution.h" -#include #include #include "iostream" #include @@ -47,6 +46,11 @@ #include using namespace std; +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif Rtklib_Solver::Rtklib_Solver(const rtk_t &rtk, const Pvt_Conf &conf, diff --git a/src/algorithms/acquisition/adapters/CMakeLists.txt b/src/algorithms/acquisition/adapters/CMakeLists.txt index 41cfe8a8aa..85eb8672e8 100644 --- a/src/algorithms/acquisition/adapters/CMakeLists.txt +++ b/src/algorithms/acquisition/adapters/CMakeLists.txt @@ -104,9 +104,15 @@ target_link_libraries(acquisition_adapters PRIVATE gnss_sdr_flags Boost::headers - Glog::glog ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(acquisition_adapters PRIVATE Glog::glog) + target_compile_definitions(acquisition_adapters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(acquisition_adapters PRIVATE absl::flags absl::log) +endif() + if(GNURADIO_USES_STD_POINTERS) target_compile_definitions(acquisition_adapters PUBLIC -DGNURADIO_USES_STD_POINTERS=1 diff --git a/src/algorithms/acquisition/adapters/beidou_b1i_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/beidou_b1i_pcps_acquisition.cc index 180a95795f..2e293af435 100644 --- a/src/algorithms/acquisition/adapters/beidou_b1i_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/beidou_b1i_pcps_acquisition.cc @@ -23,10 +23,15 @@ #include "beidou_b1i_signal_replica.h" #include "configuration_interface.h" #include "gnss_sdr_flags.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -52,10 +57,17 @@ BeidouB1iPcpsAcquisition::BeidouB1iPcpsAcquisition( LOG(INFO) << "role " << role; +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); fs_in_ = acq_parameters_.fs_in; diff --git a/src/algorithms/acquisition/adapters/beidou_b3i_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/beidou_b3i_pcps_acquisition.cc index a8204a24e9..a5e41a125b 100644 --- a/src/algorithms/acquisition/adapters/beidou_b3i_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/beidou_b3i_pcps_acquisition.cc @@ -21,9 +21,14 @@ #include "beidou_b3i_signal_replica.h" #include "configuration_interface.h" #include "gnss_sdr_flags.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -48,10 +53,17 @@ BeidouB3iPcpsAcquisition::BeidouB3iPcpsAcquisition( LOG(INFO) << "role " << role; +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); item_type_ = acq_parameters_.item_type; diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_8ms_ambiguous_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e1_pcps_8ms_ambiguous_acquisition.cc index 4ba572b173..903a3748c3 100644 --- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_8ms_ambiguous_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_8ms_ambiguous_acquisition.cc @@ -21,9 +21,14 @@ #include "galileo_e1_signal_replica.h" #include "gnss_sdr_flags.h" #include -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -58,10 +63,17 @@ GalileoE1Pcps8msAmbiguousAcquisition::GalileoE1Pcps8msAmbiguousAcquisition( fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); dump_filename_ = configuration_->property(role_ + ".dump_filename", default_dump_filename); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { doppler_max_ = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + doppler_max_ = absl::GetFlag(FLAGS_doppler_max); + } +#endif if (sampled_ms_ % 4 != 0) { diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc index f4097b6008..cace01b94c 100644 --- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc @@ -22,9 +22,14 @@ #include "galileo_e1_signal_replica.h" #include "gnss_sdr_flags.h" #include -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -51,10 +56,17 @@ GalileoE1PcpsAmbiguousAcquisition::GalileoE1PcpsAmbiguousAcquisition( acq_parameters_.ms_per_code = 4; acq_parameters_.SetFromConfiguration(configuration_, role_, GALILEO_E1_CODE_CHIP_RATE_CPS, GALILEO_E1_OPT_ACQ_FS_SPS); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); item_type_ = acq_parameters_.item_type; diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition_fpga.cc b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition_fpga.cc index 87e4c2d06a..900e7ac914 100644 --- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition_fpga.cc +++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition_fpga.cc @@ -21,7 +21,6 @@ #include "galileo_e1_signal_replica.h" #include "gnss_sdr_fft.h" #include "gnss_sdr_flags.h" -#include #include // for fft_complex #include // for gr_complex #include // for volk_32fc_conjugate_32fc @@ -30,6 +29,12 @@ #include // for abs, pow, floor #include // for complex +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga( const ConfigurationInterface* configuration, const std::string& role, @@ -46,10 +51,17 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga( { acq_parameters_.SetFromConfiguration(configuration, role_, fpga_buff_num, fpga_blk_exp, downsampling_factor_default, GALILEO_E1_CODE_CHIP_RATE_CPS, GALILEO_E1_B_CODE_LENGTH_CHIPS); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); fs_in_ = acq_parameters_.fs_in; diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_cccwsr_ambiguous_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e1_pcps_cccwsr_ambiguous_acquisition.cc index c7af648aa9..7006442277 100644 --- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_cccwsr_ambiguous_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_cccwsr_ambiguous_acquisition.cc @@ -21,8 +21,12 @@ #include "galileo_e1_signal_replica.h" #include "gnss_sdr_flags.h" #include -#include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif GalileoE1PcpsCccwsrAmbiguousAcquisition::GalileoE1PcpsCccwsrAmbiguousAcquisition( const ConfigurationInterface* configuration, @@ -50,10 +54,17 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::GalileoE1PcpsCccwsrAmbiguousAcquisition fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); dump_filename_ = configuration_->property(role_ + ".dump_filename", default_dump_filename); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { doppler_max_ = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + doppler_max_ = absl::GetFlag(FLAGS_doppler_max); + } +#endif if (sampled_ms_ % 4 != 0) { diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.cc index 2632418a7e..cafbcf33b9 100644 --- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.cc @@ -21,9 +21,14 @@ #include "galileo_e1_signal_replica.h" #include "gnss_sdr_flags.h" #include -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -58,10 +63,17 @@ GalileoE1PcpsQuickSyncAmbiguousAcquisition::GalileoE1PcpsQuickSyncAmbiguousAcqui fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { doppler_max_ = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + doppler_max_ = absl::GetFlag(FLAGS_doppler_max); + } +#endif /* --- Find number of samples per spreading code (4 ms) -----------------*/ code_length_ = static_cast(round( diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_tong_ambiguous_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e1_pcps_tong_ambiguous_acquisition.cc index 59bd0e2a01..fca12dbfef 100644 --- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_tong_ambiguous_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_tong_ambiguous_acquisition.cc @@ -21,9 +21,14 @@ #include "galileo_e1_signal_replica.h" #include "gnss_sdr_flags.h" #include -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -71,10 +76,17 @@ GalileoE1PcpsTongAmbiguousAcquisition::GalileoE1PcpsTongAmbiguousAcquisition( << sampled_ms_ << " ms will be used."; } +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { doppler_max_ = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + doppler_max_ = absl::GetFlag(FLAGS_doppler_max); + } +#endif bool enable_monitor_output = configuration_->property("AcquisitionMonitor.enable_monitor", false); diff --git a/src/algorithms/acquisition/adapters/galileo_e5a_noncoherent_iq_acquisition_caf.cc b/src/algorithms/acquisition/adapters/galileo_e5a_noncoherent_iq_acquisition_caf.cc index b51d12a73b..5fcb2658cd 100644 --- a/src/algorithms/acquisition/adapters/galileo_e5a_noncoherent_iq_acquisition_caf.cc +++ b/src/algorithms/acquisition/adapters/galileo_e5a_noncoherent_iq_acquisition_caf.cc @@ -27,9 +27,14 @@ #include "galileo_e5_signal_replica.h" #include "gnss_sdr_flags.h" #include -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -67,10 +72,17 @@ GalileoE5aNoncoherentIQAcquisitionCaf::GalileoE5aNoncoherentIQAcquisitionCaf( int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 32000000); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { doppler_max_ = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + doppler_max_ = absl::GetFlag(FLAGS_doppler_max); + } +#endif DLOG(INFO) << "role " << role_; if (sampled_ms_ > 3) diff --git a/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition.cc index 3d9eee1fad..c18aa48c20 100644 --- a/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition.cc @@ -21,10 +21,15 @@ #include "configuration_interface.h" #include "galileo_e5_signal_replica.h" #include "gnss_sdr_flags.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -51,10 +56,17 @@ GalileoE5aPcpsAcquisition::GalileoE5aPcpsAcquisition( acq_parameters_.ms_per_code = 1; acq_parameters_.SetFromConfiguration(configuration, role_, GALILEO_E5A_CODE_CHIP_RATE_CPS, GALILEO_E5A_OPT_ACQ_FS_SPS); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); item_type_ = acq_parameters_.item_type; diff --git a/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition_fpga.cc b/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition_fpga.cc index f3c0419529..98e8bcf3cb 100644 --- a/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition_fpga.cc +++ b/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition_fpga.cc @@ -21,7 +21,6 @@ #include "galileo_e5_signal_replica.h" #include "gnss_sdr_fft.h" #include "gnss_sdr_flags.h" -#include #include // for gr_complex #include // for volk_32fc_conjugate_32fc #include @@ -29,6 +28,12 @@ #include // for abs, pow, floor #include // for complex +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga( const ConfigurationInterface* configuration, const std::string& role, @@ -45,10 +50,17 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga( { acq_parameters_.SetFromConfiguration(configuration, role_, fpga_buff_num, fpga_blk_exp, downsampling_factor_default, GALILEO_E5A_CODE_CHIP_RATE_CPS, GALILEO_E5A_CODE_LENGTH_CHIPS); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); fs_in_ = acq_parameters_.fs_in; diff --git a/src/algorithms/acquisition/adapters/galileo_e5b_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e5b_pcps_acquisition.cc index 5f8af8bafe..11ecebcdd1 100644 --- a/src/algorithms/acquisition/adapters/galileo_e5b_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e5b_pcps_acquisition.cc @@ -22,10 +22,15 @@ #include "configuration_interface.h" #include "galileo_e5_signal_replica.h" #include "gnss_sdr_flags.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -51,10 +56,17 @@ GalileoE5bPcpsAcquisition::GalileoE5bPcpsAcquisition(const ConfigurationInterfac acq_parameters_.ms_per_code = 1; acq_parameters_.SetFromConfiguration(configuration, role_, GALILEO_E5B_CODE_CHIP_RATE_CPS, GALILEO_E5B_OPT_ACQ_FS_SPS); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); item_type_ = acq_parameters_.item_type; diff --git a/src/algorithms/acquisition/adapters/galileo_e5b_pcps_acquisition_fpga.cc b/src/algorithms/acquisition/adapters/galileo_e5b_pcps_acquisition_fpga.cc index 83996b5c88..f7a303f2d0 100644 --- a/src/algorithms/acquisition/adapters/galileo_e5b_pcps_acquisition_fpga.cc +++ b/src/algorithms/acquisition/adapters/galileo_e5b_pcps_acquisition_fpga.cc @@ -22,13 +22,18 @@ #include "galileo_e5_signal_replica.h" #include "gnss_sdr_fft.h" #include "gnss_sdr_flags.h" -#include #include // for gr_complex #include // for volk_32fc_conjugate_32fc #include // for copy_n #include // for abs, pow, floor #include // for complex +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GalileoE5bPcpsAcquisitionFpga::GalileoE5bPcpsAcquisitionFpga(const ConfigurationInterface* configuration, const std::string& role, unsigned int in_streams, @@ -44,10 +49,17 @@ GalileoE5bPcpsAcquisitionFpga::GalileoE5bPcpsAcquisitionFpga(const Configuration acq_iq_(configuration->property(role + ".acquire_iq", false)) { acq_parameters_.SetFromConfiguration(configuration, role_, fpga_buff_num, fpga_blk_exp, downsampling_factor_default, GALILEO_E5B_CODE_CHIP_RATE_CPS, GALILEO_E5B_CODE_LENGTH_CHIPS); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); fs_in_ = acq_parameters_.fs_in; diff --git a/src/algorithms/acquisition/adapters/galileo_e6_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e6_pcps_acquisition.cc index eda68fb668..dd76d0d986 100644 --- a/src/algorithms/acquisition/adapters/galileo_e6_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e6_pcps_acquisition.cc @@ -21,9 +21,14 @@ #include "configuration_interface.h" #include "galileo_e6_signal_replica.h" #include "gnss_sdr_flags.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -51,10 +56,17 @@ GalileoE6PcpsAcquisition::GalileoE6PcpsAcquisition( DLOG(INFO) << "role " << role; +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); item_type_ = acq_parameters_.item_type; diff --git a/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc index c63eb5ec72..628c96d256 100644 --- a/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc @@ -23,9 +23,14 @@ #include "configuration_interface.h" #include "glonass_l1_signal_replica.h" #include "gnss_sdr_flags.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -51,10 +56,17 @@ GlonassL1CaPcpsAcquisition::GlonassL1CaPcpsAcquisition( DLOG(INFO) << "role " << role; +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); item_type_ = acq_parameters_.item_type; diff --git a/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.cc index 180f50747f..46b6790a45 100644 --- a/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.cc @@ -22,9 +22,14 @@ #include "configuration_interface.h" #include "glonass_l2_signal_replica.h" #include "gnss_sdr_flags.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -50,10 +55,17 @@ GlonassL2CaPcpsAcquisition::GlonassL2CaPcpsAcquisition( DLOG(INFO) << "role " << role; +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); item_type_ = acq_parameters_.item_type; diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc index 72994eebca..6992b72600 100644 --- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc @@ -25,9 +25,14 @@ #include "configuration_interface.h" #include "gnss_sdr_flags.h" #include "gps_sdr_signal_replica.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -54,10 +59,17 @@ GpsL1CaPcpsAcquisition::GpsL1CaPcpsAcquisition( DLOG(INFO) << "role " << role; +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fine_doppler.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fine_doppler.cc index ffe4ca5d2f..f119a60c4a 100644 --- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fine_doppler.cc +++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fine_doppler.cc @@ -24,8 +24,12 @@ #include "configuration_interface.h" #include "gnss_sdr_flags.h" #include "gps_sdr_signal_replica.h" -#include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif GpsL1CaPcpsAcquisitionFineDoppler::GpsL1CaPcpsAcquisitionFineDoppler( const ConfigurationInterface* configuration, @@ -57,10 +61,17 @@ GpsL1CaPcpsAcquisitionFineDoppler::GpsL1CaPcpsAcquisitionFineDoppler( acq_parameters.dump = dump_; dump_filename_ = configuration->property(role_ + ".dump_filename", std::move(default_dump_filename)); acq_parameters.dump_filename = dump_filename_; +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { doppler_max_ = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + doppler_max_ = absl::GetFlag(FLAGS_doppler_max); + } +#endif acq_parameters.doppler_max = doppler_max_; acq_parameters.sampled_ms = sampled_ms_; acq_parameters.max_dwells = max_dwells_; diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fpga.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fpga.cc index cc2713d24a..0242062b08 100644 --- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fpga.cc +++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fpga.cc @@ -24,13 +24,18 @@ #include "gnss_sdr_fft.h" #include "gnss_sdr_flags.h" #include "gps_sdr_signal_replica.h" -#include #include // for gr_complex #include // for volk_32fc_conjugate_32fc #include // for copy_n #include // for abs, pow, floor #include // for complex +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga( const ConfigurationInterface* configuration, const std::string& role, @@ -47,10 +52,17 @@ GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga( DLOG(INFO) << "role " << role; +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); fs_in_ = acq_parameters_.fs_in; diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_assisted_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_assisted_acquisition.cc index 98fb0b9c69..0bd82c2dcd 100644 --- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_assisted_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_assisted_acquisition.cc @@ -23,8 +23,12 @@ #include "configuration_interface.h" #include "gnss_sdr_flags.h" #include "gps_sdr_signal_replica.h" -#include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif GpsL1CaPcpsAssistedAcquisition::GpsL1CaPcpsAssistedAcquisition( const ConfigurationInterface* configuration, @@ -51,10 +55,17 @@ GpsL1CaPcpsAssistedAcquisition::GpsL1CaPcpsAssistedAcquisition( int64_t fs_in_deprecated = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); fs_in_ = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { doppler_max_ = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + doppler_max_ = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_min_ = configuration->property(role_ + ".doppler_min", -doppler_max_); bool enable_monitor_output = configuration->property("AcquisitionMonitor.enable_monitor", false); diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_opencl_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_opencl_acquisition.cc index 05d26212c2..e0352f9b28 100644 --- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_opencl_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_opencl_acquisition.cc @@ -21,9 +21,14 @@ #include "gnss_sdr_flags.h" #include "gps_sdr_signal_replica.h" #include -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -58,10 +63,17 @@ GpsL1CaPcpsOpenClAcquisition::GpsL1CaPcpsOpenClAcquisition( fs_in_ = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); dump_ = configuration->property(role + ".dump", false); doppler_max_ = configuration->property(role + ".doppler_max", 5000); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { doppler_max_ = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + doppler_max_ = absl::GetFlag(FLAGS_doppler_max); + } +#endif sampled_ms_ = configuration->property(role + ".coherent_integration_time_ms", 1); bit_transition_flag_ = configuration->property("Acquisition.bit_transition_flag", false); diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_quicksync_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_quicksync_acquisition.cc index db64515418..9fd146be29 100644 --- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_quicksync_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_quicksync_acquisition.cc @@ -22,9 +22,14 @@ #include "gnss_sdr_flags.h" #include "gps_sdr_signal_replica.h" #include -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -58,10 +63,17 @@ GpsL1CaPcpsQuickSyncAcquisition::GpsL1CaPcpsQuickSyncAcquisition( int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { doppler_max_ = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + doppler_max_ = absl::GetFlag(FLAGS_doppler_max); + } +#endif // -- Find number of samples per spreading code ------------------------- code_length_ = static_cast(round(fs_in_ / (GPS_L1_CA_CODE_RATE_CPS / GPS_L1_CA_CODE_LENGTH_CHIPS))); diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_tong_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_tong_acquisition.cc index 7dca40c3ad..63efcab00e 100644 --- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_tong_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_tong_acquisition.cc @@ -21,9 +21,14 @@ #include "gnss_sdr_flags.h" #include "gps_sdr_signal_replica.h" #include -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -63,10 +68,17 @@ GpsL1CaPcpsTongAcquisition::GpsL1CaPcpsTongAcquisition( fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); dump_filename_ = configuration_->property(role_ + ".dump_filename", std::move(default_dump_filename)); +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { doppler_max_ = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + doppler_max_ = absl::GetFlag(FLAGS_doppler_max); + } +#endif bool enable_monitor_output = configuration_->property("AcquisitionMonitor.enable_monitor", false); // -- Find number of samples per spreading code ------------------------- diff --git a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc index f2e4916908..0b61172b16 100644 --- a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc @@ -23,9 +23,14 @@ #include "configuration_interface.h" #include "gnss_sdr_flags.h" #include "gps_l2c_signal_replica.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -52,10 +57,17 @@ GpsL2MPcpsAcquisition::GpsL2MPcpsAcquisition( DLOG(INFO) << "Role " << role; +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); item_type_ = acq_parameters_.item_type; diff --git a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition_fpga.cc b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition_fpga.cc index ecce4df4cd..e78b1b1740 100644 --- a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition_fpga.cc +++ b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition_fpga.cc @@ -23,7 +23,6 @@ #include "gnss_sdr_fft.h" #include "gnss_sdr_flags.h" #include "gps_l2c_signal_replica.h" -#include #include // for gr_complex #include // for volk_32fc_conjugate_32fc #include @@ -31,6 +30,12 @@ #include // for abs, pow, floor #include // for complex +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GpsL2MPcpsAcquisitionFpga::GpsL2MPcpsAcquisitionFpga( const ConfigurationInterface* configuration, const std::string& role, @@ -47,10 +52,17 @@ GpsL2MPcpsAcquisitionFpga::GpsL2MPcpsAcquisitionFpga( LOG(INFO) << "role " << role; +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); fs_in_ = acq_parameters_.fs_in; diff --git a/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition.cc index 35b8899940..b901c2db3d 100644 --- a/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition.cc @@ -23,8 +23,14 @@ #include "configuration_interface.h" #include "gnss_sdr_flags.h" #include "gps_l5_signal_replica.h" -#include #include + +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_STD_SPAN #include namespace own = std; @@ -51,10 +57,17 @@ GpsL5iPcpsAcquisition::GpsL5iPcpsAcquisition( DLOG(INFO) << "role " << role; +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); diff --git a/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition_fpga.cc b/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition_fpga.cc index a96bf531d6..0e379d0348 100644 --- a/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition_fpga.cc +++ b/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition_fpga.cc @@ -24,7 +24,6 @@ #include "gnss_sdr_fft.h" #include "gnss_sdr_flags.h" #include "gps_l5_signal_replica.h" -#include #include // for gr_complex #include // for volk_32fc_conjugate_32fc #include @@ -32,6 +31,12 @@ #include // for abs, pow, floor #include // for complex +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GpsL5iPcpsAcquisitionFpga::GpsL5iPcpsAcquisitionFpga( const ConfigurationInterface* configuration, const std::string& role, @@ -48,10 +53,17 @@ GpsL5iPcpsAcquisitionFpga::GpsL5iPcpsAcquisitionFpga( LOG(INFO) << "role " << role; +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_max != 0) { acq_parameters_.doppler_max = FLAGS_doppler_max; } +#else + if (absl::GetFlag(FLAGS_doppler_max) != 0) + { + acq_parameters_.doppler_max = absl::GetFlag(FLAGS_doppler_max); + } +#endif doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = static_cast(acq_parameters_.doppler_step); fs_in_ = acq_parameters_.fs_in; diff --git a/src/algorithms/acquisition/gnuradio_blocks/CMakeLists.txt b/src/algorithms/acquisition/gnuradio_blocks/CMakeLists.txt index fdeb3981e7..de689f5b3c 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/acquisition/gnuradio_blocks/CMakeLists.txt @@ -65,11 +65,16 @@ target_link_libraries(acquisition_gr_blocks Volk::volk Volkgnsssdr::volkgnsssdr PRIVATE - Gflags::gflags - Glog::glog Matio::matio ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(acquisition_gr_blocks PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(acquisition_gr_blocks PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(acquisition_gr_blocks PRIVATE absl::flags absl::log) +endif() + target_include_directories(acquisition_gr_blocks PRIVATE ${GNSSSDR_SOURCE_DIR}/src/core/receiver diff --git a/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc index 7851aff79f..ed095a7571 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc @@ -23,7 +23,6 @@ #include "galileo_e5a_noncoherent_iq_acquisition_caf_cc.h" #include "MATH_CONSTANTS.h" -#include #include #include #include @@ -32,6 +31,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr galileo_e5a_noncoherentIQ_make_acquisition_caf_cc( unsigned int sampled_ms, diff --git a/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc index 7dad27c452..8bc9157699 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc @@ -17,7 +17,6 @@ #include "galileo_pcps_8ms_acquisition_cc.h" #include "MATH_CONSTANTS.h" -#include #include #include #include @@ -26,6 +25,11 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif galileo_pcps_8ms_acquisition_cc_sptr galileo_pcps_8ms_make_acquisition_cc( uint32_t sampled_ms, diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.cc index fc5542f088..3d997063ca 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.cc @@ -39,6 +39,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + pcps_acquisition_sptr pcps_make_acquisition(const Acq_Conf& conf_) { @@ -687,12 +693,14 @@ void pcps_acquisition::acquisition_core(uint64_t samp_count) d_gnss_synchro->Acq_delay_samples -= static_cast(d_acq_parameters.resampler_latency_samples); // account the resampler filter latency d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); d_gnss_synchro->Acq_samplestamp_samples = rint(static_cast(samp_count) * d_acq_parameters.resampler_ratio); + d_gnss_synchro->fs = d_acq_parameters.resampled_fs; } else { d_gnss_synchro->Acq_delay_samples = static_cast(std::fmod(static_cast(indext), d_acq_parameters.samples_per_code)); d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); d_gnss_synchro->Acq_samplestamp_samples = samp_count; + d_gnss_synchro->fs = d_acq_parameters.fs_in; } } else @@ -746,6 +754,7 @@ void pcps_acquisition::acquisition_core(uint64_t samp_count) d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); d_gnss_synchro->Acq_samplestamp_samples = rint(static_cast(samp_count) * d_acq_parameters.resampler_ratio); d_gnss_synchro->Acq_doppler_step = d_acq_parameters.doppler_step2; + d_gnss_synchro->fs = d_acq_parameters.resampled_fs; } else { @@ -753,6 +762,7 @@ void pcps_acquisition::acquisition_core(uint64_t samp_count) d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); d_gnss_synchro->Acq_samplestamp_samples = samp_count; d_gnss_synchro->Acq_doppler_step = d_acq_parameters.doppler_step2; + d_gnss_synchro->fs = d_acq_parameters.fs_in; } } @@ -897,6 +907,18 @@ void pcps_acquisition::calculate_threshold() } +void pcps_acquisition::set_doppler_center(int32_t doppler_center) +{ + gr::thread::scoped_lock lock(d_setlock); // require mutex with work function called by the scheduler + if (doppler_center != d_doppler_center) + { + DLOG(INFO) << " Doppler assistance for Channel: " << d_channel << " => Doppler: " << doppler_center << "[Hz]"; + d_doppler_center = doppler_center; + update_grid_doppler_wipeoffs(); + } +} + + int pcps_acquisition::general_work(int noutput_items __attribute__((unused)), gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.h b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.h index 74fb8c1148..673267f755 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.h +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.h @@ -46,7 +46,6 @@ #include "channel_fsm.h" #include "gnss_sdr_fft.h" #include -#include #include #include // for gr_complex #include // for scoped_lock @@ -60,6 +59,7 @@ #include #include + #if HAS_STD_SPAN #include namespace own = std; @@ -196,16 +196,7 @@ class pcps_acquisition : public gr::block * \brief Set Doppler center frequency for the grid search. It will refresh the Doppler grid. * \param doppler_center - Frequency center of the search grid [Hz]. */ - inline void set_doppler_center(int32_t doppler_center) - { - gr::thread::scoped_lock lock(d_setlock); // require mutex with work function called by the scheduler - if (doppler_center != d_doppler_center) - { - DLOG(INFO) << " Doppler assistance for Channel: " << d_channel << " => Doppler: " << doppler_center << "[Hz]"; - d_doppler_center = doppler_center; - update_grid_doppler_wipeoffs(); - } - } + void set_doppler_center(int32_t doppler_center); /*! * \brief Parallel Code Phase Search Acquisition signal processing. diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc index 28624f346b..e51f9711bc 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc @@ -21,7 +21,6 @@ #include "gnss_sdr_create_directory.h" #include "gnss_sdr_filesystem.h" #include "gps_sdr_signal_replica.h" -#include #include #include #include @@ -30,6 +29,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + pcps_acquisition_fine_doppler_cc_sptr pcps_make_acquisition_fine_doppler_cc(const Acq_Conf &conf_) { diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.cc index 0414a2d794..eff195cb11 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.cc @@ -21,12 +21,17 @@ #include "pcps_acquisition_fpga.h" #include "gnss_sdr_make_unique.h" // for std::make_unique in C++11 #include "gnss_synchro.h" -#include #include // for ceil #include // for operator<< #include // for move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + pcps_acquisition_fpga_sptr pcps_make_acquisition_fpga(Acq_Conf_Fpga& conf_) { return pcps_acquisition_fpga_sptr(new pcps_acquisition_fpga(conf_)); @@ -288,6 +293,16 @@ void pcps_acquisition_fpga::set_active(bool active) } +void pcps_acquisition_fpga::set_doppler_center(int32_t doppler_center) +{ + if (doppler_center != d_doppler_center) + { + DLOG(INFO) << " Doppler assistance for Channel: " << d_channel << " => Doppler: " << doppler_center << "[Hz]"; + d_doppler_center = doppler_center; + } +} + + void pcps_acquisition_fpga::reset_acquisition() { // this function triggers a HW reset of the FPGA PL. diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.h b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.h index 92ec517811..ded4ba660c 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.h +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.h @@ -29,7 +29,6 @@ #include "acq_conf_fpga.h" #include "channel_fsm.h" #include "fpga_acquisition.h" -#include #include // for uint32_t #include // for shared_ptr #include // for string @@ -156,14 +155,7 @@ class pcps_acquisition_fpga * \brief Set Doppler center frequency for the grid search. It will refresh the Doppler grid. * \param doppler_center - Frequency center of the search grid [Hz]. */ - inline void set_doppler_center(int32_t doppler_center) - { - if (doppler_center != d_doppler_center) - { - DLOG(INFO) << " Doppler assistance for Channel: " << d_channel << " => Doppler: " << doppler_center << "[Hz]"; - d_doppler_center = doppler_center; - } - } + void set_doppler_center(int32_t doppler_center); /*! * \brief This function triggers a HW reset of the FPGA PL. diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc index 3d919f87fd..34eb3d1899 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc @@ -20,7 +20,6 @@ #include "MATH_CONSTANTS.h" #include "concurrent_map.h" #include "gps_acq_assist.h" -#include #include #include #include @@ -30,6 +29,11 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif extern Concurrent_Map global_gps_acq_assist_map; diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc index e16d184a31..ed4ed9ddb4 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc @@ -22,7 +22,6 @@ #include "pcps_cccwsr_acquisition_cc.h" #include "MATH_CONSTANTS.h" // TWO_PI -#include #include #include #include @@ -32,6 +31,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + pcps_cccwsr_acquisition_cc_sptr pcps_cccwsr_make_acquisition_cc( uint32_t sampled_ms, diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc index 2f0e3662a4..5f2fa348c3 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc @@ -38,7 +38,6 @@ #include "MATH_CONSTANTS.h" // TWO_PI #include "opencl/fft_base_kernels.h" #include "opencl/fft_internal.h" -#include #include #include #include @@ -50,6 +49,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + pcps_opencl_acquisition_cc_sptr pcps_make_opencl_acquisition_cc( uint32_t sampled_ms, uint32_t max_dwells, diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc index 39bac577c2..fdd6d918ad 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc @@ -16,7 +16,6 @@ #include "pcps_quicksync_acquisition_cc.h" #include "MATH_CONSTANTS.h" -#include #include #include #include @@ -25,6 +24,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + pcps_quicksync_acquisition_cc_sptr pcps_quicksync_make_acquisition_cc( uint32_t folding_factor, diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc index f072dcd6a9..42c131337b 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc @@ -36,7 +36,6 @@ #include "pcps_tong_acquisition_cc.h" #include "MATH_CONSTANTS.h" // for TWO_PI -#include #include #include #include @@ -45,6 +44,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + pcps_tong_acquisition_cc_sptr pcps_tong_make_acquisition_cc( uint32_t sampled_ms, diff --git a/src/algorithms/acquisition/libs/CMakeLists.txt b/src/algorithms/acquisition/libs/CMakeLists.txt index 65437c6493..a2eb012309 100644 --- a/src/algorithms/acquisition/libs/CMakeLists.txt +++ b/src/algorithms/acquisition/libs/CMakeLists.txt @@ -38,12 +38,17 @@ target_link_libraries(acquisition_libs INTERFACE Gnuradio::runtime PRIVATE - Gflags::gflags - Glog::glog algorithms_libs core_system_parameters ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(acquisition_libs PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(acquisition_libs PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(acquisition_libs PRIVATE absl::flags absl::log) +endif() + if(ENABLE_CLANG_TIDY) if(CLANG_TIDY_EXE) set_target_properties(acquisition_libs diff --git a/src/algorithms/acquisition/libs/acq_conf.cc b/src/algorithms/acquisition/libs/acq_conf.cc index 715b07f625..e0ad5d4907 100644 --- a/src/algorithms/acquisition/libs/acq_conf.cc +++ b/src/algorithms/acquisition/libs/acq_conf.cc @@ -17,9 +17,14 @@ #include "acq_conf.h" #include "item_type_helpers.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + void Acq_Conf::SetFromConfiguration(const ConfigurationInterface *configuration, const std::string &role, double chip_rate, double opt_freq) diff --git a/src/algorithms/acquisition/libs/acq_conf_fpga.cc b/src/algorithms/acquisition/libs/acq_conf_fpga.cc index 838ab3ae6e..00e47b153e 100644 --- a/src/algorithms/acquisition/libs/acq_conf_fpga.cc +++ b/src/algorithms/acquisition/libs/acq_conf_fpga.cc @@ -18,11 +18,16 @@ #include "acq_conf_fpga.h" #include "item_type_helpers.h" #include "uio_fpga.h" -#include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + void Acq_Conf_Fpga::SetFromConfiguration(const ConfigurationInterface *configuration, const std::string &role, uint32_t sel_queue_fpga, uint32_t blk_exp, uint32_t downsampling_factor_default, double chip_rate, double code_length_chips) { diff --git a/src/algorithms/acquisition/libs/fpga_acquisition.cc b/src/algorithms/acquisition/libs/fpga_acquisition.cc index 667533c086..def42d9d8a 100644 --- a/src/algorithms/acquisition/libs/fpga_acquisition.cc +++ b/src/algorithms/acquisition/libs/fpga_acquisition.cc @@ -21,7 +21,6 @@ #include "fpga_acquisition.h" #include "MATH_CONSTANTS.h" // for TWO_PI -#include // for LOG #include // for log2 #include // libraries used by the GIPO #include // for operator<< @@ -29,6 +28,11 @@ #include // for write, close, read, ssize_t #include // for move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif #ifndef TEMP_FAILURE_RETRY #define TEMP_FAILURE_RETRY(exp) \ diff --git a/src/algorithms/channel/adapters/CMakeLists.txt b/src/algorithms/channel/adapters/CMakeLists.txt index 7d9ddcf83f..4d1fda6bac 100644 --- a/src/algorithms/channel/adapters/CMakeLists.txt +++ b/src/algorithms/channel/adapters/CMakeLists.txt @@ -26,9 +26,15 @@ target_link_libraries(channel_adapters channel_libs PRIVATE gnss_sdr_flags - Glog::glog ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(channel_adapters PRIVATE Glog::glog) + target_compile_definitions(channel_adapters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(channel_adapters PRIVATE absl::flags absl::log) +endif() + target_include_directories(channel_adapters PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/channel/adapters/channel.cc b/src/algorithms/channel/adapters/channel.cc index 444eef9582..f697433989 100644 --- a/src/algorithms/channel/adapters/channel.cc +++ b/src/algorithms/channel/adapters/channel.cc @@ -22,10 +22,14 @@ #include "gnss_sdr_flags.h" #include "telemetry_decoder_interface.h" #include "tracking_interface.h" -#include #include // for std::invalid_argument #include // for std::move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif Channel::Channel(const ConfigurationInterface* configuration, uint32_t channel, @@ -77,10 +81,17 @@ Channel::Channel(const ConfigurationInterface* configuration, { doppler_step = configuration->property("Acquisition_" + signal_str + ".doppler_step", 500); } +#if USE_GLOG_AND_GFLAGS if (FLAGS_doppler_step != 0) { doppler_step = static_cast(FLAGS_doppler_step); } +#else + if (absl::GetFlag(FLAGS_doppler_step) != 0) + { + doppler_step = static_cast(absl::GetFlag(FLAGS_doppler_step)); + } +#endif DLOG(INFO) << "Channel " << channel_ << " Doppler_step = " << doppler_step; acq_->set_doppler_step(doppler_step); diff --git a/src/algorithms/channel/libs/CMakeLists.txt b/src/algorithms/channel/libs/CMakeLists.txt index 63e0d72d83..dc5715abb1 100644 --- a/src/algorithms/channel/libs/CMakeLists.txt +++ b/src/algorithms/channel/libs/CMakeLists.txt @@ -39,10 +39,15 @@ target_link_libraries(channel_libs PRIVATE core_libs Boost::headers - Gflags::gflags - Glog::glog ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(channel_libs PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(channel_libs PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(channel_libs PRIVATE absl::flags absl::log) +endif() + target_include_directories(channel_libs PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/receiver diff --git a/src/algorithms/channel/libs/channel_fsm.cc b/src/algorithms/channel/libs/channel_fsm.cc index 48f001238a..c092c77a8e 100644 --- a/src/algorithms/channel/libs/channel_fsm.cc +++ b/src/algorithms/channel/libs/channel_fsm.cc @@ -18,9 +18,14 @@ #include "channel_fsm.h" #include "channel_event.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + ChannelFsm::ChannelFsm() : queue_(nullptr), channel_(0U), diff --git a/src/algorithms/channel/libs/channel_msg_receiver_cc.cc b/src/algorithms/channel/libs/channel_msg_receiver_cc.cc index 4d2e5616b4..3a9607b5af 100644 --- a/src/algorithms/channel/libs/channel_msg_receiver_cc.cc +++ b/src/algorithms/channel/libs/channel_msg_receiver_cc.cc @@ -17,12 +17,17 @@ #include "channel_msg_receiver_cc.h" -#include #include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if PMT_USES_BOOST_ANY #include namespace wht = boost; diff --git a/src/algorithms/conditioner/adapters/CMakeLists.txt b/src/algorithms/conditioner/adapters/CMakeLists.txt index 7c24d008eb..59432f3e9f 100644 --- a/src/algorithms/conditioner/adapters/CMakeLists.txt +++ b/src/algorithms/conditioner/adapters/CMakeLists.txt @@ -37,11 +37,15 @@ endif() target_link_libraries(conditioner_adapters PUBLIC Gnuradio::runtime - PRIVATE - Gflags::gflags - Glog::glog ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(conditioner_adapters PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(conditioner_adapters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(conditioner_adapters PRIVATE absl::flags absl::log) +endif() + target_include_directories(conditioner_adapters PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/conditioner/adapters/array_signal_conditioner.cc b/src/algorithms/conditioner/adapters/array_signal_conditioner.cc index 02471e8a50..85256ee132 100644 --- a/src/algorithms/conditioner/adapters/array_signal_conditioner.cc +++ b/src/algorithms/conditioner/adapters/array_signal_conditioner.cc @@ -17,9 +17,13 @@ #include "array_signal_conditioner.h" #include "configuration_interface.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif // Constructor ArraySignalConditioner::ArraySignalConditioner(std::shared_ptr data_type_adapt, diff --git a/src/algorithms/conditioner/adapters/signal_conditioner.cc b/src/algorithms/conditioner/adapters/signal_conditioner.cc index 871ed0a516..421871708c 100644 --- a/src/algorithms/conditioner/adapters/signal_conditioner.cc +++ b/src/algorithms/conditioner/adapters/signal_conditioner.cc @@ -16,10 +16,14 @@ */ #include "signal_conditioner.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif // Constructor SignalConditioner::SignalConditioner(std::shared_ptr data_type_adapt, diff --git a/src/algorithms/data_type_adapter/adapters/CMakeLists.txt b/src/algorithms/data_type_adapter/adapters/CMakeLists.txt index f3829b5abf..2536241908 100644 --- a/src/algorithms/data_type_adapter/adapters/CMakeLists.txt +++ b/src/algorithms/data_type_adapter/adapters/CMakeLists.txt @@ -53,11 +53,16 @@ target_link_libraries(data_type_adapters Gnuradio::blocks data_type_gr_blocks PRIVATE - Gflags::gflags - Glog::glog Volk::volk ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(data_type_adapters PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(data_type_adapters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(data_type_adapters PRIVATE absl::flags absl::log) +endif() + if(ENABLE_CLANG_TIDY) if(CLANG_TIDY_EXE) set_target_properties(data_type_adapters diff --git a/src/algorithms/data_type_adapter/adapters/byte_to_short.cc b/src/algorithms/data_type_adapter/adapters/byte_to_short.cc index 43e9d119bf..afb062772d 100644 --- a/src/algorithms/data_type_adapter/adapters/byte_to_short.cc +++ b/src/algorithms/data_type_adapter/adapters/byte_to_short.cc @@ -16,9 +16,14 @@ #include "byte_to_short.h" #include "configuration_interface.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + ByteToShort::ByteToShort(const ConfigurationInterface* configuration, std::string role, diff --git a/src/algorithms/data_type_adapter/adapters/ibyte_to_cbyte.cc b/src/algorithms/data_type_adapter/adapters/ibyte_to_cbyte.cc index dc825015d0..835ec2021b 100644 --- a/src/algorithms/data_type_adapter/adapters/ibyte_to_cbyte.cc +++ b/src/algorithms/data_type_adapter/adapters/ibyte_to_cbyte.cc @@ -17,9 +17,14 @@ #include "ibyte_to_cbyte.h" #include "configuration_interface.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + IbyteToCbyte::IbyteToCbyte(const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/data_type_adapter/adapters/ibyte_to_complex.cc b/src/algorithms/data_type_adapter/adapters/ibyte_to_complex.cc index 13be7798c7..a79458e5b2 100644 --- a/src/algorithms/data_type_adapter/adapters/ibyte_to_complex.cc +++ b/src/algorithms/data_type_adapter/adapters/ibyte_to_complex.cc @@ -16,7 +16,12 @@ #include "ibyte_to_complex.h" #include "configuration_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif IbyteToComplex::IbyteToComplex(const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/data_type_adapter/adapters/ibyte_to_cshort.cc b/src/algorithms/data_type_adapter/adapters/ibyte_to_cshort.cc index a146ef474d..2420bcd0fa 100644 --- a/src/algorithms/data_type_adapter/adapters/ibyte_to_cshort.cc +++ b/src/algorithms/data_type_adapter/adapters/ibyte_to_cshort.cc @@ -17,9 +17,13 @@ #include "ibyte_to_cshort.h" #include "configuration_interface.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif IbyteToCshort::IbyteToCshort(const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/data_type_adapter/adapters/ishort_to_complex.cc b/src/algorithms/data_type_adapter/adapters/ishort_to_complex.cc index 0e67db072c..18d8df5715 100644 --- a/src/algorithms/data_type_adapter/adapters/ishort_to_complex.cc +++ b/src/algorithms/data_type_adapter/adapters/ishort_to_complex.cc @@ -16,8 +16,12 @@ #include "ishort_to_complex.h" #include "configuration_interface.h" -#include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif IshortToComplex::IshortToComplex(const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/data_type_adapter/adapters/ishort_to_cshort.cc b/src/algorithms/data_type_adapter/adapters/ishort_to_cshort.cc index b51232869f..80e1c680a9 100644 --- a/src/algorithms/data_type_adapter/adapters/ishort_to_cshort.cc +++ b/src/algorithms/data_type_adapter/adapters/ishort_to_cshort.cc @@ -17,9 +17,13 @@ #include "ishort_to_cshort.h" #include "configuration_interface.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif IshortToCshort::IshortToCshort(const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/input_filter/adapters/CMakeLists.txt b/src/algorithms/input_filter/adapters/CMakeLists.txt index a4f052adee..6af64cff8e 100644 --- a/src/algorithms/input_filter/adapters/CMakeLists.txt +++ b/src/algorithms/input_filter/adapters/CMakeLists.txt @@ -47,11 +47,16 @@ target_link_libraries(input_filter_adapters algorithms_libs input_filter_gr_blocks PRIVATE - Gflags::gflags - Glog::glog Volk::volk ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(input_filter_adapters PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(input_filter_adapters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(input_filter_adapters PRIVATE absl::flags absl::log) +endif() + if(GNURADIO_IS_38_OR_GREATER) target_compile_definitions(input_filter_adapters PUBLIC -DGR_GREATER_38=1) endif() diff --git a/src/algorithms/input_filter/adapters/beamformer_filter.cc b/src/algorithms/input_filter/adapters/beamformer_filter.cc index 4a96bf85b4..daa8b1ec59 100644 --- a/src/algorithms/input_filter/adapters/beamformer_filter.cc +++ b/src/algorithms/input_filter/adapters/beamformer_filter.cc @@ -17,9 +17,13 @@ #include "beamformer_filter.h" #include "beamformer.h" #include "configuration_interface.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif BeamformerFilter::BeamformerFilter( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/input_filter/adapters/fir_filter.cc b/src/algorithms/input_filter/adapters/fir_filter.cc index ad76b5f6a0..12cef24cad 100644 --- a/src/algorithms/input_filter/adapters/fir_filter.cc +++ b/src/algorithms/input_filter/adapters/fir_filter.cc @@ -17,11 +17,15 @@ #include "fir_filter.h" #include "configuration_interface.h" -#include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif FirFilter::FirFilter(const ConfigurationInterface* configuration, std::string role, diff --git a/src/algorithms/input_filter/adapters/freq_xlating_fir_filter.cc b/src/algorithms/input_filter/adapters/freq_xlating_fir_filter.cc index 1d4e2f3867..1378931c8c 100644 --- a/src/algorithms/input_filter/adapters/freq_xlating_fir_filter.cc +++ b/src/algorithms/input_filter/adapters/freq_xlating_fir_filter.cc @@ -17,13 +17,17 @@ #include "freq_xlating_fir_filter.h" #include "configuration_interface.h" -#include #include #include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif FreqXlatingFirFilter::FreqXlatingFirFilter(const ConfigurationInterface* configuration, std::string role, diff --git a/src/algorithms/input_filter/adapters/notch_filter.cc b/src/algorithms/input_filter/adapters/notch_filter.cc index 1ca31c5f37..8e8b93392f 100644 --- a/src/algorithms/input_filter/adapters/notch_filter.cc +++ b/src/algorithms/input_filter/adapters/notch_filter.cc @@ -19,8 +19,12 @@ #include "configuration_interface.h" #include "notch_cc.h" #include -#include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif NotchFilter::NotchFilter(const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/input_filter/adapters/notch_filter_lite.cc b/src/algorithms/input_filter/adapters/notch_filter_lite.cc index 8dc1616889..42afd1713c 100644 --- a/src/algorithms/input_filter/adapters/notch_filter_lite.cc +++ b/src/algorithms/input_filter/adapters/notch_filter_lite.cc @@ -19,9 +19,13 @@ #include "configuration_interface.h" #include "notch_lite_cc.h" #include -#include #include // for max +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif NotchFilterLite::NotchFilterLite(const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/input_filter/adapters/pulse_blanking_filter.cc b/src/algorithms/input_filter/adapters/pulse_blanking_filter.cc index b28c13d473..8971d2c9d9 100644 --- a/src/algorithms/input_filter/adapters/pulse_blanking_filter.cc +++ b/src/algorithms/input_filter/adapters/pulse_blanking_filter.cc @@ -19,12 +19,16 @@ #include "pulse_blanking_filter.h" #include "configuration_interface.h" #include -#include #include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif PulseBlankingFilter::PulseBlankingFilter(const ConfigurationInterface* configuration, std::string role, diff --git a/src/algorithms/libs/CMakeLists.txt b/src/algorithms/libs/CMakeLists.txt index 1e31cf4c3f..3f0b050a6c 100644 --- a/src/algorithms/libs/CMakeLists.txt +++ b/src/algorithms/libs/CMakeLists.txt @@ -109,10 +109,15 @@ target_link_libraries(algorithms_libs core_system_parameters Volk::volk Volkgnsssdr::volkgnsssdr - Gflags::gflags - Glog::glog ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(algorithms_libs PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(algorithms_libs PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(algorithms_libs PRIVATE absl::flags absl::log) +endif() + if(GNURADIO_USES_STD_POINTERS) target_compile_definitions(algorithms_libs PUBLIC -DGNURADIO_USES_STD_POINTERS=1 @@ -208,13 +213,14 @@ else() target_link_libraries(gnss_sdr_flags PRIVATE Boost::filesystem Boost::system) endif() -target_link_libraries(gnss_sdr_flags - PUBLIC - Gflags::gflags -) - -if(GFLAGS_GREATER_20 OR ${LOCAL_GFLAGS}) - target_compile_definitions(gnss_sdr_flags PRIVATE -DGFLAGS_GREATER_2_0=1) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(gnss_sdr_flags PUBLIC Gflags::gflags) + target_compile_definitions(gnss_sdr_flags PUBLIC -DUSE_GLOG_AND_GFLAGS=1) + if(GFLAGS_GREATER_20 OR "${LOCAL_GFLAGS}") + target_compile_definitions(gnss_sdr_flags PRIVATE -DGFLAGS_GREATER_2_0=1) + endif() +else() + target_link_libraries(gnss_sdr_flags PUBLIC absl::flags) endif() target_compile_definitions(gnss_sdr_flags diff --git a/src/algorithms/libs/gnss_sdr_flags.cc b/src/algorithms/libs/gnss_sdr_flags.cc index 4961c01aa2..8cd9bab54d 100644 --- a/src/algorithms/libs/gnss_sdr_flags.cc +++ b/src/algorithms/libs/gnss_sdr_flags.cc @@ -1,7 +1,7 @@ /*! * \file gnss_sdr_flags.cc * \brief Helper file for gnss-sdr commandline flags - * \author Carles Fernandez-Prades, 2018. cfernandez(at)cttc.es + * \author Carles Fernandez-Prades, 2018-2024. cfernandez(at)cttc.es * * * ----------------------------------------------------------------------------- @@ -9,7 +9,7 @@ * GNSS-SDR is a Global Navigation Satellite System software-defined receiver. * This file is part of GNSS-SDR. * - * Copyright (C) 2010-2020 (see AUTHORS file for a list of contributors) + * Copyright (C) 2010-2024 (see AUTHORS file for a list of contributors) * SPDX-License-Identifier: GPL-3.0-or-later * * ----------------------------------------------------------------------------- @@ -19,9 +19,8 @@ #include "gnss_sdr_flags.h" #include "gnss_sdr_filesystem.h" #include -#include - +#if USE_GLOG_AND_GFLAGS DEFINE_string(c, "-", "Path to the configuration file (if set, overrides --config_file)."); DEFINE_string(config_file, std::string(GNSSSDR_INSTALL_DIR "/share/gnss-sdr/conf/default.conf"), @@ -69,7 +68,7 @@ DEFINE_bool(keyboard, true, "If set to false, it disables the keyboard listener static bool ValidateC(const char* flagname, const std::string& value) { - if (fs::exists(value) or value == "-") + if (fs::exists(value) || value == "-") { // value is ok return true; } @@ -80,7 +79,7 @@ static bool ValidateC(const char* flagname, const std::string& value) static bool ValidateConfigFile(const char* flagname, const std::string& value) { - if (fs::exists(value) or value == std::string(GNSSSDR_INSTALL_DIR "/share/gnss-sdr/conf/default.conf")) + if (fs::exists(value) || value == std::string(GNSSSDR_INSTALL_DIR "/share/gnss-sdr/conf/default.conf")) { // value is ok return true; } @@ -91,7 +90,7 @@ static bool ValidateConfigFile(const char* flagname, const std::string& value) static bool ValidateS(const char* flagname, const std::string& value) { - if (fs::exists(value) or value == "-") + if (fs::exists(value) || value == "-") { // value is ok return true; } @@ -102,7 +101,7 @@ static bool ValidateS(const char* flagname, const std::string& value) static bool ValidateSignalSource(const char* flagname, const std::string& value) { - if (fs::exists(value) or value == "-") + if (fs::exists(value) || value == "-") { // value is ok return true; } @@ -235,3 +234,134 @@ DEFINE_validator(pll_bw_hz, &ValidatePllBw); DEFINE_validator(carrier_smoothing_factor, &ValidateCarrierSmoothingFactor); #endif + +#else +ABSL_FLAG(std::string, c, "-", "Path to the configuration file (if set, overrides --config_file)."); +ABSL_FLAG(std::string, config_file, std::string(GNSSSDR_INSTALL_DIR "/share/gnss-sdr/conf/default.conf"), "Path to the configuration file."); +ABSL_FLAG(std::string, log_dir, "", "Directory for log files"); +ABSL_FLAG(std::string, s, "-", "If defined, path to the file containing the signal samples (overrides the configuration file and --signal_source)."); +ABSL_FLAG(std::string, signal_source, "-", "If defined, path to the file containing the signal samples (overrides the configuration file)."); +ABSL_FLAG(std::string, timestamp_source, "-", "If defined, path to the file containing the signal timestamp data (overrides the configuration file)."); +ABSL_FLAG(bool, rf_shutdown, true, "If set to false, AD9361 RF channels are not shut down when exiting the program. Useful to leave the AD9361 configured and running."); +ABSL_FLAG(int32_t, doppler_max, 0, "If defined, sets the maximum Doppler value in the search grid, in Hz (overrides the configuration file)."); +ABSL_FLAG(int32_t, doppler_step, 0, "If defined, sets the frequency step in the search grid, in Hz (overrides the configuration file)."); +ABSL_FLAG(int32_t, cn0_samples, 20, "Number of correlator outputs used for CN0 estimation."); +ABSL_FLAG(int32_t, cn0_min, 25, "Minimum valid CN0 (in dB-Hz)."); +ABSL_FLAG(int32_t, max_carrier_lock_fail, 5000, "Maximum number of carrier lock failures before dropping a satellite."); +ABSL_FLAG(int32_t, max_lock_fail, 50, "Maximum number of code lock failures before dropping a satellite."); +ABSL_FLAG(double, carrier_lock_th, 0.7, "Carrier lock threshold (in rad)."); +ABSL_FLAG(double, dll_bw_hz, 0.0, "If defined, bandwidth of the DLL low pass filter, in Hz (overrides the configuration file)."); +ABSL_FLAG(double, pll_bw_hz, 0.0, "If defined, bandwidth of the PLL low pass filter, in Hz (overrides the configuration file)."); +ABSL_FLAG(int32_t, carrier_smoothing_factor, DEFAULT_CARRIER_SMOOTHING_FACTOR, "Sets carrier smoothing factor M (overrides the configuration file)"); +ABSL_FLAG(std::string, RINEX_version, "-", "If defined, specifies the RINEX version (2.11 or 3.02). Overrides the configuration file."); +ABSL_FLAG(std::string, RINEX_name, "-", "If defined, specifies the RINEX files base name"); +ABSL_FLAG(bool, keyboard, true, "If set to false, it disables the keyboard listener (so the receiver cannot be stopped with q+[Enter])"); + +bool ValidateFlags() +{ + bool success = true; + + auto value_c = absl::GetFlag(FLAGS_c); + if (!(fs::exists(value_c) || value_c == "-")) + { + std::cerr << "Invalid value for flag -c. The file '" << value_c << "' does not exist.\n"; + success = false; + } + + auto value_config_file = absl::GetFlag(FLAGS_config_file); + if (!(fs::exists(value_config_file) || value_config_file == std::string(GNSSSDR_INSTALL_DIR "/share/gnss-sdr/conf/default.conf"))) + { + std::cerr << "Invalid value for flag -config_file. The file '" << value_config_file << "' does not exist.\n"; + success = false; + } + + auto value_s = absl::GetFlag(FLAGS_s); + if (!(fs::exists(value_s) || value_s == "-")) + { + std::cerr << "Invalid value for flag -s. The file '" << value_s << "' does not exist.\n"; + success = false; + } + + auto value_signal_source = absl::GetFlag(FLAGS_signal_source); + if (!(fs::exists(value_signal_source) || value_signal_source == "-")) + { + std::cerr << "Invalid value for flag -signal_source. The file '" << value_signal_source << "' does not exist.\n"; + success = false; + } + + auto value_doppler_max = absl::GetFlag(FLAGS_doppler_max); + const int32_t max_doppler_value = 1000000; + if (value_doppler_max < 0 || value_doppler_max > max_doppler_value) + { + std::cerr << "Invalid value for flag -doppler_max. Allowed range is 0 < doppler_max < " << max_doppler_value << " Hz.\n"; + success = false; + } + + auto value_doppler_step = absl::GetFlag(FLAGS_doppler_step); + const int32_t max_value_doppler_step = 10000; + if (value_doppler_step < 0 || value_doppler_step > max_value_doppler_step) + { + std::cerr << "Invalid value for flag -doppler_step: " << value_doppler_step << ". Allowed range is 0 < doppler_step < " << max_value_doppler_step << " Hz.\n"; + success = false; + } + + auto value_cn0_samples = absl::GetFlag(FLAGS_cn0_samples); + const int32_t max_value_cn0_samples = 10000; + if (value_cn0_samples < 0 || value_cn0_samples > max_value_cn0_samples) + { + std::cerr << "Invalid value for flag -cn0_samples: " << value_cn0_samples << ". Allowed range is 0 < cn0_samples < " << max_value_cn0_samples << " Hz.\n"; + success = false; + } + + auto value_cn0_min = absl::GetFlag(FLAGS_cn0_min); + const int32_t max_value_cn0_min = 100; + if (value_cn0_min < 0 || value_cn0_min > max_value_cn0_min) + { + std::cerr << "Invalid value for flag -cn0_min: " << value_cn0_min << ". Allowed range is 0 < cn0_min < " << max_value_cn0_min << " Hz.\n"; + success = false; + } + + auto value_max_lock_fail = absl::GetFlag(FLAGS_max_lock_fail); + const int32_t max_value_max_lock_fail = 10000; + if (value_max_lock_fail < 0 || value_max_lock_fail > max_value_max_lock_fail) + { + std::cerr << "Invalid value for flag -max_lock_fail: " << value_max_lock_fail << ". Allowed range is 0 < max_lock_fail < " << max_value_max_lock_fail << " Hz.\n"; + success = false; + } + + auto value_carrier_lock_th = absl::GetFlag(FLAGS_carrier_lock_th); + const double max_value_carrier_lock_th = 1.508; + if (value_carrier_lock_th < 0.0 || value_carrier_lock_th > max_value_carrier_lock_th) + { + std::cerr << "Invalid value for flag -carrier_lock_th: " << value_carrier_lock_th << ". Allowed range is 0 < carrier_lock_th < " << max_value_carrier_lock_th << " Hz.\n"; + success = false; + } + + auto value_dll_bw_hz = absl::GetFlag(FLAGS_dll_bw_hz); + const double max_value_dll_bw_hz = 10000.0; + if (value_dll_bw_hz < 0.0 || value_dll_bw_hz > max_value_dll_bw_hz) + { + std::cerr << "Invalid value for flag -dll_bw_hz: " << value_dll_bw_hz << ". Allowed range is 0 < dll_bw_hz < " << max_value_dll_bw_hz << " Hz.\n"; + success = false; + } + + auto value_pll_bw_hz = absl::GetFlag(FLAGS_pll_bw_hz); + const double max_value_pll_bw_hz = 10000.0; + if (value_pll_bw_hz < 0.0 || value_pll_bw_hz > max_value_pll_bw_hz) + { + std::cerr << "Invalid value for flag -pll_bw_hz: " << value_pll_bw_hz << ". Allowed range is 0 < pll_bw_hz < " << max_value_pll_bw_hz << " Hz.\n"; + success = false; + } + + auto value_carrier_smoothing_factor = absl::GetFlag(FLAGS_carrier_smoothing_factor); + const int32_t min_value_carrier_smoothing_factor = 1; + if (value_carrier_smoothing_factor < min_value_carrier_smoothing_factor) + { + std::cerr << "Invalid value for flag -carrier_smoothing_factor: " << value_carrier_smoothing_factor << ". Allowed range is 1 <= carrier_smoothing_factor.\n"; + success = false; + } + + return success; +} + +#endif diff --git a/src/algorithms/libs/gnss_sdr_flags.h b/src/algorithms/libs/gnss_sdr_flags.h index 361195a499..4b175d0718 100644 --- a/src/algorithms/libs/gnss_sdr_flags.h +++ b/src/algorithms/libs/gnss_sdr_flags.h @@ -1,7 +1,7 @@ /*! * \file gnss_sdr_flags.h * \brief Helper file for gnss-sdr commandline flags - * \author Carles Fernandez-Prades, 2018. cfernandez(at)cttc.es + * \author Carles Fernandez-Prades, 2018-2024. cfernandez(at)cttc.es * * * ----------------------------------------------------------------------------- @@ -9,7 +9,7 @@ * GNSS-SDR is a Global Navigation Satellite System software-defined receiver. * This file is part of GNSS-SDR. * - * Copyright (C) 2010-2020 (see AUTHORS file for a list of contributors) + * Copyright (C) 2010-2024 (see AUTHORS file for a list of contributors) * SPDX-License-Identifier: GPL-3.0-or-later * * ----------------------------------------------------------------------------- @@ -18,9 +18,20 @@ #ifndef GNSS_SDR_GNSS_SDR_FLAGS_H #define GNSS_SDR_GNSS_SDR_FLAGS_H +#include +#include +#if USE_GLOG_AND_GFLAGS #include -#include +#else +#include +#include +#include +#include +#include +#include +#endif + /** \addtogroup Algorithms_Library * \{ */ @@ -28,7 +39,7 @@ * Library for command-line handling. * \{ */ - +#if USE_GLOG_AND_GFLAGS DECLARE_string(c); //!< Path to the configuration file. DECLARE_string(config_file); //!< Path to the configuration file. @@ -62,6 +73,115 @@ DECLARE_string(RINEX_version); //!< If defined, specifies the RINEX version (2. DECLARE_string(RINEX_name); //!< If defined, specifies the RINEX files base name DECLARE_bool(keyboard); //!< If set to false, disables the keyboard listener. Only for debug purposes (e.g. ASAN mode termination) +#else +ABSL_DECLARE_FLAG(std::string, c); //!< Path to the configuration file. +ABSL_DECLARE_FLAG(std::string, config_file); //!< Path to the configuration file. + +ABSL_DECLARE_FLAG(std::string, log_dir); //!< Path to the folder in which logging will be stored. + +// Declare flags for signal sources +ABSL_DECLARE_FLAG(std::string, s); //!< Path to the file containing the signal samples. +ABSL_DECLARE_FLAG(std::string, signal_source); //!< Path to the file containing the signal samples. +ABSL_DECLARE_FLAG(std::string, timestamp_source); //!< Path to the file containing the signal samples. +ABSL_DECLARE_FLAG(bool, rf_shutdown); //!< Shutdown RF when program exits. + +// Declare flags for acquisition blocks +ABSL_DECLARE_FLAG(int32_t, doppler_max); //!< If defined, maximum Doppler value in the search grid, in Hz (overrides the configuration file). +ABSL_DECLARE_FLAG(int32_t, doppler_step); //!< If defined, sets the frequency step in the search grid, in Hz, in Hz (overrides the configuration file). + +// Declare flags for tracking blocks +ABSL_DECLARE_FLAG(int32_t, cn0_samples); //!< Number of correlator outputs used for CN0 estimation. +ABSL_DECLARE_FLAG(int32_t, cn0_min); //!< Minimum valid CN0 (in dB-Hz). +ABSL_DECLARE_FLAG(int32_t, max_lock_fail); //!< Maximum number of code lock failures before dropping a satellite. +ABSL_DECLARE_FLAG(int32_t, max_carrier_lock_fail); //!< Maximum number of carrier lock failures before dropping a satellite. +ABSL_DECLARE_FLAG(double, carrier_lock_th); //!< Carrier lock threshold (in rad). +ABSL_DECLARE_FLAG(double, dll_bw_hz); //!< Bandwidth of the DLL low pass filter, in Hz (overrides the configuration file). +ABSL_DECLARE_FLAG(double, pll_bw_hz); //!< Bandwidth of the PLL low pass filter, in Hz (overrides the configuration file). + +// Declare flags for observables block +ABSL_DECLARE_FLAG(int32_t, carrier_smoothing_factor); //!< Sets carrier smoothing factor M (overrides the configuration file). +const int32_t DEFAULT_CARRIER_SMOOTHING_FACTOR = 200; + +// Declare flags for PVT +ABSL_DECLARE_FLAG(std::string, RINEX_version); //!< If defined, specifies the RINEX version (2.11 or 3.02). Overrides the configuration file. +ABSL_DECLARE_FLAG(std::string, RINEX_name); //!< If defined, specifies the RINEX files base name +ABSL_DECLARE_FLAG(bool, keyboard); //!< If set to false, disables the keyboard listener. Only for debug purposes (e.g. ASAN mode termination) + +static inline void GetTempDirectories(std::vector& list) +{ + list.clear(); + // Directories, in order of preference. If we find a dir that + // exists, we stop adding other less-preferred dirs + const char* candidates[] = { + // Non-null only during unittest/regtest + std::getenv("TEST_TMPDIR"), + + // Explicitly-supplied temp dirs + std::getenv("TMPDIR"), + std::getenv("TMP"), + + // If all else fails + "/tmp", + }; + for (auto d : candidates) + { + if (!d) continue; // Empty env var + + // Make sure we don't surprise anyone who's expecting a '/' + std::string dstr = d; + if (dstr[dstr.size() - 1] != '/') + { + dstr += "/"; + } + list.push_back(dstr); + + struct stat statbuf; + if (!stat(d, &statbuf) && S_ISDIR(statbuf.st_mode)) + { + // We found a dir that exists - we're done. + return; + } + } +} + + +static inline void GetExistingTempDirectories(std::vector& list) +{ + GetTempDirectories(list); + auto i_dir = list.begin(); + while (i_dir != list.end()) + { + if (access(i_dir->c_str(), 0)) + { + i_dir = list.erase(i_dir); + } + else + { + ++i_dir; + } + }; +} + + +static inline std::string GetTempDir() +{ + std::vector temp_directories_list; + GetExistingTempDirectories(temp_directories_list); + + if (temp_directories_list.empty()) + { + std::cerr << "No temporary directory found\n"; + exit(EXIT_FAILURE); + } + + // Use first directory from list of existing temporary directories. + return temp_directories_list.front(); +} + +bool ValidateFlags(); + +#endif + /** \} */ /** \} */ #endif // GNSS_SDR_GNSS_SDR_FLAGS_H diff --git a/src/algorithms/libs/pass_through.cc b/src/algorithms/libs/pass_through.cc index bc54ae61af..714b5cd27a 100644 --- a/src/algorithms/libs/pass_through.cc +++ b/src/algorithms/libs/pass_through.cc @@ -18,12 +18,16 @@ #include "pass_through.h" #include "configuration_interface.h" -#include #include #include #include // for int8_t #include // for operator<< +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif Pass_Through::Pass_Through(const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/libs/rtklib/CMakeLists.txt b/src/algorithms/libs/rtklib/CMakeLists.txt index c23d551198..e308f102c0 100644 --- a/src/algorithms/libs/rtklib/CMakeLists.txt +++ b/src/algorithms/libs/rtklib/CMakeLists.txt @@ -70,12 +70,17 @@ target_link_libraries(algorithms_libs_rtklib core_system_parameters algorithms_libs Armadillo::armadillo - Gflags::gflags - Glog::glog LAPACK::LAPACK BLAS::BLAS ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(algorithms_libs_rtklib PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(algorithms_libs_rtklib PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(algorithms_libs_rtklib PRIVATE absl::flags absl::log) +endif() + if(ENABLE_ARMA_NO_DEBUG) target_compile_definitions(algorithms_libs_rtklib PRIVATE -DARMA_NO_BOUND_CHECKING=1 diff --git a/src/algorithms/libs/rtklib/rtklib_rtkcmn.cc b/src/algorithms/libs/rtklib/rtklib_rtkcmn.cc index f216e13447..736928e51c 100644 --- a/src/algorithms/libs/rtklib/rtklib_rtkcmn.cc +++ b/src/algorithms/libs/rtklib/rtklib_rtkcmn.cc @@ -30,7 +30,6 @@ *----------------------------------------------------------------------------*/ #include "rtklib_rtkcmn.h" -#include #include #include #include @@ -43,6 +42,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + const double GPST0[] = {1980, 1, 6, 0, 0, 0}; /* gps time reference */ const double GST0[] = {1999, 8, 22, 0, 0, 0}; /* galileo system time reference */ const double BDT0[] = {2006, 1, 1, 0, 0, 0}; /* beidou time reference */ @@ -1034,7 +1039,7 @@ double *zeros(int n, int m) { return nullptr; } - if (!(p = static_cast(calloc(sizeof(double), n * m)))) + if (!(p = static_cast(calloc(n * m, sizeof(double))))) { fatalerr("matrix memory allocation error: n=%d,m=%d\n", n, m); } diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/CMakeLists.txt b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/CMakeLists.txt index bca6d3d23b..e567eab94c 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/CMakeLists.txt +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/CMakeLists.txt @@ -8,7 +8,7 @@ ######################################################################## # Project setup ######################################################################## -cmake_minimum_required(VERSION 2.8.12...3.28) +cmake_minimum_required(VERSION 2.8.12...3.30) set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose build type: None Debug Release RelWithDebInfo MinSizeRel") project(volk_gnsssdr) enable_language(CXX) diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/apps/CMakeLists.txt b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/apps/CMakeLists.txt index e4bfcf4d76..e821363c69 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/apps/CMakeLists.txt +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/apps/CMakeLists.txt @@ -77,6 +77,9 @@ if(UNIX) ) endif() +include(XcodeRemoveWarningDuplicates) +xcode_remove_warning_duplicates(volk_gnsssdr_profile) + if(ENABLE_STRIP) if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) set_target_properties(volk_gnsssdr_profile @@ -106,6 +109,8 @@ if(UNIX) ) endif() +xcode_remove_warning_duplicates(volk_gnsssdr-config-info) + if(ENABLE_STRIP) if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) set_target_properties(volk_gnsssdr-config-info diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindCPUFEATURES.cmake b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindCPUFEATURES.cmake index 6f25e91d23..7c25e69c27 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindCPUFEATURES.cmake +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindCPUFEATURES.cmake @@ -34,6 +34,7 @@ find_library(CPUFEATURES_LIBRARIES /usr/lib/x86_64-linux-gnux32 /usr/lib/alpha-linux-gnu /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindORC.cmake b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindORC.cmake index facb29f51e..9ac9f5ccbf 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindORC.cmake +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindORC.cmake @@ -71,6 +71,8 @@ find_path(ORC_LIBRARY_DIR /usr/lib/powerpc64le-linux-gnu /usr/lib/hppa-linux-gnu /usr/lib/s390x-linux-gnu + /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib @@ -97,6 +99,8 @@ find_library(ORC_LIB orc-0.4 /usr/lib/powerpc64le-linux-gnu /usr/lib/hppa-linux-gnu /usr/lib/s390x-linux-gnu + /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib @@ -125,6 +129,8 @@ find_library(ORC_LIBRARY_STATIC ${CMAKE_STATIC_LIBRARY_PREFIX}orc-0.4${CMAKE_STA /usr/lib/powerpc64le-linux-gnu /usr/lib/hppa-linux-gnu /usr/lib/s390x-linux-gnu + /usr/lib/riscv64-linux-gnu + /usr/lib/loongarch64-linux-gnu /usr/local/lib /usr/local/lib64 /opt/local/lib diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/XcodeRemoveWarningDuplicates.cmake b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/XcodeRemoveWarningDuplicates.cmake new file mode 100644 index 0000000000..f4e150fcc9 --- /dev/null +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/XcodeRemoveWarningDuplicates.cmake @@ -0,0 +1,23 @@ +# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. +# This file is part of GNSS-SDR. +# +# SPDX-FileCopyrightText: 2011-2024 C. Fernandez-Prades cfernandez(at)cttc.es +# SPDX-License-Identifier: BSD-3-Clause + +if(DEFINED __INCLUDED_XCODE_REMOVE_WARNING_DUPLICATES_CMAKE) + return() +endif() +set(__INCLUDED_XCODE_REMOVE_WARNING_DUPLICATES_CMAKE TRUE) + +function(xcode_remove_warning_duplicates target) + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") + if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "15.0.0") + # A bug in Xcode 15 adds duplicate flags to the linker. In addition, the + # `-warn_duplicate_libraries` is now enabled by default which may result + # in several 'duplicate libraries warning'. + # - https://gitlab.kitware.com/cmake/cmake/-/issues/25297 and + # - https://indiestack.com/2023/10/xcode-15-duplicate-library-linker-warnings/ + target_link_options(${target} PUBLIC "LINKER:-no_warn_duplicate_libraries") + endif() + endif() +endfunction() \ No newline at end of file diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/include/cpuinfo_aarch64.h b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/include/cpuinfo_aarch64.h index 618f17def2..a8cb0d41a6 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/include/cpuinfo_aarch64.h +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/include/cpuinfo_aarch64.h @@ -180,6 +180,8 @@ typedef struct int smebi32i32 : 1; // 1-bit binary to 32-bit integer outer product. int smeb16b16 : 1; // SME2.1 BFloat16 instructions. int smef16f16 : 1; // FP16 to FP16 outer product. + int mops : 1; // Standardized memory operations. + int hbc : 1; // Hinted conditional branches. // Make sure to update Aarch64FeaturesEnum below if you add a field here. } Aarch64Features; @@ -276,6 +278,8 @@ typedef enum AARCH64_SME_BI32I32, AARCH64_SME_B16B16, AARCH64_SME_F16F16, + AARCH64_MOPS, + AARCH64_HBC, AARCH64_LAST_, } Aarch64FeaturesEnum; diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/include/internal/hwcaps.h b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/include/internal/hwcaps.h index a787aa966c..63baa1fff2 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/include/internal/hwcaps.h +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/include/internal/hwcaps.h @@ -92,6 +92,8 @@ CPU_FEATURES_START_CPP_NAMESPACE #define AARCH64_HWCAP2_SME_BI32I32 (1UL << 40) #define AARCH64_HWCAP2_SME_B16B16 (1UL << 41) #define AARCH64_HWCAP2_SME_F16F16 (1UL << 42) +#define AARCH64_HWCAP2_MOPS (1UL << 43) +#define AARCH64_HWCAP2_HBC (1UL << 44) // http://elixir.free-electrons.com/linux/latest/source/arch/arm/include/uapi/asm/hwcap.h #define ARM_HWCAP_SWP (1UL << 0) diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/src/impl_aarch64__base_implementation.inl b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/src/impl_aarch64__base_implementation.inl index 36fd9a65ca..14be5a7261 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/src/impl_aarch64__base_implementation.inl +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/src/impl_aarch64__base_implementation.inl @@ -100,7 +100,10 @@ AARCH64_HWCAP2_SME_BI32I32) \ LINE(AARCH64_SME_B16B16, smeb16b16, "smeb16b16", 0, \ AARCH64_HWCAP2_SME_B16B16) \ - LINE(AARCH64_SME_F16F16, smef16f16, "smef16f16", 0, AARCH64_HWCAP2_SME_F16F16) + LINE(AARCH64_SME_F16F16, smef16f16, "smef16f16", 0, \ + AARCH64_HWCAP2_SME_F16F16) \ + LINE(AARCH64_MOPS, mops, "mops", 0, AARCH64_HWCAP2_MOPS) \ + LINE(AARCH64_HBC, hbc, "hbc", 0, AARCH64_HWCAP2_HBC) #define INTROSPECTION_PREFIX Aarch64 #define INTROSPECTION_ENUM_PREFIX AARCH64 #include "define_introspection_and_hwcaps.inl" \ No newline at end of file diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/test/cpuinfo_aarch64_test.cc b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/test/cpuinfo_aarch64_test.cc index d6ac501108..fc8abf8fe2 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/test/cpuinfo_aarch64_test.cc +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/test/cpuinfo_aarch64_test.cc @@ -324,6 +324,8 @@ CPU revision : 3)"); EXPECT_FALSE(info.features.smebi32i32); EXPECT_FALSE(info.features.smeb16b16); EXPECT_FALSE(info.features.smef16f16); + EXPECT_FALSE(info.features.mops); + EXPECT_FALSE(info.features.hbc); } #elif defined(CPU_FEATURES_OS_MACOS) TEST_F(CpuidAarch64Test, FromDarwinSysctlFromName) 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 2562bd90c2..6296881d0c 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 @@ -4,6 +4,7 @@ # SPDX-FileCopyrightText: 2010-2021 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause +include(XcodeRemoveWarningDuplicates) ######################################################################## # header file detection @@ -595,6 +596,9 @@ if(NOT (ENABLE_STATIC_LIBS AND (CMAKE_GENERATOR STREQUAL Xcode))) else() target_link_libraries(volk_gnsssdr PUBLIC ${volk_gnsssdr_libraries}) endif() + + xcode_remove_warning_duplicates(volk_gnsssdr) + target_include_directories(volk_gnsssdr PUBLIC $ PUBLIC $ @@ -676,6 +680,8 @@ if(ENABLE_STATIC_LIBS) ) set_target_properties(volk_gnsssdr_static PROPERTIES OUTPUT_NAME volk_gnsssdr) + xcode_remove_warning_duplicates(volk_gnsssdr_static) + install(TARGETS volk_gnsssdr_static EXPORT VOLK_GNSSSDR-export ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT "volk_gnsssdr_devel" @@ -702,6 +708,9 @@ if(ENABLE_TESTING) TARGET_DEPS volk_gnsssdr ) endif() + + xcode_remove_warning_duplicates(volk_gnsssdr_test_all) + foreach(kernel ${h_files}) get_filename_component(kernel ${kernel} NAME) string(REPLACE ".h" "" kernel ${kernel}) diff --git a/src/algorithms/observables/adapters/CMakeLists.txt b/src/algorithms/observables/adapters/CMakeLists.txt index a4097a4dd8..8417c15322 100644 --- a/src/algorithms/observables/adapters/CMakeLists.txt +++ b/src/algorithms/observables/adapters/CMakeLists.txt @@ -29,9 +29,15 @@ target_link_libraries(obs_adapters core_system_parameters PRIVATE gnss_sdr_flags - Glog::glog ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(obs_adapters PRIVATE Glog::glog) + target_compile_definitions(obs_adapters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(obs_adapters PRIVATE absl::flags absl::log) +endif() + if(ENABLE_CLANG_TIDY) if(CLANG_TIDY_EXE) set_target_properties(obs_adapters diff --git a/src/algorithms/observables/adapters/hybrid_observables.cc b/src/algorithms/observables/adapters/hybrid_observables.cc index fbb6ba2a36..7a434f5df7 100644 --- a/src/algorithms/observables/adapters/hybrid_observables.cc +++ b/src/algorithms/observables/adapters/hybrid_observables.cc @@ -19,9 +19,14 @@ #include "configuration_interface.h" #include "gnss_sdr_flags.h" #include "obs_conf.h" -#include #include // for operator<< +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + HybridObservables::HybridObservables(const ConfigurationInterface* configuration, const std::string& role, unsigned int in_streams, @@ -45,7 +50,11 @@ HybridObservables::HybridObservables(const ConfigurationInterface* configuration conf.always_output_gs = configuration->property("PVT.an_output_enabled", conf.always_output_gs) || configuration->property(role + ".always_output_gs", conf.always_output_gs); conf.enable_E6 = configuration->property("PVT.use_e6_for_pvt", conf.enable_E6); +#if USE_GLOG_AND_GFLAGS if (FLAGS_carrier_smoothing_factor == DEFAULT_CARRIER_SMOOTHING_FACTOR) +#else + if (absl::GetFlag(FLAGS_carrier_smoothing_factor) == DEFAULT_CARRIER_SMOOTHING_FACTOR) +#endif { conf.smoothing_factor = configuration->property(role + ".smoothing_factor", conf.smoothing_factor); } diff --git a/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt b/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt index 225518612a..a8964f90cd 100644 --- a/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt @@ -31,12 +31,17 @@ target_link_libraries(obs_gr_blocks PRIVATE algorithms_libs core_system_parameters - Gflags::gflags - Glog::glog Matio::matio Gnuradio::pmt ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(obs_gr_blocks PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(obs_gr_blocks PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(obs_gr_blocks PRIVATE absl::flags absl::log) +endif() + target_include_directories(obs_gr_blocks PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/observables/gnuradio_blocks/hybrid_observables_gs.cc b/src/algorithms/observables/gnuradio_blocks/hybrid_observables_gs.cc index a9bc194079..48a1b1c144 100644 --- a/src/algorithms/observables/gnuradio_blocks/hybrid_observables_gs.cc +++ b/src/algorithms/observables/gnuradio_blocks/hybrid_observables_gs.cc @@ -23,7 +23,6 @@ #include "gnss_sdr_filesystem.h" #include "gnss_sdr_make_unique.h" #include "gnss_synchro.h" -#include #include #include #include @@ -36,6 +35,12 @@ #include // for numeric_limits #include // for move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if PMT_USES_BOOST_ANY #include namespace wht = boost; diff --git a/src/algorithms/observables/libs/obs_conf.cc b/src/algorithms/observables/libs/obs_conf.cc index 9c11be7947..f89ae1be7a 100644 --- a/src/algorithms/observables/libs/obs_conf.cc +++ b/src/algorithms/observables/libs/obs_conf.cc @@ -18,6 +18,12 @@ #include "obs_conf.h" #include "gnss_sdr_flags.h" +#if USE_GLOG_AND_GFLAGS Obs_Conf::Obs_Conf() : smoothing_factor(FLAGS_carrier_smoothing_factor) { } +#else +Obs_Conf::Obs_Conf() : smoothing_factor(absl::GetFlag(FLAGS_carrier_smoothing_factor)) +{ +} +#endif \ No newline at end of file diff --git a/src/algorithms/resampler/adapters/CMakeLists.txt b/src/algorithms/resampler/adapters/CMakeLists.txt index ac4eca0820..0cda783f86 100644 --- a/src/algorithms/resampler/adapters/CMakeLists.txt +++ b/src/algorithms/resampler/adapters/CMakeLists.txt @@ -38,11 +38,16 @@ target_link_libraries(resampler_adapters PUBLIC resampler_gr_blocks PRIVATE - Gflags::gflags - Glog::glog Volk::volk ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(resampler_adapters PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(resampler_adapters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(resampler_adapters PRIVATE absl::flags absl::log) +endif() + target_include_directories(resampler_adapters PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/resampler/adapters/direct_resampler_conditioner.cc b/src/algorithms/resampler/adapters/direct_resampler_conditioner.cc index bffa67680d..57c8757423 100644 --- a/src/algorithms/resampler/adapters/direct_resampler_conditioner.cc +++ b/src/algorithms/resampler/adapters/direct_resampler_conditioner.cc @@ -20,13 +20,17 @@ #include "direct_resampler_conditioner_cb.h" #include "direct_resampler_conditioner_cc.h" #include "direct_resampler_conditioner_cs.h" -#include #include #include // for lv_8sc_t #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif DirectResamplerConditioner::DirectResamplerConditioner( const ConfigurationInterface* configuration, diff --git a/src/algorithms/resampler/adapters/mmse_resampler_conditioner.cc b/src/algorithms/resampler/adapters/mmse_resampler_conditioner.cc index 7ee86662f9..07f0e2b67c 100644 --- a/src/algorithms/resampler/adapters/mmse_resampler_conditioner.cc +++ b/src/algorithms/resampler/adapters/mmse_resampler_conditioner.cc @@ -17,12 +17,17 @@ #include "mmse_resampler_conditioner.h" #include "configuration_interface.h" -#include #include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + MmseResamplerConditioner::MmseResamplerConditioner( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/signal_generator/adapters/CMakeLists.txt b/src/algorithms/signal_generator/adapters/CMakeLists.txt index c430af3c26..b7f8c15372 100644 --- a/src/algorithms/signal_generator/adapters/CMakeLists.txt +++ b/src/algorithms/signal_generator/adapters/CMakeLists.txt @@ -27,11 +27,16 @@ target_link_libraries(signal_generator_adapters Gnuradio::pmt signal_generator_gr_blocks PRIVATE - Gflags::gflags - Glog::glog core_system_parameters ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(signal_generator_adapters PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(signal_generator_adapters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(signal_generator_adapters PRIVATE absl::flags absl::log) +endif() + target_include_directories(signal_generator_adapters PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/signal_generator/adapters/signal_generator.cc b/src/algorithms/signal_generator/adapters/signal_generator.cc index 841cbfe3fa..c5d7456898 100644 --- a/src/algorithms/signal_generator/adapters/signal_generator.cc +++ b/src/algorithms/signal_generator/adapters/signal_generator.cc @@ -25,10 +25,14 @@ #include "Galileo_E5b.h" #include "Galileo_E6.h" #include "configuration_interface.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif SignalGenerator::SignalGenerator(const ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, diff --git a/src/algorithms/signal_source/adapters/CMakeLists.txt b/src/algorithms/signal_source/adapters/CMakeLists.txt index afbf362963..e4ead311bf 100644 --- a/src/algorithms/signal_source/adapters/CMakeLists.txt +++ b/src/algorithms/signal_source/adapters/CMakeLists.txt @@ -169,10 +169,16 @@ target_link_libraries(signal_source_adapters algorithms_libs gnss_sdr_flags core_system_parameters - Glog::glog Volk::volk ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(signal_source_adapters PRIVATE Glog::glog) + target_compile_definitions(signal_source_adapters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(signal_source_adapters PRIVATE absl::flags absl::log) +endif() + if(GNURADIO_USES_STD_POINTERS) target_compile_definitions(signal_source_adapters PUBLIC -DGNURADIO_USES_STD_POINTERS=1 diff --git a/src/algorithms/signal_source/adapters/ad9361_fpga_signal_source.cc b/src/algorithms/signal_source/adapters/ad9361_fpga_signal_source.cc index 488c80ead8..3a3360bedd 100644 --- a/src/algorithms/signal_source/adapters/ad9361_fpga_signal_source.cc +++ b/src/algorithms/signal_source/adapters/ad9361_fpga_signal_source.cc @@ -31,7 +31,6 @@ #include "gnss_sdr_flags.h" #include "gnss_sdr_string_literals.h" #include "uio_fpga.h" -#include #include #include // for std::max #include // for std::chrono @@ -44,6 +43,12 @@ #include // for write #include // fr std::vector +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#include +#endif using namespace std::string_literals; @@ -90,7 +95,11 @@ Ad9361FpgaSignalSource::Ad9361FpgaSignalSource(const ConfigurationInterface *con enable_dynamic_bit_selection_(configuration->property(role + ".enable_dynamic_bit_selection", true)), enable_ovf_check_buffer_monitor_active_(false), dump_(configuration->property(role + ".dump", false)), +#if USE_GLOG_AND_GFLAGS rf_shutdown_(configuration->property(role + ".rf_shutdown", FLAGS_rf_shutdown)), +#else + rf_shutdown_(configuration->property(role + ".rf_shutdown", absl::GetFlag(FLAGS_rf_shutdown))), +#endif repeat_(configuration->property(role + ".repeat", false)) { const double seconds_to_skip = configuration->property(role + ".seconds_to_skip", 0.0); @@ -117,7 +126,7 @@ Ad9361FpgaSignalSource::Ad9361FpgaSignalSource(const ConfigurationInterface *con { filter_source_ = configuration->property(role + ".filter_source", std::string("Off")); } - +#if USE_GLOG_AND_GFLAGS // override value with commandline flag, if present if (FLAGS_signal_source != "-") { @@ -127,7 +136,16 @@ Ad9361FpgaSignalSource::Ad9361FpgaSignalSource(const ConfigurationInterface *con { filename0_ = FLAGS_s; } - +#else + if (absl::GetFlag(FLAGS_signal_source) != "-") + { + filename0_ = absl::GetFlag(FLAGS_signal_source); + } + if (absl::GetFlag(FLAGS_s) != "-") + { + filename0_ = absl::GetFlag(FLAGS_s); + } +#endif if (filename0_.empty()) { num_input_files_ = 2; diff --git a/src/algorithms/signal_source/adapters/ad936x_custom_signal_source.cc b/src/algorithms/signal_source/adapters/ad936x_custom_signal_source.cc index 796126e03f..b93dc9344c 100644 --- a/src/algorithms/signal_source/adapters/ad936x_custom_signal_source.cc +++ b/src/algorithms/signal_source/adapters/ad936x_custom_signal_source.cc @@ -21,10 +21,15 @@ #include "gnss_sdr_string_literals.h" #include "gnss_sdr_valve.h" #include -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + using namespace std::string_literals; Ad936xCustomSignalSource::Ad936xCustomSignalSource(const ConfigurationInterface* configuration, diff --git a/src/algorithms/signal_source/adapters/custom_udp_signal_source.cc b/src/algorithms/signal_source/adapters/custom_udp_signal_source.cc index 85299cc27a..8a96c375db 100644 --- a/src/algorithms/signal_source/adapters/custom_udp_signal_source.cc +++ b/src/algorithms/signal_source/adapters/custom_udp_signal_source.cc @@ -18,9 +18,13 @@ #include "custom_udp_signal_source.h" #include "configuration_interface.h" #include "gnss_sdr_string_literals.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif using namespace std::string_literals; diff --git a/src/algorithms/signal_source/adapters/fifo_signal_source.cc b/src/algorithms/signal_source/adapters/fifo_signal_source.cc index 7ffac8e5b9..c4f0fd08b8 100644 --- a/src/algorithms/signal_source/adapters/fifo_signal_source.cc +++ b/src/algorithms/signal_source/adapters/fifo_signal_source.cc @@ -19,10 +19,14 @@ #include "configuration_interface.h" #include "fifo_reader.h" #include "gnss_sdr_string_literals.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif using namespace std::string_literals; diff --git a/src/algorithms/signal_source/adapters/file_signal_source.cc b/src/algorithms/signal_source/adapters/file_signal_source.cc index d1267949ee..c4fbd25a26 100644 --- a/src/algorithms/signal_source/adapters/file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/file_signal_source.cc @@ -18,7 +18,12 @@ #include "file_signal_source.h" #include "gnss_sdr_string_literals.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif using namespace std::string_literals; diff --git a/src/algorithms/signal_source/adapters/file_source_base.cc b/src/algorithms/signal_source/adapters/file_source_base.cc index 6efa7cdbc2..7b9efcbc2d 100644 --- a/src/algorithms/signal_source/adapters/file_source_base.cc +++ b/src/algorithms/signal_source/adapters/file_source_base.cc @@ -29,12 +29,16 @@ #include "gnss_sdr_flags.h" #include "gnss_sdr_string_literals.h" #include "gnss_sdr_valve.h" -#include #include // for std::max #include // for ceil, floor #include // for std::cout, std:cerr #include // for std::move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif using namespace std::string_literals; @@ -93,7 +97,8 @@ FileSourceBase::FileSourceBase(ConfigurationInterface const* configuration, std: } } - // override value with commandline flag, if present +// override value with commandline flag, if present +#if USE_GLOG_AND_GFLAGS if (FLAGS_signal_source != "-") { filename_ = FLAGS_signal_source; @@ -102,6 +107,16 @@ FileSourceBase::FileSourceBase(ConfigurationInterface const* configuration, std: { filename_ = FLAGS_s; } +#else + if (absl::GetFlag(FLAGS_signal_source) != "-") + { + filename_ = absl::GetFlag(FLAGS_signal_source); + } + if (absl::GetFlag(FLAGS_s) != "-") + { + filename_ = absl::GetFlag(FLAGS_s); + } +#endif if (sampling_frequency_ == 0) { std::cerr << "Warning: parameter " << role_ << ".sampling_frequency is not set, this could lead to wrong results.\n" diff --git a/src/algorithms/signal_source/adapters/file_timestamp_signal_source.cc b/src/algorithms/signal_source/adapters/file_timestamp_signal_source.cc index 8a7c2958fc..92788ee025 100644 --- a/src/algorithms/signal_source/adapters/file_timestamp_signal_source.cc +++ b/src/algorithms/signal_source/adapters/file_timestamp_signal_source.cc @@ -18,9 +18,14 @@ #include "file_timestamp_signal_source.h" #include "gnss_sdr_flags.h" #include "gnss_sdr_string_literals.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + using namespace std::string_literals; FileTimestampSignalSource::FileTimestampSignalSource(const ConfigurationInterface* configuration, @@ -41,11 +46,18 @@ FileTimestampSignalSource::FileTimestampSignalSource(const ConfigurationInterfac LOG(ERROR) << "This implementation only supports one output stream"; } - // override value with commandline flag, if present + // override value with commandline flag, if present +#if USE_GLOG_AND_GFLAGS if (FLAGS_timestamp_source != "-") { timestamp_file_ = FLAGS_timestamp_source; } +#else + if (absl::GetFlag(FLAGS_timestamp_source) != "-") + { + timestamp_file_ = absl::GetFlag(FLAGS_timestamp_source); + } +#endif } diff --git a/src/algorithms/signal_source/adapters/flexiband_signal_source.cc b/src/algorithms/signal_source/adapters/flexiband_signal_source.cc index 03065374ea..1848b3da5b 100644 --- a/src/algorithms/signal_source/adapters/flexiband_signal_source.cc +++ b/src/algorithms/signal_source/adapters/flexiband_signal_source.cc @@ -19,11 +19,16 @@ #include "flexiband_signal_source.h" #include "configuration_interface.h" #include "gnss_sdr_string_literals.h" -#include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + using namespace std::string_literals; @@ -34,7 +39,7 @@ FlexibandSignalSource::FlexibandSignalSource(const ConfigurationInterface* confi Concurrent_Queue* queue __attribute__((unused))) : SignalSourceBase(configuration, role, "Flexiband_Signal_Source"s), in_stream_(in_stream), out_stream_(out_stream) { - const std::string default_item_type("byte"); + const std::string default_item_type("gr_complex"); item_type_ = configuration->property(role + ".item_type", default_item_type); const std::string default_firmware_file("flexiband_I-1b.bit"); diff --git a/src/algorithms/signal_source/adapters/flexiband_signal_source.h b/src/algorithms/signal_source/adapters/flexiband_signal_source.h index 7366d7ce9e..47160a32af 100644 --- a/src/algorithms/signal_source/adapters/flexiband_signal_source.h +++ b/src/algorithms/signal_source/adapters/flexiband_signal_source.h @@ -66,10 +66,10 @@ class FlexibandSignalSource : public SignalSourceBase gr::basic_block_sptr get_right_block(int RF_channel) override; private: - boost::shared_ptr flexiband_source_; + gnss_shared_ptr flexiband_source_; - std::vector> char_to_float; - std::vector> float_to_complex_; + std::vector> char_to_float; + std::vector> float_to_complex_; std::vector null_sinks_; std::string item_type_; diff --git a/src/algorithms/signal_source/adapters/fmcomms2_signal_source.cc b/src/algorithms/signal_source/adapters/fmcomms2_signal_source.cc index c68ce03aa2..e2a516a365 100644 --- a/src/algorithms/signal_source/adapters/fmcomms2_signal_source.cc +++ b/src/algorithms/signal_source/adapters/fmcomms2_signal_source.cc @@ -24,12 +24,17 @@ #include "gnss_sdr_flags.h" #include "gnss_sdr_string_literals.h" #include "gnss_sdr_valve.h" -#include #include // for max #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + using namespace std::string_literals; Fmcomms2SignalSource::Fmcomms2SignalSource(const ConfigurationInterface *configuration, @@ -70,7 +75,11 @@ Fmcomms2SignalSource::Fmcomms2SignalSource(const ConfigurationInterface *configu rf_dc_(configuration->property(role + ".rf_dc", true)), bb_dc_(configuration->property(role + ".bb_dc", true)), filter_auto_(configuration->property(role + ".filter_auto", false)), +#if USE_GLOG_AND_GFLAGS rf_shutdown_(configuration->property(role + ".rf_shutdown", FLAGS_rf_shutdown)), +#else + rf_shutdown_(configuration->property(role + ".rf_shutdown", absl::GetFlag(FLAGS_rf_shutdown))), +#endif dump_(configuration->property(role + ".dump", false)) { if (filter_auto_) diff --git a/src/algorithms/signal_source/adapters/four_bit_cpx_file_signal_source.cc b/src/algorithms/signal_source/adapters/four_bit_cpx_file_signal_source.cc index 7052f0a4cf..2de8b994bd 100644 --- a/src/algorithms/signal_source/adapters/four_bit_cpx_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/four_bit_cpx_file_signal_source.cc @@ -19,7 +19,12 @@ #include "configuration_interface.h" #include "gnss_sdr_flags.h" #include "gnss_sdr_string_literals.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif using namespace std::string_literals; @@ -58,11 +63,18 @@ FourBitCpxFileSignalSource::FourBitCpxFileSignalSource( LOG(ERROR) << "This implementation only supports one output stream"; } - // override value with commandline flag, if present + // override value with commandline flag, if present +#if USE_GLOG_AND_GFLAGS if (FLAGS_timestamp_source != "-") { timestamp_file_ = FLAGS_timestamp_source; } +#else + if (absl::GetFlag(FLAGS_timestamp_source) != "-") + { + timestamp_file_ = absl::GetFlag(FLAGS_timestamp_source); + } +#endif } diff --git a/src/algorithms/signal_source/adapters/gen_signal_source.cc b/src/algorithms/signal_source/adapters/gen_signal_source.cc index a87f77b12e..3881318155 100644 --- a/src/algorithms/signal_source/adapters/gen_signal_source.cc +++ b/src/algorithms/signal_source/adapters/gen_signal_source.cc @@ -18,12 +18,16 @@ #include "gen_signal_source.h" #include -#include #include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif // Constructor GenSignalSource::GenSignalSource(std::shared_ptr signal_generator, diff --git a/src/algorithms/signal_source/adapters/labsat_signal_source.cc b/src/algorithms/signal_source/adapters/labsat_signal_source.cc index 30760ce975..227e0a246d 100644 --- a/src/algorithms/signal_source/adapters/labsat_signal_source.cc +++ b/src/algorithms/signal_source/adapters/labsat_signal_source.cc @@ -18,10 +18,15 @@ #include "configuration_interface.h" #include "gnss_sdr_string_literals.h" #include "labsat23_source.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + using namespace std::string_literals; LabsatSignalSource::LabsatSignalSource(const ConfigurationInterface* configuration, diff --git a/src/algorithms/signal_source/adapters/limesdr_signal_source.cc b/src/algorithms/signal_source/adapters/limesdr_signal_source.cc index a8168bd823..28f3a3a685 100644 --- a/src/algorithms/signal_source/adapters/limesdr_signal_source.cc +++ b/src/algorithms/signal_source/adapters/limesdr_signal_source.cc @@ -20,10 +20,15 @@ #include "gnss_sdr_string_literals.h" #include "gnss_sdr_valve.h" #include -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + using namespace std::string_literals; LimesdrSignalSource::LimesdrSignalSource(const ConfigurationInterface* configuration, diff --git a/src/algorithms/signal_source/adapters/multichannel_file_signal_source.cc b/src/algorithms/signal_source/adapters/multichannel_file_signal_source.cc index fd7973d90a..84271beea5 100644 --- a/src/algorithms/signal_source/adapters/multichannel_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/multichannel_file_signal_source.cc @@ -20,13 +20,18 @@ #include "gnss_sdr_flags.h" #include "gnss_sdr_string_literals.h" #include "gnss_sdr_valve.h" -#include #include #include #include #include // for std::cerr #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#include +#endif using namespace std::string_literals; diff --git a/src/algorithms/signal_source/adapters/nsr_file_signal_source.cc b/src/algorithms/signal_source/adapters/nsr_file_signal_source.cc index c86c11e767..1945f5f853 100644 --- a/src/algorithms/signal_source/adapters/nsr_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/nsr_file_signal_source.cc @@ -18,7 +18,12 @@ #include "nsr_file_signal_source.h" #include "gnss_sdr_string_literals.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif using namespace std::string_literals; diff --git a/src/algorithms/signal_source/adapters/osmosdr_signal_source.cc b/src/algorithms/signal_source/adapters/osmosdr_signal_source.cc index f7ab320570..b2f5a6c1f2 100644 --- a/src/algorithms/signal_source/adapters/osmosdr_signal_source.cc +++ b/src/algorithms/signal_source/adapters/osmosdr_signal_source.cc @@ -21,10 +21,15 @@ #include "gnss_sdr_string_literals.h" #include "gnss_sdr_valve.h" #include -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + using namespace std::string_literals; diff --git a/src/algorithms/signal_source/adapters/plutosdr_signal_source.cc b/src/algorithms/signal_source/adapters/plutosdr_signal_source.cc index fd69989f74..f4b7824001 100644 --- a/src/algorithms/signal_source/adapters/plutosdr_signal_source.cc +++ b/src/algorithms/signal_source/adapters/plutosdr_signal_source.cc @@ -20,9 +20,13 @@ #include "configuration_interface.h" #include "gnss_sdr_string_literals.h" #include "gnss_sdr_valve.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif using namespace std::string_literals; diff --git a/src/algorithms/signal_source/adapters/raw_array_signal_source.cc b/src/algorithms/signal_source/adapters/raw_array_signal_source.cc index b282aad242..18d5632352 100644 --- a/src/algorithms/signal_source/adapters/raw_array_signal_source.cc +++ b/src/algorithms/signal_source/adapters/raw_array_signal_source.cc @@ -18,11 +18,15 @@ #include "concurrent_queue.h" #include "configuration_interface.h" #include "gnss_sdr_string_literals.h" -#include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif using namespace std::string_literals; diff --git a/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc b/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc index 86da2608dc..2e5849eb5c 100644 --- a/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc +++ b/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc @@ -22,11 +22,16 @@ #include "gnss_sdr_string_literals.h" #include "gnss_sdr_valve.h" #include -#include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + using namespace std::string_literals; RtlTcpSignalSource::RtlTcpSignalSource(const ConfigurationInterface* configuration, diff --git a/src/algorithms/signal_source/adapters/spir_file_signal_source.cc b/src/algorithms/signal_source/adapters/spir_file_signal_source.cc index 23d74e93b0..63b89e54d4 100644 --- a/src/algorithms/signal_source/adapters/spir_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/spir_file_signal_source.cc @@ -17,8 +17,13 @@ #include "spir_file_signal_source.h" #include "gnss_sdr_string_literals.h" -#include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#include +#endif using namespace std::string_literals; diff --git a/src/algorithms/signal_source/adapters/spir_gss6450_file_signal_source.cc b/src/algorithms/signal_source/adapters/spir_gss6450_file_signal_source.cc index dead525bea..a9b503c140 100644 --- a/src/algorithms/signal_source/adapters/spir_gss6450_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/spir_gss6450_file_signal_source.cc @@ -19,13 +19,19 @@ #include "spir_gss6450_file_signal_source.h" #include "configuration_interface.h" #include "gnss_sdr_string_literals.h" -#include #include #include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#include +#endif + using namespace std::string_literals; SpirGSS6450FileSignalSource::SpirGSS6450FileSignalSource(const ConfigurationInterface* configuration, diff --git a/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.cc b/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.cc index 1350bded25..3c85bf02d8 100644 --- a/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.cc @@ -17,7 +17,12 @@ #include "two_bit_cpx_file_signal_source.h" #include "gnss_sdr_string_literals.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif using namespace std::string_literals; diff --git a/src/algorithms/signal_source/adapters/two_bit_packed_file_signal_source.cc b/src/algorithms/signal_source/adapters/two_bit_packed_file_signal_source.cc index 57e6e7768c..81f55cf811 100644 --- a/src/algorithms/signal_source/adapters/two_bit_packed_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/two_bit_packed_file_signal_source.cc @@ -19,9 +19,14 @@ #include "two_bit_packed_file_signal_source.h" #include "configuration_interface.h" #include "gnss_sdr_string_literals.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + using namespace std::string_literals; TwoBitPackedFileSignalSource::TwoBitPackedFileSignalSource( diff --git a/src/algorithms/signal_source/adapters/uhd_signal_source.cc b/src/algorithms/signal_source/adapters/uhd_signal_source.cc index efaae370b3..7e9010aa58 100644 --- a/src/algorithms/signal_source/adapters/uhd_signal_source.cc +++ b/src/algorithms/signal_source/adapters/uhd_signal_source.cc @@ -21,13 +21,18 @@ #include "gnss_sdr_filesystem.h" #include "gnss_sdr_string_literals.h" #include "gnss_sdr_valve.h" -#include #include #include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + using namespace std::string_literals; diff --git a/src/algorithms/signal_source/adapters/zmq_signal_source.cc b/src/algorithms/signal_source/adapters/zmq_signal_source.cc index bc8616ccd4..924262617b 100644 --- a/src/algorithms/signal_source/adapters/zmq_signal_source.cc +++ b/src/algorithms/signal_source/adapters/zmq_signal_source.cc @@ -17,7 +17,12 @@ #include "zmq_signal_source.h" #include "configuration_interface.h" #include "gnss_sdr_string_literals.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif using namespace std::string_literals; diff --git a/src/algorithms/signal_source/gnuradio_blocks/CMakeLists.txt b/src/algorithms/signal_source/gnuradio_blocks/CMakeLists.txt index 0a89dffd64..24f067be62 100644 --- a/src/algorithms/signal_source/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/signal_source/gnuradio_blocks/CMakeLists.txt @@ -75,10 +75,15 @@ target_link_libraries(signal_source_gr_blocks PRIVATE algorithms_libs core_libs - Gflags::gflags - Glog::glog ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(signal_source_gr_blocks PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(signal_source_gr_blocks PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(signal_source_gr_blocks PRIVATE absl::flags absl::log) +endif() + target_include_directories(signal_source_gr_blocks PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/receiver diff --git a/src/algorithms/signal_source/gnuradio_blocks/fifo_reader.cc b/src/algorithms/signal_source/gnuradio_blocks/fifo_reader.cc index 583fe6810f..2617cc9fdc 100644 --- a/src/algorithms/signal_source/gnuradio_blocks/fifo_reader.cc +++ b/src/algorithms/signal_source/gnuradio_blocks/fifo_reader.cc @@ -16,7 +16,12 @@ */ #include "fifo_reader.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif // initial construction; pass to private constructor FifoReader::sptr FifoReader::make(const std::string &file_name, const std::string &sample_type) diff --git a/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.cc b/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.cc index 1b490b4f38..9242a640e5 100644 --- a/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.cc +++ b/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.cc @@ -20,9 +20,13 @@ #include "rtl_tcp_commands.h" #include #include -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif namespace ip = boost::asio::ip; @@ -74,20 +78,20 @@ rtl_tcp_signal_source_c::rtl_tcp_signal_source_c(const std::string &address, return; } ip::tcp::endpoint ep(addr, port); - socket_.open(ep.protocol(), ec); + socket_.open(ep.protocol(), ec); // NOLINT(bugprone-unused-return-value) if (ec) { std::cout << "Failed to open socket.\n"; LOG(ERROR) << "Failed to open socket."; } - socket_.set_option(boost::asio::socket_base::reuse_address(true), ec); + socket_.set_option(boost::asio::socket_base::reuse_address(true), ec); // NOLINT(bugprone-unused-return-value) if (ec) { std::cout << "Failed to set reuse address option: " << ec << '\n'; LOG(WARNING) << "Failed to set reuse address option"; } - socket_.set_option(boost::asio::socket_base::linger(true, 0), ec); + socket_.set_option(boost::asio::socket_base::linger(true, 0), ec); // NOLINT(bugprone-unused-return-value) if (ec) { std::cout << "Failed to set linger option: " << ec << '\n'; @@ -95,8 +99,7 @@ rtl_tcp_signal_source_c::rtl_tcp_signal_source_c(const std::string &address, } // 3. Connect socket - - socket_.connect(ep, ec); + socket_.connect(ep, ec); // NOLINT(bugprone-unused-return-value) if (ec) { std::cout << "Failed to connect to " << addr << ":" << port @@ -109,7 +112,7 @@ rtl_tcp_signal_source_c::rtl_tcp_signal_source_c(const std::string &address, LOG(INFO) << "Connected to " << addr << ":" << port; // 4. Set nodelay - socket_.set_option(ip::tcp::no_delay(true), ec); + socket_.set_option(ip::tcp::no_delay(true), ec); // NOLINT(bugprone-unused-return-value) if (ec) { std::cout << "Failed to set no delay option.\n"; diff --git a/src/algorithms/signal_source/libs/CMakeLists.txt b/src/algorithms/signal_source/libs/CMakeLists.txt index a5d5821162..2b0eb6a868 100644 --- a/src/algorithms/signal_source/libs/CMakeLists.txt +++ b/src/algorithms/signal_source/libs/CMakeLists.txt @@ -74,11 +74,16 @@ target_link_libraries(signal_source_libs Boost::headers Gnuradio::runtime PRIVATE - Gflags::gflags - Glog::glog core_libs ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(signal_source_libs PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(signal_source_libs PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(signal_source_libs PRIVATE absl::flags absl::log) +endif() + target_include_directories(signal_source_libs PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/receiver diff --git a/src/algorithms/signal_source/libs/ad9361_manager.cc b/src/algorithms/signal_source/libs/ad9361_manager.cc index 7e7e3fa749..913488287f 100644 --- a/src/algorithms/signal_source/libs/ad9361_manager.cc +++ b/src/algorithms/signal_source/libs/ad9361_manager.cc @@ -16,7 +16,6 @@ * ----------------------------------------------------------------------------- */ #include "ad9361_manager.h" -#include #include #include #include // for ifstream @@ -25,6 +24,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + /* check return value of attr_write function */ void errchk(int v, const char *what) { diff --git a/src/algorithms/signal_source/libs/ad936x_iio_custom.cc b/src/algorithms/signal_source/libs/ad936x_iio_custom.cc index ce25e78976..2869081f26 100644 --- a/src/algorithms/signal_source/libs/ad936x_iio_custom.cc +++ b/src/algorithms/signal_source/libs/ad936x_iio_custom.cc @@ -15,7 +15,6 @@ #include "ad936x_iio_custom.h" #include #include -#include #include #include #include @@ -24,6 +23,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + ad936x_iio_custom::ad936x_iio_custom(int debug_level_, int log_level_) { receive_samples = false; diff --git a/src/algorithms/signal_source/libs/fpga_buffer_monitor.cc b/src/algorithms/signal_source/libs/fpga_buffer_monitor.cc index 136409f126..0b250d1311 100644 --- a/src/algorithms/signal_source/libs/fpga_buffer_monitor.cc +++ b/src/algorithms/signal_source/libs/fpga_buffer_monitor.cc @@ -25,14 +25,20 @@ #include "fpga_buffer_monitor.h" #include "gnss_sdr_create_directory.h" #include "gnss_sdr_filesystem.h" -#include #include // for time, localtime #include // for open, O_RDWR, O_SYNC #include // for string, ofstream #include // for cout #include // for mmap +#include // for close #include // for move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + Fpga_buffer_monitor::Fpga_buffer_monitor(const std::string &device_name, uint32_t num_freq_bands, diff --git a/src/algorithms/signal_source/libs/fpga_dynamic_bit_selection.cc b/src/algorithms/signal_source/libs/fpga_dynamic_bit_selection.cc index 933d8b77f6..f3352b715c 100644 --- a/src/algorithms/signal_source/libs/fpga_dynamic_bit_selection.cc +++ b/src/algorithms/signal_source/libs/fpga_dynamic_bit_selection.cc @@ -21,10 +21,16 @@ #include "fpga_dynamic_bit_selection.h" #include "uio_fpga.h" -#include #include // for open, O_RDWR, O_SYNC #include // for cout #include // for mmap +#include // for close + +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif Fpga_dynamic_bit_selection::Fpga_dynamic_bit_selection(bool enable_rx1_band, bool enable_rx2_band) : d_map_base_freq_band_1(nullptr), diff --git a/src/algorithms/signal_source/libs/fpga_switch.cc b/src/algorithms/signal_source/libs/fpga_switch.cc index 4bcbe4dc92..f2d51c2fbc 100644 --- a/src/algorithms/signal_source/libs/fpga_switch.cc +++ b/src/algorithms/signal_source/libs/fpga_switch.cc @@ -21,10 +21,16 @@ */ #include "fpga_switch.h" -#include #include // for open, O_RDWR, O_SYNC #include // for cout #include // for mmap +#include // for close + +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif Fpga_Switch::Fpga_Switch(const std::string &device_name) { diff --git a/src/algorithms/signal_source/libs/gnss_sdr_valve.cc b/src/algorithms/signal_source/libs/gnss_sdr_valve.cc index 6054af6dda..a62917745e 100644 --- a/src/algorithms/signal_source/libs/gnss_sdr_valve.cc +++ b/src/algorithms/signal_source/libs/gnss_sdr_valve.cc @@ -19,11 +19,16 @@ #include "gnss_sdr_valve.h" #include "command_event.h" -#include // for LOG #include // for io_signature #include // for min #include // for memcpy +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + Gnss_Sdr_Valve::Gnss_Sdr_Valve(size_t sizeof_stream_item, uint64_t nitems, Concurrent_Queue* queue, diff --git a/src/algorithms/telemetry_decoder/adapters/CMakeLists.txt b/src/algorithms/telemetry_decoder/adapters/CMakeLists.txt index 9c0ae28eea..a804a1a866 100644 --- a/src/algorithms/telemetry_decoder/adapters/CMakeLists.txt +++ b/src/algorithms/telemetry_decoder/adapters/CMakeLists.txt @@ -59,11 +59,16 @@ target_link_libraries(telemetry_decoder_adapters telemetry_decoder_gr_blocks telemetry_decoder_libs PRIVATE - Gflags::gflags - Glog::glog Gnuradio::runtime ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(telemetry_decoder_adapters PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(telemetry_decoder_adapters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(telemetry_decoder_adapters PRIVATE absl::flags absl::log) +endif() + target_include_directories(telemetry_decoder_adapters PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/telemetry_decoder/adapters/beidou_b1i_telemetry_decoder.cc b/src/algorithms/telemetry_decoder/adapters/beidou_b1i_telemetry_decoder.cc index 433ad86436..8f72299544 100644 --- a/src/algorithms/telemetry_decoder/adapters/beidou_b1i_telemetry_decoder.cc +++ b/src/algorithms/telemetry_decoder/adapters/beidou_b1i_telemetry_decoder.cc @@ -18,7 +18,12 @@ #include "beidou_b1i_telemetry_decoder.h" #include "configuration_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif BeidouB1iTelemetryDecoder::BeidouB1iTelemetryDecoder( diff --git a/src/algorithms/telemetry_decoder/adapters/beidou_b3i_telemetry_decoder.cc b/src/algorithms/telemetry_decoder/adapters/beidou_b3i_telemetry_decoder.cc index 6b35a9c07c..502479613b 100644 --- a/src/algorithms/telemetry_decoder/adapters/beidou_b3i_telemetry_decoder.cc +++ b/src/algorithms/telemetry_decoder/adapters/beidou_b3i_telemetry_decoder.cc @@ -17,7 +17,12 @@ #include "beidou_b3i_telemetry_decoder.h" #include "configuration_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif BeidouB3iTelemetryDecoder::BeidouB3iTelemetryDecoder( const ConfigurationInterface *configuration, diff --git a/src/algorithms/telemetry_decoder/adapters/galileo_e1b_telemetry_decoder.cc b/src/algorithms/telemetry_decoder/adapters/galileo_e1b_telemetry_decoder.cc index cadc48503b..e6c3024375 100644 --- a/src/algorithms/telemetry_decoder/adapters/galileo_e1b_telemetry_decoder.cc +++ b/src/algorithms/telemetry_decoder/adapters/galileo_e1b_telemetry_decoder.cc @@ -19,7 +19,12 @@ #include "galileo_e1b_telemetry_decoder.h" #include "configuration_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GalileoE1BTelemetryDecoder::GalileoE1BTelemetryDecoder( diff --git a/src/algorithms/telemetry_decoder/adapters/galileo_e5a_telemetry_decoder.cc b/src/algorithms/telemetry_decoder/adapters/galileo_e5a_telemetry_decoder.cc index 73bf36b88e..cf0c3828cf 100644 --- a/src/algorithms/telemetry_decoder/adapters/galileo_e5a_telemetry_decoder.cc +++ b/src/algorithms/telemetry_decoder/adapters/galileo_e5a_telemetry_decoder.cc @@ -22,7 +22,12 @@ #include "galileo_e5a_telemetry_decoder.h" #include "configuration_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GalileoE5aTelemetryDecoder::GalileoE5aTelemetryDecoder( diff --git a/src/algorithms/telemetry_decoder/adapters/galileo_e5b_telemetry_decoder.cc b/src/algorithms/telemetry_decoder/adapters/galileo_e5b_telemetry_decoder.cc index 94181a94c5..d6c66b20cc 100644 --- a/src/algorithms/telemetry_decoder/adapters/galileo_e5b_telemetry_decoder.cc +++ b/src/algorithms/telemetry_decoder/adapters/galileo_e5b_telemetry_decoder.cc @@ -20,7 +20,12 @@ #include "galileo_e5b_telemetry_decoder.h" #include "configuration_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GalileoE5bTelemetryDecoder::GalileoE5bTelemetryDecoder( diff --git a/src/algorithms/telemetry_decoder/adapters/galileo_e6_telemetry_decoder.cc b/src/algorithms/telemetry_decoder/adapters/galileo_e6_telemetry_decoder.cc index 4f4517ef75..5fd6342eac 100644 --- a/src/algorithms/telemetry_decoder/adapters/galileo_e6_telemetry_decoder.cc +++ b/src/algorithms/telemetry_decoder/adapters/galileo_e6_telemetry_decoder.cc @@ -19,7 +19,12 @@ #include "galileo_e6_telemetry_decoder.h" #include "configuration_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GalileoE6TelemetryDecoder::GalileoE6TelemetryDecoder( diff --git a/src/algorithms/telemetry_decoder/adapters/glonass_l1_ca_telemetry_decoder.cc b/src/algorithms/telemetry_decoder/adapters/glonass_l1_ca_telemetry_decoder.cc index 037f204541..c6de2b98fe 100644 --- a/src/algorithms/telemetry_decoder/adapters/glonass_l1_ca_telemetry_decoder.cc +++ b/src/algorithms/telemetry_decoder/adapters/glonass_l1_ca_telemetry_decoder.cc @@ -19,7 +19,12 @@ #include "glonass_l1_ca_telemetry_decoder.h" #include "configuration_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GlonassL1CaTelemetryDecoder::GlonassL1CaTelemetryDecoder( diff --git a/src/algorithms/telemetry_decoder/adapters/glonass_l2_ca_telemetry_decoder.cc b/src/algorithms/telemetry_decoder/adapters/glonass_l2_ca_telemetry_decoder.cc index cfa172eddb..77dfb55282 100644 --- a/src/algorithms/telemetry_decoder/adapters/glonass_l2_ca_telemetry_decoder.cc +++ b/src/algorithms/telemetry_decoder/adapters/glonass_l2_ca_telemetry_decoder.cc @@ -18,7 +18,12 @@ #include "glonass_l2_ca_telemetry_decoder.h" #include "configuration_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GlonassL2CaTelemetryDecoder::GlonassL2CaTelemetryDecoder( diff --git a/src/algorithms/telemetry_decoder/adapters/gps_l1_ca_telemetry_decoder.cc b/src/algorithms/telemetry_decoder/adapters/gps_l1_ca_telemetry_decoder.cc index 9ee5f3db11..7f9a243bd9 100644 --- a/src/algorithms/telemetry_decoder/adapters/gps_l1_ca_telemetry_decoder.cc +++ b/src/algorithms/telemetry_decoder/adapters/gps_l1_ca_telemetry_decoder.cc @@ -18,7 +18,12 @@ #include "gps_l1_ca_telemetry_decoder.h" #include "configuration_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GpsL1CaTelemetryDecoder::GpsL1CaTelemetryDecoder( diff --git a/src/algorithms/telemetry_decoder/adapters/gps_l2c_telemetry_decoder.cc b/src/algorithms/telemetry_decoder/adapters/gps_l2c_telemetry_decoder.cc index f662627d7d..6db0843bba 100644 --- a/src/algorithms/telemetry_decoder/adapters/gps_l2c_telemetry_decoder.cc +++ b/src/algorithms/telemetry_decoder/adapters/gps_l2c_telemetry_decoder.cc @@ -18,7 +18,12 @@ #include "gps_l2c_telemetry_decoder.h" #include "configuration_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GpsL2CTelemetryDecoder::GpsL2CTelemetryDecoder( diff --git a/src/algorithms/telemetry_decoder/adapters/gps_l5_telemetry_decoder.cc b/src/algorithms/telemetry_decoder/adapters/gps_l5_telemetry_decoder.cc index a302c479fd..e5dadfa904 100644 --- a/src/algorithms/telemetry_decoder/adapters/gps_l5_telemetry_decoder.cc +++ b/src/algorithms/telemetry_decoder/adapters/gps_l5_telemetry_decoder.cc @@ -18,7 +18,12 @@ #include "gps_l5_telemetry_decoder.h" #include "configuration_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GpsL5TelemetryDecoder::GpsL5TelemetryDecoder( diff --git a/src/algorithms/telemetry_decoder/adapters/sbas_l1_telemetry_decoder.cc b/src/algorithms/telemetry_decoder/adapters/sbas_l1_telemetry_decoder.cc index 82b639f703..334e934ea9 100644 --- a/src/algorithms/telemetry_decoder/adapters/sbas_l1_telemetry_decoder.cc +++ b/src/algorithms/telemetry_decoder/adapters/sbas_l1_telemetry_decoder.cc @@ -18,8 +18,12 @@ #include "sbas_l1_telemetry_decoder.h" #include "configuration_interface.h" -#include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif SbasL1TelemetryDecoder::SbasL1TelemetryDecoder( const ConfigurationInterface* configuration, diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/CMakeLists.txt b/src/algorithms/telemetry_decoder/gnuradio_blocks/CMakeLists.txt index c71184aa81..7c9ff7b833 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/CMakeLists.txt @@ -58,11 +58,16 @@ target_link_libraries(telemetry_decoder_gr_blocks Gnuradio::runtime Boost::headers PRIVATE - Gflags::gflags - Glog::glog Gnuradio::pmt ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(telemetry_decoder_gr_blocks PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(telemetry_decoder_gr_blocks PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(telemetry_decoder_gr_blocks PRIVATE absl::flags absl::log) +endif() + if(GNURADIO_USES_STD_POINTERS) target_compile_definitions(telemetry_decoder_gr_blocks PUBLIC -DGNURADIO_USES_STD_POINTERS=1 diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_gs.cc index 0edbfee366..c7ecd7da4f 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_gs.cc @@ -26,7 +26,6 @@ #include "gnss_sdr_make_unique.h" // for std::make_unique in C++11 #include "gnss_synchro.h" #include "tlm_utils.h" -#include #include #include // for make_any #include // for mp @@ -38,6 +37,12 @@ #include // for shared_ptr, make_shared #include // for std::move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #define CRC_ERROR_LIMIT 8 diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b3i_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b3i_telemetry_decoder_gs.cc index a1fd405551..d27afa592b 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b3i_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b3i_telemetry_decoder_gs.cc @@ -25,7 +25,6 @@ #include "gnss_sdr_make_unique.h" // for std::make_unique in C++11 #include "gnss_synchro.h" #include "tlm_utils.h" -#include #include #include // for make_any #include // for mp @@ -37,6 +36,12 @@ #include // for shared_ptr, make_shared #include // for std::move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #define CRC_ERROR_LIMIT 8 beidou_b3i_telemetry_decoder_gs_sptr diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.cc index 6907157251..a2d6b40cf2 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.cc @@ -34,7 +34,6 @@ #include "tlm_crc_stats.h" // for Tlm_CRC_Stats #include "tlm_utils.h" // for save_tlm_matfile, tlm_remove_file #include "viterbi_decoder.h" // for Viterbi_Decoder -#include // for LOG, DLOG #include // for gr::io_signature::make #include // for pmt::mp #include // for std::array @@ -49,6 +48,12 @@ #include // for typeid #include // for std::pair +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l1_ca_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l1_ca_telemetry_decoder_gs.cc index b2cc50cf88..b19c5eb027 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l1_ca_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l1_ca_telemetry_decoder_gs.cc @@ -22,7 +22,6 @@ #include "glonass_gnav_utc_model.h" #include "gnss_sdr_make_unique.h" // for std::make_unique in C++11 #include "tlm_utils.h" -#include #include #include // for make_any #include // for mp @@ -35,6 +34,12 @@ #include // for shared_ptr, make_shared #include // for std::move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #define CRC_ERROR_LIMIT 6 diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l2_ca_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l2_ca_telemetry_decoder_gs.cc index 473e5eb734..9de17d33c7 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l2_ca_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l2_ca_telemetry_decoder_gs.cc @@ -22,7 +22,6 @@ #include "glonass_gnav_utc_model.h" #include "gnss_sdr_make_unique.h" // for std::make_unique in C++11 #include "tlm_utils.h" -#include #include #include // for make_any #include // for mp @@ -35,6 +34,12 @@ #include // for shared_ptr, make_shared #include // for std::move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #define CRC_ERROR_LIMIT 6 diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.cc index bd72d4cde0..62bbf6bfa9 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.cc @@ -24,7 +24,6 @@ #include "gps_iono.h" // for Gps_Iono #include "gps_utc_model.h" // for Gps_Utc_Model #include "tlm_utils.h" -#include #include #include // for make_any #include // for mp @@ -39,6 +38,12 @@ #include // for std::move #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #ifdef COMPILER_HAS_ROTL #include namespace my_rotl = std; diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l2c_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l2c_telemetry_decoder_gs.cc index b745738daf..ea4f15585f 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l2c_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l2c_telemetry_decoder_gs.cc @@ -24,7 +24,6 @@ #include "gps_cnav_iono.h" // for Gps_CNAV_Iono #include "gps_cnav_utc_model.h" // for Gps_CNAV_Utc_Model #include "tlm_utils.h" -#include #include #include // for make_any #include // for mp @@ -37,6 +36,11 @@ #include // for shared_ptr, make_shared #include // for std::move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif gps_l2c_telemetry_decoder_gs_sptr gps_l2c_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf) diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l5_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l5_telemetry_decoder_gs.cc index d664551eaa..f6d95d2a5f 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l5_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l5_telemetry_decoder_gs.cc @@ -23,7 +23,6 @@ #include "gps_cnav_iono.h" #include "gps_cnav_utc_model.h" // for Gps_CNAV_Utc_Model #include "tlm_utils.h" -#include #include #include // for make_any #include // for mp @@ -35,6 +34,12 @@ #include // for std::cout #include // for std::move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + gps_l5_telemetry_decoder_gs_sptr gps_l5_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf) { diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_gs.cc index 9a15fd2b61..303adbf2b3 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_gs.cc @@ -17,7 +17,6 @@ #include "sbas_l1_telemetry_decoder_gs.h" #include "gnss_synchro.h" #include "viterbi_decoder_sbas.h" -#include #include #include // for mp #include // for copy @@ -27,6 +26,12 @@ #include // for operator<<, setw #include // for std::move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + // logging levels #define EVENT 2 // logs important events which don't occur every block #define FLOW 3 // logs the function calls of block processing functions diff --git a/src/algorithms/telemetry_decoder/libs/CMakeLists.txt b/src/algorithms/telemetry_decoder/libs/CMakeLists.txt index befb48ddf3..ed35d0111c 100644 --- a/src/algorithms/telemetry_decoder/libs/CMakeLists.txt +++ b/src/algorithms/telemetry_decoder/libs/CMakeLists.txt @@ -47,11 +47,16 @@ target_link_libraries(telemetry_decoder_libs PRIVATE Volkgnsssdr::volkgnsssdr algorithms_libs - Gflags::gflags - Glog::glog Matio::matio ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(telemetry_decoder_libs PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(telemetry_decoder_libs PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(telemetry_decoder_libs PRIVATE absl::flags absl::log) +endif() + target_include_directories(telemetry_decoder_libs PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/telemetry_decoder/libs/tlm_crc_stats.cc b/src/algorithms/telemetry_decoder/libs/tlm_crc_stats.cc index 4d6b9d9e64..a5d69c96fb 100644 --- a/src/algorithms/telemetry_decoder/libs/tlm_crc_stats.cc +++ b/src/algorithms/telemetry_decoder/libs/tlm_crc_stats.cc @@ -17,11 +17,15 @@ #include "tlm_crc_stats.h" #include "gnss_sdr_create_directory.h" #include "gnss_sdr_filesystem.h" -#include #include // for std::setw() #include // for cerr, cout #include // for std::move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif void Tlm_CRC_Stats::initialize(std::string dump_crc_stats_filename) { diff --git a/src/algorithms/telemetry_decoder/libs/viterbi_decoder_sbas.cc b/src/algorithms/telemetry_decoder/libs/viterbi_decoder_sbas.cc index 7972e708c1..0eafce0f8c 100644 --- a/src/algorithms/telemetry_decoder/libs/viterbi_decoder_sbas.cc +++ b/src/algorithms/telemetry_decoder/libs/viterbi_decoder_sbas.cc @@ -16,10 +16,15 @@ */ #include "viterbi_decoder_sbas.h" -#include #include // for fill_n #include // for operator<<, basic_ostream, char_traits +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + // logging #define EVENT 2 // logs important events which don't occur every block #define FLOW 3 // logs the function calls of block processing functions diff --git a/src/algorithms/tracking/adapters/CMakeLists.txt b/src/algorithms/tracking/adapters/CMakeLists.txt index f37824a3e4..b72ae96df3 100644 --- a/src/algorithms/tracking/adapters/CMakeLists.txt +++ b/src/algorithms/tracking/adapters/CMakeLists.txt @@ -100,9 +100,15 @@ target_link_libraries(tracking_adapters tracking_gr_blocks PRIVATE gnss_sdr_flags - Glog::glog ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(tracking_adapters PRIVATE Glog::glog) + target_compile_definitions(tracking_adapters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(tracking_adapters PRIVATE absl::flags absl::log) +endif() + target_include_directories(tracking_adapters PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/tracking/adapters/beidou_b1i_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/beidou_b1i_dll_pll_tracking.cc index 31ffb9fe8d..748d819673 100644 --- a/src/algorithms/tracking/adapters/beidou_b1i_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/beidou_b1i_dll_pll_tracking.cc @@ -26,10 +26,14 @@ #include "display.h" #include "dll_pll_conf.h" #include "gnss_sdr_flags.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif BeidouB1iDllPllTracking::BeidouB1iDllPllTracking( const ConfigurationInterface* configuration, diff --git a/src/algorithms/tracking/adapters/beidou_b3i_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/beidou_b3i_dll_pll_tracking.cc index 633b876899..8408e18616 100644 --- a/src/algorithms/tracking/adapters/beidou_b3i_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/beidou_b3i_dll_pll_tracking.cc @@ -26,10 +26,15 @@ #include "display.h" #include "dll_pll_conf.h" #include "gnss_sdr_flags.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + BeidouB3iDllPllTracking::BeidouB3iDllPllTracking( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.cc b/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.cc index 4483afa1be..16c0212171 100644 --- a/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.cc +++ b/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.cc @@ -26,10 +26,15 @@ #include "display.h" #include "dll_pll_conf.h" #include "gnss_sdr_flags.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GalileoE1DllPllVemlTracking::GalileoE1DllPllVemlTracking( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking_fpga.cc b/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking_fpga.cc index b0571c13d0..52c41c3d28 100644 --- a/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking_fpga.cc +++ b/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking_fpga.cc @@ -28,11 +28,16 @@ #include "galileo_e1_signal_replica.h" #include "gnss_sdr_flags.h" #include "uio_fpga.h" -#include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/tracking/adapters/galileo_e1_tcp_connector_tracking.cc b/src/algorithms/tracking/adapters/galileo_e1_tcp_connector_tracking.cc index 9236e08625..fc79e02abe 100644 --- a/src/algorithms/tracking/adapters/galileo_e1_tcp_connector_tracking.cc +++ b/src/algorithms/tracking/adapters/galileo_e1_tcp_connector_tracking.cc @@ -25,9 +25,13 @@ #include "Galileo_E1.h" #include "configuration_interface.h" #include "gnss_sdr_flags.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif GalileoE1TcpConnectorTracking::GalileoE1TcpConnectorTracking( const ConfigurationInterface* configuration, @@ -47,15 +51,30 @@ GalileoE1TcpConnectorTracking::GalileoE1TcpConnectorTracking( int fs_in = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); bool dump = configuration->property(role_ + ".dump", false); float pll_bw_hz = configuration->property(role_ + ".pll_bw_hz", static_cast(50.0)); +#if USE_GLOG_AND_GFLAGS if (FLAGS_pll_bw_hz != 0.0) { pll_bw_hz = static_cast(FLAGS_pll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_pll_bw_hz) != 0.0) + { + pll_bw_hz = static_cast(absl::GetFlag(FLAGS_pll_bw_hz)); + } +#endif float dll_bw_hz = configuration->property(role_ + ".dll_bw_hz", static_cast(2.0)); + +#if USE_GLOG_AND_GFLAGS if (FLAGS_dll_bw_hz != 0.0) { dll_bw_hz = static_cast(FLAGS_dll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_dll_bw_hz) != 0.0) + { + dll_bw_hz = static_cast(absl::GetFlag(FLAGS_dll_bw_hz)); + } +#endif float early_late_space_chips = configuration->property(role_ + ".early_late_space_chips", static_cast(0.15)); float very_early_late_space_chips = configuration->property(role_ + ".very_early_late_space_chips", static_cast(0.5)); size_t port_ch0 = configuration->property(role_ + ".port_ch0", 2060); diff --git a/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking.cc index f54f904e60..876ff34c76 100644 --- a/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking.cc @@ -26,10 +26,15 @@ #include "display.h" #include "dll_pll_conf.h" #include "gnss_sdr_flags.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GalileoE5aDllPllTracking::GalileoE5aDllPllTracking( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking_fpga.cc b/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking_fpga.cc index e6dcca1ac9..dd1c8ca858 100644 --- a/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking_fpga.cc +++ b/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking_fpga.cc @@ -23,11 +23,16 @@ #include "galileo_e5_signal_replica.h" #include "gnss_sdr_flags.h" #include "uio_fpga.h" -#include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga( const ConfigurationInterface *configuration, const std::string &role, diff --git a/src/algorithms/tracking/adapters/galileo_e5b_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/galileo_e5b_dll_pll_tracking.cc index 61df5df98a..6e71919580 100644 --- a/src/algorithms/tracking/adapters/galileo_e5b_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/galileo_e5b_dll_pll_tracking.cc @@ -27,10 +27,15 @@ #include "display.h" #include "dll_pll_conf.h" #include "gnss_sdr_flags.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GalileoE5bDllPllTracking::GalileoE5bDllPllTracking( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/tracking/adapters/galileo_e6_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/galileo_e6_dll_pll_tracking.cc index ca01034d45..1d1c81e097 100644 --- a/src/algorithms/tracking/adapters/galileo_e6_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/galileo_e6_dll_pll_tracking.cc @@ -22,10 +22,15 @@ #include "display.h" #include "dll_pll_conf.h" #include "gnss_sdr_flags.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GalileoE6DllPllTracking::GalileoE6DllPllTracking( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_c_aid_tracking.cc b/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_c_aid_tracking.cc index 460a6f2df2..c31149afbc 100644 --- a/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_c_aid_tracking.cc +++ b/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_c_aid_tracking.cc @@ -27,7 +27,12 @@ #include "GLONASS_L1_L2_CA.h" #include "configuration_interface.h" #include "gnss_sdr_flags.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GlonassL1CaDllPllCAidTracking::GlonassL1CaDllPllCAidTracking( @@ -48,15 +53,30 @@ GlonassL1CaDllPllCAidTracking::GlonassL1CaDllPllCAidTracking( int fs_in = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); bool dump = configuration->property(role_ + ".dump", false); float pll_bw_hz = configuration->property(role_ + ".pll_bw_hz", static_cast(50.0)); +#if USE_GLOG_AND_GFLAGS if (FLAGS_pll_bw_hz != 0.0) { pll_bw_hz = static_cast(FLAGS_pll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_pll_bw_hz) != 0.0) + { + pll_bw_hz = static_cast(absl::GetFlag(FLAGS_pll_bw_hz)); + } +#endif float dll_bw_hz = configuration->property(role_ + ".dll_bw_hz", static_cast(2.0)); + +#if USE_GLOG_AND_GFLAGS if (FLAGS_dll_bw_hz != 0.0) { dll_bw_hz = static_cast(FLAGS_dll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_dll_bw_hz) != 0.0) + { + dll_bw_hz = static_cast(absl::GetFlag(FLAGS_dll_bw_hz)); + } +#endif float pll_bw_narrow_hz = configuration->property(role_ + ".pll_bw_narrow_hz", static_cast(20.0)); float dll_bw_narrow_hz = configuration->property(role_ + ".dll_bw_narrow_hz", static_cast(2.0)); int extend_correlation_ms = configuration->property(role_ + ".extend_correlation_ms", 1); diff --git a/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_tracking.cc index 769c15dd08..6a8faf31b3 100644 --- a/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_tracking.cc @@ -26,7 +26,12 @@ #include "GLONASS_L1_L2_CA.h" #include "configuration_interface.h" #include "gnss_sdr_flags.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GlonassL1CaDllPllTracking::GlonassL1CaDllPllTracking( @@ -47,15 +52,30 @@ GlonassL1CaDllPllTracking::GlonassL1CaDllPllTracking( int fs_in = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); bool dump = configuration->property(role_ + ".dump", false); float pll_bw_hz = configuration->property(role_ + ".pll_bw_hz", static_cast(50.0)); + +#if USE_GLOG_AND_GFLAGS if (FLAGS_pll_bw_hz != 0.0) { pll_bw_hz = static_cast(FLAGS_pll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_pll_bw_hz) != 0.0) + { + pll_bw_hz = static_cast(absl::GetFlag(FLAGS_pll_bw_hz)); + } +#endif float dll_bw_hz = configuration->property(role_ + ".dll_bw_hz", static_cast(2.0)); +#if USE_GLOG_AND_GFLAGS if (FLAGS_dll_bw_hz != 0.0) { dll_bw_hz = static_cast(FLAGS_dll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_dll_bw_hz) != 0.0) + { + dll_bw_hz = static_cast(absl::GetFlag(FLAGS_dll_bw_hz)); + } +#endif float early_late_space_chips = configuration->property(role_ + ".early_late_space_chips", static_cast(0.5)); const std::string default_dump_filename("./track_ch"); std::string dump_filename = configuration->property(role_ + ".dump_filename", default_dump_filename); diff --git a/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_c_aid_tracking.cc b/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_c_aid_tracking.cc index 3da79c4238..19350ce187 100644 --- a/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_c_aid_tracking.cc +++ b/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_c_aid_tracking.cc @@ -25,7 +25,12 @@ #include "GLONASS_L1_L2_CA.h" #include "configuration_interface.h" #include "gnss_sdr_flags.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GlonassL2CaDllPllCAidTracking::GlonassL2CaDllPllCAidTracking( @@ -46,15 +51,30 @@ GlonassL2CaDllPllCAidTracking::GlonassL2CaDllPllCAidTracking( int fs_in = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); bool dump = configuration->property(role_ + ".dump", false); float pll_bw_hz = configuration->property(role_ + ".pll_bw_hz", static_cast(50.0)); + +#if USE_GLOG_AND_GFLAGS if (FLAGS_pll_bw_hz != 0.0) { pll_bw_hz = static_cast(FLAGS_pll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_pll_bw_hz) != 0.0) + { + pll_bw_hz = static_cast(absl::GetFlag(FLAGS_pll_bw_hz)); + } +#endif float dll_bw_hz = configuration->property(role_ + ".dll_bw_hz", static_cast(2.0)); +#if USE_GLOG_AND_GFLAGS if (FLAGS_dll_bw_hz != 0.0) { dll_bw_hz = static_cast(FLAGS_dll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_dll_bw_hz) != 0.0) + { + dll_bw_hz = static_cast(absl::GetFlag(FLAGS_dll_bw_hz)); + } +#endif float pll_bw_narrow_hz = configuration->property(role_ + ".pll_bw_narrow_hz", static_cast(20.0)); float dll_bw_narrow_hz = configuration->property(role_ + ".dll_bw_narrow_hz", static_cast(2.0)); int extend_correlation_ms = configuration->property(role_ + ".extend_correlation_ms", 1); diff --git a/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_tracking.cc index 283f10ed1c..f5b6f23251 100644 --- a/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_tracking.cc @@ -24,7 +24,12 @@ #include "GLONASS_L1_L2_CA.h" #include "configuration_interface.h" #include "gnss_sdr_flags.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GlonassL2CaDllPllTracking::GlonassL2CaDllPllTracking( @@ -45,15 +50,29 @@ GlonassL2CaDllPllTracking::GlonassL2CaDllPllTracking( int fs_in = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); bool dump = configuration->property(role_ + ".dump", false); float pll_bw_hz = configuration->property(role_ + ".pll_bw_hz", static_cast(50.0)); +#if USE_GLOG_AND_GFLAGS if (FLAGS_pll_bw_hz != 0.0) { pll_bw_hz = static_cast(FLAGS_pll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_pll_bw_hz) != 0.0) + { + pll_bw_hz = static_cast(absl::GetFlag(FLAGS_pll_bw_hz)); + } +#endif float dll_bw_hz = configuration->property(role_ + ".dll_bw_hz", static_cast(2.0)); +#if USE_GLOG_AND_GFLAGS if (FLAGS_dll_bw_hz != 0.0) { dll_bw_hz = static_cast(FLAGS_dll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_dll_bw_hz) != 0.0) + { + dll_bw_hz = static_cast(absl::GetFlag(FLAGS_dll_bw_hz)); + } +#endif float early_late_space_chips = configuration->property(role_ + ".early_late_space_chips", static_cast(0.5)); const std::string default_dump_filename("./track_ch"); std::string dump_filename = configuration->property(role_ + ".dump_filename", default_dump_filename); diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.cc index 00cccbe97e..5d0f9973a7 100644 --- a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.cc @@ -27,10 +27,15 @@ #include "display.h" #include "dll_pll_conf.h" #include "gnss_sdr_flags.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GpsL1CaDllPllTracking::GpsL1CaDllPllTracking( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_fpga.cc b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_fpga.cc index c0db6265d1..6d9981ed52 100644 --- a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_fpga.cc +++ b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_fpga.cc @@ -28,11 +28,16 @@ #include "gnss_sdr_flags.h" #include "gps_sdr_signal_replica.h" #include "uio_fpga.h" -#include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GpsL1CaDllPllTrackingFpga::GpsL1CaDllPllTrackingFpga( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_gpu.cc b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_gpu.cc index 5477511d66..c52d546a95 100644 --- a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_gpu.cc +++ b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_gpu.cc @@ -25,7 +25,12 @@ #include "GPS_L1_CA.h" #include "configuration_interface.h" #include "gnss_sdr_flags.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GpsL1CaDllPllTrackingGPU::GpsL1CaDllPllTrackingGPU( @@ -49,9 +54,18 @@ GpsL1CaDllPllTrackingGPU::GpsL1CaDllPllTrackingGPU( fs_in = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); dump = configuration->property(role + ".dump", false); pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); +#if USE_GLOG_AND_GFLAGS if (FLAGS_pll_bw_hz != 0.0) pll_bw_hz = static_cast(FLAGS_pll_bw_hz); +#else + if (absl::GetFlag(FLAGS_pll_bw_hz) != 0.0) pll_bw_hz = static_cast(absl::GetFlag(FLAGS_pll_bw_hz)); +#endif dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0); +#if USE_GLOG_AND_GFLAGS if (FLAGS_dll_bw_hz != 0.0) dll_bw_hz = static_cast(FLAGS_dll_bw_hz); +#else + if (absl::GetFlag(FLAGS_dll_bw_hz) != 0.0) dll_bw_hz = static_cast(absl::GetFlag(FLAGS_dll_bw_hz)); +#endif + early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); const std::string default_dump_filename("./track_ch"); dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_gaussian_tracking.cc b/src/algorithms/tracking/adapters/gps_l1_ca_gaussian_tracking.cc index b5439d3193..3b501dcbcb 100644 --- a/src/algorithms/tracking/adapters/gps_l1_ca_gaussian_tracking.cc +++ b/src/algorithms/tracking/adapters/gps_l1_ca_gaussian_tracking.cc @@ -28,7 +28,12 @@ #include "GPS_L1_CA.h" #include "configuration_interface.h" #include "gnss_sdr_flags.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif GpsL1CaGaussianTracking::GpsL1CaGaussianTracking( @@ -50,10 +55,17 @@ GpsL1CaGaussianTracking::GpsL1CaGaussianTracking( int fs_in = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); bool dump = configuration->property(role_ + ".dump", false); float dll_bw_hz = configuration->property(role_ + ".dll_bw_hz", static_cast(2.0)); +#if USE_GLOG_AND_GFLAGS if (FLAGS_dll_bw_hz != 0.0) { dll_bw_hz = static_cast(FLAGS_dll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_dll_bw_hz) != 0.0) + { + dll_bw_hz = static_cast(absl::GetFlag(FLAGS_dll_bw_hz)); + } +#endif float early_late_space_chips = configuration->property(role_ + ".early_late_space_chips", static_cast(0.5)); const std::string default_dump_filename("./track_ch"); std::string dump_filename = configuration->property(role_ + ".dump_filename", default_dump_filename); diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_kf_tracking.cc b/src/algorithms/tracking/adapters/gps_l1_ca_kf_tracking.cc index d1fbae84d4..ad4dd16479 100644 --- a/src/algorithms/tracking/adapters/gps_l1_ca_kf_tracking.cc +++ b/src/algorithms/tracking/adapters/gps_l1_ca_kf_tracking.cc @@ -27,10 +27,15 @@ #include "display.h" #include "gnss_sdr_flags.h" #include "kf_conf.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GpsL1CaKfTracking::GpsL1CaKfTracking( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_tcp_connector_tracking.cc b/src/algorithms/tracking/adapters/gps_l1_ca_tcp_connector_tracking.cc index fa09c8dcbe..887dbdbc5c 100644 --- a/src/algorithms/tracking/adapters/gps_l1_ca_tcp_connector_tracking.cc +++ b/src/algorithms/tracking/adapters/gps_l1_ca_tcp_connector_tracking.cc @@ -24,9 +24,14 @@ #include "gps_l1_ca_tcp_connector_tracking.h" #include "GPS_L1_CA.h" #include "configuration_interface.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GpsL1CaTcpConnectorTracking::GpsL1CaTcpConnectorTracking( const ConfigurationInterface* configuration, diff --git a/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking.cc index 98692f5447..c048686c99 100644 --- a/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking.cc @@ -26,10 +26,15 @@ #include "display.h" #include "dll_pll_conf.h" #include "gnss_sdr_flags.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GpsL2MDllPllTracking::GpsL2MDllPllTracking( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking_fpga.cc b/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking_fpga.cc index da652be87e..0d0fa843a2 100644 --- a/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking_fpga.cc +++ b/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking_fpga.cc @@ -30,13 +30,18 @@ #include "gnss_synchro.h" #include "gps_l2c_signal_replica.h" #include "uio_fpga.h" -#include #include #include #include #include // for round #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GpsL2MDllPllTrackingFpga::GpsL2MDllPllTrackingFpga( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking.cc index d773038202..fddc9d8c23 100644 --- a/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking.cc @@ -26,10 +26,15 @@ #include "display.h" #include "dll_pll_conf.h" #include "gnss_sdr_flags.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GpsL5DllPllTracking::GpsL5DllPllTracking( const ConfigurationInterface* configuration, const std::string& role, diff --git a/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking_fpga.cc b/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking_fpga.cc index 485afd7c37..2020ef0423 100644 --- a/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking_fpga.cc +++ b/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking_fpga.cc @@ -30,11 +30,16 @@ #include "gnss_sdr_flags.h" #include "gps_l5_signal_replica.h" #include "uio_fpga.h" -#include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga( const ConfigurationInterface *configuration, const std::string &role, diff --git a/src/algorithms/tracking/gnuradio_blocks/CMakeLists.txt b/src/algorithms/tracking/gnuradio_blocks/CMakeLists.txt index cad24584d3..4f72b86d0f 100644 --- a/src/algorithms/tracking/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/tracking/gnuradio_blocks/CMakeLists.txt @@ -85,9 +85,15 @@ target_link_libraries(tracking_gr_blocks algorithms_libs Matio::matio gnss_sdr_flags - Glog::glog ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(tracking_gr_blocks PRIVATE Glog::glog) + target_compile_definitions(tracking_gr_blocks PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(tracking_gr_blocks PRIVATE absl::flags absl::log) +endif() + if(GNURADIO_USES_STD_POINTERS) target_compile_definitions(tracking_gr_blocks PUBLIC -DGNURADIO_USES_STD_POINTERS=1 diff --git a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking.cc b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking.cc index 5ac5f6d627..803d1e7c66 100644 --- a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking.cc +++ b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking.cc @@ -45,7 +45,6 @@ #include "gps_sdr_signal_replica.h" #include "lock_detectors.h" #include "tracking_discriminators.h" -#include #include // for io_signature #include // for scoped_lock #include // for Mat_VarCreate @@ -61,6 +60,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include @@ -1859,7 +1864,7 @@ int dll_pll_veml_tracking::general_work(int noutput_items __attribute__((unused) if (next_state) { LOG(INFO) << d_systemName << " " << d_signal_pretty_name << " tracking bit synchronization locked in channel " << d_channel - << " for satellite " << Gnss_Satellite(d_systemName, d_acquisition_gnss_synchro->PRN) << '\n'; + << " for satellite " << Gnss_Satellite(d_systemName, d_acquisition_gnss_synchro->PRN); std::cout << d_systemName << " " << d_signal_pretty_name << " tracking bit synchronization locked in channel " << d_channel << " for satellite " << Gnss_Satellite(d_systemName, d_acquisition_gnss_synchro->PRN) << '\n'; } diff --git a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc index 070f0d46fc..96b28be185 100644 --- a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc +++ b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc @@ -35,7 +35,6 @@ #include "gps_sdr_signal_replica.h" #include "lock_detectors.h" #include "tracking_discriminators.h" -#include #include // for io_signature #include // for scoped_lock #include // for Mat_VarCreate @@ -49,6 +48,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include @@ -1530,11 +1535,12 @@ int dll_pll_veml_tracking_fpga::general_work(int noutput_items __attribute__((un { boost::mutex::scoped_lock lock(d_mutex); d_worker_is_done = false; + l.unlock(); while (!d_worker_is_done) { d_m_condition.wait(lock); } - + l.lock(); // Signal alignment (skip samples until the incoming signal is aligned with local replica) int64_t acq_trk_diff_samples; double acq_trk_diff_seconds; @@ -1676,7 +1682,7 @@ int dll_pll_veml_tracking_fpga::general_work(int noutput_items __attribute__((un if (next_state) { LOG(INFO) << d_systemName << " " << d_signal_pretty_name << " tracking bit synchronization locked in channel " << d_channel - << " for satellite " << Gnss_Satellite(d_systemName, d_acquisition_gnss_synchro->PRN) << '\n'; + << " for satellite " << Gnss_Satellite(d_systemName, d_acquisition_gnss_synchro->PRN); std::cout << d_systemName << " " << d_signal_pretty_name << " tracking bit synchronization locked in channel " << d_channel << " for satellite " << Gnss_Satellite(d_systemName, d_acquisition_gnss_synchro->PRN) << '\n'; } diff --git a/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc index d40c997833..e4af28caf3 100644 --- a/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc @@ -32,7 +32,6 @@ #include "tcp_communication.h" #include "tcp_packet_data.h" #include "tracking_discriminators.h" -#include #include #include #include // for fill_n @@ -42,6 +41,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + galileo_e1_tcp_connector_tracking_cc_sptr galileo_e1_tcp_connector_make_tracking_cc( int64_t fs_in, @@ -111,7 +116,11 @@ Galileo_E1_Tcp_Connector_Tracking_cc::Galileo_E1_Tcp_Connector_Tracking_cc( d_cn0_estimation_counter(0), d_carrier_lock_test(1), d_CN0_SNV_dB_Hz(0), +#if USE_GLOG_AND_GFLAGS d_carrier_lock_threshold(static_cast(FLAGS_carrier_lock_th)), +#else + d_carrier_lock_threshold(static_cast(absl::GetFlag(FLAGS_carrier_lock_th))), +#endif d_carrier_lock_fail_counter(0), d_enable_tracking(false), d_pull_in(false), @@ -126,8 +135,11 @@ Galileo_E1_Tcp_Connector_Tracking_cc::Galileo_E1_Tcp_Connector_Tracking_cc( // Telemetry message port input this->message_port_register_in(pmt::mp("telemetry_to_trk")); +#if USE_GLOG_AND_GFLAGS d_Prompt_buffer = volk_gnsssdr::vector(FLAGS_cn0_samples); - +#else + d_Prompt_buffer = volk_gnsssdr::vector(absl::GetFlag(FLAGS_cn0_samples)); +#endif // Initialization of local code replica // Get space for a vector with the sinboc(1,1) replica sampled 2x/chip d_ca_code = volk_gnsssdr::vector(2 * GALILEO_E1_B_CODE_LENGTH_CHIPS, gr_complex(0.0, 0.0)); @@ -365,10 +377,13 @@ int Galileo_E1_Tcp_Connector_Tracking_cc::general_work(int noutput_items __attri T_prn_samples = T_prn_seconds * static_cast(d_fs_in); K_blk_samples = T_prn_samples + d_rem_code_phase_samples + code_error_filt_secs * static_cast(d_fs_in); d_current_prn_length_samples = round(K_blk_samples); // round to a discrete number of samples - // d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### +#if USE_GLOG_AND_GFLAGS if (d_cn0_estimation_counter < FLAGS_cn0_samples) +#else + if (d_cn0_estimation_counter < absl::GetFlag(FLAGS_cn0_samples)) +#endif { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = *d_Prompt; @@ -379,6 +394,8 @@ int Galileo_E1_Tcp_Connector_Tracking_cc::general_work(int noutput_items __attri d_cn0_estimation_counter = 0; // Code lock indicator + +#if USE_GLOG_AND_GFLAGS d_CN0_SNV_dB_Hz = cn0_m2m4_estimator(d_Prompt_buffer.data(), FLAGS_cn0_samples, GALILEO_E1_CODE_PERIOD_S); // Carrier lock indicator @@ -386,6 +403,14 @@ int Galileo_E1_Tcp_Connector_Tracking_cc::general_work(int noutput_items __attri // Loss of lock detection if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < FLAGS_cn0_min) +#else + d_CN0_SNV_dB_Hz = cn0_m2m4_estimator(d_Prompt_buffer.data(), absl::GetFlag(FLAGS_cn0_samples), GALILEO_E1_CODE_PERIOD_S); + + // Carrier lock indicator + d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), absl::GetFlag(FLAGS_cn0_samples)); + + if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < absl::GetFlag(FLAGS_cn0_min)) +#endif { d_carrier_lock_fail_counter++; } @@ -396,7 +421,11 @@ int Galileo_E1_Tcp_Connector_Tracking_cc::general_work(int noutput_items __attri d_carrier_lock_fail_counter--; } } +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_fail_counter > FLAGS_max_lock_fail) +#else + if (d_carrier_lock_fail_counter > absl::GetFlag(FLAGS_max_lock_fail)) +#endif { std::cout << "Loss of lock in channel " << d_channel << "!\n"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; diff --git a/src/algorithms/tracking/gnuradio_blocks/glonass_l1_ca_dll_pll_c_aid_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/glonass_l1_ca_dll_pll_c_aid_tracking_cc.cc index 32e0a2e2f7..5a1eed2294 100644 --- a/src/algorithms/tracking/gnuradio_blocks/glonass_l1_ca_dll_pll_c_aid_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/glonass_l1_ca_dll_pll_c_aid_tracking_cc.cc @@ -30,7 +30,6 @@ #include "gnss_sdr_flags.h" #include "lock_detectors.h" #include "tracking_discriminators.h" -#include #include #include #include @@ -46,6 +45,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include @@ -146,7 +151,11 @@ glonass_l1_ca_dll_pll_c_aid_tracking_cc::glonass_l1_ca_dll_pll_c_aid_tracking_cc d_cn0_estimation_counter(0), d_carrier_lock_test(1), d_CN0_SNV_dB_Hz(0), +#if USE_GLOG_AND_GFLAGS d_carrier_lock_threshold(FLAGS_carrier_lock_th), +#else + d_carrier_lock_threshold(absl::GetFlag(FLAGS_carrier_lock_th)), +#endif d_carrier_lock_fail_counter(0), d_enable_extended_integration(false), d_preamble_synchronized(false), @@ -189,8 +198,12 @@ glonass_l1_ca_dll_pll_c_aid_tracking_cc::glonass_l1_ca_dll_pll_c_aid_tracking_cc d_local_code_shift_chips[2] = d_early_late_spc_chips; multicorrelator_cpu.init(2 * d_correlation_length_samples, d_n_correlator_taps); - +#if USE_GLOG_AND_GFLAGS d_Prompt_buffer = volk_gnsssdr::vector(FLAGS_cn0_samples); +#else + d_Prompt_buffer = volk_gnsssdr::vector(absl::GetFlag(FLAGS_cn0_samples)); +#endif + systemName["R"] = std::string("Glonass"); #if GNURADIO_GREATER_THAN_38 this->set_relative_rate(1, static_cast(d_vector_length)); @@ -747,8 +760,13 @@ int glonass_l1_ca_dll_pll_c_aid_tracking_cc::general_work(int noutput_items __at d_CN0_SNV_dB_Hz = cn0_m2m4_estimator(d_Prompt_buffer.data(), CN0_ESTIMATION_SAMPLES, GLONASS_L1_CA_CODE_PERIOD_S); // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), CN0_ESTIMATION_SAMPLES); - // Loss of lock detection + // Loss of lock detectionç + +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < FLAGS_cn0_min) +#else + if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < absl::GetFlag(FLAGS_cn0_min)) +#endif { d_carrier_lock_fail_counter++; } @@ -759,7 +777,11 @@ int glonass_l1_ca_dll_pll_c_aid_tracking_cc::general_work(int noutput_items __at d_carrier_lock_fail_counter--; } } +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_fail_counter > FLAGS_max_lock_fail) +#else + if (d_carrier_lock_fail_counter > absl::GetFlag(FLAGS_max_lock_fail)) +#endif { std::cout << "Loss of lock in channel " << d_channel << "!\n"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; diff --git a/src/algorithms/tracking/gnuradio_blocks/glonass_l1_ca_dll_pll_c_aid_tracking_sc.cc b/src/algorithms/tracking/gnuradio_blocks/glonass_l1_ca_dll_pll_c_aid_tracking_sc.cc index 99108ee196..c677862018 100644 --- a/src/algorithms/tracking/gnuradio_blocks/glonass_l1_ca_dll_pll_c_aid_tracking_sc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/glonass_l1_ca_dll_pll_c_aid_tracking_sc.cc @@ -30,7 +30,6 @@ #include "gnss_sdr_flags.h" #include "lock_detectors.h" #include "tracking_discriminators.h" -#include #include #include #include @@ -44,6 +43,13 @@ #include #include + +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include @@ -144,7 +150,11 @@ glonass_l1_ca_dll_pll_c_aid_tracking_sc::glonass_l1_ca_dll_pll_c_aid_tracking_sc d_cn0_estimation_counter(0), d_carrier_lock_test(1), d_CN0_SNV_dB_Hz(0), +#if USE_GLOG_AND_GFLAGS d_carrier_lock_threshold(FLAGS_carrier_lock_th), +#else + d_carrier_lock_threshold(absl::GetFlag(FLAGS_carrier_lock_th)), +#endif d_carrier_lock_fail_counter(0), d_enable_extended_integration(false), d_preamble_synchronized(false), @@ -185,9 +195,11 @@ glonass_l1_ca_dll_pll_c_aid_tracking_sc::glonass_l1_ca_dll_pll_c_aid_tracking_sc d_local_code_shift_chips[2] = d_early_late_spc_chips; multicorrelator_cpu_16sc.init(2 * d_correlation_length_samples, d_n_correlator_taps); - +#if USE_GLOG_AND_GFLAGS d_Prompt_buffer = volk_gnsssdr::vector(FLAGS_cn0_samples); - +#else + d_Prompt_buffer = volk_gnsssdr::vector(absl::GetFlag(FLAGS_cn0_samples)); +#endif systemName["R"] = std::string("Glonass"); #if GNURADIO_GREATER_THAN_38 @@ -750,7 +762,12 @@ int glonass_l1_ca_dll_pll_c_aid_tracking_sc::general_work(int noutput_items __at // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), CN0_ESTIMATION_SAMPLES); // Loss of lock detection + +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < FLAGS_cn0_min) +#else + if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < absl::GetFlag(FLAGS_cn0_min)) +#endif { d_carrier_lock_fail_counter++; } @@ -761,7 +778,12 @@ int glonass_l1_ca_dll_pll_c_aid_tracking_sc::general_work(int noutput_items __at d_carrier_lock_fail_counter--; } } + +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_fail_counter > FLAGS_max_lock_fail) +#else + if (d_carrier_lock_fail_counter > absl::GetFlag(FLAGS_max_lock_fail)) +#endif { std::cout << "Loss of lock in channel " << d_channel << "!\n"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; diff --git a/src/algorithms/tracking/gnuradio_blocks/glonass_l1_ca_dll_pll_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/glonass_l1_ca_dll_pll_tracking_cc.cc index 61e9e9feba..3829539c93 100644 --- a/src/algorithms/tracking/gnuradio_blocks/glonass_l1_ca_dll_pll_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/glonass_l1_ca_dll_pll_tracking_cc.cc @@ -30,7 +30,6 @@ #include "gnss_sdr_flags.h" #include "lock_detectors.h" #include "tracking_discriminators.h" -#include #include #include #include @@ -44,6 +43,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #define CN0_ESTIMATION_SAMPLES 10 glonass_l1_ca_dll_pll_tracking_cc_sptr glonass_l1_ca_dll_pll_make_tracking_cc( @@ -106,7 +111,11 @@ Glonass_L1_Ca_Dll_Pll_Tracking_cc::Glonass_L1_Ca_Dll_Pll_Tracking_cc( d_acq_sample_stamp(0), d_carrier_lock_test(1), d_CN0_SNV_dB_Hz(0), +#if USE_GLOG_AND_GFLAGS d_carrier_lock_threshold(FLAGS_carrier_lock_th), +#else + d_carrier_lock_threshold(absl::GetFlag(FLAGS_carrier_lock_th)), +#endif d_carrier_lock_fail_counter(0), d_cn0_estimation_counter(0), d_enable_tracking(false), @@ -134,7 +143,11 @@ Glonass_L1_Ca_Dll_Pll_Tracking_cc::Glonass_L1_Ca_Dll_Pll_Tracking_cc( multicorrelator_cpu.init(2 * d_current_prn_length_samples, d_n_correlator_taps); +#if USE_GLOG_AND_GFLAGS d_Prompt_buffer = volk_gnsssdr::vector(FLAGS_cn0_samples); +#else + d_Prompt_buffer = volk_gnsssdr::vector(absl::GetFlag(FLAGS_cn0_samples)); +#endif systemName["R"] = std::string("Glonass"); #if GNURADIO_GREATER_THAN_38 @@ -594,7 +607,12 @@ int Glonass_L1_Ca_Dll_Pll_Tracking_cc::general_work(int noutput_items __attribut // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), CN0_ESTIMATION_SAMPLES); // Loss of lock detection + +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < FLAGS_cn0_min) +#else + if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < absl::GetFlag(FLAGS_cn0_min)) +#endif { d_carrier_lock_fail_counter++; } @@ -605,7 +623,11 @@ int Glonass_L1_Ca_Dll_Pll_Tracking_cc::general_work(int noutput_items __attribut d_carrier_lock_fail_counter--; } } +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_fail_counter > FLAGS_max_lock_fail) +#else + if (d_carrier_lock_fail_counter > absl::GetFlag(FLAGS_max_lock_fail)) +#endif { std::cout << "Loss of lock in channel " << d_channel << "!\n"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; diff --git a/src/algorithms/tracking/gnuradio_blocks/glonass_l2_ca_dll_pll_c_aid_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/glonass_l2_ca_dll_pll_c_aid_tracking_cc.cc index 6274a0b261..5c433346e8 100644 --- a/src/algorithms/tracking/gnuradio_blocks/glonass_l2_ca_dll_pll_c_aid_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/glonass_l2_ca_dll_pll_c_aid_tracking_cc.cc @@ -28,7 +28,6 @@ #include "gnss_sdr_flags.h" #include "lock_detectors.h" #include "tracking_discriminators.h" -#include #include #include #include @@ -43,6 +42,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include @@ -143,7 +148,11 @@ glonass_l2_ca_dll_pll_c_aid_tracking_cc::glonass_l2_ca_dll_pll_c_aid_tracking_cc d_cn0_estimation_counter(0), d_carrier_lock_test(1), d_CN0_SNV_dB_Hz(0), +#if USE_GLOG_AND_GFLAGS d_carrier_lock_threshold(FLAGS_carrier_lock_th), +#else + d_carrier_lock_threshold(absl::GetFlag(FLAGS_carrier_lock_th)), +#endif d_carrier_lock_fail_counter(0), d_enable_extended_integration(false), d_preamble_synchronized(false), @@ -185,8 +194,11 @@ glonass_l2_ca_dll_pll_c_aid_tracking_cc::glonass_l2_ca_dll_pll_c_aid_tracking_cc multicorrelator_cpu.init(2 * d_correlation_length_samples, d_n_correlator_taps); +#if USE_GLOG_AND_GFLAGS d_Prompt_buffer = volk_gnsssdr::vector(FLAGS_cn0_samples); - +#else + d_Prompt_buffer = volk_gnsssdr::vector(absl::GetFlag(FLAGS_cn0_samples)); +#endif systemName["R"] = std::string("Glonass"); #if GNURADIO_GREATER_THAN_38 @@ -747,7 +759,12 @@ int glonass_l2_ca_dll_pll_c_aid_tracking_cc::general_work(int noutput_items __at // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), CN0_ESTIMATION_SAMPLES); // Loss of lock detection + +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < FLAGS_cn0_min) +#else + if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < absl::GetFlag(FLAGS_cn0_min)) +#endif { d_carrier_lock_fail_counter++; } @@ -758,7 +775,12 @@ int glonass_l2_ca_dll_pll_c_aid_tracking_cc::general_work(int noutput_items __at d_carrier_lock_fail_counter--; } } + +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_fail_counter > FLAGS_max_lock_fail) +#else + if (d_carrier_lock_fail_counter > absl::GetFlag(FLAGS_max_lock_fail)) +#endif { std::cout << "Loss of lock in channel " << d_channel << "!\n"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; diff --git a/src/algorithms/tracking/gnuradio_blocks/glonass_l2_ca_dll_pll_c_aid_tracking_sc.cc b/src/algorithms/tracking/gnuradio_blocks/glonass_l2_ca_dll_pll_c_aid_tracking_sc.cc index f88f217c4d..6c8b65c20b 100644 --- a/src/algorithms/tracking/gnuradio_blocks/glonass_l2_ca_dll_pll_c_aid_tracking_sc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/glonass_l2_ca_dll_pll_c_aid_tracking_sc.cc @@ -28,7 +28,6 @@ #include "gnss_sdr_flags.h" #include "lock_detectors.h" #include "tracking_discriminators.h" -#include #include #include #include @@ -42,6 +41,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include @@ -141,7 +146,11 @@ glonass_l2_ca_dll_pll_c_aid_tracking_sc::glonass_l2_ca_dll_pll_c_aid_tracking_sc d_acq_sample_stamp(0), d_carrier_lock_test(1), d_CN0_SNV_dB_Hz(0), +#if USE_GLOG_AND_GFLAGS d_carrier_lock_threshold(FLAGS_carrier_lock_th), +#else + d_carrier_lock_threshold(absl::GetFlag(FLAGS_carrier_lock_th)), +#endif d_carrier_lock_fail_counter(0), d_cn0_estimation_counter(0), d_enable_extended_integration(false), @@ -183,7 +192,11 @@ glonass_l2_ca_dll_pll_c_aid_tracking_sc::glonass_l2_ca_dll_pll_c_aid_tracking_sc multicorrelator_cpu_16sc.init(2 * d_correlation_length_samples, d_n_correlator_taps); +#if USE_GLOG_AND_GFLAGS d_Prompt_buffer = volk_gnsssdr::vector(FLAGS_cn0_samples); +#else + d_Prompt_buffer = volk_gnsssdr::vector(absl::GetFlag(FLAGS_cn0_samples)); +#endif systemName["R"] = std::string("Glonass"); @@ -747,7 +760,12 @@ int glonass_l2_ca_dll_pll_c_aid_tracking_sc::general_work(int noutput_items __at // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), CN0_ESTIMATION_SAMPLES); // Loss of lock detection + +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < FLAGS_cn0_min) +#else + if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < absl::GetFlag(FLAGS_cn0_min)) +#endif { d_carrier_lock_fail_counter++; } @@ -758,7 +776,11 @@ int glonass_l2_ca_dll_pll_c_aid_tracking_sc::general_work(int noutput_items __at d_carrier_lock_fail_counter--; } } +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_fail_counter > FLAGS_max_lock_fail) +#else + if (d_carrier_lock_fail_counter > absl::GetFlag(FLAGS_max_lock_fail)) +#endif { std::cout << "Loss of lock in channel " << d_channel << "!\n"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; diff --git a/src/algorithms/tracking/gnuradio_blocks/glonass_l2_ca_dll_pll_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/glonass_l2_ca_dll_pll_tracking_cc.cc index 56b892474d..9950a77e8e 100644 --- a/src/algorithms/tracking/gnuradio_blocks/glonass_l2_ca_dll_pll_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/glonass_l2_ca_dll_pll_tracking_cc.cc @@ -30,7 +30,6 @@ #include "gnss_sdr_flags.h" #include "lock_detectors.h" #include "tracking_discriminators.h" -#include #include #include #include @@ -44,6 +43,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #define CN0_ESTIMATION_SAMPLES 10 @@ -107,7 +112,11 @@ Glonass_L2_Ca_Dll_Pll_Tracking_cc::Glonass_L2_Ca_Dll_Pll_Tracking_cc( d_acq_sample_stamp(0), d_carrier_lock_test(1), d_CN0_SNV_dB_Hz(0), +#if USE_GLOG_AND_GFLAGS d_carrier_lock_threshold(FLAGS_carrier_lock_th), +#else + d_carrier_lock_threshold(absl::GetFlag(FLAGS_carrier_lock_th)), +#endif d_cn0_estimation_counter(0), d_carrier_lock_fail_counter(0), d_enable_tracking(false), @@ -135,7 +144,11 @@ Glonass_L2_Ca_Dll_Pll_Tracking_cc::Glonass_L2_Ca_Dll_Pll_Tracking_cc( multicorrelator_cpu.init(2 * d_current_prn_length_samples, d_n_correlator_taps); +#if USE_GLOG_AND_GFLAGS d_Prompt_buffer = volk_gnsssdr::vector(FLAGS_cn0_samples); +#else + d_Prompt_buffer = volk_gnsssdr::vector(absl::GetFlag(FLAGS_cn0_samples)); +#endif systemName["R"] = std::string("Glonass"); @@ -596,7 +609,12 @@ int Glonass_L2_Ca_Dll_Pll_Tracking_cc::general_work(int noutput_items __attribut // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), CN0_ESTIMATION_SAMPLES); // Loss of lock detection + +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < FLAGS_cn0_min) +#else + if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < absl::GetFlag(FLAGS_cn0_min)) +#endif { d_carrier_lock_fail_counter++; } @@ -607,7 +625,11 @@ int Glonass_L2_Ca_Dll_Pll_Tracking_cc::general_work(int noutput_items __attribut d_carrier_lock_fail_counter--; } } +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_fail_counter > FLAGS_max_lock_fail) +#else + if (d_carrier_lock_fail_counter > absl::GetFlag(FLAGS_max_lock_fail)) +#endif { std::cout << "Loss of lock in channel " << d_channel << "!\n"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc index 9898ad1787..2930c52782 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc @@ -22,7 +22,6 @@ #include "lock_detectors.h" #include "tracking_discriminators.h" #include -#include #include #include #include @@ -32,6 +31,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + gps_l1_ca_dll_pll_tracking_gpu_cc_sptr gps_l1_ca_dll_pll_make_tracking_gpu_cc( @@ -127,12 +132,21 @@ Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc( // CN0 estimation and lock detector buffers d_cn0_estimation_counter = 0; +#if USE_GLOG_AND_GFLAGS d_Prompt_buffer = std::vector(FLAGS_cn0_samples); +#else + d_Prompt_buffer = std::vector(absl::GetFlag(FLAGS_cn0_samples)); +#endif + + d_carrier_lock_test = 1; d_CN0_SNV_dB_Hz = 0; d_carrier_lock_fail_counter = 0; +#if USE_GLOG_AND_GFLAGS d_carrier_lock_threshold = FLAGS_carrier_lock_th; - +#else + d_carrier_lock_threshold = absl::GetFlag(FLAGS_carrier_lock_th); +#endif systemName["G"] = std::string("GPS"); systemName["S"] = std::string("SBAS"); @@ -421,7 +435,12 @@ int Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::general_work(int noutput_items __attribut d_rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_chips / static_cast(d_fs_in)); // ####### CN0 ESTIMATION AND LOCK DETECTORS ####################################### + +#if USE_GLOG_AND_GFLAGS if (d_cn0_estimation_counter < FLAGS_cn0_samples) +#else + if (d_cn0_estimation_counter < absl::getFlag(FLAGS_cn0_samples)) +#endif { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = d_correlator_outs[1]; // prompt @@ -431,11 +450,18 @@ int Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::general_work(int noutput_items __attribut { d_cn0_estimation_counter = 0; // Code lock indicator + +#if USE_GLOG_AND_GFLAGS d_CN0_SNV_dB_Hz = cn0_m2m4_estimator(d_Prompt_buffer.data(), FLAGS_cn0_samples, GPS_L1_CA_CODE_PERIOD_S); // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), FLAGS_cn0_samples); // Loss of lock detection if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < FLAGS_cn0_min) +#else + d_CN0_SNV_dB_Hz = cn0_m2m4_estimator(d_Prompt_buffer.data(), absl::GetFlag(FLAGS_cn0_samples), GPS_L1_CA_CODE_PERIOD_S); + d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), absl::GetFlag(FLAGS_cn0_samples)); + if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < absl::GetFlag(FLAGS_cn0_min)) +#endif { d_carrier_lock_fail_counter++; } @@ -443,7 +469,11 @@ int Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::general_work(int noutput_items __attribut { if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--; } +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_fail_counter > FLAGS_max_lock_fail) +#else + if (d_carrier_lock_fail_counter > absl::GetFlag(FLAGS_max_lock_fail)) +#endif { std::cout << "Loss of lock in channel " << d_channel << "!\n"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_gaussian_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_gaussian_tracking_cc.cc index 0b8c3bb849..0d90a799fe 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_gaussian_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_gaussian_tracking_cc.cc @@ -30,7 +30,6 @@ #include "gps_sdr_signal_replica.h" #include "lock_detectors.h" #include "tracking_discriminators.h" -#include #include #include #include @@ -44,6 +43,11 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif gps_l1_ca_gaussian_tracking_cc_sptr gps_l1_ca_gaussian_make_tracking_cc( uint32_t order, @@ -126,7 +130,11 @@ Gps_L1_Ca_Gaussian_Tracking_cc::Gps_L1_Ca_Gaussian_Tracking_cc( d_cn0_estimation_counter(0), d_carrier_lock_test(1), d_CN0_SNV_dB_Hz(0), +#if USE_GLOG_AND_GFLAGS d_carrier_lock_threshold(FLAGS_carrier_lock_th), +#else + d_carrier_lock_threshold(absl::GetFlag(FLAGS_carrier_lock_th)), +#endif d_carrier_lock_fail_counter(0), d_enable_tracking(false), d_pull_in(false), @@ -154,8 +162,11 @@ Gps_L1_Ca_Gaussian_Tracking_cc::Gps_L1_Ca_Gaussian_Tracking_cc( multicorrelator_cpu.init(2 * d_current_prn_length_samples, d_n_correlator_taps); +#if USE_GLOG_AND_GFLAGS d_Prompt_buffer = volk_gnsssdr::vector(FLAGS_cn0_samples); - +#else + d_Prompt_buffer = volk_gnsssdr::vector(absl::GetFlag(FLAGS_cn0_samples)); +#endif systemName["G"] = std::string("GPS"); systemName["S"] = std::string("SBAS"); @@ -746,7 +757,12 @@ int Gps_L1_Ca_Gaussian_Tracking_cc::general_work(int noutput_items __attribute__ d_rem_code_phase_chips = d_code_freq_chips * (d_rem_code_phase_samples / static_cast(d_fs_in)); // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### + +#if USE_GLOG_AND_GFLAGS if (d_cn0_estimation_counter < FLAGS_cn0_samples) +#else + if (d_cn0_estimation_counter < absl::GetFlag(FLAGS_cn0_samples)) +#endif { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = d_correlator_outs[1]; // prompt @@ -755,12 +771,21 @@ int Gps_L1_Ca_Gaussian_Tracking_cc::general_work(int noutput_items __attribute__ else { d_cn0_estimation_counter = 0; +#if USE_GLOG_AND_GFLAGS // Code lock indicator d_CN0_SNV_dB_Hz = cn0_m2m4_estimator(d_Prompt_buffer.data(), FLAGS_cn0_samples, GPS_L1_CA_CODE_PERIOD_S); // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), FLAGS_cn0_samples); // Loss of lock detection if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < FLAGS_cn0_min) +#else + // Code lock indicator + d_CN0_SNV_dB_Hz = cn0_m2m4_estimator(d_Prompt_buffer.data(), absl::GetFlag(FLAGS_cn0_samples), GPS_L1_CA_CODE_PERIOD_S); + // Carrier lock indicator + d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), absl::GetFlag(FLAGS_cn0_samples)); + // Loss of lock detection + if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < absl::GetFlag(FLAGS_cn0_min)) +#endif { // if (d_channel == 1) // std::cout << "Carrier Lock Test Fail in channel " << d_channel << ": " << d_carrier_lock_test << " < " << d_carrier_lock_threshold << "," << nfail++ << '\n'; @@ -774,7 +799,11 @@ int Gps_L1_Ca_Gaussian_Tracking_cc::general_work(int noutput_items __attribute__ d_carrier_lock_fail_counter--; } } +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_fail_counter > FLAGS_max_lock_fail) +#else + if (d_carrier_lock_fail_counter > absl::GetFlag(FLAGS_max_lock_fail)) +#endif { std::cout << "Loss of lock in channel " << d_channel << "!\n"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc index fb94fc2de8..7862a22566 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc @@ -30,7 +30,6 @@ #include "tcp_communication.h" #include "tcp_packet_data.h" #include "tracking_discriminators.h" -#include #include #include #include @@ -39,6 +38,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + gps_l1_ca_tcp_connector_tracking_cc_sptr gps_l1_ca_tcp_connector_make_tracking_cc( int64_t fs_in, @@ -102,7 +107,11 @@ Gps_L1_Ca_Tcp_Connector_Tracking_cc::Gps_L1_Ca_Tcp_Connector_Tracking_cc( d_acq_carrier_doppler_hz(0.0), d_carrier_lock_test(1), d_CN0_SNV_dB_Hz(0), +#if USE_GLOG_AND_GFLAGS d_carrier_lock_threshold(static_cast(FLAGS_carrier_lock_th)), +#else + d_carrier_lock_threshold(static_cast(absl::GetFlag(FLAGS_carrier_lock_th))), +#endif d_control_id(0), d_enable_tracking(false), d_pull_in(false), @@ -130,8 +139,11 @@ Gps_L1_Ca_Tcp_Connector_Tracking_cc::Gps_L1_Ca_Tcp_Connector_Tracking_cc( multicorrelator_cpu.init(2 * d_correlation_length_samples, d_n_correlator_taps); +#if USE_GLOG_AND_GFLAGS d_Prompt_buffer = volk_gnsssdr::vector(FLAGS_cn0_samples); - +#else + d_Prompt_buffer = volk_gnsssdr::vector(absl::GetFlag(FLAGS_cn0_samples)); +#endif systemName["G"] = std::string("GPS"); systemName["R"] = std::string("GLONASS"); systemName["S"] = std::string("SBAS"); @@ -400,7 +412,12 @@ int Gps_L1_Ca_Tcp_Connector_Tracking_cc::general_work(int noutput_items __attrib * \todo Improve the lock detection algorithm! */ // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### + +#if USE_GLOG_AND_GFLAGS if (d_cn0_estimation_counter < FLAGS_cn0_samples) +#else + if (d_cn0_estimation_counter < absl::GetFlag(FLAGS_cn0_samples)) +#endif { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = *d_Prompt; @@ -409,11 +426,19 @@ int Gps_L1_Ca_Tcp_Connector_Tracking_cc::general_work(int noutput_items __attrib else { d_cn0_estimation_counter = 0; +#if USE_GLOG_AND_GFLAGS d_CN0_SNV_dB_Hz = cn0_m2m4_estimator(d_Prompt_buffer.data(), FLAGS_cn0_samples, GPS_L1_CA_CODE_PERIOD_S); d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), FLAGS_cn0_samples); // ###### TRACKING UNLOCK NOTIFICATION ##### if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < FLAGS_cn0_min) +#else + d_CN0_SNV_dB_Hz = cn0_m2m4_estimator(d_Prompt_buffer.data(), absl::GetFlag(FLAGS_cn0_samples), GPS_L1_CA_CODE_PERIOD_S); + d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer.data(), absl::GetFlag(FLAGS_cn0_samples)); + + // ###### TRACKING UNLOCK NOTIFICATION ##### + if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < absl::GetFlag(FLAGS_cn0_min)) +#endif { d_carrier_lock_fail_counter++; } @@ -424,7 +449,11 @@ int Gps_L1_Ca_Tcp_Connector_Tracking_cc::general_work(int noutput_items __attrib d_carrier_lock_fail_counter--; } } +#if USE_GLOG_AND_GFLAGS if (d_carrier_lock_fail_counter > FLAGS_max_lock_fail) +#else + if (d_carrier_lock_fail_counter > absl::GetFlag(FLAGS_max_lock_fail)) +#endif { std::cout << "Loss of lock in channel " << d_channel << "!\n"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; diff --git a/src/algorithms/tracking/gnuradio_blocks/kf_tracking.cc b/src/algorithms/tracking/gnuradio_blocks/kf_tracking.cc index 6bfee663b7..12ec345982 100644 --- a/src/algorithms/tracking/gnuradio_blocks/kf_tracking.cc +++ b/src/algorithms/tracking/gnuradio_blocks/kf_tracking.cc @@ -43,7 +43,6 @@ #include "lock_detectors.h" #include "tracking_discriminators.h" #include "trackingcmd.h" -#include #include // for io_signature #include // for scoped_lock #include // for Mat_VarCreate @@ -60,6 +59,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include diff --git a/src/algorithms/tracking/libs/CMakeLists.txt b/src/algorithms/tracking/libs/CMakeLists.txt index 5b9520c0ac..d207a7cc98 100644 --- a/src/algorithms/tracking/libs/CMakeLists.txt +++ b/src/algorithms/tracking/libs/CMakeLists.txt @@ -88,10 +88,16 @@ target_link_libraries(tracking_libs algorithms_libs PRIVATE gnss_sdr_flags - Glog::glog Gnuradio::runtime ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(tracking_libs PRIVATE Glog::glog) + target_compile_definitions(tracking_libs PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(tracking_libs PRIVATE absl::flags absl::log) +endif() + if(ENABLE_CUDA) if(CMAKE_VERSION VERSION_GREATER 3.11) target_include_directories(tracking_libs diff --git a/src/algorithms/tracking/libs/dll_pll_conf.cc b/src/algorithms/tracking/libs/dll_pll_conf.cc index 0ffa5a3958..c41229d7e8 100644 --- a/src/algorithms/tracking/libs/dll_pll_conf.cc +++ b/src/algorithms/tracking/libs/dll_pll_conf.cc @@ -18,14 +18,26 @@ #include "dll_pll_conf.h" #include "gnss_sdr_flags.h" #include "item_type_helpers.h" -#include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif +#if USE_GLOG_AND_GFLAGS Dll_Pll_Conf::Dll_Pll_Conf() : carrier_lock_th(FLAGS_carrier_lock_th), cn0_samples(FLAGS_cn0_samples), cn0_min(FLAGS_cn0_min), max_code_lock_fail(FLAGS_max_lock_fail), max_carrier_lock_fail(FLAGS_max_carrier_lock_fail) +#else +Dll_Pll_Conf::Dll_Pll_Conf() : carrier_lock_th(absl::GetFlag(FLAGS_carrier_lock_th)), + cn0_samples(absl::GetFlag(FLAGS_cn0_samples)), + cn0_min(absl::GetFlag(FLAGS_cn0_min)), + max_code_lock_fail(absl::GetFlag(FLAGS_max_lock_fail)), + max_carrier_lock_fail(absl::GetFlag(FLAGS_max_carrier_lock_fail)) +#endif { signal[0] = '1'; signal[1] = 'C'; @@ -50,18 +62,31 @@ void Dll_Pll_Conf::SetFromConfiguration(const ConfigurationInterface *configurat dump_filename = configuration->property(role + ".dump_filename", dump_filename); dump_mat = configuration->property(role + ".dump_mat", dump_mat); pll_bw_hz = configuration->property(role + ".pll_bw_hz", pll_bw_hz); +#if USE_GLOG_AND_GFLAGS if (FLAGS_pll_bw_hz != 0.0) { pll_bw_hz = static_cast(FLAGS_pll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_pll_bw_hz) != 0.0) + { + pll_bw_hz = static_cast(absl::GetFlag(FLAGS_pll_bw_hz)); + } +#endif pll_bw_narrow_hz = configuration->property(role + ".pll_bw_narrow_hz", pll_bw_narrow_hz); dll_bw_narrow_hz = configuration->property(role + ".dll_bw_narrow_hz", dll_bw_narrow_hz); dll_bw_hz = configuration->property(role + ".dll_bw_hz", dll_bw_hz); +#if USE_GLOG_AND_GFLAGS if (FLAGS_dll_bw_hz != 0.0) { dll_bw_hz = static_cast(FLAGS_dll_bw_hz); } - +#else + if (absl::GetFlag(FLAGS_dll_bw_hz) != 0.0) + { + dll_bw_hz = static_cast(absl::GetFlag(FLAGS_dll_bw_hz)); + } +#endif dll_filter_order = configuration->property(role + ".dll_filter_order", dll_filter_order); pll_filter_order = configuration->property(role + ".pll_filter_order", pll_filter_order); if (dll_filter_order < 1) diff --git a/src/algorithms/tracking/libs/dll_pll_conf_fpga.cc b/src/algorithms/tracking/libs/dll_pll_conf_fpga.cc index f2c3ea73aa..d784a204b6 100644 --- a/src/algorithms/tracking/libs/dll_pll_conf_fpga.cc +++ b/src/algorithms/tracking/libs/dll_pll_conf_fpga.cc @@ -19,14 +19,26 @@ #include "dll_pll_conf_fpga.h" #include "gnss_sdr_flags.h" -#include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif +#if USE_GLOG_AND_GFLAGS Dll_Pll_Conf_Fpga::Dll_Pll_Conf_Fpga() : carrier_lock_th(FLAGS_carrier_lock_th), cn0_samples(FLAGS_cn0_samples), cn0_min(FLAGS_cn0_min), max_code_lock_fail(FLAGS_max_lock_fail), max_carrier_lock_fail(FLAGS_max_carrier_lock_fail) +#else +Dll_Pll_Conf_Fpga::Dll_Pll_Conf_Fpga() : carrier_lock_th(absl::GetFlag(FLAGS_carrier_lock_th)), + cn0_samples(absl::GetFlag(FLAGS_cn0_samples)), + cn0_min(absl::GetFlag(FLAGS_cn0_min)), + max_code_lock_fail(absl::GetFlag(FLAGS_max_lock_fail)), + max_carrier_lock_fail(absl::GetFlag(FLAGS_max_carrier_lock_fail)) +#endif { signal[0] = '1'; signal[1] = 'C'; @@ -88,15 +100,29 @@ void Dll_Pll_Conf_Fpga::SetFromConfiguration(const ConfigurationInterface *confi pll_pull_in_bw_hz = 50.0; dll_pull_in_bw_hz = 3.0; pll_bw_hz = configuration->property(role + ".pll_bw_hz", pll_bw_hz); +#if USE_GLOG_AND_GFLAGS if (FLAGS_pll_bw_hz != 0.0) { pll_bw_hz = static_cast(FLAGS_pll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_pll_bw_hz) != 0.0) + { + pll_bw_hz = static_cast(absl::GetFlag(FLAGS_pll_bw_hz)); + } +#endif dll_bw_hz = configuration->property(role + ".dll_bw_hz", dll_bw_hz); +#if USE_GLOG_AND_GFLAGS if (FLAGS_dll_bw_hz != 0.0) { dll_bw_hz = static_cast(FLAGS_dll_bw_hz); } +#else + if (absl::GetFlag(FLAGS_dll_bw_hz) != 0.0) + { + dll_bw_hz = static_cast(absl::GetFlag(FLAGS_dll_bw_hz)); + } +#endif pll_bw_narrow_hz = configuration->property(role + ".pll_bw_narrow_hz", pll_bw_narrow_hz); dll_bw_narrow_hz = configuration->property(role + ".dll_bw_narrow_hz", dll_bw_narrow_hz); early_late_space_chips = configuration->property(role + ".early_late_space_chips", early_late_space_chips); diff --git a/src/algorithms/tracking/libs/fpga_multicorrelator.cc b/src/algorithms/tracking/libs/fpga_multicorrelator.cc index 99f5f778cb..3b2ed122d1 100644 --- a/src/algorithms/tracking/libs/fpga_multicorrelator.cc +++ b/src/algorithms/tracking/libs/fpga_multicorrelator.cc @@ -21,7 +21,6 @@ */ #include "fpga_multicorrelator.h" -#include #include #include #include // for O_RDWR, O_RSYNC @@ -29,6 +28,12 @@ #include // for PROT_READ, PROT_WRITE, MAP_SHARED #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #ifndef TEMP_FAILURE_RETRY #define TEMP_FAILURE_RETRY(exp) \ ({ \ diff --git a/src/algorithms/tracking/libs/kf_conf.cc b/src/algorithms/tracking/libs/kf_conf.cc index 80b049c38b..db48182614 100644 --- a/src/algorithms/tracking/libs/kf_conf.cc +++ b/src/algorithms/tracking/libs/kf_conf.cc @@ -21,13 +21,21 @@ #include "kf_conf.h" #include "gnss_sdr_flags.h" #include "item_type_helpers.h" -#include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif Kf_Conf::Kf_Conf() : item_type("gr_complex"), dump_filename("./Kf_dump.dat"), fs_in(2000000.0), +#if USE_GLOG_AND_GFLAGS carrier_lock_th(FLAGS_carrier_lock_th), +#else + carrier_lock_th(absl::GetFlag(FLAGS_carrier_lock_th)), +#endif code_disc_sd_chips(0.2), carrier_disc_sd_rads(0.3), code_phase_sd_chips(0.15), @@ -52,12 +60,22 @@ Kf_Conf::Kf_Conf() : item_type("gr_complex"), vector_length(0U), smoother_length(10), extend_correlation_symbols(1), +#if USE_GLOG_AND_GFLAGS cn0_samples(FLAGS_cn0_samples), +#else + cn0_samples(absl::GetFlag(FLAGS_cn0_samples)), +#endif cn0_smoother_samples(200), carrier_lock_test_smoother_samples(25), +#if USE_GLOG_AND_GFLAGS cn0_min(FLAGS_cn0_min), max_code_lock_fail(FLAGS_max_lock_fail), max_carrier_lock_fail(FLAGS_max_carrier_lock_fail), +#else + cn0_min(absl::GetFlag(FLAGS_cn0_min)), + max_code_lock_fail(absl::GetFlag(FLAGS_max_lock_fail)), + max_carrier_lock_fail(absl::GetFlag(FLAGS_max_carrier_lock_fail)), +#endif system('G'), track_pilot(true), enable_doppler_correction(false), diff --git a/src/algorithms/tracking/libs/tracking_loop_filter.cc b/src/algorithms/tracking/libs/tracking_loop_filter.cc index a722f6ffaa..8fd66a9465 100644 --- a/src/algorithms/tracking/libs/tracking_loop_filter.cc +++ b/src/algorithms/tracking/libs/tracking_loop_filter.cc @@ -19,10 +19,15 @@ #include "tracking_loop_filter.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + const int MAX_LOOP_ORDER = 3; const int MAX_LOOP_HISTORY_LENGTH = 4; diff --git a/src/core/interfaces/signal_source_interface.h b/src/core/interfaces/signal_source_interface.h index df4a7baf46..759169c90b 100644 --- a/src/core/interfaces/signal_source_interface.h +++ b/src/core/interfaces/signal_source_interface.h @@ -27,7 +27,12 @@ #define GNSS_SDR_SIGNAL_SOURCE_INTERFACE_H #include "gnss_block_interface.h" + +#if USE_GLOG_AND_GFLAGS #include +#else +#include +#endif /** \addtogroup Core * \{ */ diff --git a/src/core/libs/CMakeLists.txt b/src/core/libs/CMakeLists.txt index 994501ecfd..7b4f4f7035 100644 --- a/src/core/libs/CMakeLists.txt +++ b/src/core/libs/CMakeLists.txt @@ -95,11 +95,16 @@ target_link_libraries(core_libs PRIVATE algorithms_libs Boost::serialization - Gflags::gflags - Glog::glog Pugixml::pugixml ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(core_libs PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(core_libs PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(core_libs PRIVATE absl::flags absl::log) +endif() + if(USE_GENERIC_LAMBDAS AND NOT GNURADIO_USES_STD_POINTERS) target_link_libraries(core_libs PUBLIC Boost::headers) else() diff --git a/src/core/libs/channel_status_msg_receiver.cc b/src/core/libs/channel_status_msg_receiver.cc index 4b11abd7ea..c96bb51a8b 100644 --- a/src/core/libs/channel_status_msg_receiver.cc +++ b/src/core/libs/channel_status_msg_receiver.cc @@ -17,7 +17,6 @@ #include "channel_status_msg_receiver.h" -#include #include #include #include @@ -25,6 +24,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include diff --git a/src/core/libs/galileo_e6_has_msg_receiver.cc b/src/core/libs/galileo_e6_has_msg_receiver.cc index 22e1cd524b..db0dc3fd72 100644 --- a/src/core/libs/galileo_e6_has_msg_receiver.cc +++ b/src/core/libs/galileo_e6_has_msg_receiver.cc @@ -23,7 +23,6 @@ #include "galileo_has_page.h" // for Galileo_HAS_page #include "gnss_sdr_make_unique.h" // for std::make_unique in C++11 #include "reed_solomon.h" // for ReedSolomon -#include // for DLOG #include // for gr::io_signature::make #include // for std::find, std::count #include // for std::remainder @@ -34,6 +33,12 @@ #include // for std::out_of_range #include // for typeid +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include diff --git a/src/core/libs/galileo_tow_map.cc b/src/core/libs/galileo_tow_map.cc index 6b4da0fb5b..831dff0440 100644 --- a/src/core/libs/galileo_tow_map.cc +++ b/src/core/libs/galileo_tow_map.cc @@ -16,10 +16,15 @@ #include "galileo_tow_map.h" -#include // for LOG -#include // for std::numeric_limits -#include // for std::shared -#include // for typeid +#include // for std::numeric_limits +#include // for std::shared +#include // for typeid + +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif #if HAS_GENERIC_LAMBDA #else diff --git a/src/core/libs/gnss_sdr_fpga_sample_counter.cc b/src/core/libs/gnss_sdr_fpga_sample_counter.cc index d67ea3b37f..5ba9b0f0bd 100644 --- a/src/core/libs/gnss_sdr_fpga_sample_counter.cc +++ b/src/core/libs/gnss_sdr_fpga_sample_counter.cc @@ -19,7 +19,6 @@ #include "gnss_sdr_fpga_sample_counter.h" #include "gnss_synchro.h" #include "uio_fpga.h" -#include #include #include // for from_double #include // for mp @@ -29,6 +28,11 @@ #include // libraries used by the GIPO #include // for write, close, read, ssize_t +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif #ifndef TEMP_FAILURE_RETRY #define TEMP_FAILURE_RETRY(exp) \ diff --git a/src/core/libs/gnss_sdr_supl_client.cc b/src/core/libs/gnss_sdr_supl_client.cc index 6e4ec6d1de..86ec166583 100644 --- a/src/core/libs/gnss_sdr_supl_client.cc +++ b/src/core/libs/gnss_sdr_supl_client.cc @@ -23,7 +23,6 @@ #include #include #include -#include #include #include // for pow #include // for exception @@ -31,6 +30,12 @@ #include // for pair #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + Gnss_Sdr_Supl_Client::Gnss_Sdr_Supl_Client() : server_port(0), request(0), mcc(0), mns(0), lac(0), ci(0) { diff --git a/src/core/libs/nav_message_monitor.cc b/src/core/libs/nav_message_monitor.cc index 105234b814..954f760fd6 100644 --- a/src/core/libs/nav_message_monitor.cc +++ b/src/core/libs/nav_message_monitor.cc @@ -17,11 +17,16 @@ #include "nav_message_monitor.h" #include "gnss_sdr_make_unique.h" -#include #include #include // size_t #include // typeid +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include diff --git a/src/core/libs/nav_message_udp_sink.cc b/src/core/libs/nav_message_udp_sink.cc index 760b0520de..1beb3aa5fa 100644 --- a/src/core/libs/nav_message_udp_sink.cc +++ b/src/core/libs/nav_message_udp_sink.cc @@ -18,9 +18,15 @@ #include "nav_message_udp_sink.h" #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif -Nav_Message_Udp_Sink::Nav_Message_Udp_Sink(const std::vector& addresses, const uint16_t& port) : socket{io_context} +Nav_Message_Udp_Sink::Nav_Message_Udp_Sink(const std::vector& addresses, const uint16_t& port) + : socket{io_context} { for (const auto& address : addresses) { @@ -35,22 +41,30 @@ bool Nav_Message_Udp_Sink::write_nav_message(const std::shared_ptr(endpoint.port()) << ": " << error.message(); + return false; + } + + if (socket.send(boost::asio::buffer(outbound_data)) == 0) // this can throw { return false; } - } - catch (boost::system::system_error const& e) - { - return false; } } + catch (const boost::system::system_error& e) + { + std::cerr << "Error sending navigation data: " << e.what() << '\n'; + return false; + } + return true; } diff --git a/src/core/monitor/gnss_synchro_udp_sink.cc b/src/core/monitor/gnss_synchro_udp_sink.cc index 84d484385a..336f834cbc 100644 --- a/src/core/monitor/gnss_synchro_udp_sink.cc +++ b/src/core/monitor/gnss_synchro_udp_sink.cc @@ -53,22 +53,24 @@ bool Gnss_Synchro_Udp_Sink::write_gnss_synchro(const std::vector& { outbound_data = serdes.createProtobuffer(stocks); } - for (const auto& endpoint : endpoints) - { - socket.open(endpoint.protocol(), error); - try + try + { + for (const auto& endpoint : endpoints) { - if (socket.send_to(boost::asio::buffer(outbound_data), endpoint) == 0) + socket.open(endpoint.protocol(), error); // NOLINT(bugprone-unused-return-value) + + if (socket.send_to(boost::asio::buffer(outbound_data), endpoint) == 0) // this can throw { - std::cerr << "Gnss_Synchro_Udp_Sink sent 0 bytes\n"; + return false; } } - catch (boost::system::system_error const& e) - { - std::cerr << e.what() << '\n'; - return false; - } } + catch (const boost::system::system_error& e) + { + std::cerr << "Error sending data: " << e.what() << '\n'; + return false; + } + return true; } diff --git a/src/core/receiver/CMakeLists.txt b/src/core/receiver/CMakeLists.txt index 418ee72ab0..0dfc09a84f 100644 --- a/src/core/receiver/CMakeLists.txt +++ b/src/core/receiver/CMakeLists.txt @@ -172,12 +172,18 @@ target_link_libraries(core_receiver telemetry_decoder_adapters obs_adapters pvt_adapters + gnss_sdr_flags Boost::headers - Gflags::gflags - Glog::glog Armadillo::armadillo ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(core_receiver PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(core_receiver PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(core_receiver PRIVATE absl::flags absl::log) +endif() + if(ENABLE_ARMA_NO_DEBUG) target_compile_definitions(core_receiver PRIVATE -DARMA_NO_BOUND_CHECKING=1 diff --git a/src/core/receiver/control_thread.cc b/src/core/receiver/control_thread.cc index a6791fd52a..52b0b344d7 100644 --- a/src/core/receiver/control_thread.cc +++ b/src/core/receiver/control_thread.cc @@ -50,7 +50,6 @@ #include "rtklib_rtkcmn.h" // for utc2gpst #include // for interaction with geofunctions #include // for bad_lexical_cast -#include // for LOG #include // for make_any #include // for find, min #include // for milliseconds @@ -66,6 +65,12 @@ #include // for IPC_CREAT #include // for msgctl, msgget +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #ifdef ENABLE_FPGA #include // for steady_clock #endif @@ -89,7 +94,7 @@ ControlThread::ControlThread() signal(SIGINT, ControlThread::handle_signal); signal(SIGTERM, ControlThread::handle_signal); signal(SIGHUP, ControlThread::handle_signal); - +#if USE_GLOG_AND_GFLAGS if (FLAGS_c == "-") { configuration_ = std::make_shared(FLAGS_config_file); @@ -98,6 +103,16 @@ ControlThread::ControlThread() { configuration_ = std::make_shared(FLAGS_c); } +#else + if (absl::GetFlag(FLAGS_c) == "-") + { + configuration_ = std::make_shared(absl::GetFlag(FLAGS_config_file)); + } + else + { + configuration_ = std::make_shared(absl::GetFlag(FLAGS_c)); + } +#endif // Basic configuration checks auto aux = std::dynamic_pointer_cast(configuration_); conf_file_has_section_ = aux->has_section(); @@ -405,8 +420,12 @@ int ControlThread::run() // launch GNSS assistance process AFTER the flowgraph is running because the GNU Radio asynchronous queues must be already running to transport msgs assist_GNSS(); - // start the keyboard_listener thread +// start the keyboard_listener thread +#if USE_GLOG_AND_GFLAGS if (FLAGS_keyboard) +#else + if (absl::GetFlag(FLAGS_keyboard)) +#endif { keyboard_thread_ = std::thread(&ControlThread::keyboard_listener, this); } @@ -445,7 +464,11 @@ int ControlThread::run() #endif // Terminate keyboard thread +#if USE_GLOG_AND_GFLAGS if (FLAGS_keyboard && keyboard_thread_.joinable()) +#else + if (absl::GetFlag(FLAGS_keyboard) && keyboard_thread_.joinable()) +#endif { pthread_t id = keyboard_thread_.native_handle(); keyboard_thread_.detach(); diff --git a/src/core/receiver/file_configuration.cc b/src/core/receiver/file_configuration.cc index 5e8fff2822..4bee6ae75d 100644 --- a/src/core/receiver/file_configuration.cc +++ b/src/core/receiver/file_configuration.cc @@ -21,10 +21,14 @@ #include "file_configuration.h" #include "gnss_sdr_make_unique.h" -#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif FileConfiguration::FileConfiguration(std::string filename) : filename_(std::move(filename)) diff --git a/src/core/receiver/gnss_block_factory.cc b/src/core/receiver/gnss_block_factory.cc index 5742bca83b..1a48e0a7f7 100644 --- a/src/core/receiver/gnss_block_factory.cc +++ b/src/core/receiver/gnss_block_factory.cc @@ -113,11 +113,16 @@ #include "tracking_interface.h" #include "two_bit_cpx_file_signal_source.h" #include "two_bit_packed_file_signal_source.h" -#include #include // for exception #include // for cerr #include // for move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if RAW_UDP #include "custom_udp_signal_source.h" #endif diff --git a/src/core/receiver/gnss_flowgraph.cc b/src/core/receiver/gnss_flowgraph.cc index 47e35bfbdb..957077eca2 100644 --- a/src/core/receiver/gnss_flowgraph.cc +++ b/src/core/receiver/gnss_flowgraph.cc @@ -40,7 +40,6 @@ #include "signal_source_interface.h" #include // for boost::lexical_cast #include // for boost::tokenizer -#include // for LOG #include // for basic_block #include // for gr::filter::firdes #include // for io_signature @@ -59,6 +58,12 @@ #include // for std::thread #include // for std::move +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #ifdef GR_GREATER_38 #include #else @@ -259,7 +264,7 @@ void GNSSFlowgraph::init() } /* - * Instantiate the receiver av message monitor block, if required + * Instantiate the receiver nav message monitor block, if required */ enable_navdata_monitor_ = configuration_->property("NavDataMonitor.enable_monitor", false); if (enable_navdata_monitor_) @@ -961,7 +966,7 @@ int GNSSFlowgraph::connect_signal_sources_to_signal_conditioners() } else { - if (j == 0) + if (j == 0 || !src->get_right_block(j)) { // RF_channel 0 backward compatibility with single channel sources LOG(INFO) << "connecting sig_source_ " << i << " stream " << 0 << " to conditioner " << signal_conditioner_ID; @@ -2181,7 +2186,7 @@ void GNSSFlowgraph::set_signals_list() std::string sv_list = configuration_->property("Galileo.prns", std::string("")); - if (sv_list.length() > 0) + if (!sv_list.empty()) { // Reset the available prns: std::set tmp_set; @@ -2221,7 +2226,7 @@ void GNSSFlowgraph::set_signals_list() sv_list = configuration_->property("GPS.prns", std::string("")); - if (sv_list.length() > 0) + if (!sv_list.empty()) { // Reset the available prns: std::set tmp_set; @@ -2261,7 +2266,7 @@ void GNSSFlowgraph::set_signals_list() sv_list = configuration_->property("SBAS.prns", std::string("")); - if (sv_list.length() > 0) + if (!sv_list.empty()) { // Reset the available prns: std::set tmp_set; @@ -2301,7 +2306,7 @@ void GNSSFlowgraph::set_signals_list() sv_list = configuration_->property("Glonass.prns", std::string("")); - if (sv_list.length() > 0) + if (!sv_list.empty()) { // Reset the available prns: std::set tmp_set; @@ -2341,7 +2346,7 @@ void GNSSFlowgraph::set_signals_list() sv_list = configuration_->property("Beidou.prns", std::string("")); - if (sv_list.length() > 0) + if (!sv_list.empty()) { // Reset the available prns: std::set tmp_set; diff --git a/src/core/receiver/tcp_cmd_interface.cc b/src/core/receiver/tcp_cmd_interface.cc index 1a47fb269a..587aa99fb6 100644 --- a/src/core/receiver/tcp_cmd_interface.cc +++ b/src/core/receiver/tcp_cmd_interface.cc @@ -323,10 +323,10 @@ void TcpCmdInterface::run_cmd_server(int tcp_port) std::cout << "TcpCmdInterface: Telecommand TCP interface listening on port " << tcp_port << '\n'; boost::asio::ip::tcp::socket socket(context); - acceptor.accept(socket, not_throw); + acceptor.accept(socket, not_throw); // NOLINT(bugprone-unused-return-value) if (not_throw) { - std::cerr << "TcpCmdInterface: Error when binding the port in the socket\n"; + std::cerr << "TcpCmdInterface: Error when binding the port to the socket: " << not_throw.message() << '\n'; continue; } diff --git a/src/core/system_parameters/CMakeLists.txt b/src/core/system_parameters/CMakeLists.txt index 3e25387eda..fa0fa99839 100644 --- a/src/core/system_parameters/CMakeLists.txt +++ b/src/core/system_parameters/CMakeLists.txt @@ -114,11 +114,15 @@ target_link_libraries(core_system_parameters PUBLIC Boost::date_time Boost::serialization - PRIVATE - Gflags::gflags - Glog::glog ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(core_system_parameters PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(core_system_parameters PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(core_system_parameters PRIVATE absl::flags absl::log) +endif() + # for gnss_sdr_make_unique.h target_include_directories(core_system_parameters PUBLIC diff --git a/src/core/system_parameters/beidou_dnav_navigation_message.cc b/src/core/system_parameters/beidou_dnav_navigation_message.cc index 0444a35550..76a621de96 100644 --- a/src/core/system_parameters/beidou_dnav_navigation_message.cc +++ b/src/core/system_parameters/beidou_dnav_navigation_message.cc @@ -353,7 +353,7 @@ int32_t Beidou_Dnav_Navigation_Message::d1_subframe_decoder(std::string const& s d_DeltaT_LSF = static_cast(read_navigation_signed(subframe_bits, D1_DELTA_T_LSF)); i_WN_LSF = static_cast(read_navigation_signed(subframe_bits, D1_WN_LSF)); d_A0UTC = static_cast(read_navigation_signed(subframe_bits, D1_A0UTC)); - d_A0UTC = d_A0GPS * D1_A0GPS_LSB; + d_A0UTC = d_A0UTC * D1_A0UTC_LSB; d_A1UTC = static_cast(read_navigation_signed(subframe_bits, D1_A1UTC)); d_A1UTC = d_A1UTC * D1_A1UTC_LSB; diff --git a/src/core/system_parameters/galileo_cnav_message.cc b/src/core/system_parameters/galileo_cnav_message.cc index e514b00b73..488d8f49fa 100644 --- a/src/core/system_parameters/galileo_cnav_message.cc +++ b/src/core/system_parameters/galileo_cnav_message.cc @@ -19,11 +19,16 @@ #include "galileo_cnav_message.h" #include // for boost::crc_basic, boost::crc_optimal #include // for boost::dynamic_bitset -#include -#include // for reverse +#include // for reverse #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + using CRC_Galileo_CNAV_type = boost::crc_optimal<24, 0x1864CFBU, 0x0, 0x0, false, false>; diff --git a/src/core/system_parameters/galileo_fnav_message.cc b/src/core/system_parameters/galileo_fnav_message.cc index 5dea818988..0ea44e6a75 100644 --- a/src/core/system_parameters/galileo_fnav_message.cc +++ b/src/core/system_parameters/galileo_fnav_message.cc @@ -23,11 +23,16 @@ #include "galileo_fnav_message.h" #include // for boost::crc_basic, boost::crc_optimal #include -#include #include // for reverse #include // for string, operator<< #include // for back_insert_iterator +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + using CRC_Galileo_FNAV_type = boost::crc_optimal<24, 0x1864CFBU, 0x0, 0x0, false, false>; diff --git a/src/core/system_parameters/galileo_inav_message.cc b/src/core/system_parameters/galileo_inav_message.cc index 81c47c3bb9..d97ca6a905 100644 --- a/src/core/system_parameters/galileo_inav_message.cc +++ b/src/core/system_parameters/galileo_inav_message.cc @@ -21,12 +21,16 @@ #include "reed_solomon.h" #include // for boost::crc_basic, boost::crc_optimal #include // for boost::dynamic_bitset -#include // for DLOG #include // for reverse #include // for operator<< #include // for std::numeric_limits #include // for std::accumulate +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif using CRC_Galileo_INAV_type = boost::crc_optimal<24, 0x1864CFBU, 0x0, 0x0, false, false>; diff --git a/src/core/system_parameters/glonass_gnav_navigation_message.cc b/src/core/system_parameters/glonass_gnav_navigation_message.cc index 9428875c4b..b655850fe7 100644 --- a/src/core/system_parameters/glonass_gnav_navigation_message.cc +++ b/src/core/system_parameters/glonass_gnav_navigation_message.cc @@ -19,10 +19,15 @@ #include "glonass_gnav_navigation_message.h" #include "MATH_CONSTANTS.h" // for TWO_N20, TWO_N30, TWO_N14, TWO_N15, TWO_N18 #include "gnss_satellite.h" -#include #include // for size_t #include // for operator<< +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + Glonass_Gnav_Navigation_Message::Glonass_Gnav_Navigation_Message() { diff --git a/src/core/system_parameters/gnss_satellite.cc b/src/core/system_parameters/gnss_satellite.cc index 2a974cc0a0..7a13616e1e 100644 --- a/src/core/system_parameters/gnss_satellite.cc +++ b/src/core/system_parameters/gnss_satellite.cc @@ -15,9 +15,14 @@ */ #include "gnss_satellite.h" -#include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + Gnss_Satellite::Gnss_Satellite(const std::string& system_, uint32_t PRN_) { @@ -386,7 +391,7 @@ std::string Gnss_Satellite::what_block(const std::string& system_, uint32_t PRN_ block_ = std::string("IIF"); // Plane C break; case 28: - block_ = std::string("IIR"); // Plane B + block_ = std::string("III"); // Plane B break; case 29: block_ = std::string("IIR-M"); // Plane C @@ -543,7 +548,7 @@ std::string Gnss_Satellite::what_block(const std::string& system_, uint32_t PRN_ switch (PRN_) { case 1: - block_ = std::string("FOC-FM10"); // Galileo Full Operational Capability (FOC) satellite FM10 / GSAT-0210, launched on May 24, 2016. + block_ = std::string("FOC-FM10"); // Galileo Full Operational Capability (FOC) satellite FM10 / GSAT-0210, launched on May 24, 2016. NOT USABLE. break; case 2: block_ = std::string("FOC-FM11"); // Galileo Full Operational Capability (FOC) satellite FM11 / GSAT-0211, launched on May 24, 2016. @@ -557,6 +562,9 @@ std::string Gnss_Satellite::what_block(const std::string& system_, uint32_t PRN_ case 5: block_ = std::string("FOC-FM14"); // Galileo Full Operational Capability (FOC) satellite FM14 / GSAT-0214, launched on November 17, 2016. break; + case 6: + block_ = std::string("FOC-FM27"); // Galileo Full Operational Capability (FOC) satellite FM27 / GSAT0227, launched on Apr. 28, 2024. UNDER COMMISSIONING. + break; case 7: block_ = std::string("FOC-FM7"); // Galileo Full Operational Capability (FOC) satellite FM7 / GSAT-0207, launched on November 17, 2016. break; @@ -576,16 +584,16 @@ std::string Gnss_Satellite::what_block(const std::string& system_, uint32_t PRN_ block_ = std::string("IOV-FM2"); // Galileo In-Orbit Validation (IOV) satellite FM2 (Flight Model 2) also known as GSAT0102, from French Guiana at 10:30 GMT on October 21, 2011. break; case 13: - block_ = std::string("FOC-FM20"); // Galileo Full Operational Capability (FOC) satellite FM20 / GSAT0220, launched on Jul. 25, 2018. UNDER COMMISSIONING. + block_ = std::string("FOC-FM20"); // Galileo Full Operational Capability (FOC) satellite FM20 / GSAT0220, launched on Jul. 25, 2018. break; case 14: - block_ = std::string("FOC-FM2*"); // Galileo Full Operational Capability (FOC) satellite FM2 / GSAT0202, launched into incorrect orbit on August 22, 2014. Moved to usable orbit in March, 2015. UNDER TESTING. + block_ = std::string("FOC-FM2*"); // Galileo Full Operational Capability (FOC) satellite FM2 / GSAT0202, launched into incorrect orbit on August 22, 2014. Moved to usable orbit in March, 2015. Not usable since 18/02/2021. break; case 15: - block_ = std::string("FOC-FM21"); // Galileo Full Operational Capability (FOC) satellite FM21 / GSAT0221, launched on Jul. 25, 2018. UNDER COMMISSIONING. + block_ = std::string("FOC-FM21"); // Galileo Full Operational Capability (FOC) satellite FM21 / GSAT0221, launched on Jul. 25, 2018. break; case 18: - block_ = std::string("FOC-FM1*"); // Galileo Full Operational Capability (FOC) satellite FM1 / GSAT0201, launched into incorrect orbit on August 22, 2014. Moved to usable orbit in December, 2014. UNDER TESTING. + block_ = std::string("FOC-FM1*"); // Galileo Full Operational Capability (FOC) satellite FM1 / GSAT0201, launched into incorrect orbit on August 22, 2014. Moved to usable orbit in December, 2014. Not usable since 18/02/2021. break; case 19: block_ = std::string("IOV-FM3"); // Galileo In-Orbit Validation (IOV) satellite FM3 (Flight Model 3) / GSAT0103, launched on October 12, 2012. @@ -594,7 +602,7 @@ std::string Gnss_Satellite::what_block(const std::string& system_, uint32_t PRN_ block_ = std::string("IOV-FM4**"); // Galileo In-Orbit Validation (IOV) satellite FM4 (Flight Model 4) / GSAT0104, launched on October 12, 2012. Payload power problem beginning May 27, 2014 led to permanent loss of E5 and E6 transmissions, E1 transmission restored. UNAVAILABLE FROM 2014-05-27 UNTIL FURTHER NOTICE break; case 21: - block_ = std::string("FOC-FM15"); // Galileo Full Operational Capability (FOC) satellite FM15 / GSAT0215, launched on Dec. 12, 2017. UNDER COMMISSIONING. + block_ = std::string("FOC-FM15"); // Galileo Full Operational Capability (FOC) satellite FM15 / GSAT0215, launched on Dec. 12, 2017. break; case 22: block_ = std::string("FOC-FM4**"); // Galileo Full Operational Capability (FOC) satellite FM4 / GSAT0204, launched on March 27, 2015. REMOVED FROM ACTIVE SERVICE ON 2017-12-08 UNTIL FURTHER NOTICE FOR CONSTELLATION MANAGEMENT PURPOSES. @@ -603,28 +611,31 @@ std::string Gnss_Satellite::what_block(const std::string& system_, uint32_t PRN_ block_ = std::string("FOC-FM5"); // Galileo Full Operational Capability (FOC) satellite FM5 / GSAT0205, launched on Sept. 11, 2015. break; case 25: - block_ = std::string("FOC-FM16"); // Galileo Full Operational Capability (FOC) satellite FM16 / GSAT0216, launched on Dec. 12, 2017. UNDER COMMISSIONING. + block_ = std::string("FOC-FM16"); // Galileo Full Operational Capability (FOC) satellite FM16 / GSAT0216, launched on Dec. 12, 2017. break; case 26: block_ = std::string("FOC-FM3"); // Galileo Full Operational Capability (FOC) satellite FM3 / GSAT0203, launched on March 27, 2015. break; case 27: - block_ = std::string("FOC-FM17"); // Galileo Full Operational Capability (FOC) satellite FM17 / GSAT0217, launched on Dec. 12, 2017. UNDER COMMISSIONING. + block_ = std::string("FOC-FM17"); // Galileo Full Operational Capability (FOC) satellite FM17 / GSAT0217, launched on Dec. 12, 2017. + break; + case 29: + block_ = std::string("FOC-FM25"); // Galileo Full Operational Capability (FOC) satellite FM25 / GSAT0225, launched on Apr. 28, 2024. UNDER COMMISSIONING. break; case 30: block_ = std::string("FOC-FM6"); // Galileo Full Operational Capability (FOC) satellite FM6 / GSAT0206, launched on Sept. 11, 2015. break; case 31: - block_ = std::string("FOC-FM18"); // Galileo Full Operational Capability (FOC) satellite FM18 / GSAT0218, launched on Dec. 12, 2017. UNDER COMMISSIONING. + block_ = std::string("FOC-FM18"); // Galileo Full Operational Capability (FOC) satellite FM18 / GSAT0218, launched on Dec. 12, 2017. break; case 33: - block_ = std::string("FOC-FM22"); // Galileo Full Operational Capability (FOC) satellite FM22 / GSAT0222, launched on Jul. 25, 2018. UNDER COMMISSIONING. + block_ = std::string("FOC-FM22"); // Galileo Full Operational Capability (FOC) satellite FM22 / GSAT0222, launched on Jul. 25, 2018. break; case 34: block_ = std::string("FOC-FM23"); // Galileo Full Operational Capability (FOC) satellite FM23 / GSAT0223, launched on December 5, 2021. break; case 36: - block_ = std::string("FOC-FM19"); // Galileo Full Operational Capability (FOC) satellite FM19 / GSAT0219, launched on Jul. 25, 2018. UNDER COMMISSIONING. + block_ = std::string("FOC-FM19"); // Galileo Full Operational Capability (FOC) satellite FM19 / GSAT0219, launched on Jul. 25, 2018. break; default: block_ = std::string("Unknown"); diff --git a/src/main/CMakeLists.txt b/src/main/CMakeLists.txt index 2895d5973f..c58266231f 100644 --- a/src/main/CMakeLists.txt +++ b/src/main/CMakeLists.txt @@ -16,13 +16,24 @@ target_link_libraries(gnss-sdr PRIVATE algorithms_libs core_receiver + gnss_sdr_flags Boost::headers Boost::thread - Gflags::gflags - Glog::glog Threads::Threads ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(gnss-sdr PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(gnss-sdr PUBLIC -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(gnss-sdr PRIVATE absl::flags absl::flags_parse absl::log absl::log_initialize absl::log_sink absl::log_sink_registry) + target_link_libraries(gnss-sdr INTERFACE "$") +endif() + +if(NOT ENABLE_LOG) + target_compile_definitions(gnss-sdr PRIVATE -DGOOGLE_STRIP_LOG=1) +endif() + target_compile_definitions(gnss-sdr PRIVATE -DGNSS_SDR_VERSION="${VERSION}") if(ENABLE_CUDA) @@ -65,6 +76,9 @@ if(ENABLE_STRIP) set_target_properties(gnss-sdr PROPERTIES LINK_FLAGS "-s") endif() +include(XcodeRemoveWarningDuplicates) +xcode_remove_warning_duplicates(gnss-sdr) + if(ENABLE_CLANG_TIDY) if(CLANG_TIDY_EXE) set_target_properties(gnss-sdr diff --git a/src/main/main.cc b/src/main/main.cc index e4715a5c34..a058e6029b 100644 --- a/src/main/main.cc +++ b/src/main/main.cc @@ -29,30 +29,72 @@ #include "concurrent_queue.h" #include "control_thread.h" #include "gnss_sdr_filesystem.h" +#include "gnss_sdr_flags.h" #include "gnss_sdr_make_unique.h" #include "gps_acq_assist.h" #include // for diagnostic_information #include // for exception #include // for thread_resource_error -#include // for ShutDownCommandLineFlags -#include // for FLAGS_log_dir #include // for time_point #include // for exception +#include // for ofstream #include // for operator<< #include // for unique_ptr +#include // fro std::flush #include // for string -#if CUDA_GPU_ACCEL -// For the CUDA runtime routines (prefixed with "cuda_") -#include -#endif - +#if USE_GLOG_AND_GFLAGS +#include // for ShutDownCommandLineFlags +#include #if GFLAGS_OLD_NAMESPACE namespace gflags { using namespace google; } #endif +#else +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +std::string GnssSdrVersionString() { return std::string("gnss-sdr version ") + std::string(GNSS_SDR_VERSION) + "\n"; } +class GnssSdrLogSink : public absl::LogSink +{ +public: + GnssSdrLogSink() + { + if (!absl::GetFlag(FLAGS_log_dir).empty()) + { + filename = absl::GetFlag(FLAGS_log_dir) + "/gnss-sdr.log"; + } + else + { + filename = GetTempDir() + "/gnss-sdr.log"; + } + logfile.open(filename); + } + void Send(const absl::LogEntry& entry) override + { + logfile << entry.text_message_with_prefix_and_newline() << std::flush; + } + +private: + std::ofstream logfile; + std::string filename; +}; +#endif + +#if CUDA_GPU_ACCEL +// For the CUDA runtime routines (prefixed with "cuda_") +#include +#endif + /* * Concurrent queues that communicates the Telemetry Decoder @@ -69,14 +111,27 @@ int main(int argc, char** argv) { const std::string intro_help( std::string("\nGNSS-SDR is an Open Source GNSS Software Defined Receiver\n") + - "Copyright (C) 2010-2023 (see AUTHORS file for a list of contributors)\n" + + "Copyright (C) 2010-2024 (see AUTHORS file for a list of contributors)\n" + "This program comes with ABSOLUTELY NO WARRANTY;\n" + "See COPYING file to see a copy of the General Public License\n \n"); - const std::string gnss_sdr_version(GNSS_SDR_VERSION); +#if USE_GLOG_AND_GFLAGS gflags::SetUsageMessage(intro_help); gflags::SetVersionString(gnss_sdr_version); gflags::ParseCommandLineFlags(&argc, &argv, true); +#else + absl::FlagsUsageConfig empty_config; + empty_config.version_string = &GnssSdrVersionString; + absl::SetFlagsUsageConfig(empty_config); + absl::SetProgramUsageMessage(intro_help); + absl::ParseCommandLine(argc, argv); + if (!ValidateFlags()) + { + std::cout << "GNSS-SDR program ended.\n"; + return 1; + } + +#endif std::cout << "Initializing GNSS-SDR v" << gnss_sdr_version << " ... Please wait.\n"; } catch (const std::exception& e) @@ -99,8 +154,15 @@ int main(int argc, char** argv) if (GOOGLE_STRIP_LOG == 0) { +#if USE_GLOG_AND_GFLAGS google::InitGoogleLogging(argv[0]); if (FLAGS_log_dir.empty()) +#else + absl::LogSink* theSink = new GnssSdrLogSink; + absl::AddLogSink(theSink); + absl::InitializeLog(); + if (absl::GetFlag(FLAGS_log_dir).empty()) +#endif { std::cout << "Logging will be written at " << fs::temp_directory_path() @@ -111,32 +173,58 @@ int main(int argc, char** argv) { try { +#if USE_GLOG_AND_GFLAGS const fs::path p(FLAGS_log_dir); +#else + const fs::path p(absl::GetFlag(FLAGS_log_dir)); +#endif if (!fs::exists(p)) { std::cout << "The path " +#if USE_GLOG_AND_GFLAGS << FLAGS_log_dir +#else + << absl::GetFlag(FLAGS_log_dir) +#endif << " does not exist, attempting to create it.\n"; errorlib::error_code ec; if (!fs::create_directory(p, ec)) { +#if USE_GLOG_AND_GFLAGS std::cerr << "Could not create the " << FLAGS_log_dir << " folder. GNSS-SDR program ended.\n"; gflags::ShutDownCommandLineFlags(); +#else + std::cerr << "Could not create the " << absl::GetFlag(FLAGS_log_dir) << " folder. GNSS-SDR program ended.\n"; +#endif return 1; } } +#if USE_GLOG_AND_GFLAGS std::cout << "Logging will be written at " << FLAGS_log_dir << '\n'; +#else + std::cout << "Logging will be written at " << absl::GetFlag(FLAGS_log_dir) << '\n'; +#endif } catch (const std::exception& e) { std::cerr << e.what() << '\n'; +#if USE_GLOG_AND_GFLAGS std::cerr << "Could not create the " << FLAGS_log_dir << " folder. GNSS-SDR program ended.\n"; gflags::ShutDownCommandLineFlags(); +#else + std::cerr << "Could not create the " << absl::GetFlag(FLAGS_log_dir) << " folder. GNSS-SDR program ended.\n"; +#endif return 1; } } } - +#if USE_GLOG_AND_GFLAGS +#else + else + { + absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfinity); // do not log + } +#endif std::chrono::time_point start; std::chrono::time_point end; start = std::chrono::system_clock::now(); @@ -201,7 +289,11 @@ int main(int argc, char** argv) << elapsed_seconds.count() << " [seconds]\n"; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#else + absl::FlushLogSinks(); +#endif std::cout << "GNSS-SDR program ended.\n"; return return_code; } diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 5863284bad..160a3c32d3 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -8,6 +8,8 @@ add_subdirectory(unit-tests/signal-processing-blocks/libs) add_subdirectory(system-tests/libs) +include(XcodeRemoveWarningDuplicates) + ################################################################################ # Google Test - https://github.com/google/googletest ################################################################################ @@ -35,7 +37,7 @@ if(NOT GOOGLETEST_FOUND) set(GTEST_BUILD_COMMAND ${GTEST_BUILD_COMMAND} "--parallel 1") endif() if(CMAKE_GENERATOR STREQUAL Xcode) - set(GTEST_BUILD_COMMAND "xcodebuild" "-configuration" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel> "-target" "gtest_main") + set(GTEST_BUILD_COMMAND "xcodebuild" "-configuration" $<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:Debug> "-target" "gtest_main") endif() if(GNSSSDR_GTEST_LOCAL_VERSION VERSION_LESS 1.12.0) set(DEBUG_DECORATION "d") @@ -303,7 +305,7 @@ if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA) else() set(GNSS_SIM_BUILD_COMMAND "${CMAKE_MAKE_PROGRAM}") if(CMAKE_GENERATOR STREQUAL Xcode) - set(GNSS_SIM_BUILD_COMMAND "xcodebuild" "-configuration" "${CMAKE_BUILD_TYPE}" "-target" "gnss_sim") + set(GNSS_SIM_BUILD_COMMAND "xcodebuild" "-configuration" $<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:Debug> "-target" "gnss_sim") endif() if(TOOLCHAIN_ARG) set(TOOLCHAIN_ARG_GNSS_SIM "-DCMAKE_NO_SYSTEM_FROM_IMPORTED=ON") @@ -332,7 +334,7 @@ if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA) else() set(SW_GENERATOR_BIN ${GNSSSDR_BINARY_DIR}/gnss-sim/gnss_sim) if(CMAKE_GENERATOR STREQUAL Xcode) - set(SW_GENERATOR_BIN ${GNSSSDR_BINARY_DIR}/gnss-sim/${CMAKE_BUILD_TYPE}/gnss_sim) + set(SW_GENERATOR_BIN ${GNSSSDR_BINARY_DIR}/gnss-sim/$<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:Debug>/gnss_sim) endif() add_definitions(-DSW_GENERATOR_BIN="${SW_GENERATOR_BIN}") add_definitions(-DDEFAULT_RINEX_NAV="${GNSSSDR_BINARY_DIR}/thirdparty/gnss-sim/brdc3540.14n") @@ -353,7 +355,7 @@ if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA) endif() set(GNSSTK_BUILD_COMMAND "${CMAKE_MAKE_PROGRAM}") if(CMAKE_GENERATOR STREQUAL Xcode) - set(GNSSTK_BUILD_COMMAND "xcodebuild" "-configuration" "${CMAKE_BUILD_TYPE}") + set(GNSSTK_BUILD_COMMAND "xcodebuild" "-configuration" $<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:Debug>) endif() include(GNUInstallDirs) find_program(Patch_EXECUTABLE NAME patch PATHS ENV PATH) @@ -589,8 +591,6 @@ if(ENABLE_UNIT_TESTING) PRIVATE Boost::thread Armadillo::armadillo - Gflags::gflags - Glog::glog Gnuradio::runtime Gnuradio::blocks Gnuradio::filter @@ -619,6 +619,13 @@ if(ENABLE_UNIT_TESTING) system_testing_lib core_receiver ) + if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(run_tests PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(run_tests PRIVATE -DUSE_GLOG_AND_GFLAGS=1) + else() + target_link_libraries(run_tests PRIVATE absl::flags absl::flags_parse absl::log absl::log_initialize) + target_link_libraries(run_tests INTERFACE "$") + endif() target_include_directories(run_tests INTERFACE ${GNSSSDR_SOURCE_DIR}/src/tests/common-files @@ -645,6 +652,7 @@ if(ENABLE_UNIT_TESTING) target_compile_definitions(run_tests PRIVATE -DGNSSTK_OLDER_THAN_9=1) endif() endif() + xcode_remove_warning_duplicates(run_tests) if(ENABLE_STRIP) set_target_properties(run_tests PROPERTIES LINK_FLAGS "-s") endif() @@ -749,8 +757,6 @@ if(ENABLE_FPGA) PRIVATE Armadillo::armadillo Boost::thread - Gflags::gflags - Glog::glog Gnuradio::runtime Gnuradio::blocks GTest::GTest @@ -764,9 +770,17 @@ if(ENABLE_FPGA) algorithms_libs core_receiver ) + if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(gps_l1_ca_dll_pll_tracking_test_fpga PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(gps_l1_ca_dll_pll_tracking_test_fpga PRIVATE -DUSE_GLOG_AND_GFLAGS=1) + else() + target_link_libraries(gps_l1_ca_dll_pll_tracking_test_fpga PRIVATE absl::flags absl::flags_parse absl::log absl::log_initialize) + target_link_libraries(gps_l1_ca_dll_pll_tracking_test_fpga INTERFACE "$") + endif() target_include_directories(gps_l1_ca_dll_pll_tracking_test_fpga INTERFACE ${GNSSSDR_SOURCE_DIR}/src/tests/common-files ) + xcode_remove_warning_duplicates(gps_l1_ca_dll_pll_tracking_test_fpga) install(TARGETS gps_l1_ca_dll_pll_tracking_test_fpga RUNTIME DESTINATION bin COMPONENT "fpga-test" @@ -802,6 +816,9 @@ function(add_system_test executable) INTERFACE ${GNSSSDR_SOURCE_DIR}/src/tests/common-files ) target_link_libraries(${executable} PRIVATE ${OPT_LIBS_} algorithms_libs) + if(NOT ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(${executable} INTERFACE "$") + endif() if(GNURADIO_USES_STD_POINTERS) target_compile_definitions(${executable} PRIVATE -DGNURADIO_USES_STD_POINTERS=1 @@ -823,6 +840,9 @@ function(add_system_test executable) ${LOCAL_INSTALL_BASE_DIR}/install/$ ) endif() + + xcode_remove_warning_duplicates(${executable}) + if(ENABLE_CLANG_TIDY) if(CLANG_TIDY_EXE) set_target_properties(${executable} @@ -848,14 +868,24 @@ if(ENABLE_SYSTEM_TESTING) #### TTFF set(OPT_LIBS_ Boost::thread Boost::date_time - Threads::Threads Gflags::gflags Glog::glog + Threads::Threads Gnuradio::runtime GTest::GTest GTest::Main Gnuradio::blocks Gnuradio::filter Gnuradio::analog algorithms_libs core_receiver ) + if(ENABLE_GLOG_AND_GFLAGS) + set(OPT_LIBS_ ${OPT_LIBS_} Gflags::gflags Glog::glog) + else() + set(OPT_LIBS_ ${OPT_LIBS_} absl::flags_parse absl::flags absl::log absl::log_initialize absl::log_sink absl::log_sink_registry) + endif() if(NOT ENABLE_PACKAGING) - add_system_test(ttff) + add_system_test(ttff + CMAKE_ARGS -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> + ) + if(ENABLE_GLOG_AND_GFLAGS) + target_compile_definitions(ttff PRIVATE -DUSE_GLOG_AND_GFLAGS=1) + endif() endif() if(ENABLE_SYSTEM_TESTING_EXTRA) @@ -863,12 +893,22 @@ if(ENABLE_SYSTEM_TESTING) set(OPT_LIBS_ algorithms_libs core_receiver core_system_parameters gnss_sdr_flags system_testing_lib signal_processing_testing_lib - Boost::thread Threads::Threads Gflags::gflags Glog::glog + Boost::thread Threads::Threads GTest::GTest GTest::Main Gnuradio::runtime Gnuradio::blocks Gnuradio::filter Gnuradio::analog Matio::matio Volkgnsssdr::volkgnsssdr ) - add_system_test(position_test) + if(ENABLE_GLOG_AND_GFLAGS) + set(OPT_LIBS_ ${OPT_LIBS_} Gflags::gflags Glog::glog) + else() + set(OPT_LIBS_ ${OPT_LIBS_} absl::flags_parse absl::log absl::log_initialize absl::log_sink absl::log_sink_registry) + endif() + add_system_test(position_test + CMAKE_ARGS -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> + ) + if(ENABLE_GLOG_AND_GFLAGS) + target_compile_definitions(position_test PRIVATE -DUSE_GLOG_AND_GFLAGS=1) + endif() if(ENABLE_GPERFTOOLS) if(GPERFTOOLS_FOUND) target_link_libraries(position_test @@ -920,8 +960,6 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) target_link_libraries(flowgraph_test PRIVATE Boost::thread - Gflags::gflags - Glog::glog Gnuradio::runtime GTest::GTest GTest::Main @@ -932,11 +970,21 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) core_receiver algorithms_libs ) + if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(flowgraph_test PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(flowgraph_test PRIVATE -DUSE_GLOG_AND_GFLAGS=1) + else() + target_link_libraries(flowgraph_test PRIVATE absl::flags absl::flags_parse absl::log absl::log_initialize) + target_link_libraries(flowgraph_test INTERFACE "$") + endif() target_include_directories(flowgraph_test PRIVATE ${GNSSSDR_SOURCE_DIR}/src/algorithms/libs ) + + xcode_remove_warning_duplicates(flowgraph_test) + add_test(flowgraph_test flowgraph_test) set_property(TEST flowgraph_test PROPERTY TIMEOUT 30) @@ -966,8 +1014,6 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) target_link_libraries(gnss_block_test PRIVATE Boost::thread - Gflags::gflags - Glog::glog Gnuradio::runtime Gnuradio::blocks Gnuradio::filter @@ -982,6 +1028,13 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) core_receiver algorithms_libs ) + if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(gnss_block_test PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(gnss_block_test PRIVATE -DUSE_GLOG_AND_GFLAGS=1) + else() + target_link_libraries(gnss_block_test PRIVATE absl::flags absl::flags_parse absl::log absl::log_initialize) + target_link_libraries(gnss_block_test INTERFACE "$") + endif() target_include_directories(gnss_block_test PRIVATE ${GNSSSDR_SOURCE_DIR}/src/algorithms/libs @@ -992,6 +1045,8 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) target_compile_definitions(gnss_block_test PRIVATE -DENABLE_FPGA=1) endif() + xcode_remove_warning_duplicates(gnss_block_test) + add_test(gnss_block_test gnss_block_test) set_property(TEST gnss_block_test PROPERTY TIMEOUT 60) @@ -1014,8 +1069,6 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) target_link_libraries(gnuradio_block_test PRIVATE Boost::thread - Gflags::gflags - Glog::glog Gnuradio::runtime Gnuradio::blocks Gnuradio::filter @@ -1028,6 +1081,15 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) core_receiver algorithms_libs ) + if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(gnuradio_block_test PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(gnuradio_block_test PRIVATE -DUSE_GLOG_AND_GFLAGS=1) + else() + target_link_libraries(gnuradio_block_test PRIVATE absl::flags absl::flags_parse absl::log absl::log_initialize) + target_link_libraries(gnuradio_block_test INTERFACE "$") + endif() + + xcode_remove_warning_duplicates(gnuradio_block_test) add_test(gnuradio_block_test gnuradio_block_test) @@ -1050,19 +1112,27 @@ endif() target_link_libraries(matio_test PRIVATE algorithms_libs - Gflags::gflags - Glog::glog GTest::GTest GTest::Main Matio::matio core_receiver ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(matio_test PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(matio_test PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(matio_test PRIVATE absl::flags absl::flags_parse absl::log absl::log_initialize) + target_link_libraries(matio_test INTERFACE "$") +endif() + target_include_directories(matio_test INTERFACE ${GNSSSDR_SOURCE_DIR}/src/tests/common-files ) +xcode_remove_warning_duplicates(matio_test) + add_test(matio_test matio_test) set_property(TEST matio_test PROPERTY TIMEOUT 30) @@ -1084,8 +1154,6 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) target_link_libraries(acq_test PRIVATE Boost::thread - Gflags::gflags - Glog::glog Gnuradio::runtime Gnuradio::blocks Gnuradio::filter @@ -1101,6 +1169,13 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) signal_processing_testing_lib core_receiver ) + if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(acq_test PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(acq_test PRIVATE -DUSE_GLOG_AND_GFLAGS=1) + else() + target_link_libraries(acq_test PRIVATE absl::flags absl::flags_parse absl::log absl::log_initialize) + target_link_libraries(acq_test INTERFACE "$") + endif() target_include_directories(acq_test INTERFACE ${GNSSSDR_SOURCE_DIR}/src/tests/common-files @@ -1112,6 +1187,8 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) ) endif() + xcode_remove_warning_duplicates(acq_test) + add_test(acq_test acq_test) if(USE_GENERIC_LAMBDAS) @@ -1165,8 +1242,6 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) target_link_libraries(trk_test PRIVATE Boost::thread - Gflags::gflags - Glog::glog Gnuradio::runtime Gnuradio::blocks Gnuradio::filter @@ -1181,6 +1256,13 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) signal_generator_gr_blocks core_receiver ) + if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(trk_test PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(trk_test PRIVATE -DUSE_GLOG_AND_GFLAGS=1) + else() + target_link_libraries(trk_test PRIVATE absl::flags absl::flags_parse absl::log absl::log_initialize) + target_link_libraries(trk_test INTERFACE "$") + endif() if(USE_GENERIC_LAMBDAS) set(has_generic_lambdas HAS_GENERIC_LAMBDA=1) set(no_has_generic_lambdas HAS_GENERIC_LAMBDA=0) @@ -1208,6 +1290,8 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) ) endif() + xcode_remove_warning_duplicates(trk_test) + add_test(trk_test trk_test) set_property(TEST trk_test PROPERTY TIMEOUT 30) @@ -1230,14 +1314,21 @@ if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) target_link_libraries(control_thread_test PRIVATE Boost::thread - Gflags::gflags - Glog::glog GTest::GTest GTest::Main signal_source_adapters algorithms_libs core_receiver ) + if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(control_thread_test PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(control_thread_test PRIVATE -DUSE_GLOG_AND_GFLAGS=1) + else() + target_link_libraries(control_thread_test PRIVATE absl::flags absl::flags_parse absl::log absl::log_initialize) + target_link_libraries(control_thread_test INTERFACE "$") + endif() + + xcode_remove_warning_duplicates(control_thread_test) add_test(control_thread_test control_thread_test) diff --git a/src/tests/common-files/gnuplot_i.h b/src/tests/common-files/gnuplot_i.h index 5566f59cc3..04b7e34586 100644 --- a/src/tests/common-files/gnuplot_i.h +++ b/src/tests/common-files/gnuplot_i.h @@ -34,7 +34,6 @@ #ifndef GNSS_SDR_GNUPLOT_I_H #define GNSS_SDR_GNUPLOT_I_H -#include #include #include // for getenv() #include // for strncpy @@ -47,7 +46,13 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include DEFINE_bool(show_plots, true, "Show plots on screen. Disable for non-interactive testing."); +#else +#include +ABSL_FLAG(bool, show_plots, true, "Show plots on screen. Disable for non-interactive testing."); +#endif #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__TOS_WIN__) // defined for 32 and 64-bit environments diff --git a/src/tests/common-files/observable_tests_flags.h b/src/tests/common-files/observable_tests_flags.h index 4442113375..a0ab470b6d 100644 --- a/src/tests/common-files/observable_tests_flags.h +++ b/src/tests/common-files/observable_tests_flags.h @@ -17,12 +17,27 @@ #ifndef GNSS_SDR_OBSERVABLE_TESTS_FLAGS_H #define GNSS_SDR_OBSERVABLE_TESTS_FLAGS_H -#include #include +#include + +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif +#if USE_GLOG_AND_GFLAGS DEFINE_double(skip_obs_transitory_s, 30.0, "Skip the initial observable outputs to avoid transitory results [s]"); DEFINE_bool(compute_single_diffs, false, "Compute also the single difference errors for Accumulated Carrier Phase and Carrier Doppler (requires LO synchronization between receivers)"); DEFINE_bool(compare_with_5X, false, "Compare the E5a Doppler and Carrier Phases with the E5 full bw in RINEX (expect discrepancy due to the center frequencies differences"); DEFINE_bool(duplicated_satellites_test, false, "Enable special observable test mode where the scenario contains duplicated satellite orbits"); DEFINE_string(duplicated_satellites_prns, "1,2,3,4", "List of duplicated satellites PRN pairs (i.e. 1,2,3,4 indicates that the PRNs 1,2 share the same orbit. The same applies for PRNs 3,4)"); +#else +ABSL_FLAG(double, skip_obs_transitory_s, 30.0, "Skip the initial observable outputs to avoid transitory results [s]"); +ABSL_FLAG(bool, compute_single_diffs, false, "Compute also the single difference errors for Accumulated Carrier Phase and Carrier Doppler (requires LO synchronization between receivers)"); +ABSL_FLAG(bool, compare_with_5X, false, "Compare the E5a Doppler and Carrier Phases with the E5 full bw in RINEX (expect discrepancy due to the center frequencies differences"); +ABSL_FLAG(bool, duplicated_satellites_test, false, "Enable special observable test mode where the scenario contains duplicated satellite orbits"); +ABSL_FLAG(std::string, duplicated_satellites_prns, "1,2,3,4", "List of duplicated satellites PRN pairs (i.e. 1,2,3,4 indicates that the PRNs 1,2 share the same orbit. The same applies for PRNs 3,4)"); +#endif + #endif diff --git a/src/tests/common-files/signal_generator_flags.h b/src/tests/common-files/signal_generator_flags.h index c43763fd3f..be2ae03ac2 100644 --- a/src/tests/common-files/signal_generator_flags.h +++ b/src/tests/common-files/signal_generator_flags.h @@ -17,10 +17,17 @@ #ifndef GNSS_SDR_SIGNAL_GENERATOR_FLAGS_H #define GNSS_SDR_SIGNAL_GENERATOR_FLAGS_H -#include +#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + +#if USE_GLOG_AND_GFLAGS DEFINE_bool(disable_generator, false, "Disable the signal generator (a external signal file must be available for the test)"); DEFINE_string(generator_binary, std::string(SW_GENERATOR_BIN), "Path of software-defined signal generator binary"); DEFINE_string(rinex_nav_file, std::string(DEFAULT_RINEX_NAV), "Input RINEX navigation file"); @@ -34,5 +41,20 @@ DEFINE_int32(test_satellite_PRN, 1, "PRN of the satellite under test (must be vi DEFINE_int32(test_satellite_PRN2, 2, "PRN of the satellite under test (must be visible during the observation time)"); DEFINE_string(test_satellite_PRN_list, "1,2,3,6,9,10,12,17,20,23,28", "List of PRN of the satellites under test (must be visible during the observation time)"); DEFINE_double(CN0_dBHz, std::numeric_limits::infinity(), "Enable noise generator and set the CN0 [dB-Hz]"); +#else +ABSL_FLAG(bool, disable_generator, false, "Disable the signal generator (a external signal file must be available for the test)"); +ABSL_FLAG(std::string, generator_binary, std::string(SW_GENERATOR_BIN), "Path of software-defined signal generator binary"); +ABSL_FLAG(std::string, rinex_nav_file, std::string(DEFAULT_RINEX_NAV), "Input RINEX navigation file"); +ABSL_FLAG(int32_t, duration, 100, "Duration of the experiment [in seconds, max = 300]"); +ABSL_FLAG(std::string, static_position, "30.286502,120.032669,100", "Static receiver position [latitude,longitude,height]"); +ABSL_FLAG(std::string, dynamic_position, "", "Observer positions file, in .csv or .nmea format"); +ABSL_FLAG(std::string, filename_rinex_obs, "sim.16o", "Filename of output RINEX navigation file"); +ABSL_FLAG(std::string, filename_raw_data, "signal_out.bin", "Filename of output raw data file"); +ABSL_FLAG(int32_t, fs_gen_sps, 2600000, "Sampling frequency [sps]"); +ABSL_FLAG(int32_t, test_satellite_PRN, 1, "PRN of the satellite under test (must be visible during the observation time)"); +ABSL_FLAG(int32_t, test_satellite_PRN2, 2, "PRN of the satellite under test (must be visible during the observation time)"); +ABSL_FLAG(std::string, test_satellite_PRN_list, "1,2,3,6,9,10,12,17,20,23,28", "List of PRN of the satellites under test (must be visible during the observation time)"); +ABSL_FLAG(double, CN0_dBHz, std::numeric_limits::infinity(), "Enable noise generator and set the CN0 [dB-Hz]"); +#endif #endif diff --git a/src/tests/common-files/test_flags.h b/src/tests/common-files/test_flags.h index 814cf69e67..57061e5a7c 100644 --- a/src/tests/common-files/test_flags.h +++ b/src/tests/common-files/test_flags.h @@ -17,16 +17,28 @@ #ifndef GNSS_SDR_TEST_FLAGS_H #define GNSS_SDR_TEST_FLAGS_H -#include + +#include #include + +#if USE_GLOG_AND_GFLAGS +#include #if defined GNUPLOT_EXECUTABLE DEFINE_string(gnuplot_executable, std::string(GNUPLOT_EXECUTABLE), "Gnuplot binary path"); #elif !defined GNUPLOT_EXECUTABLE DEFINE_string(gnuplot_executable, "", "Gnuplot binary path"); #endif - DEFINE_bool(plot_acq_grid, false, "Plots acquisition grid with gnuplot"); DEFINE_int32(plot_decimate, 1, "Decimate plots"); - +#else +#include +#if defined GNUPLOT_EXECUTABLE +ABSL_FLAG(std::string, gnuplot_executable, std::string(GNUPLOT_EXECUTABLE), "Gnuplot binary path"); +#elif !defined GNUPLOT_EXECUTABLE +ABSL_FLAG(std::string, gnuplot_executable, "", "Gnuplot binary path"); +#endif +ABSL_FLAG(bool, plot_acq_grid, false, "Plots acquisition grid with gnuplot"); +ABSL_FLAG(int32_t, plot_decimate, 1, "Decimate plots"); +#endif #endif diff --git a/src/tests/common-files/tracking_tests_flags.h b/src/tests/common-files/tracking_tests_flags.h index 8bbc4701cc..0027fb8624 100644 --- a/src/tests/common-files/tracking_tests_flags.h +++ b/src/tests/common-files/tracking_tests_flags.h @@ -17,10 +17,12 @@ #ifndef GNSS_SDR_TRACKING_TESTS_FLAGS_H #define GNSS_SDR_TRACKING_TESTS_FLAGS_H -#include +#include #include #include +#if USE_GLOG_AND_GFLAGS +#include DEFINE_string(trk_test_implementation, std::string("GPS_L1_CA_DLL_PLL_Tracking"), "Tracking block implementation under test, defaults to GPS_L1_CA_DLL_PLL_Tracking"); // Input signal configuration @@ -77,6 +79,63 @@ DEFINE_bool(high_dyn, false, "Activates the code resampler and NCO generator for // Test output configuration DEFINE_bool(plot_gps_l1_tracking_test, false, "Plots results of GpsL1CADllPllTrackingTest with gnuplot"); +#else +#include +ABSL_FLAG(std::string, trk_test_implementation, std::string("GPS_L1_CA_DLL_PLL_Tracking"), "Tracking block implementation under test, defaults to GPS_L1_CA_DLL_PLL_Tracking"); +// Input signal configuration +ABSL_FLAG(bool, enable_external_signal_file, false, "Use an external signal file capture instead of the software-defined signal generator"); +ABSL_FLAG(double, external_signal_acquisition_threshold, 2.5, "Threshold for satellite acquisition when external file is used"); +ABSL_FLAG(int32_t, external_signal_acquisition_dwells, 5, "Maximum dwells count for satellite acquisition when external file is used"); +ABSL_FLAG(double, external_signal_acquisition_doppler_max_hz, 5000.0, "Doppler max for satellite acquisition when external file is used"); +ABSL_FLAG(double, external_signal_acquisition_doppler_step_hz, 125.0, "Doppler step for satellite acquisition when external file is used"); +ABSL_FLAG(bool, use_acquisition_resampler, false, "Reduce the sampling rate of the input signal for the acquisition in order to optimize the SNR and decrease the processor load"); + +ABSL_FLAG(std::string, signal_file, std::string("signal_out.bin"), "Path of the external signal capture file"); +ABSL_FLAG(double, CN0_dBHz_start, std::numeric_limits::infinity(), "Enable noise generator and set the CN0 start sweep value [dB-Hz]"); +ABSL_FLAG(double, CN0_dBHz_stop, std::numeric_limits::infinity(), "Enable noise generator and set the CN0 stop sweep value [dB-Hz]"); +ABSL_FLAG(double, CN0_dB_step, 3.0, "Noise generator CN0 sweep step value [dB]"); + +ABSL_FLAG(double, PLL_bw_hz_start, 20.0, "PLL Wide configuration start sweep value [Hz]"); +ABSL_FLAG(double, PLL_bw_hz_stop, 20.0, "PLL Wide configuration stop sweep value [Hz]"); +ABSL_FLAG(double, PLL_bw_hz_step, 5.0, "PLL Wide configuration sweep step value [Hz]"); + +ABSL_FLAG(double, DLL_bw_hz_start, 1.0, "DLL Wide configuration start sweep value [Hz]"); +ABSL_FLAG(double, DLL_bw_hz_stop, 1.0, "DLL Wide configuration stop sweep value [Hz]"); +ABSL_FLAG(double, DLL_bw_hz_step, 0.25, "DLL Wide configuration sweep step value [Hz]"); + +ABSL_FLAG(double, fll_bw_hz, 4.0, "FLL filter bandwidth [Hz]"); +ABSL_FLAG(bool, enable_fll_pull_in, false, "Enable FLL in pull-in phase"); +ABSL_FLAG(bool, enable_fll_steady_state, false, "Enable FLL in steady-state phase"); + +ABSL_FLAG(double, PLL_narrow_bw_hz, 5.0, "PLL Narrow configuration value [Hz]"); +ABSL_FLAG(double, DLL_narrow_bw_hz, 0.75, "DLL Narrow configuration value [Hz]"); + +ABSL_FLAG(double, acq_Doppler_error_hz_start, 1000.0, "Acquisition Doppler error start sweep value [Hz]"); +ABSL_FLAG(double, acq_Doppler_error_hz_stop, -1000.0, "Acquisition Doppler error stop sweep value [Hz]"); +ABSL_FLAG(double, acq_Doppler_error_hz_step, -50.0, "Acquisition Doppler error sweep step value [Hz]"); + +ABSL_FLAG(double, acq_Delay_error_chips_start, 2.0, "Acquisition Code Delay error start sweep value [Chips]"); +ABSL_FLAG(double, acq_Delay_error_chips_stop, -2.0, "Acquisition Code Delay error stop sweep value [Chips]"); +ABSL_FLAG(double, acq_Delay_error_chips_step, -0.1, "Acquisition Code Delay error sweep step value [Chips]"); + +ABSL_FLAG(double, acq_to_trk_delay_s, 0.0, "Acquisition to Tracking delay value [s]"); +ABSL_FLAG(int64_t, skip_samples, 0, "Skip an initial transitory in the processed signal file capture [samples]"); + +ABSL_FLAG(int32_t, plot_detail_level, 0, "Specify the desired plot detail (0,1,2): 0 - Minimum plots (default) 2 - Plot all tracking parameters"); + +ABSL_FLAG(double, skip_trk_transitory_s, 1.0, "Skip the initial tracking output signal to avoid transitory results [s]"); + +// Emulated acquisition configuration + +// Tracking configuration +ABSL_FLAG(int32_t, extend_correlation_symbols, 1, "Set the tracking coherent correlation to N symbols (up to 20 for GPS L1 C/A)"); +ABSL_FLAG(int32_t, smoother_length, 10, "Set the moving average size for the carrier phase and code phase in case of high dynamics"); +ABSL_FLAG(bool, high_dyn, false, "Activates the code resampler and NCO generator for high dynamics"); + +// Test output configuration +ABSL_FLAG(bool, plot_gps_l1_tracking_test, false, "Plots results of GpsL1CADllPllTrackingTest with gnuplot"); + +#endif #endif diff --git a/src/tests/single_test_main.cc b/src/tests/single_test_main.cc index 5f8d52aabc..5156ee5470 100644 --- a/src/tests/single_test_main.cc +++ b/src/tests/single_test_main.cc @@ -19,26 +19,65 @@ #include "concurrent_map.h" #include "concurrent_queue.h" #include "gps_acq_assist.h" -#include -#include #include +#include #include +#include +#include +#if USE_GLOG_AND_GFLAGS +#include +#include #if GFLAGS_OLD_NAMESPACE namespace gflags { using namespace google; } +DECLARE_string(log_dir); #endif +#else +#include "gnss_sdr_flags.h" +#include +#include +#include +#include +#include +#include +#include + +class TestLogSink : public absl::LogSink +{ +public: + TestLogSink() + { + if (!absl::GetFlag(FLAGS_log_dir).empty()) + { + logfile.open(absl::GetFlag(FLAGS_log_dir) + "/test.log"); + } + else + { + logfile.open(GetTempDir() + "/test.log"); + } + } + void Send(const absl::LogEntry &entry) override + { + logfile << entry.text_message_with_prefix_and_newline() << std::flush; + } + +private: + std::ofstream logfile; +}; +#endif + Concurrent_Queue global_gps_acq_assist_queue; Concurrent_Map global_gps_acq_assist_map; -DECLARE_string(log_dir); int main(int argc, char **argv) { +#if USE_GLOG_AND_GFLAGS gflags::ParseCommandLineFlags(&argc, &argv, true); try { @@ -48,6 +87,19 @@ int main(int argc, char **argv) { } // catch the "testing::internal::::ClassUniqueToAlwaysTrue" from gtest google::InitGoogleLogging(argv[0]); +#else + absl::ParseCommandLine(argc, argv); + try + { + testing::InitGoogleTest(&argc, argv); + } + catch (...) + { + } // catch the "testing::internal::::ClassUniqueToAlwaysTrue" from gtest + absl::LogSink *testLogSink = new TestLogSink; + absl::AddLogSink(testLogSink); + absl::InitializeLog(); +#endif int res = 0; try { @@ -57,6 +109,10 @@ int main(int argc, char **argv) { LOG(WARNING) << "Unexpected catch"; } +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#else + absl::FlushLogSinks(); +#endif return res; } diff --git a/src/tests/system-tests/libs/CMakeLists.txt b/src/tests/system-tests/libs/CMakeLists.txt index eb936a24f6..01a5bfdebb 100644 --- a/src/tests/system-tests/libs/CMakeLists.txt +++ b/src/tests/system-tests/libs/CMakeLists.txt @@ -32,12 +32,18 @@ endif() target_link_libraries(system_testing_lib PUBLIC Armadillo::armadillo - Gflags::gflags PRIVATE Boost::headers Matio::matio ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(system_testing_lib PUBLIC Gflags::gflags) + target_compile_definitions(system_testing_lib PUBLIC -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(system_testing_lib PUBLIC absl::flags) +endif() + if(ENABLE_CLANG_TIDY) if(CLANG_TIDY_EXE) set_target_properties(system_testing_lib diff --git a/src/tests/system-tests/libs/position_test_flags.h b/src/tests/system-tests/libs/position_test_flags.h index 57cc1e5dd3..abff0f4a65 100644 --- a/src/tests/system-tests/libs/position_test_flags.h +++ b/src/tests/system-tests/libs/position_test_flags.h @@ -17,10 +17,18 @@ #ifndef GNSS_SDR_POSITION_TEST_FLAGS_H #define GNSS_SDR_POSITION_TEST_FLAGS_H -#include + +#include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + +#if USE_GLOG_AND_GFLAGS DEFINE_string(config_file_ptest, std::string(""), "File containing the configuration parameters for the position test."); DEFINE_bool(plot_position_test, false, "Plots results of with gnuplot"); DEFINE_bool(static_scenario, true, "Compute figures of merit for static user position (DRMS, CEP, etc..)"); @@ -35,5 +43,21 @@ DEFINE_double(precision_SEP, 15.0, "Static scenario 3D (East, North, Up) precisi DEFINE_double(dynamic_3D_position_RMSE, 10.0, "Dynamic scenario 3D (ECEF) accuracy RMSE threshold [meters]"); DEFINE_double(dynamic_3D_velocity_RMSE, 5.0, "Dynamic scenario 3D (ECEF) velocity accuracy RMSE threshold [meters/second]"); DEFINE_bool(enable_carrier_smoothing, false, "Activates carrier smoothing of pseudoranges"); +#else +ABSL_FLAG(std::string, config_file_ptest, std::string(""), "File containing the configuration parameters for the position test."); +ABSL_FLAG(bool, plot_position_test, false, "Plots results of with gnuplot"); +ABSL_FLAG(bool, static_scenario, true, "Compute figures of merit for static user position (DRMS, CEP, etc..)"); +ABSL_FLAG(bool, use_ref_motion_file, false, "Enable or disable the use of a reference file containing the true receiver position, velocity and acceleration."); +ABSL_FLAG(int32_t, ref_motion_file_type, 1, "Type of reference motion file: 1- Spirent CSV motion file"); +ABSL_FLAG(std::string, ref_motion_filename, std::string("motion.csv"), "Path and filename for the reference motion file"); +ABSL_FLAG(std::string, pvt_solver_dump_filename, std::string("PVT.dat"), "Path and filename for the PVT solver binary dump file"); +ABSL_FLAG(double, static_2D_error_m, 2.0, "Static scenario 2D (East, North) positioning error threshold [meters]"); +ABSL_FLAG(double, static_3D_error_m, 5.0, "Static scenario 3D (East, North, Up) positioning error threshold [meters]"); +ABSL_FLAG(double, accuracy_CEP, 3.0, "Static scenario 2D (East, North) accuracy Circular Error Position (CEP) threshold [meters]"); +ABSL_FLAG(double, precision_SEP, 15.0, "Static scenario 3D (East, North, Up) precision Spherical Error Position (SEP) threshold [meters]"); +ABSL_FLAG(double, dynamic_3D_position_RMSE, 10.0, "Dynamic scenario 3D (ECEF) accuracy RMSE threshold [meters]"); +ABSL_FLAG(double, dynamic_3D_velocity_RMSE, 5.0, "Dynamic scenario 3D (ECEF) velocity accuracy RMSE threshold [meters/second]"); +ABSL_FLAG(bool, enable_carrier_smoothing, false, "Activates carrier smoothing of pseudoranges"); +#endif #endif diff --git a/src/tests/system-tests/position_test.cc b/src/tests/system-tests/position_test.cc index 5802aa9caa..f15fdf6aac 100644 --- a/src/tests/system-tests/position_test.cc +++ b/src/tests/system-tests/position_test.cc @@ -38,7 +38,6 @@ #include #include #include -#include #include #include #include @@ -48,16 +47,53 @@ #include #include #include +#include #include +#if USE_GLOG_AND_GFLAGS +#include #if GFLAGS_OLD_NAMESPACE namespace gflags { using namespace google; } #endif +#else +#include +#include +#include +#include +#include +#include +#endif +#if USE_GLOG_AND_GFLAGS DEFINE_int32(num_channels, 11, "Number of channels"); +#else +ABSL_FLAG(int32_t, num_channels, 11, "Number of channels"); +class PositionTestLogSink : public absl::LogSink +{ +public: + PositionTestLogSink() + { + if (!absl::GetFlag(FLAGS_log_dir).empty()) + { + logfile.open(absl::GetFlag(FLAGS_log_dir) + "/position_test.log"); + } + else + { + logfile.open(GetTempDir() + "/position_test.log"); + } + } + void Send(const absl::LogEntry& entry) override + { + logfile << entry.text_message_with_prefix_and_newline() << std::flush; + } + +private: + std::ofstream logfile; +}; +#endif // For GPS NAVIGATION (L1) Concurrent_Queue global_gps_acq_assist_queue; @@ -84,11 +120,15 @@ class PositionSystemTest : public ::testing::Test std::string p5; std::string p6; +#if USE_GLOG_AND_GFLAGS const double baseband_sampling_freq = static_cast(FLAGS_fs_gen_sps); - std::string filename_rinex_obs = FLAGS_filename_rinex_obs; std::string filename_raw_data = FLAGS_filename_raw_data; - +#else + const double baseband_sampling_freq = static_cast(absl::GetFlag(FLAGS_fs_gen_sps)); + std::string filename_rinex_obs = absl::GetFlag(FLAGS_filename_rinex_obs); + std::string filename_raw_data = absl::GetFlag(FLAGS_filename_raw_data); +#endif void print_results(const arma::mat& R_eb_enu) const; std::shared_ptr config; std::shared_ptr config_f; @@ -101,6 +141,7 @@ class PositionSystemTest : public ::testing::Test int PositionSystemTest::configure_generator() { +#if USE_GLOG_AND_GFLAGS // Configure signal generator generator_binary = FLAGS_generator_binary; @@ -128,6 +169,35 @@ int PositionSystemTest::configure_generator() { p6 = std::string("-CN0_dBHz=") + std::to_string(FLAGS_CN0_dBHz); } +#else + // Configure signal generator + generator_binary = absl::GetFlag(FLAGS_generator_binary); + + p1 = std::string("-rinex_nav_file=") + absl::GetFlag(FLAGS_rinex_nav_file); + if (absl::GetFlag(FLAGS_dynamic_position).empty()) + { + p2 = std::string("-static_position=") + absl::GetFlag(FLAGS_static_position) + std::string(",") + std::to_string(std::min(absl::GetFlag(FLAGS_duration) * 10, 3000)); + if (absl::GetFlag(FLAGS_duration) > 300) + { + std::cout << "WARNING: Duration has been set to its maximum value of 300 s\n"; + } + } + else + { + p2 = std::string("-obs_pos_file=") + std::string(absl::GetFlag(FLAGS_dynamic_position)); + } + p3 = std::string("-rinex_obs_file=") + absl::GetFlag(FLAGS_filename_rinex_obs); // RINEX 2.10 observation file output + p4 = std::string("-sig_out_file=") + absl::GetFlag(FLAGS_filename_raw_data); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples + p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] + if (absl::GetFlag(FLAGS_CN0_dBHz) > 100.0) + { + p6 = std::string("-CN0_dBHz=45"); + } + else + { + p6 = std::string("-CN0_dBHz=") + std::to_string(absl::GetFlag(FLAGS_CN0_dBHz)); + } +#endif return 0; } @@ -162,7 +232,11 @@ int PositionSystemTest::generate_signal() int PositionSystemTest::configure_receiver() { +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ptest.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ptest).empty()) +#endif { config = std::make_shared(); const int sampling_rate_internal = baseband_sampling_freq; @@ -182,7 +256,11 @@ int PositionSystemTest::configure_receiver() const int grid_density = 16; const float zero = 0.0; +#if USE_GLOG_AND_GFLAGS const int number_of_channels = FLAGS_num_channels; +#else + const int number_of_channels = absl::GetFlag(FLAGS_num_channels); +#endif const int in_acquisition = 1; const float threshold = 2.5; @@ -199,14 +277,22 @@ int PositionSystemTest::configure_receiver() const float early_late_space_narrow_chips = 0.1; const float pll_bw_narrow_hz = 15.0; const float dll_bw_narrow_hz = 1.5; +#if USE_GLOG_AND_GFLAGS const int extend_correlation_symbols = FLAGS_extend_correlation_symbols; // defaults to 1 - +#else + const int extend_correlation_symbols = absl::GetFlag(FLAGS_extend_correlation_symbols); // defaults to 1 +#endif const int display_rate_ms = 500; const int output_rate_ms = 100; config->set_property("GNSS-SDR.internal_fs_sps", std::to_string(sampling_rate_internal)); // Enable automatic resampler for the acquisition, if required + +#if USE_GLOG_AND_GFLAGS if (FLAGS_use_acquisition_resampler == true) +#else + if (absl::GetFlag(FLAGS_use_acquisition_resampler) == true) +#endif { config->set_property("GNSS-SDR.use_acquisition_resampler", "true"); } @@ -305,8 +391,13 @@ int PositionSystemTest::configure_receiver() // Set Observables config->set_property("Observables.implementation", "Hybrid_Observables"); +#if USE_GLOG_AND_GFLAGS config->set_property("Observables.enable_carrier_smoothing", FLAGS_enable_carrier_smoothing ? "true" : "false"); config->set_property("Observables.smoothing_factor", std::to_string(FLAGS_carrier_smoothing_factor)); +#else + config->set_property("Observables.enable_carrier_smoothing", absl::GetFlag(FLAGS_enable_carrier_smoothing) ? "true" : "false"); + config->set_property("Observables.smoothing_factor", std::to_string(absl::GetFlag(FLAGS_carrier_smoothing_factor))); +#endif config->set_property("Observables.dump", "false"); config->set_property("Observables.dump_filename", "./observables.dat"); @@ -334,7 +425,11 @@ int PositionSystemTest::configure_receiver() } else { +#if USE_GLOG_AND_GFLAGS config_f = std::make_shared(FLAGS_config_file_ptest); +#else + config_f = std::make_shared(absl::GetFlag(FLAGS_config_file_ptest)); +#endif config = nullptr; } return 0; @@ -344,7 +439,11 @@ int PositionSystemTest::configure_receiver() int PositionSystemTest::run_receiver() { std::shared_ptr control_thread; +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ptest.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ptest).empty()) +#endif { control_thread = std::make_shared(config); } @@ -472,7 +571,11 @@ void PositionSystemTest::check_results() arma::mat ref_LLH; // Geodetic coordinates (latitude, longitude, height) reference in WGS84 datum arma::vec ref_time_s; +#if USE_GLOG_AND_GFLAGS std::istringstream iss2(FLAGS_static_position); +#else + std::istringstream iss2(absl::GetFlag(FLAGS_static_position)); +#endif std::string str_aux; std::getline(iss2, str_aux, ','); double ref_lat = std::stod(str_aux); @@ -491,7 +594,11 @@ void PositionSystemTest::check_results() cart2utm(true_r_eb_e, utm_zone, ref_r_enu); Rtklib_Solver_Dump_Reader pvt_reader; +#if USE_GLOG_AND_GFLAGS pvt_reader.open_obs_file(FLAGS_pvt_solver_dump_filename); +#else + pvt_reader.open_obs_file(absl::GetFlag(FLAGS_pvt_solver_dump_filename)); +#endif int64_t n_epochs_pvt = pvt_reader.num_epochs(); R_eb_e = arma::zeros(3, n_epochs_pvt); V_eb_e = arma::zeros(3, n_epochs_pvt); @@ -525,7 +632,11 @@ void PositionSystemTest::check_results() ASSERT_FALSE(current_epoch == 0) << "PVT dump is empty"; // compute results +#if USE_GLOG_AND_GFLAGS if (FLAGS_static_scenario) +#else + if (absl::GetFlag(FLAGS_static_scenario)) +#endif { double sigma_E_2_precision = arma::var(R_eb_enu.row(0)); double sigma_N_2_precision = arma::var(R_eb_enu.row(1)); @@ -566,11 +677,17 @@ void PositionSystemTest::check_results() std::stringstream stm; std::ofstream position_test_file; +#if USE_GLOG_AND_GFLAGS if (!FLAGS_config_file_ptest.empty()) { stm << "Configuration file: " << FLAGS_config_file_ptest << '\n'; } - +#else + if (!absl::GetFlag(FLAGS_config_file_ptest).empty()) + { + stm << "Configuration file: " << absl::GetFlag(FLAGS_config_file_ptest) << '\n'; + } +#endif stm << "---- STATIC ACCURACY ----\n"; stm << "2DRMS = " << 2 * sqrt(sigma_E_2_accuracy + sigma_N_2_accuracy) << " [m]\n"; stm << "DRMS = " << sqrt(sigma_E_2_accuracy + sigma_N_2_accuracy) << " [m]\n"; @@ -607,7 +724,7 @@ void PositionSystemTest::check_results() // Sanity Check double accuracy_CEP = 0.62 * sqrt(sigma_N_2_accuracy) + 0.56 * sqrt(sigma_E_2_accuracy); double precision_SEP = 0.51 * (sigma_E_2_precision + sigma_N_2_precision + sigma_U_2_precision); - +#if USE_GLOG_AND_GFLAGS EXPECT_LT(static_2D_error_m, FLAGS_static_2D_error_m); EXPECT_LT(static_3D_error_m, FLAGS_static_3D_error_m); ASSERT_LT(accuracy_CEP, FLAGS_accuracy_CEP); @@ -617,12 +734,27 @@ void PositionSystemTest::check_results() { print_results(R_eb_enu); } +#else + EXPECT_LT(static_2D_error_m, absl::GetFlag(FLAGS_static_2D_error_m)); + EXPECT_LT(static_3D_error_m, absl::GetFlag(FLAGS_static_3D_error_m)); + ASSERT_LT(accuracy_CEP, absl::GetFlag(FLAGS_accuracy_CEP)); + ASSERT_LT(precision_SEP, absl::GetFlag(FLAGS_precision_SEP)); + + if (absl::GetFlag(FLAGS_plot_position_test) == true) + { + print_results(R_eb_enu); + } +#endif } else { // dynamic position Spirent_Motion_Csv_Dump_Reader ref_reader; +#if USE_GLOG_AND_GFLAGS ref_reader.open_obs_file(FLAGS_ref_motion_filename); +#else + ref_reader.open_obs_file(absl::GetFlag(FLAGS_ref_motion_filename)); +#endif int64_t n_epochs_ref = ref_reader.num_epochs(); ref_R_eb_e = arma::zeros(3, n_epochs_ref); ref_V_eb_e = arma::zeros(3, n_epochs_ref); @@ -692,10 +824,17 @@ void PositionSystemTest::check_results() // report std::cout << "----- Position and Velocity 3D ECEF error statistics -----\n"; +#if USE_GLOG_AND_GFLAGS if (!FLAGS_config_file_ptest.empty()) { std::cout << "---- Configuration file: " << FLAGS_config_file_ptest << '\n'; } +#else + if (!absl::GetFlag(FLAGS_config_file_ptest).empty()) + { + std::cout << "---- Configuration file: " << absl::GetFlag(FLAGS_config_file_ptest) << '\n'; + } +#endif std::streamsize ss = std::cout.precision(); std::cout << std::setprecision(10) << "---- 3D ECEF Position RMSE = " << rmse_R_eb_e << ", mean = " << error_mean_R_eb_e @@ -711,14 +850,24 @@ void PositionSystemTest::check_results() << " [m/s]\n"; std::cout.precision(ss); - // plots +// plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_position_test == true) { const std::string gnuplot_executable(FLAGS_gnuplot_executable); +#else + if (absl::GetFlag(FLAGS_plot_position_test) == true) + { + const std::string gnuplot_executable(absl::GetFlag(FLAGS_gnuplot_executable)); +#endif if (!gnuplot_executable.empty()) { Gnuplot g1("points"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g1.showonscreen(); // window output } @@ -740,7 +889,11 @@ void PositionSystemTest::check_results() g1.cmd("set key box opaque"); g1.plot_xyz(X, Y, Z, "ECEF 3D error"); g1.set_legend(); +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ptest.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ptest).empty()) +#endif { g1.savetops("ECEF_3d_error"); } @@ -750,7 +903,11 @@ void PositionSystemTest::check_results() } arma::vec time_vector_from_start_s = receiver_time_s - receiver_time_s(0); Gnuplot g3("linespoints"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g3.showonscreen(); // window output } @@ -771,7 +928,11 @@ void PositionSystemTest::check_results() g3.set_style("lines"); g3.plot_xy(time_vector_from_start_s, error_mean, "Mean"); g3.set_legend(); +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ptest.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ptest).empty()) +#endif { g3.savetops("Position_3d_error"); } @@ -781,7 +942,11 @@ void PositionSystemTest::check_results() } Gnuplot g4("linespoints"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g4.showonscreen(); // window output } @@ -802,7 +967,11 @@ void PositionSystemTest::check_results() g4.set_style("lines"); g4.plot_xy(time_vector_from_start_s, error_mean_v, "Mean"); g4.set_legend(); +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ptest.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ptest).empty()) +#endif { g4.savetops("Velocity_3d_error"); } @@ -813,17 +982,27 @@ void PositionSystemTest::check_results() } } - // ERROR CHECK - // todo: reduce the error tolerance or enable the option to pass the error tolerance by parameter + // ERROR CHECK + // todo: reduce the error tolerance or enable the option to pass the error tolerance by parameter + +#if USE_GLOG_AND_GFLAGS EXPECT_LT(rmse_R_eb_e, FLAGS_dynamic_3D_position_RMSE); // 3D RMS positioning error less than 10 meters EXPECT_LT(rmse_V_eb_e, FLAGS_dynamic_3D_velocity_RMSE); // 3D RMS speed error less than 5 meters/s (18 km/h) +#else + EXPECT_LT(rmse_R_eb_e, absl::GetFlag(FLAGS_dynamic_3D_position_RMSE)); // 3D RMS positioning error less than 10 meters + EXPECT_LT(rmse_V_eb_e, absl::GetFlag(FLAGS_dynamic_3D_velocity_RMSE)); // 3D RMS speed error less than 5 meters/s (18 km/h) +#endif } } void PositionSystemTest::print_results(const arma::mat& R_eb_enu) const { +#if USE_GLOG_AND_GFLAGS const std::string gnuplot_executable(FLAGS_gnuplot_executable); +#else + const std::string gnuplot_executable(absl::GetFlag(FLAGS_gnuplot_executable)); +#endif if (gnuplot_executable.empty()) { std::cout << "WARNING: Although the flag plot_position_test has been set to TRUE,\n"; @@ -874,7 +1053,11 @@ void PositionSystemTest::print_results(const arma::mat& R_eb_enu) const Gnuplot::set_GNUPlotPath(gnuplot_path); Gnuplot g1("points"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g1.showonscreen(); // window output } @@ -895,7 +1078,11 @@ void PositionSystemTest::print_results(const arma::mat& R_eb_enu) const g1.cmd("set grid front"); g1.cmd("replot"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ptest.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ptest).empty()) +#endif { g1.savetops("Position_test_2D"); g1.savetopdf("Position_test_2D", 18); @@ -907,7 +1094,11 @@ void PositionSystemTest::print_results(const arma::mat& R_eb_enu) const } Gnuplot g2("points"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g2.showonscreen(); // window output } @@ -930,7 +1121,11 @@ void PositionSystemTest::print_results(const arma::mat& R_eb_enu) const std::to_string(ninty_sas) + "\n fx(v,u) = r*cos(v)*cos(u)\n fy(v,u) = r*cos(v)*sin(u)\n fz(v) = r*sin(v) \n splot fx(v,u),fy(v,u),fz(v) title \"90%-SAS\" lt rgb \"gray\"\n"); g2.plot_xyz(east, north, up, "3D Position Fixes"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ptest.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ptest).empty()) +#endif { g2.savetops("Position_test_3D"); g2.savetopdf("Position_test_3D"); @@ -951,20 +1146,33 @@ void PositionSystemTest::print_results(const arma::mat& R_eb_enu) const TEST_F(PositionSystemTest /*unused*/, Position_system_test /*unused*/) { +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ptest.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ptest).empty()) +#endif { // Configure the signal generator configure_generator(); // Generate signal raw signal samples and observations RINEX file + +#if USE_GLOG_AND_GFLAGS if (!FLAGS_disable_generator) +#else + if (!absl::GetFlag(FLAGS_disable_generator)) +#endif { generate_signal(); } } else { +#if USE_GLOG_AND_GFLAGS config_filename_no_extension = FLAGS_config_file_ptest.substr(FLAGS_config_file_ptest.find_last_of("/\\") + 1); +#else + config_filename_no_extension = absl::GetFlag(FLAGS_config_file_ptest).substr(absl::GetFlag(FLAGS_config_file_ptest).find_last_of("/\\") + 1); +#endif config_filename_no_extension = config_filename_no_extension.erase(config_filename_no_extension.length() - 5); } @@ -991,8 +1199,15 @@ int main(int argc, char** argv) { } // catch the "testing::internal::::ClassUniqueToAlwaysTrue" from gtest +#if USE_GLOG_AND_GFLAGS gflags::ParseCommandLineFlags(&argc, &argv, true); google::InitGoogleLogging(argv[0]); +#else + absl::ParseCommandLine(argc, argv); + absl::LogSink* logSink = new PositionTestLogSink; + absl::AddLogSink(logSink); + absl::InitializeLog(); +#endif // Run the Tests try @@ -1003,6 +1218,10 @@ int main(int argc, char** argv) { LOG(WARNING) << "Unexpected catch"; } +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#else + absl::FlushLogSinks(); +#endif return res; } diff --git a/src/tests/system-tests/ttff.cc b/src/tests/system-tests/ttff.cc index 55f0698cf5..773a9acd39 100644 --- a/src/tests/system-tests/ttff.cc +++ b/src/tests/system-tests/ttff.cc @@ -26,12 +26,11 @@ #include #include #include -#include -#include #include #include #include #include +#include #include #include #include @@ -41,19 +40,38 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#include #if GFLAGS_OLD_NAMESPACE namespace gflags { using namespace google; } #endif +#else +#include +#include +#include +#include +#endif + +#if USE_GLOG_AND_GFLAGS DEFINE_int32(fs_in, 4000000, "Sampling rate, in Samples/s"); DEFINE_int32(max_measurement_duration, 90, "Maximum time waiting for a position fix, in seconds"); DEFINE_int32(num_measurements, 2, "Number of measurements"); DEFINE_string(device_address, "192.168.40.2", "USRP device IP address"); DEFINE_string(subdevice, "A:0", "USRP subdevice"); DEFINE_string(config_file_ttff, std::string(""), "File containing the configuration parameters for the TTFF test."); +#else +ABSL_FLAG(int32_t, fs_in, 4000000, "Sampling rate, in Samples/s"); +ABSL_FLAG(int32_t, max_measurement_duration, 90, "Maximum time waiting for a position fix, in seconds"); +ABSL_FLAG(int32_t, num_measurements, 2, "Number of measurements"); +ABSL_FLAG(std::string, device_address, "192.168.40.2", "USRP device IP address"); +ABSL_FLAG(std::string, subdevice, "A:0", "USRP subdevice"); +ABSL_FLAG(std::string, config_file_ttff, std::string(""), "File containing the configuration parameters for the TTFF test."); +#endif // For GPS NAVIGATION (L1) Concurrent_Queue global_gps_acq_assist_queue; @@ -121,8 +139,11 @@ void TtffTest::config_1() { config = std::make_shared(); +#if USE_GLOG_AND_GFLAGS config->set_property("GNSS-SDR.internal_fs_sps", std::to_string(FLAGS_fs_in)); +#else +#endif // Set the assistance system parameters config->set_property("GNSS-SDR.SUPL_gps_ephemeris_server", "supl.google.com"); config->set_property("GNSS-SDR.SUPL_gps_ephemeris_port", std::to_string(7275)); @@ -137,11 +158,15 @@ void TtffTest::config_1() config->set_property("SignalSource.item_type", "cshort"); config->set_property("SignalSource.implementation", "UHD_Signal_Source"); config->set_property("SignalSource.freq", std::to_string(central_freq)); - config->set_property("SignalSource.sampling_frequency", std::to_string(FLAGS_fs_in)); config->set_property("SignalSource.gain", std::to_string(gain_dB)); +#if USE_GLOG_AND_GFLAGS + config->set_property("SignalSource.sampling_frequency", std::to_string(FLAGS_fs_in)); config->set_property("SignalSource.subdevice", FLAGS_subdevice); config->set_property("SignalSource.samples", std::to_string(FLAGS_fs_in * FLAGS_max_measurement_duration)); config->set_property("SignalSource.device_address", FLAGS_device_address); +#else + +#endif // Set the Signal Conditioner config->set_property("SignalConditioner.implementation", "Signal_Conditioner"); @@ -166,13 +191,21 @@ void TtffTest::config_1() config->set_property("InputFilter.band2_error", std::to_string(band2_error)); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", std::to_string(grid_density)); +#if USE_GLOG_AND_GFLAGS config->set_property("InputFilter.sampling_frequency", std::to_string(FLAGS_fs_in)); +#else + +#endif config->set_property("InputFilter.IF", std::to_string(zero)); config->set_property("Resampler.implementation", "Pass_Through"); config->set_property("Resampler.dump", "false"); config->set_property("Resampler.item_type", "gr_complex"); +#if USE_GLOG_AND_GFLAGS config->set_property("Resampler.sample_freq_in", std::to_string(FLAGS_fs_in)); config->set_property("Resampler.sample_freq_out", std::to_string(FLAGS_fs_in)); +#else + +#endif // Set the number of Channels config->set_property("Channels_1C.count", std::to_string(number_of_channels)); @@ -228,6 +261,7 @@ void TtffTest::config_1() void TtffTest::config_2() { +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ttff.empty()) { std::string path = std::string(TEST_PATH); @@ -242,6 +276,9 @@ void TtffTest::config_2() int d_sampling_rate; d_sampling_rate = config2->property("GNSS-SDR.internal_fs_sps", FLAGS_fs_in); config2->set_property("SignalSource.samples", std::to_string(d_sampling_rate * FLAGS_max_measurement_duration)); +#else + +#endif } @@ -377,7 +414,12 @@ void TtffTest::print_TTFF_report(const std::vector &ttff_v, const std::s { stm << "Disabled.\n"; } +#if USE_GLOG_AND_GFLAGS stm << "Valid measurements (" << ttff.size() << "/" << FLAGS_num_measurements << "): "; +#else + stm << "Valid measurements (" << ttff.size() << "/" << absl::GetFlag(FLAGS_num_measurements) << "): "; +#endif + for (double ttff_ : ttff) { stm << ttff_ << " "; @@ -427,12 +469,19 @@ TEST_F(TtffTest /*unused*/, ColdStart /*unused*/) config2->set_property("GNSS-SDR.SUPL_gps_enabled", "false"); config2->set_property("GNSS-SDR.SUPL_read_gps_assistance_xml", "false"); config2->set_property("PVT.flag_rtcm_server", "false"); - +#if USE_GLOG_AND_GFLAGS for (int n = 0; n < FLAGS_num_measurements; n++) +#else + for (int n = 0; n < absl::GetFlag(FLAGS_num_measurements); n++) +#endif { // Create a new ControlThread object with a smart pointer std::shared_ptr control_thread; +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ttff.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ttff).empty()) +#endif { control_thread = std::make_shared(config); } @@ -441,8 +490,13 @@ TEST_F(TtffTest /*unused*/, ColdStart /*unused*/) control_thread = std::make_shared(config2); } - // record startup time + // record startup time +#if USE_GLOG_AND_GFLAGS std::cout << "Starting measurement " << num_measurements + 1 << " / " << FLAGS_num_measurements << '\n'; +#else + std::cout << "Starting measurement " << num_measurements + 1 << " / " << absl::GetFlag(FLAGS_num_measurements) << '\n'; + +#endif std::chrono::time_point start; std::chrono::time_point end; start = std::chrono::system_clock::now(); @@ -470,7 +524,11 @@ TEST_F(TtffTest /*unused*/, ColdStart /*unused*/) num_measurements = num_measurements + 1; std::cout << "Just finished measurement " << num_measurements << ", which took " << ttff << " seconds.\n"; +#if USE_GLOG_AND_GFLAGS if (n < FLAGS_num_measurements - 1) +#else + if (n < absl::GetFlag(FLAGS_num_measurements) - 1) +#endif { std::random_device r; std::default_random_engine e1(r()); @@ -484,8 +542,13 @@ TEST_F(TtffTest /*unused*/, ColdStart /*unused*/) } } - // Print TTFF report + // Print TTFF report + +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ttff.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ttff).empty()) +#endif { print_TTFF_report(TTFF_v, config); } @@ -513,11 +576,19 @@ TEST_F(TtffTest /*unused*/, HotStart /*unused*/) config2->set_property("GNSS-SDR.SUPL_read_gps_assistance_xml", "true"); config2->set_property("PVT.flag_rtcm_server", "false"); +#if USE_GLOG_AND_GFLAGS for (int n = 0; n < FLAGS_num_measurements; n++) +#else + for (int n = 0; n < absl::GetFlag(FLAGS_num_measurements); n++) +#endif { // Create a new ControlThread object with a smart pointer std::shared_ptr control_thread; +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ttff.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ttff).empty()) +#endif { control_thread = std::make_shared(config); } @@ -525,8 +596,12 @@ TEST_F(TtffTest /*unused*/, HotStart /*unused*/) { control_thread = std::make_shared(config2); } - // record startup time + // record startup time +#if USE_GLOG_AND_GFLAGS std::cout << "Starting measurement " << num_measurements + 1 << " / " << FLAGS_num_measurements << '\n'; +#else + std::cout << "Starting measurement " << num_measurements + 1 << " / " << absl::GetFlag(FLAGS_num_measurements) << '\n'; +#endif std::chrono::time_point start; std::chrono::time_point end; start = std::chrono::system_clock::now(); @@ -555,7 +630,11 @@ TEST_F(TtffTest /*unused*/, HotStart /*unused*/) num_measurements = num_measurements + 1; std::cout << "Just finished measurement " << num_measurements << ", which took " << ttff << " seconds.\n"; +#if USE_GLOG_AND_GFLAGS if (n < FLAGS_num_measurements - 1) +#else + if (n < absl::GetFlag(FLAGS_num_measurements) - 1) +#endif { std::random_device r; std::default_random_engine e1(r()); @@ -569,8 +648,13 @@ TEST_F(TtffTest /*unused*/, HotStart /*unused*/) } } - // Print TTFF report + // Print TTFF report + +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ttff.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ttff).empty()) +#endif { print_TTFF_report(TTFF_v, config); } @@ -594,8 +678,12 @@ int main(int argc, char **argv) { } // catch the "testing::internal::::ClassUniqueToAlwaysTrue" from gtest +#if USE_GLOG_AND_GFLAGS gflags::ParseCommandLineFlags(&argc, &argv, true); google::InitGoogleLogging(argv[0]); +#else + absl::ParseCommandLine(argc, argv); +#endif // Start queue thread std::thread receive_msg_thread(receive_msg); @@ -629,6 +717,8 @@ int main(int argc, char **argv) receive_msg_thread.join(); msgctl(sysv_msqid, IPC_RMID, nullptr); +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return res; } diff --git a/src/tests/test_main.cc b/src/tests/test_main.cc index 3769756aaf..bdc565e0db 100644 --- a/src/tests/test_main.cc +++ b/src/tests/test_main.cc @@ -18,19 +18,59 @@ #include "concurrent_map.h" #include "concurrent_queue.h" #include "gps_acq_assist.h" -#include -#include #include +#include #include +#include +#include +#if USE_GLOG_AND_GFLAGS +#include +#include #if GFLAGS_OLD_NAMESPACE namespace gflags { using namespace google; } +DECLARE_string(log_dir); +#endif +#else +#include "gnss_sdr_flags.h" +#include +#include +#include +#include +#include +#include +#include +#include + +class TestingLogSink : public absl::LogSink +{ +public: + TestingLogSink() + { + if (!absl::GetFlag(FLAGS_log_dir).empty()) + { + filename = std::string(absl::GetFlag(FLAGS_log_dir) + "/run_tests.log"); + } + else + { + filename = std::string(GetTempDir() + "/run_tests.log"); + } + logfile.open(filename); + } + void Send(const absl::LogEntry &entry) override + { + logfile << entry.text_message_with_prefix_and_newline() << std::flush; + } + +private: + std::ofstream logfile; + std::string filename; +}; #endif -DECLARE_string(log_dir); #if UNIT_TESTING_MINIMAL #include "unit-tests/arithmetic/matio_test.cc" @@ -174,8 +214,15 @@ int main(int argc, char **argv) catch (...) { } // catch the "testing::internal::::ClassUniqueToAlwaysTrue" from gtest +#if USE_GLOG_AND_GFLAGS gflags::ParseCommandLineFlags(&argc, &argv, true); google::InitGoogleLogging(argv[0]); +#else + absl::ParseCommandLine(argc, argv); + absl::LogSink *testLogSink = new TestingLogSink; + absl::AddLogSink(testLogSink); + absl::InitializeLog(); +#endif try { res = RUN_ALL_TESTS(); @@ -184,6 +231,10 @@ int main(int argc, char **argv) { LOG(WARNING) << "Unexpected catch"; } +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#else + absl::FlushLogSinks(); +#endif return res; } diff --git a/src/tests/unit-tests/arithmetic/complex_carrier_test.cc b/src/tests/unit-tests/arithmetic/complex_carrier_test.cc index 19a4ba37cd..0504b543b1 100644 --- a/src/tests/unit-tests/arithmetic/complex_carrier_test.cc +++ b/src/tests/unit-tests/arithmetic/complex_carrier_test.cc @@ -20,16 +20,23 @@ #include #include #include +#include - +#if USE_GLOG_AND_GFLAGS DEFINE_int32(size_carrier_test, 100000, "Size of the arrays used for complex carrier testing"); - +#else +ABSL_FLAG(int32_t, size_carrier_test, 100000, "Size of the arrays used for complex carrier testing"); +#endif TEST(ComplexCarrierTest, StandardComplexImplementation) { - // Dynamic allocation creates new usable space on the program STACK - // (an area of RAM specifically allocated to the program) +// Dynamic allocation creates new usable space on the program STACK +// (an area of RAM specifically allocated to the program) +#if USE_GLOG_AND_GFLAGS auto* output = new std::complex[FLAGS_size_carrier_test]; +#else + auto* output = new std::complex[absl::GetFlag(FLAGS_size_carrier_test)]; +#endif const double _f = 2000.0; const double _fs = 2000000.0; const auto phase_step = (TWO_PI * _f) / _fs; @@ -37,8 +44,11 @@ TEST(ComplexCarrierTest, StandardComplexImplementation) std::chrono::time_point start, end; start = std::chrono::system_clock::now(); - +#if USE_GLOG_AND_GFLAGS for (int i = 0; i < FLAGS_size_carrier_test; i++) +#else + for (int i = 0; i < absl::GetFlag(FLAGS_size_carrier_test); i++) +#endif { output[i] = std::complex(cos(phase), sin(phase)); phase += phase_step; @@ -46,18 +56,32 @@ TEST(ComplexCarrierTest, StandardComplexImplementation) end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; + +#if USE_GLOG_AND_GFLAGS std::cout << "A " << FLAGS_size_carrier_test +#else + std::cout << "A " << absl::GetFlag(FLAGS_size_carrier_test) +#endif << "-length complex carrier in standard C++ (dynamic allocation) generated in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; std::complex expected(1, 0); +#if USE_GLOG_AND_GFLAGS std::vector> mag(FLAGS_size_carrier_test); for (int i = 0; i < FLAGS_size_carrier_test; i++) +#else + std::vector> mag(absl::GetFlag(FLAGS_size_carrier_test)); + for (int i = 0; i < absl::GetFlag(FLAGS_size_carrier_test); i++) +#endif { mag[i] = output[i] * std::conj(output[i]); } delete[] output; +#if USE_GLOG_AND_GFLAGS for (int i = 0; i < FLAGS_size_carrier_test; i++) +#else + for (int i = 0; i < absl::GetFlag(FLAGS_size_carrier_test); i++) +#endif { ASSERT_FLOAT_EQ(std::norm(expected), std::norm(mag[i])); } @@ -69,7 +93,12 @@ TEST(ComplexCarrierTest, StandardComplexImplementation) TEST(ComplexCarrierTest, C11ComplexImplementation) { // declaration: load data onto the program data segment + +#if USE_GLOG_AND_GFLAGS std::vector> output(FLAGS_size_carrier_test); +#else + std::vector> output(absl::GetFlag(FLAGS_size_carrier_test)); +#endif const double _f = 2000.0; const double _fs = 2000000.0; const auto phase_step = (TWO_PI * _f) / _fs; @@ -78,20 +107,34 @@ TEST(ComplexCarrierTest, C11ComplexImplementation) std::chrono::time_point start, end; start = std::chrono::system_clock::now(); +#if USE_GLOG_AND_GFLAGS for (int i = 0; i < FLAGS_size_carrier_test; i++) +#else + for (int i = 0; i < absl::GetFlag(FLAGS_size_carrier_test); i++) +#endif { output[i] = std::complex(cos(phase), sin(phase)); phase += phase_step; } end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; + +#if USE_GLOG_AND_GFLAGS std::cout << "A " << FLAGS_size_carrier_test +#else + std::cout << "A " << absl::GetFlag(FLAGS_size_carrier_test) +#endif << "-length complex carrier in standard C++ (declaration) generated in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); std::complex expected(1, 0); +#if USE_GLOG_AND_GFLAGS std::vector> mag(FLAGS_size_carrier_test); for (int i = 0; i < FLAGS_size_carrier_test; i++) +#else + std::vector> mag(absl::GetFlag(FLAGS_size_carrier_test)); + for (int i = 0; i < absl::GetFlag(FLAGS_size_carrier_test); i++) +#endif { mag[i] = output[i] * std::conj(output[i]); ASSERT_FLOAT_EQ(std::norm(expected), std::norm(mag[i])); @@ -101,8 +144,11 @@ TEST(ComplexCarrierTest, C11ComplexImplementation) TEST(ComplexCarrierTest, OwnComplexImplementation) { +#if USE_GLOG_AND_GFLAGS std::vector> output(FLAGS_size_carrier_test); - +#else + std::vector> output(absl::GetFlag(FLAGS_size_carrier_test)); +#endif double _f = 2000.0; double _fs = 2000000.0; std::chrono::time_point start, end; @@ -112,18 +158,31 @@ TEST(ComplexCarrierTest, OwnComplexImplementation) end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS std::cout << "A " << FLAGS_size_carrier_test +#else + std::cout << "A " << absl::GetFlag(FLAGS_size_carrier_test) +#endif << "-length complex carrier using fixed point generated in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; std::complex expected(1, 0); + +#if USE_GLOG_AND_GFLAGS std::vector> mag(FLAGS_size_carrier_test); for (int i = 0; i < FLAGS_size_carrier_test; i++) +#else + std::vector> mag(absl::GetFlag(FLAGS_size_carrier_test)); + for (int i = 0; i < absl::GetFlag(FLAGS_size_carrier_test); i++) +#endif { mag[i] = output[i] * std::conj(output[i]); } - +#if USE_GLOG_AND_GFLAGS for (int i = 0; i < FLAGS_size_carrier_test; i++) +#else + for (int i = 0; i < absl::GetFlag(FLAGS_size_carrier_test); i++) +#endif { ASSERT_NEAR(std::norm(expected), std::norm(mag[i]), 0.0001); } diff --git a/src/tests/unit-tests/arithmetic/conjugate_test.cc b/src/tests/unit-tests/arithmetic/conjugate_test.cc index 1fadedfed2..2a72656f13 100644 --- a/src/tests/unit-tests/arithmetic/conjugate_test.cc +++ b/src/tests/unit-tests/arithmetic/conjugate_test.cc @@ -23,26 +23,42 @@ #include #include +#if USE_GLOG_AND_GFLAGS DEFINE_int32(size_conjugate_test, 100000, "Size of the arrays used for conjugate testing"); +#else +ABSL_FLAG(int32_t, size_conjugate_test, 100000, "Size of the arrays used for conjugate testing"); +#endif TEST(ConjugateTest, StandardCComplexImplementation) { +#if USE_GLOG_AND_GFLAGS auto* input = new std::complex[FLAGS_size_conjugate_test]; auto* output = new std::complex[FLAGS_size_conjugate_test]; std::fill_n(input, FLAGS_size_conjugate_test, std::complex(0.0, 0.0)); - +#else + auto* input = new std::complex[absl::GetFlag(FLAGS_size_conjugate_test)]; + auto* output = new std::complex[absl::GetFlag(FLAGS_size_conjugate_test)]; + std::fill_n(input, absl::GetFlag(FLAGS_size_conjugate_test), std::complex(0.0, 0.0)); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); - +#if USE_GLOG_AND_GFLAGS for (int i = 0; i < FLAGS_size_conjugate_test; i++) +#else + for (int i = 0; i < absl::GetFlag(FLAGS_size_conjugate_test); i++) +#endif { output[i] = std::conj(input[i]); } end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS std::cout << "Conjugate of a " << FLAGS_size_conjugate_test +#else + std::cout << "Conjugate of a " << absl::GetFlag(FLAGS_size_conjugate_test) +#endif << "-length complex float vector in standard C finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; @@ -54,8 +70,13 @@ TEST(ConjugateTest, StandardCComplexImplementation) TEST(ConjugateTest, C11ComplexImplementation) { +#if USE_GLOG_AND_GFLAGS const std::vector> input(FLAGS_size_conjugate_test); std::vector> output(FLAGS_size_conjugate_test); +#else + const std::vector> input(absl::GetFlag(FLAGS_size_conjugate_test)); + std::vector> output(absl::GetFlag(FLAGS_size_conjugate_test)); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); int pos = 0; @@ -65,7 +86,11 @@ TEST(ConjugateTest, C11ComplexImplementation) } end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS std::cout << "Conjugate of a " << FLAGS_size_conjugate_test +#else + std::cout << "Conjugate of a " << absl::GetFlag(FLAGS_size_conjugate_test) +#endif << " complex vector (C++11-style) finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); @@ -82,9 +107,13 @@ TEST(ConjugateTest, C11ComplexImplementation) TEST(ConjugateTest, ArmadilloComplexImplementation) { +#if USE_GLOG_AND_GFLAGS arma::cx_fvec input(FLAGS_size_conjugate_test, arma::fill::zeros); arma::cx_fvec output(FLAGS_size_conjugate_test); - +#else + arma::cx_fvec input(absl::GetFlag(FLAGS_size_conjugate_test), arma::fill::zeros); + arma::cx_fvec output(absl::GetFlag(FLAGS_size_conjugate_test)); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); @@ -92,7 +121,12 @@ TEST(ConjugateTest, ArmadilloComplexImplementation) end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; + +#if USE_GLOG_AND_GFLAGS std::cout << "Conjugate of a " << FLAGS_size_conjugate_test +#else + std::cout << "Conjugate of a " << absl::GetFlag(FLAGS_size_conjugate_test) +#endif << "-length complex float Armadillo vector finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); @@ -101,18 +135,29 @@ TEST(ConjugateTest, ArmadilloComplexImplementation) TEST(ConjugateTest, VolkComplexImplementation) { +#if USE_GLOG_AND_GFLAGS auto* input = static_cast*>(volk_gnsssdr_malloc(FLAGS_size_conjugate_test * sizeof(std::complex), volk_gnsssdr_get_alignment())); auto* output = static_cast*>(volk_gnsssdr_malloc(FLAGS_size_conjugate_test * sizeof(std::complex), volk_gnsssdr_get_alignment())); std::fill_n(input, FLAGS_size_conjugate_test, std::complex(0.0, 0.0)); - +#else + auto* input = static_cast*>(volk_gnsssdr_malloc(absl::GetFlag(FLAGS_size_conjugate_test) * sizeof(std::complex), volk_gnsssdr_get_alignment())); + auto* output = static_cast*>(volk_gnsssdr_malloc(absl::GetFlag(FLAGS_size_conjugate_test) * sizeof(std::complex), volk_gnsssdr_get_alignment())); + std::fill_n(input, absl::GetFlag(FLAGS_size_conjugate_test), std::complex(0.0, 0.0)); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); - +#if USE_GLOG_AND_GFLAGS volk_32fc_conjugate_32fc(output, input, FLAGS_size_conjugate_test); - +#else + volk_32fc_conjugate_32fc(output, input, absl::GetFlag(FLAGS_size_conjugate_test)); +#endif end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS std::cout << "Conjugate of a " << FLAGS_size_conjugate_test +#else + std::cout << "Conjugate of a " << absl::GetFlag(FLAGS_size_conjugate_test) +#endif << "-length complex float vector using VOLK finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); @@ -123,17 +168,27 @@ TEST(ConjugateTest, VolkComplexImplementation) TEST(ConjugateTest, VolkComplexImplementationAlloc) { +#if USE_GLOG_AND_GFLAGS volk_gnsssdr::vector> input(FLAGS_size_conjugate_test, std::complex(0.0, 0.0)); volk_gnsssdr::vector> output(FLAGS_size_conjugate_test); - +#else + volk_gnsssdr::vector> input(absl::GetFlag(FLAGS_size_conjugate_test), std::complex(0.0, 0.0)); + volk_gnsssdr::vector> output(absl::GetFlag(FLAGS_size_conjugate_test)); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); - +#if USE_GLOG_AND_GFLAGS volk_32fc_conjugate_32fc(output.data(), input.data(), FLAGS_size_conjugate_test); - +#else + volk_32fc_conjugate_32fc(output.data(), input.data(), absl::GetFlag(FLAGS_size_conjugate_test)); +#endif end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS std::cout << "Conjugate of a " << FLAGS_size_conjugate_test +#else + std::cout << "Conjugate of a " << absl::GetFlag(FLAGS_size_conjugate_test) +#endif << "-length complex float vector using VOLK ALLOC finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); diff --git a/src/tests/unit-tests/arithmetic/fft_length_test.cc b/src/tests/unit-tests/arithmetic/fft_length_test.cc index 8ad39a1417..fb937de896 100644 --- a/src/tests/unit-tests/arithmetic/fft_length_test.cc +++ b/src/tests/unit-tests/arithmetic/fft_length_test.cc @@ -24,9 +24,13 @@ #include #include - +#if USE_GLOG_AND_GFLAGS DEFINE_int32(fft_iterations_test, 1000, "Number of averaged iterations in FFT length timing test"); DEFINE_bool(plot_fft_length_test, false, "Plots results of FFTLengthTest with gnuplot"); +#else +ABSL_FLAG(int32_t, fft_iterations_test, 1000, "Number of averaged iterations in FFT length timing test"); +ABSL_FLAG(bool, plot_fft_length_test, false, "Plots results of FFTLengthTest with gnuplot"); +#endif // Note from FFTW documentation: the standard FFTW distribution works most efficiently for arrays whose // size can be factored into small primes (2, 3, 5, and 7), and otherwise it uses a slower general-purpose routine. @@ -63,13 +67,21 @@ TEST(FFTLengthTest, MeasureExecutionTime) std::generate_n(d_fft->get_inbuf(), d_fft_size, gen); start = std::chrono::system_clock::now(); +#if USE_GLOG_AND_GFLAGS for (int k = 0; k < FLAGS_fft_iterations_test; k++) +#else + for (int k = 0; k < absl::GetFlag(FLAGS_fft_iterations_test); k++) +#endif { d_fft->execute(); } end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS double exec_time = elapsed_seconds.count() / static_cast(FLAGS_fft_iterations_test); +#else + double exec_time = elapsed_seconds.count() / static_cast(absl::GetFlag(FLAGS_fft_iterations_test)); +#endif execution_times.push_back(exec_time * 1e3); std::cout << "FFT execution time for length=" << d_fft_size << " : " << exec_time << " [s]\n"; @@ -79,10 +91,15 @@ TEST(FFTLengthTest, MeasureExecutionTime) execution_times_powers_of_two.push_back(exec_time / 1e-3); } }); - +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_fft_length_test == true) { const std::string gnuplot_executable(FLAGS_gnuplot_executable); +#else + if (absl::GetFlag(FLAGS_plot_fft_length_test) == true) + { + const std::string gnuplot_executable(absl::GetFlag(FLAGS_gnuplot_executable)); +#endif if (gnuplot_executable.empty()) { std::cout << "WARNING: Although the flag plot_fft_length_test has been set to TRUE,\n"; @@ -99,7 +116,11 @@ TEST(FFTLengthTest, MeasureExecutionTime) Gnuplot::set_GNUPlotPath(gnuplot_path); Gnuplot g1("linespoints"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g1.showonscreen(); // window output } @@ -111,13 +132,21 @@ TEST(FFTLengthTest, MeasureExecutionTime) g1.set_grid(); g1.set_xlabel("FFT length"); g1.set_ylabel("Execution time [ms]"); +#if USE_GLOG_AND_GFLAGS g1.plot_xy(fft_sizes_v, execution_times, "FFT execution time (averaged over " + std::to_string(FLAGS_fft_iterations_test) + " iterations)"); +#else + g1.plot_xy(fft_sizes_v, execution_times, "FFT execution time (averaged over " + std::to_string(absl::GetFlag(FLAGS_fft_iterations_test)) + " iterations)"); +#endif g1.set_style("points").plot_xy(powers_of_two, execution_times_powers_of_two, "Power of 2"); g1.savetops("FFT_execution_times_extended"); g1.savetopdf("FFT_execution_times_extended", 18); Gnuplot g2("linespoints"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g2.showonscreen(); // window output } @@ -130,11 +159,20 @@ TEST(FFTLengthTest, MeasureExecutionTime) g2.set_xlabel("FFT length"); g2.set_ylabel("Execution time [ms]"); g2.set_xrange(0, 16384); +#if USE_GLOG_AND_GFLAGS g2.plot_xy(fft_sizes_v, execution_times, "FFT execution time (averaged over " + std::to_string(FLAGS_fft_iterations_test) + " iterations)"); +#else + g2.plot_xy(fft_sizes_v, execution_times, "FFT execution time (averaged over " + std::to_string(absl::GetFlag(FLAGS_fft_iterations_test)) + " iterations)"); +#endif + g2.set_style("points").plot_xy(powers_of_two, execution_times_powers_of_two, "Power of 2"); g2.savetops("FFT_execution_times"); g2.savetopdf("FFT_execution_times", 18); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g2.showonscreen(); // window output } diff --git a/src/tests/unit-tests/arithmetic/fft_speed_test.cc b/src/tests/unit-tests/arithmetic/fft_speed_test.cc index 2fa477b811..6c3d286901 100644 --- a/src/tests/unit-tests/arithmetic/fft_speed_test.cc +++ b/src/tests/unit-tests/arithmetic/fft_speed_test.cc @@ -22,7 +22,11 @@ #include #include +#if USE_GLOG_AND_GFLAGS DEFINE_int32(fft_speed_iterations_test, 100, "Number of averaged iterations in FFT length timing test"); +#else +ABSL_FLAG(int32_t, fft_speed_iterations_test, 100, "Number of averaged iterations in FFT length timing test"); +#endif TEST(FFTSpeedTest, ArmadilloVSGNURadioExecutionTime) { @@ -43,23 +47,39 @@ TEST(FFTSpeedTest, ArmadilloVSGNURadioExecutionTime) std::copy_n(d_arma_fft.memptr(), d_fft_size, d_gr_fft->get_inbuf()); start = std::chrono::system_clock::now(); +#if USE_GLOG_AND_GFLAGS for (int k = 0; k < FLAGS_fft_speed_iterations_test; k++) +#else + for (int k = 0; k < absl::GetFlag(FLAGS_fft_speed_iterations_test); k++) +#endif { d_gr_fft->execute(); } end = std::chrono::system_clock::now(); elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS d_execution_time = elapsed_seconds.count() / static_cast(FLAGS_fft_speed_iterations_test); +#else + d_execution_time = elapsed_seconds.count() / static_cast(absl::GetFlag(FLAGS_fft_speed_iterations_test)); +#endif std::cout << "GNU Radio FFT execution time for length = " << d_fft_size << " : " << d_execution_time * 1e6 << " [us]\n"; start = std::chrono::system_clock::now(); +#if USE_GLOG_AND_GFLAGS for (int k = 0; k < FLAGS_fft_speed_iterations_test; k++) +#else + for (int k = 0; k < absl::GetFlag(FLAGS_fft_speed_iterations_test); k++) +#endif { d_arma_fft_result = arma::fft(d_arma_fft); } end = std::chrono::system_clock::now(); elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS d_execution_time = elapsed_seconds.count() / static_cast(FLAGS_fft_speed_iterations_test); +#else + d_execution_time = elapsed_seconds.count() / static_cast(absl::GetFlag(FLAGS_fft_speed_iterations_test)); +#endif std::cout << "Armadillo FFT execution time for length = " << d_fft_size << " : " << d_execution_time * 1e6 << " [us]\n"; }); } diff --git a/src/tests/unit-tests/arithmetic/magnitude_squared_test.cc b/src/tests/unit-tests/arithmetic/magnitude_squared_test.cc index 3611733f3a..3287b51e21 100644 --- a/src/tests/unit-tests/arithmetic/magnitude_squared_test.cc +++ b/src/tests/unit-tests/arithmetic/magnitude_squared_test.cc @@ -24,29 +24,49 @@ #include #include +#if USE_GLOG_AND_GFLAGS DEFINE_int32(size_magnitude_test, 100000, "Size of the arrays used for magnitude testing"); - +#else +ABSL_FLAG(int32_t, size_magnitude_test, 100000, "Size of the arrays used for magnitude testing"); +#endif TEST(MagnitudeSquaredTest, StandardCComplexImplementation) { +#if USE_GLOG_AND_GFLAGS auto* input = new std::complex[FLAGS_size_magnitude_test]; auto* output = new float[FLAGS_size_magnitude_test]; +#else + auto* input = new std::complex[absl::GetFlag(FLAGS_size_magnitude_test)]; + auto* output = new float[absl::GetFlag(FLAGS_size_magnitude_test)]; +#endif unsigned int number = 0; +#if USE_GLOG_AND_GFLAGS for (number = 0; number < static_cast(FLAGS_size_magnitude_test); number++) +#else + for (number = 0; number < static_cast(absl::GetFlag(FLAGS_size_magnitude_test)); number++) +#endif { input[number] = std::complex(0.0, 0.0); } std::chrono::time_point start, end; start = std::chrono::system_clock::now(); - +#if USE_GLOG_AND_GFLAGS for (number = 0; number < static_cast(FLAGS_size_magnitude_test); number++) +#else + for (number = 0; number < static_cast(absl::GetFlag(FLAGS_size_magnitude_test)); number++) +#endif { output[number] = (input[number].real() * input[number].real()) + (input[number].imag() * input[number].imag()); } end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; + +#if USE_GLOG_AND_GFLAGS std::cout << "The squared magnitude of a " << FLAGS_size_magnitude_test +#else + std::cout << "The squared magnitude of a " << absl::GetFlag(FLAGS_size_magnitude_test) +#endif << "-length complex vector in standard C computed in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; delete[] input; @@ -57,8 +77,13 @@ TEST(MagnitudeSquaredTest, StandardCComplexImplementation) TEST(MagnitudeSquaredTest, C11ComplexImplementation) { +#if USE_GLOG_AND_GFLAGS const std::vector> input(FLAGS_size_magnitude_test); std::vector output(FLAGS_size_magnitude_test); +#else + const std::vector> input(absl::GetFlag(FLAGS_size_magnitude_test)); + std::vector output(absl::GetFlag(FLAGS_size_magnitude_test)); +#endif int pos = 0; std::chrono::time_point start, end; start = std::chrono::system_clock::now(); @@ -70,7 +95,12 @@ TEST(MagnitudeSquaredTest, C11ComplexImplementation) end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; + +#if USE_GLOG_AND_GFLAGS std::cout << "The squared magnitude of a " << FLAGS_size_magnitude_test +#else + std::cout << "The squared magnitude of a " << absl::GetFlag(FLAGS_size_magnitude_test) +#endif << " complex vector (C++11-style) finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); @@ -87,8 +117,13 @@ TEST(MagnitudeSquaredTest, C11ComplexImplementation) TEST(MagnitudeSquaredTest, ArmadilloComplexImplementation) { +#if USE_GLOG_AND_GFLAGS arma::cx_fvec input(FLAGS_size_magnitude_test, arma::fill::zeros); arma::fvec output(FLAGS_size_magnitude_test); +#else + arma::cx_fvec input(absl::GetFlag(FLAGS_size_magnitude_test), arma::fill::zeros); + arma::fvec output(absl::GetFlag(FLAGS_size_magnitude_test)); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); @@ -96,7 +131,12 @@ TEST(MagnitudeSquaredTest, ArmadilloComplexImplementation) end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; + +#if USE_GLOG_AND_GFLAGS std::cout << "The squared magnitude of a " << FLAGS_size_magnitude_test +#else + std::cout << "The squared magnitude of a " << absl::GetFlag(FLAGS_size_magnitude_test) +#endif << "-length vector using Armadillo computed in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); @@ -105,17 +145,31 @@ TEST(MagnitudeSquaredTest, ArmadilloComplexImplementation) TEST(MagnitudeSquaredTest, VolkComplexImplementation) { +#if USE_GLOG_AND_GFLAGS auto* input = static_cast*>(volk_gnsssdr_malloc(FLAGS_size_magnitude_test * sizeof(std::complex), volk_gnsssdr_get_alignment())); std::fill_n(input, FLAGS_size_magnitude_test, std::complex(0.0, 0.0)); auto* output = static_cast(volk_gnsssdr_malloc(FLAGS_size_magnitude_test * sizeof(float), volk_gnsssdr_get_alignment())); +#else + auto* input = static_cast*>(volk_gnsssdr_malloc(absl::GetFlag(FLAGS_size_magnitude_test) * sizeof(std::complex), volk_gnsssdr_get_alignment())); + std::fill_n(input, absl::GetFlag(FLAGS_size_magnitude_test), std::complex(0.0, 0.0)); + auto* output = static_cast(volk_gnsssdr_malloc(absl::GetFlag(FLAGS_size_magnitude_test) * sizeof(float), volk_gnsssdr_get_alignment())); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); +#if USE_GLOG_AND_GFLAGS volk_32fc_magnitude_squared_32f(output, input, static_cast(FLAGS_size_magnitude_test)); - +#else + volk_32fc_magnitude_squared_32f(output, input, static_cast(absl::GetFlag(FLAGS_size_magnitude_test))); +#endif end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; + +#if USE_GLOG_AND_GFLAGS std::cout << "The squared magnitude of a " << FLAGS_size_magnitude_test +#else + std::cout << "The squared magnitude of a " << absl::GetFlag(FLAGS_size_magnitude_test) +#endif << "-length vector using VOLK computed in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; volk_gnsssdr_free(input); @@ -126,18 +180,30 @@ TEST(MagnitudeSquaredTest, VolkComplexImplementation) TEST(MagnitudeSquaredTest, VolkComplexImplementationAlloc) { +#if USE_GLOG_AND_GFLAGS volk_gnsssdr::vector> input(FLAGS_size_magnitude_test); // or: input(FLAGS_size_magnitude_test, std::complex(0.0, 0.0)); std::fill_n(input.begin(), FLAGS_size_magnitude_test, std::complex(0.0, 0.0)); volk_gnsssdr::vector output(FLAGS_size_magnitude_test); +#else + volk_gnsssdr::vector> input(absl::GetFlag(FLAGS_size_magnitude_test)); + std::fill_n(input.begin(), absl::GetFlag(FLAGS_size_magnitude_test), std::complex(0.0, 0.0)); + volk_gnsssdr::vector output(absl::GetFlag(FLAGS_size_magnitude_test)); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); - +#if USE_GLOG_AND_GFLAGS volk_32fc_magnitude_squared_32f(output.data(), input.data(), static_cast(FLAGS_size_magnitude_test)); - +#else + volk_32fc_magnitude_squared_32f(output.data(), input.data(), static_cast(absl::GetFlag(FLAGS_size_magnitude_test))); +#endif end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS std::cout << "The squared magnitude of a " << FLAGS_size_magnitude_test +#else + std::cout << "The squared magnitude of a " << absl::GetFlag(FLAGS_size_magnitude_test) +#endif << "-length vector using VOLK ALLOC computed in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); diff --git a/src/tests/unit-tests/arithmetic/multiply_test.cc b/src/tests/unit-tests/arithmetic/multiply_test.cc index bb47dac58f..cc0f7acd63 100644 --- a/src/tests/unit-tests/arithmetic/multiply_test.cc +++ b/src/tests/unit-tests/arithmetic/multiply_test.cc @@ -24,31 +24,51 @@ #include #include +#if USE_GLOG_AND_GFLAGS DEFINE_int32(size_multiply_test, 100000, "Size of the arrays used for multiply testing"); - +#else +ABSL_FLAG(int32_t, size_multiply_test, 100000, "Size of the arrays used for multiply testing"); +#endif TEST(MultiplyTest, StandardCDoubleImplementation) { +#if USE_GLOG_AND_GFLAGS auto* input = new double[FLAGS_size_multiply_test]; auto* output = new double[FLAGS_size_multiply_test]; std::fill_n(input, FLAGS_size_multiply_test, 0.0); +#else + auto* input = new double[absl::GetFlag(FLAGS_size_multiply_test)]; + auto* output = new double[absl::GetFlag(FLAGS_size_multiply_test)]; + std::fill_n(input, absl::GetFlag(FLAGS_size_multiply_test), 0.0); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); - +#if USE_GLOG_AND_GFLAGS for (int i = 0; i < FLAGS_size_multiply_test; i++) +#else + for (int i = 0; i < absl::GetFlag(FLAGS_size_multiply_test); i++) +#endif { output[i] = input[i] * input[i]; } end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test +#else + std::cout << "Element-wise multiplication of " << absl::GetFlag(FLAGS_size_multiply_test) +#endif << " doubles in standard C finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; double acc = 0.0; double expected = 0.0; +#if USE_GLOG_AND_GFLAGS for (int i = 0; i < FLAGS_size_multiply_test; i++) +#else + for (int i = 0; i < absl::GetFlag(FLAGS_size_multiply_test); i++) +#endif { acc += output[i]; } @@ -61,9 +81,13 @@ TEST(MultiplyTest, StandardCDoubleImplementation) TEST(MultiplyTest, ArmadilloImplementation) { +#if USE_GLOG_AND_GFLAGS arma::vec input(FLAGS_size_multiply_test, arma::fill::zeros); arma::vec output(FLAGS_size_multiply_test); - +#else + arma::vec input(absl::GetFlag(FLAGS_size_multiply_test), arma::fill::zeros); + arma::vec output(absl::GetFlag(FLAGS_size_multiply_test)); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); @@ -71,7 +95,11 @@ TEST(MultiplyTest, ArmadilloImplementation) end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test +#else + std::cout << "Element-wise multiplication of " << absl::GetFlag(FLAGS_size_multiply_test) +#endif << "-length double Armadillo vectors finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); @@ -81,26 +109,44 @@ TEST(MultiplyTest, ArmadilloImplementation) TEST(MultiplyTest, StandardCComplexImplementation) { +#if USE_GLOG_AND_GFLAGS auto* input = new std::complex[FLAGS_size_multiply_test]; auto* output = new std::complex[FLAGS_size_multiply_test]; std::fill_n(input, FLAGS_size_multiply_test, std::complex(0.0, 0.0)); +#else + auto* input = new std::complex[absl::GetFlag(FLAGS_size_multiply_test)]; + auto* output = new std::complex[absl::GetFlag(FLAGS_size_multiply_test)]; + std::fill_n(input, absl::GetFlag(FLAGS_size_multiply_test), std::complex(0.0, 0.0)); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); +#if USE_GLOG_AND_GFLAGS for (int i = 0; i < FLAGS_size_multiply_test; i++) +#else + for (int i = 0; i < absl::GetFlag(FLAGS_size_multiply_test); i++) +#endif { output[i] = input[i] * input[i]; } end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test +#else + std::cout << "Element-wise multiplication of " << absl::GetFlag(FLAGS_size_multiply_test) +#endif << " complex in standard C finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; std::complex expected(0.0, 0.0); std::complex result(0.0, 0.0); +#if USE_GLOG_AND_GFLAGS for (int i = 0; i < FLAGS_size_multiply_test; i++) +#else + for (int i = 0; i < absl::GetFlag(FLAGS_size_multiply_test); i++) +#endif { result += output[i]; } @@ -113,8 +159,13 @@ TEST(MultiplyTest, StandardCComplexImplementation) TEST(MultiplyTest, C11ComplexImplementation) { +#if USE_GLOG_AND_GFLAGS const std::vector> input(FLAGS_size_multiply_test); std::vector> output(FLAGS_size_multiply_test); +#else + const std::vector> input(absl::GetFlag(FLAGS_size_multiply_test)); + std::vector> output(absl::GetFlag(FLAGS_size_multiply_test)); +#endif int pos = 0; std::chrono::time_point start, end; start = std::chrono::system_clock::now(); @@ -127,7 +178,11 @@ TEST(MultiplyTest, C11ComplexImplementation) end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test +#else + std::cout << "Element-wise multiplication of " << absl::GetFlag(FLAGS_size_multiply_test) +#endif << " complex vector (C++11-style) finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); @@ -140,8 +195,13 @@ TEST(MultiplyTest, C11ComplexImplementation) TEST(MultiplyTest, ArmadilloComplexImplementation) { +#if USE_GLOG_AND_GFLAGS arma::cx_fvec input(FLAGS_size_multiply_test, arma::fill::zeros); arma::cx_fvec output(FLAGS_size_multiply_test); +#else + arma::cx_fvec input(absl::GetFlag(FLAGS_size_multiply_test), arma::fill::zeros); + arma::cx_fvec output(absl::GetFlag(FLAGS_size_multiply_test)); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); @@ -150,7 +210,12 @@ TEST(MultiplyTest, ArmadilloComplexImplementation) end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; + +#if USE_GLOG_AND_GFLAGS std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test +#else + std::cout << "Element-wise multiplication of " << absl::GetFlag(FLAGS_size_multiply_test) +#endif << "-length complex float Armadillo vectors finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); @@ -160,30 +225,55 @@ TEST(MultiplyTest, ArmadilloComplexImplementation) TEST(MultiplyTest, VolkComplexImplementation) { +#if USE_GLOG_AND_GFLAGS auto* input = static_cast*>(volk_gnsssdr_malloc(FLAGS_size_multiply_test * sizeof(std::complex), volk_gnsssdr_get_alignment())); auto* output = static_cast*>(volk_gnsssdr_malloc(FLAGS_size_multiply_test * sizeof(std::complex), volk_gnsssdr_get_alignment())); std::fill_n(input, FLAGS_size_multiply_test, std::complex(0.0, 0.0)); +#else + auto* input = static_cast*>(volk_gnsssdr_malloc(absl::GetFlag(FLAGS_size_multiply_test) * sizeof(std::complex), volk_gnsssdr_get_alignment())); + auto* output = static_cast*>(volk_gnsssdr_malloc(absl::GetFlag(FLAGS_size_multiply_test) * sizeof(std::complex), volk_gnsssdr_get_alignment())); + std::fill_n(input, absl::GetFlag(FLAGS_size_multiply_test), std::complex(0.0, 0.0)); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); +#if USE_GLOG_AND_GFLAGS volk_32fc_x2_multiply_32fc(output, input, input, FLAGS_size_multiply_test); +#else + volk_32fc_x2_multiply_32fc(output, input, input, absl::GetFlag(FLAGS_size_multiply_test)); +#endif end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test +#else + std::cout << "Element-wise multiplication of " << absl::GetFlag(FLAGS_size_multiply_test) +#endif << "-length complex float vector using VOLK finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); +#if USE_GLOG_AND_GFLAGS auto* mag = static_cast(volk_gnsssdr_malloc(FLAGS_size_multiply_test * sizeof(float), volk_gnsssdr_get_alignment())); volk_32fc_magnitude_32f(mag, output, FLAGS_size_multiply_test); +#else + auto* mag = static_cast(volk_gnsssdr_malloc(absl::GetFlag(FLAGS_size_multiply_test) * sizeof(float), volk_gnsssdr_get_alignment())); + volk_32fc_magnitude_32f(mag, output, absl::GetFlag(FLAGS_size_multiply_test)); +#endif auto* result = new float(0.0); + +#if USE_GLOG_AND_GFLAGS volk_32f_accumulator_s32f(result, mag, FLAGS_size_multiply_test); +#else + volk_32f_accumulator_s32f(result, mag, absl::GetFlag(FLAGS_size_multiply_test)); +#endif + // Comparing floating-point numbers is tricky. // Due to round-off errors, it is very unlikely that two floating-points will match exactly. - // See https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#floating-point-comparison + // See https://google.github.io/googletest/reference/assertions.html#floating-point float expected = 0.0; ASSERT_FLOAT_EQ(expected, result[0]); volk_gnsssdr_free(input); @@ -194,28 +284,52 @@ TEST(MultiplyTest, VolkComplexImplementation) TEST(MultiplyTest, VolkComplexImplementationAlloc) { +#if USE_GLOG_AND_GFLAGS volk_gnsssdr::vector> input(FLAGS_size_multiply_test, std::complex(0.0, 0.0)); volk_gnsssdr::vector> output(FLAGS_size_multiply_test); - +#else + volk_gnsssdr::vector> input(absl::GetFlag(FLAGS_size_multiply_test), std::complex(0.0, 0.0)); + volk_gnsssdr::vector> output(absl::GetFlag(FLAGS_size_multiply_test)); +#endif std::chrono::time_point start, end; start = std::chrono::system_clock::now(); +#if USE_GLOG_AND_GFLAGS volk_32fc_x2_multiply_32fc(output.data(), input.data(), input.data(), FLAGS_size_multiply_test); +#else + volk_32fc_x2_multiply_32fc(output.data(), input.data(), input.data(), absl::GetFlag(FLAGS_size_multiply_test)); +#endif end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; + +#if USE_GLOG_AND_GFLAGS std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test +#else + std::cout << "Element-wise multiplication of " << absl::GetFlag(FLAGS_size_multiply_test) +#endif << "-length complex float vector using VOLK ALLOC finished in " << elapsed_seconds.count() * 1e6 << " microseconds\n"; ASSERT_LE(0, elapsed_seconds.count() * 1e6); + +#if USE_GLOG_AND_GFLAGS volk_gnsssdr::vector mag(FLAGS_size_multiply_test); volk_32fc_magnitude_32f(mag.data(), output.data(), FLAGS_size_multiply_test); +#else + volk_gnsssdr::vector mag(absl::GetFlag(FLAGS_size_multiply_test)); + volk_32fc_magnitude_32f(mag.data(), output.data(), absl::GetFlag(FLAGS_size_multiply_test)); +#endif auto* result = new float(0.0); + +#if USE_GLOG_AND_GFLAGS volk_32f_accumulator_s32f(result, mag.data(), FLAGS_size_multiply_test); +#else + volk_32f_accumulator_s32f(result, mag.data(), absl::GetFlag(FLAGS_size_multiply_test)); +#endif // Comparing floating-point numbers is tricky. // Due to round-off errors, it is very unlikely that two floating-points will match exactly. - // See https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#floating-point-comparison + // See https://google.github.io/googletest/reference/assertions.html#floating-point float expected = 0.0; ASSERT_FLOAT_EQ(expected, result[0]); } diff --git a/src/tests/unit-tests/control-plane/control_thread_test.cc b/src/tests/unit-tests/control-plane/control_thread_test.cc index c437561288..9aa6d36209 100644 --- a/src/tests/unit-tests/control-plane/control_thread_test.cc +++ b/src/tests/unit-tests/control-plane/control_thread_test.cc @@ -26,8 +26,6 @@ #include #include #include -#include -#include #include #include #include @@ -39,6 +37,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#include +#else +#include +#endif class ControlThreadTest : public ::testing::Test { diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/acq_performance_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/acq_performance_test.cc index 327ffade0b..7dddc77f63 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/acq_performance_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/acq_performance_test.cc @@ -41,6 +41,8 @@ #include #include #include +#include +#include #include #include @@ -55,6 +57,7 @@ namespace wht = boost; namespace wht = std; #endif +#if USE_GLOG_AND_GFLAGS DEFINE_string(config_file_ptest, std::string(""), "File containing alternative configuration parameters for the acquisition performance test."); DEFINE_string(acq_test_input_file, std::string(""), "File containing raw signal data, must be in int8_t format. The signal generator will not be used."); DEFINE_string(acq_test_implementation, std::string("GPS_L1_CA_PCPS_Acquisition"), "Acquisition block implementation under test. Alternatives: GPS_L1_CA_PCPS_Acquisition, GPS_L1_CA_PCPS_Acquisition_Fine_Doppler, Galileo_E1_PCPS_Ambiguous_Acquisition, GLONASS_L1_CA_PCPS_Acquisition, GLONASS_L2_CA_PCPS_Acquisition, GPS_L2_M_PCPS_Acquisition, Galileo_E5a_Pcps_Acquisition, GPS_L5i_PCPS_Acquisition"); @@ -86,6 +89,39 @@ DEFINE_int32(acq_test_fake_PRN, 33, "PRN number of a non-present satellite"); DEFINE_int32(acq_test_iterations, 1, "Number of iterations (same signal, different noise realization)"); DEFINE_bool(plot_acq_test, false, "Plots results with gnuplot, if available"); DEFINE_int32(acq_test_skiphead, 0, "Number of samples to skip in the input file"); +#else +ABSL_FLAG(std::string, config_file_ptest, std::string(""), "File containing alternative configuration parameters for the acquisition performance test."); +ABSL_FLAG(std::string, acq_test_input_file, std::string(""), "File containing raw signal data, must be in int8_t format. The signal generator will not be used."); +ABSL_FLAG(std::string, acq_test_implementation, std::string("GPS_L1_CA_PCPS_Acquisition"), "Acquisition block implementation under test. Alternatives: GPS_L1_CA_PCPS_Acquisition, GPS_L1_CA_PCPS_Acquisition_Fine_Doppler, Galileo_E1_PCPS_Ambiguous_Acquisition, GLONASS_L1_CA_PCPS_Acquisition, GLONASS_L2_CA_PCPS_Acquisition, GPS_L2_M_PCPS_Acquisition, Galileo_E5a_Pcps_Acquisition, GPS_L5i_PCPS_Acquisition"); + +ABSL_FLAG(int32_t, acq_test_doppler_max, 5000, "Maximum Doppler, in Hz"); +ABSL_FLAG(int32_t, acq_test_doppler_step, 125, "Doppler step, in Hz."); +ABSL_FLAG(int32_t, acq_test_coherent_time_ms, 1, "Acquisition coherent time, in ms"); +ABSL_FLAG(int32_t, acq_test_max_dwells, 1, "Number of non-coherent integrations."); +ABSL_FLAG(bool, acq_test_bit_transition_flag, false, "Bit transition flag."); +ABSL_FLAG(bool, acq_test_make_two_steps, false, "Perform second step in a thinner grid."); +ABSL_FLAG(int32_t, acq_test_second_nbins, 4, "If --acq_test_make_two_steps is set to true, this parameter sets the number of bins done in the acquisition refinement stage."); +ABSL_FLAG(int32_t, acq_test_second_doppler_step, 10, "If --acq_test_make_two_steps is set to true, this parameter sets the Doppler step applied in the acquisition refinement stage, in Hz."); + +ABSL_FLAG(int32_t, acq_test_signal_duration_s, 2, "Generated signal duration, in s"); +ABSL_FLAG(int32_t, acq_test_num_meas, 0, "Number of measurements per run. 0 means the complete file."); +ABSL_FLAG(double, acq_test_cn0_init, 30.0, "Initial CN0, in dBHz."); +ABSL_FLAG(double, acq_test_cn0_final, 45.0, "Final CN0, in dBHz."); +ABSL_FLAG(double, acq_test_cn0_step, 3.0, "CN0 step, in dB."); + +ABSL_FLAG(double, acq_test_threshold_init, 3.0, "Initial acquisition threshold"); +ABSL_FLAG(double, acq_test_threshold_final, 4.0, "Final acquisition threshold"); +ABSL_FLAG(double, acq_test_threshold_step, 0.5, "Acquisition threshold step"); + +ABSL_FLAG(double, acq_test_pfa_init, 1e-5, "Set initial threshold via probability of false alarm. Disable with -1.0"); + +ABSL_FLAG(int32_t, acq_test_PRN, 1, "PRN number of a present satellite"); +ABSL_FLAG(int32_t, acq_test_fake_PRN, 33, "PRN number of a non-present satellite"); + +ABSL_FLAG(int32_t, acq_test_iterations, 1, "Number of iterations (same signal, different noise realization)"); +ABSL_FLAG(bool, plot_acq_test, false, "Plots results with gnuplot, if available"); +ABSL_FLAG(int32_t, acq_test_skiphead, 0, "Number of samples to skip in the input file"); +#endif // ######## GNURADIO BLOCK MESSAGE RECEVER ######### class AcqPerfTest_msg_rx; @@ -160,9 +196,15 @@ class AcquisitionPerformanceTest : public ::testing::Test config = std::make_shared(); item_size = sizeof(gr_complex); gnss_synchro = Gnss_Synchro(); +#if USE_GLOG_AND_GFLAGS doppler_max = static_cast(FLAGS_acq_test_doppler_max); doppler_step = static_cast(FLAGS_acq_test_doppler_step); +#else + doppler_max = static_cast(absl::GetFlag(FLAGS_acq_test_doppler_max)); + doppler_step = static_cast(absl::GetFlag(FLAGS_acq_test_doppler_step)); +#endif stop = false; +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_input_file.empty()) { cn0_vector.push_back(FLAGS_acq_test_cn0_init); @@ -173,6 +215,18 @@ class AcquisitionPerformanceTest : public ::testing::Test aux = aux + FLAGS_acq_test_cn0_step; } } +#else + if (absl::GetFlag(FLAGS_acq_test_input_file).empty()) + { + cn0_vector.push_back(absl::GetFlag(FLAGS_acq_test_cn0_init)); + double aux = absl::GetFlag(FLAGS_acq_test_cn0_init) + absl::GetFlag(FLAGS_acq_test_cn0_step); + while (aux <= absl::GetFlag(FLAGS_acq_test_cn0_final)) + { + cn0_vector.push_back(aux); + aux = aux + absl::GetFlag(FLAGS_acq_test_cn0_step); + } + } +#endif else { cn0_vector = {0.0}; @@ -182,14 +236,22 @@ class AcquisitionPerformanceTest : public ::testing::Test { signal_id = "1C"; system_id = 'G'; +#if USE_GLOG_AND_GFLAGS coherent_integration_time_ms = FLAGS_acq_test_coherent_time_ms; +#else + coherent_integration_time_ms = absl::GetFlag(FLAGS_acq_test_coherent_time_ms); +#endif min_integration_ms = 1; } else if (implementation == "GPS_L1_CA_PCPS_Acquisition_Fine_Doppler") { signal_id = "1C"; system_id = 'G'; +#if USE_GLOG_AND_GFLAGS coherent_integration_time_ms = FLAGS_acq_test_coherent_time_ms; +#else + coherent_integration_time_ms = absl::GetFlag(FLAGS_acq_test_coherent_time_ms); +#endif min_integration_ms = 1; } else if (implementation == "Galileo_E1_PCPS_Ambiguous_Acquisition") @@ -197,40 +259,65 @@ class AcquisitionPerformanceTest : public ::testing::Test signal_id = "1B"; system_id = 'E'; min_integration_ms = 4; +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_coherent_time_ms == 1) +#else + if (absl::GetFlag(FLAGS_acq_test_coherent_time_ms) == 1) +#endif { coherent_integration_time_ms = 4; } else { +#if USE_GLOG_AND_GFLAGS coherent_integration_time_ms = FLAGS_acq_test_coherent_time_ms; +#else + coherent_integration_time_ms = absl::GetFlag(FLAGS_acq_test_coherent_time_ms); +#endif } } else if (implementation == "GLONASS_L1_CA_PCPS_Acquisition") { signal_id = "1G"; system_id = 'R'; +#if USE_GLOG_AND_GFLAGS coherent_integration_time_ms = FLAGS_acq_test_coherent_time_ms; +#else + coherent_integration_time_ms = absl::GetFlag(FLAGS_acq_test_coherent_time_ms); +#endif min_integration_ms = 1; } else if (implementation == "GLONASS_L2_CA_PCPS_Acquisition") { signal_id = "2G"; system_id = 'R'; +#if USE_GLOG_AND_GFLAGS coherent_integration_time_ms = FLAGS_acq_test_coherent_time_ms; +#else + coherent_integration_time_ms = absl::GetFlag(FLAGS_acq_test_coherent_time_ms); +#endif min_integration_ms = 1; } else if (implementation == "GPS_L2_M_PCPS_Acquisition") { signal_id = "2S"; system_id = 'G'; +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_coherent_time_ms == 1) +#else + if (absl::GetFlag(FLAGS_acq_test_coherent_time_ms) == 1) +#endif + { coherent_integration_time_ms = 20; } else { +#if USE_GLOG_AND_GFLAGS coherent_integration_time_ms = FLAGS_acq_test_coherent_time_ms; +#else + coherent_integration_time_ms = absl::GetFlag(FLAGS_acq_test_coherent_time_ms); +#endif } min_integration_ms = 20; } @@ -238,25 +325,37 @@ class AcquisitionPerformanceTest : public ::testing::Test { signal_id = "5X"; system_id = 'E'; +#if USE_GLOG_AND_GFLAGS coherent_integration_time_ms = FLAGS_acq_test_coherent_time_ms; +#else + coherent_integration_time_ms = absl::GetFlag(FLAGS_acq_test_coherent_time_ms); +#endif min_integration_ms = 1; } else if (implementation == "GPS_L5i_PCPS_Acquisition") { signal_id = "L5"; system_id = 'G'; +#if USE_GLOG_AND_GFLAGS coherent_integration_time_ms = FLAGS_acq_test_coherent_time_ms; +#else + coherent_integration_time_ms = absl::GetFlag(FLAGS_acq_test_coherent_time_ms); +#endif } else { signal_id = "1C"; system_id = 'G'; +#if USE_GLOG_AND_GFLAGS coherent_integration_time_ms = FLAGS_acq_test_coherent_time_ms; +#else + coherent_integration_time_ms = absl::GetFlag(FLAGS_acq_test_coherent_time_ms); +#endif min_integration_ms = 1; } init(); - +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_pfa_init > 0.0) { pfa_vector.push_back(FLAGS_acq_test_pfa_init); @@ -279,11 +378,36 @@ class AcquisitionPerformanceTest : public ::testing::Test aux = aux + static_cast(FLAGS_acq_test_threshold_step); } } +#else + if (absl::GetFlag(FLAGS_acq_test_pfa_init) > 0.0) + { + pfa_vector.push_back(absl::GetFlag(FLAGS_acq_test_pfa_init)); + float aux = 1.0; + while ((absl::GetFlag(FLAGS_acq_test_pfa_init) * std::pow(10, aux)) < 1) + { + pfa_vector.push_back(absl::GetFlag(FLAGS_acq_test_pfa_init) * std::pow(10, aux)); + aux = aux + 1.0; + } + pfa_vector.push_back(0.999); + } + else + { + auto aux = static_cast(absl::GetFlag(FLAGS_acq_test_threshold_init)); + pfa_vector.push_back(aux); + aux = aux + static_cast(absl::GetFlag(FLAGS_acq_test_threshold_step)); + while (aux <= static_cast(absl::GetFlag(FLAGS_acq_test_threshold_final))) + { + pfa_vector.push_back(aux); + aux = aux + static_cast(absl::GetFlag(FLAGS_acq_test_threshold_step)); + } + } +#endif num_thresholds = pfa_vector.size(); // the gnss simulator does not dump the trk observables for the last 100 ms of generated signal int aux2; +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_bit_transition_flag) { aux2 = floor((generated_signal_duration_s * ms_per_s - 100) / (FLAGS_acq_test_coherent_time_ms * 2.0) - 1); @@ -300,7 +424,24 @@ class AcquisitionPerformanceTest : public ::testing::Test { num_of_measurements = static_cast(aux2); } - +#else + if (absl::GetFlag(FLAGS_acq_test_bit_transition_flag)) + { + aux2 = floor((generated_signal_duration_s * ms_per_s - 100) / (absl::GetFlag(FLAGS_acq_test_coherent_time_ms) * 2.0) - 1); + } + else + { + aux2 = floor((generated_signal_duration_s * ms_per_s - 100) / (absl::GetFlag(FLAGS_acq_test_coherent_time_ms) * absl::GetFlag(FLAGS_acq_test_max_dwells)) - 1); + } + if ((absl::GetFlag(FLAGS_acq_test_num_meas) > 0) && (absl::GetFlag(FLAGS_acq_test_num_meas) < aux2)) + { + num_of_measurements = static_cast(absl::GetFlag(FLAGS_acq_test_num_meas)); + } + else + { + num_of_measurements = static_cast(aux2); + } +#endif Pd.resize(cn0_vector.size()); for (int i = 0; i < static_cast(cn0_vector.size()); i++) { @@ -323,7 +464,12 @@ class AcquisitionPerformanceTest : public ::testing::Test std::vector cn0_vector; std::vector pfa_vector; +#if USE_GLOG_AND_GFLAGS int N_iterations = FLAGS_acq_test_iterations; +#else + int N_iterations = absl::GetFlag(FLAGS_acq_test_iterations); +#endif + void init(); int configure_generator(double cn0); @@ -353,19 +499,31 @@ class AcquisitionPerformanceTest : public ::testing::Test int message; std::thread ch_thread; - +#if USE_GLOG_AND_GFLAGS std::string implementation = FLAGS_acq_test_implementation; - const double baseband_sampling_freq = static_cast(FLAGS_fs_gen_sps); +#else + std::string implementation = absl::GetFlag(FLAGS_acq_test_implementation); + const double baseband_sampling_freq = static_cast(absl::GetFlag(FLAGS_fs_gen_sps)); +#endif + int coherent_integration_time_ms; const int in_acquisition = 1; const int dump_channel = 0; +#if USE_GLOG_AND_GFLAGS int generated_signal_duration_s = FLAGS_acq_test_signal_duration_s; +#else + int generated_signal_duration_s = absl::GetFlag(FLAGS_acq_test_signal_duration_s); +#endif unsigned int num_of_measurements; unsigned int measurement_counter = 0; +#if USE_GLOG_AND_GFLAGS unsigned int observed_satellite = FLAGS_acq_test_PRN; +#else + unsigned int observed_satellite = absl::GetFlag(FLAGS_acq_test_PRN); +#endif std::string path_str = "./acq-perf-test"; int num_thresholds; @@ -388,8 +546,13 @@ class AcquisitionPerformanceTest : public ::testing::Test std::string p5; std::string p6; +#if USE_GLOG_AND_GFLAGS std::string filename_rinex_obs = FLAGS_filename_rinex_obs; std::string filename_raw_data = FLAGS_filename_raw_data; +#else + std::string filename_rinex_obs = absl::GetFlag(FLAGS_filename_rinex_obs); + std::string filename_raw_data = absl::GetFlag(FLAGS_filename_raw_data); +#endif char system_id; double compute_stdev_precision(const std::vector& vec); @@ -449,6 +612,7 @@ void AcquisitionPerformanceTest::stop_queue() int AcquisitionPerformanceTest::configure_generator(double cn0) { // Configure signal generator +#if USE_GLOG_AND_GFLAGS generator_binary = FLAGS_generator_binary; p1 = std::string("-rinex_nav_file=") + FLAGS_rinex_nav_file; @@ -464,6 +628,24 @@ int AcquisitionPerformanceTest::configure_generator(double cn0) p4 = std::string("-sig_out_file=") + FLAGS_filename_raw_data; // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] p6 = std::string("-CN0_dBHz=") + std::to_string(cn0); +#else + generator_binary = absl::GetFlag(FLAGS_generator_binary); + + p1 = std::string("-rinex_nav_file=") + absl::GetFlag(FLAGS_rinex_nav_file); + if (absl::GetFlag(FLAGS_dynamic_position).empty()) + { + p2 = std::string("-static_position=") + absl::GetFlag(FLAGS_static_position) + std::string(",") + std::to_string(std::min(generated_signal_duration_s * 10, 3000)); + } + else + { + p2 = std::string("-obs_pos_file=") + std::string(absl::GetFlag(FLAGS_dynamic_position)); + } + p3 = std::string("-rinex_obs_file=") + absl::GetFlag(FLAGS_filename_rinex_obs); // RINEX 2.10 observation file output + p4 = std::string("-sig_out_file=") + absl::GetFlag(FLAGS_filename_raw_data); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples + p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] + p6 = std::string("-CN0_dBHz=") + std::to_string(cn0); +#endif + return 0; } @@ -498,7 +680,11 @@ int AcquisitionPerformanceTest::generate_signal() int AcquisitionPerformanceTest::configure_receiver(double cn0, float pfa, unsigned int iter) { +#if USE_GLOG_AND_GFLAGS if (FLAGS_config_file_ptest.empty()) +#else + if (absl::GetFlag(FLAGS_config_file_ptest).empty()) +#endif { config = std::make_shared(); const int sampling_rate_internal = baseband_sampling_freq; @@ -514,13 +700,23 @@ int AcquisitionPerformanceTest::configure_receiver(double cn0, float pfa, unsign config->set_property("Acquisition.threshold", std::to_string(pfa)); // if (FLAGS_acq_test_pfa_init > 0.0) config->supersede_property("Acquisition.pfa", std::to_string(pfa)); + +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_pfa_init > 0.0) +#else + if (absl::GetFlag(FLAGS_acq_test_pfa_init) > 0.0) +#endif { config->supersede_property("Acquisition.pfa", std::to_string(pfa)); } config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(coherent_integration_time_ms)); + +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_bit_transition_flag) +#else + if (absl::GetFlag(FLAGS_acq_test_bit_transition_flag)) +#endif { config->set_property("Acquisition.bit_transition_flag", "true"); } @@ -528,18 +724,30 @@ int AcquisitionPerformanceTest::configure_receiver(double cn0, float pfa, unsign { config->set_property("Acquisition.bit_transition_flag", "false"); } - +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_acq_test_max_dwells)); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_acq_test_max_dwells))); +#endif config->set_property("Acquisition.repeat_satellite", "true"); config->set_property("Acquisition.blocking", "true"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_make_two_steps) { config->set_property("Acquisition.make_two_steps", "true"); config->set_property("Acquisition.second_nbins", std::to_string(FLAGS_acq_test_second_nbins)); config->set_property("Acquisition.second_doppler_step", std::to_string(FLAGS_acq_test_second_doppler_step)); } +#else + if (absl::GetFlag(FLAGS_acq_test_make_two_steps)) + { + config->set_property("Acquisition.make_two_steps", "true"); + config->set_property("Acquisition.second_nbins", std::to_string(absl::GetFlag(FLAGS_acq_test_second_nbins))); + config->set_property("Acquisition.second_doppler_step", std::to_string(absl::GetFlag(FLAGS_acq_test_second_doppler_step))); + } +#endif else { config->set_property("Acquisition.make_two_steps", "false"); @@ -557,7 +765,11 @@ int AcquisitionPerformanceTest::configure_receiver(double cn0, float pfa, unsign } else { +#if USE_GLOG_AND_GFLAGS config_f = std::make_shared(FLAGS_config_file_ptest); +#else + config_f = std::make_shared(absl::GetFlag(FLAGS_config_file_ptest)); +#endif config = nullptr; } return 0; @@ -567,13 +779,21 @@ int AcquisitionPerformanceTest::configure_receiver(double cn0, float pfa, unsign int AcquisitionPerformanceTest::run_receiver() { std::string file; +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_input_file.empty()) +#else + if (absl::GetFlag(FLAGS_acq_test_input_file).empty()) +#endif { file = "./" + filename_raw_data; } else { +#if USE_GLOG_AND_GFLAGS file = FLAGS_acq_test_input_file; +#else + file = absl::GetFlag(FLAGS_acq_test_input_file); +#endif } const char* file_name = file.c_str(); gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(int8_t), file_name, false); @@ -582,7 +802,11 @@ int AcquisitionPerformanceTest::run_receiver() top_block = gr::make_top_block("Acquisition test"); auto msg_rx = AcqPerfTest_msg_rx_make(channel_internal_queue); +#if USE_GLOG_AND_GFLAGS gr::blocks::skiphead::sptr skiphead = gr::blocks::skiphead::make(sizeof(gr_complex), FLAGS_acq_test_skiphead); +#else + gr::blocks::skiphead::sptr skiphead = gr::blocks::skiphead::make(sizeof(gr_complex), absl::GetFlag(FLAGS_acq_test_skiphead)); +#endif queue = std::make_shared>(); gnss_synchro = Gnss_Synchro(); @@ -681,9 +905,15 @@ int AcquisitionPerformanceTest::count_executions(const std::string& basename, un void AcquisitionPerformanceTest::plot_results() { +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_acq_test == true) { const std::string gnuplot_executable(FLAGS_gnuplot_executable); +#else + if (absl::GetFlag(FLAGS_plot_acq_test) == true) + { + const std::string gnuplot_executable(absl::GetFlag(FLAGS_gnuplot_executable)); +#endif if (gnuplot_executable.empty()) { std::cout << "WARNING: Although the flag plot_gps_l1_tracking_test has been set to TRUE,\n"; @@ -700,7 +930,11 @@ void AcquisitionPerformanceTest::plot_results() Gnuplot::set_GNUPlotPath(gnuplot_path); Gnuplot g1("linespoints"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g1.showonscreen(); // window output } @@ -736,7 +970,11 @@ void AcquisitionPerformanceTest::plot_results() g1.savetopdf("ROC", 18); Gnuplot g2("linespoints"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g2.showonscreen(); // window output } @@ -798,8 +1036,11 @@ TEST_F(AcquisitionPerformanceTest, ROC) std::vector meas_Pd_; std::vector meas_Pd_correct_; std::vector meas_Pfa_; - +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_input_file.empty()) +#else + if (absl::GetFlag(FLAGS_acq_test_input_file).empty()) +#endif { std::cout << "Execution for CN0 = " << it << " dB-Hz\n"; } @@ -807,7 +1048,11 @@ TEST_F(AcquisitionPerformanceTest, ROC) // Do N_iterations of the experiment for (int pfa_iter = 0; pfa_iter < static_cast(pfa_vector.size()); pfa_iter++) { +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_pfa_init > 0.0) +#else + if (absl::GetFlag(FLAGS_acq_test_pfa_init) > 0.0) +#endif { std::cout << "Setting threshold for Pfa = " << pfa_vector[pfa_iter] << '\n'; } @@ -816,16 +1061,25 @@ TEST_F(AcquisitionPerformanceTest, ROC) std::cout << "Setting threshold to " << pfa_vector[pfa_iter] << '\n'; } - // Configure the signal generator + // Configure the signal generator + +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_input_file.empty()) +#else + if (absl::GetFlag(FLAGS_acq_test_input_file).empty()) +#endif { configure_generator(it); } for (int iter = 0; iter < N_iterations; iter++) { - // Generate signal raw signal samples and observations RINEX file +// Generate signal raw signal samples and observations RINEX file +#if USE_GLOG_AND_GFLAGS if (FLAGS_acq_test_input_file.empty()) +#else + if (absl::GetFlag(FLAGS_acq_test_input_file).empty()) +#endif { generate_signal(); } @@ -834,11 +1088,19 @@ TEST_F(AcquisitionPerformanceTest, ROC) { if (k == 0) { +#if USE_GLOG_AND_GFLAGS observed_satellite = FLAGS_acq_test_PRN; +#else + observed_satellite = absl::GetFlag(FLAGS_acq_test_PRN); +#endif } else { +#if USE_GLOG_AND_GFLAGS observed_satellite = FLAGS_acq_test_fake_PRN; +#else + observed_satellite = absl::GetFlag(FLAGS_acq_test_fake_PRN); +#endif } init(); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b1i_pcps_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b1i_pcps_acquisition_test.cc index 9e577e096e..563b412944 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b1i_pcps_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b1i_pcps_acquisition_test.cc @@ -29,7 +29,6 @@ #include "in_memory_configuration.h" #include "test_flags.h" #include -#include #include #include #include @@ -39,6 +38,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include @@ -139,7 +144,7 @@ class BeidouB1iPcpsAcquisitionTest : public ::testing::Test gr::top_block_sptr top_block; std::shared_ptr config; - Gnss_Synchro gnss_synchro{}; + Gnss_Synchro gnss_synchro; size_t item_size; unsigned int doppler_max; unsigned int doppler_step; diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b3i_pcps_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b3i_pcps_acquisition_test.cc index bb99b7f07c..17cd4010a7 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b3i_pcps_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b3i_pcps_acquisition_test.cc @@ -29,7 +29,6 @@ #include "in_memory_configuration.h" #include "test_flags.h" #include -#include #include #include #include @@ -39,6 +38,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include @@ -138,7 +143,7 @@ class BeidouB3iPcpsAcquisitionTest : public ::testing::Test gr::top_block_sptr top_block; std::shared_ptr config; - Gnss_Synchro gnss_synchro{}; + Gnss_Synchro gnss_synchro; size_t item_size; unsigned int doppler_max; unsigned int doppler_step; diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test.cc index 0d964e8265..9be206e3f5 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test.cc @@ -31,7 +31,6 @@ #include "in_memory_configuration.h" #include "test_flags.h" #include -#include #include #include #include @@ -162,7 +161,11 @@ void GalileoE1PcpsAmbiguousAcquisitionTest::init() config->set_property("GNSS-SDR.internal_fs_sps", "4000000"); config->set_property("Acquisition_1B.item_type", "gr_complex"); config->set_property("Acquisition_1B.coherent_integration_time_ms", "4"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_acq_grid == true) +#else + if (absl::GetFlag(FLAGS_plot_acq_grid) == true) +#endif { config->set_property("Acquisition_1B.dump", "true"); } @@ -198,7 +201,11 @@ void GalileoE1PcpsAmbiguousAcquisitionTest::plot_grid() std::vector* samples = &acq_dump.samples; std::vector>* mag = &acq_dump.mag; +#if USE_GLOG_AND_GFLAGS const std::string gnuplot_executable(FLAGS_gnuplot_executable); +#else + const std::string gnuplot_executable(absl::GetFlag(FLAGS_gnuplot_executable)); +#endif if (gnuplot_executable.empty()) { std::cout << "WARNING: Although the flag plot_acq_grid has been set to TRUE,\n"; @@ -216,7 +223,11 @@ void GalileoE1PcpsAmbiguousAcquisitionTest::plot_grid() Gnuplot::set_GNUPlotPath(gnuplot_path); Gnuplot g1("lines"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g1.showonscreen(); // window output } @@ -291,7 +302,11 @@ TEST_F(GalileoE1PcpsAmbiguousAcquisitionTest, ValidationOfResults) std::chrono::time_point start, end; std::chrono::duration elapsed_seconds(0); +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_acq_grid == true) +#else + if (absl::GetFlag(FLAGS_plot_acq_grid) == true) +#endif { std::string data_str = "./tmp-acq-gal1"; if (fs::exists(data_str)) @@ -368,7 +383,11 @@ TEST_F(GalileoE1PcpsAmbiguousAcquisitionTest, ValidationOfResults) EXPECT_LE(doppler_error_hz, 166) << "Doppler error exceeds the expected value: 166 Hz = 2/(3*integration period)"; EXPECT_LT(delay_error_chips, 0.175) << "Delay error exceeds the expected value: 0.175 chips"; +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_acq_grid == true) +#else + if (absl::GetFlag(FLAGS_plot_acq_grid) == true) +#endif { plot_grid(); } diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test_fpga.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test_fpga.cc index 714810fd7d..816dbfe1a9 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test_fpga.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test_fpga.cc @@ -29,7 +29,6 @@ #include "in_memory_configuration.h" #include "test_flags.h" #include -#include #include #include #include @@ -38,6 +37,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #ifdef GR_GREATER_38 #include #else diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_quicksync_ambiguous_acquisition_gsoc2014_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_quicksync_ambiguous_acquisition_gsoc2014_test.cc index 5204b859b0..0a893e41c1 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_quicksync_ambiguous_acquisition_gsoc2014_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_quicksync_ambiguous_acquisition_gsoc2014_test.cc @@ -27,18 +27,23 @@ #include "in_memory_configuration.h" #include "signal_generator.h" #include "signal_generator_c.h" -#include #include #include #include #include #include #include +#include #include #include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif #if HAS_GENERIC_LAMBDA #else #include @@ -54,9 +59,13 @@ namespace wht = boost; namespace wht = std; #endif +#if USE_GLOG_AND_GFLAGS DEFINE_double(e1_value_threshold, 0.3, "Value of the threshold for the acquisition"); DEFINE_int32(e1_value_CN0_dB_0, 50, "Value for the CN0_dB_0 in channel 0"); - +#else +ABSL_FLAG(double, e1_value_threshold, 0.3, "Value of the threshold for the acquisition"); +ABSL_FLAG(int32_t, e1_value_CN0_dB_0, 50, "Value for the CN0_dB_0 in channel 0"); +#endif // ######## GNURADIO BLOCK MESSAGE RECEVER ######### class GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test_msg_rx; @@ -313,7 +322,11 @@ void GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test::config_2() config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); +#if USE_GLOG_AND_GFLAGS config->set_property("SignalSource.CN0_dB_0", std::to_string(FLAGS_e1_value_CN0_dB_0)); +#else + config->set_property("SignalSource.CN0_dB_0", std::to_string(absl::GetFlag(FLAGS_e1_value_CN0_dB_0))); +#endif config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", @@ -366,7 +379,11 @@ void GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test::config_2() std::to_string(integration_time_ms)); config->set_property("Acquisition_1B.max_dwells", "1"); config->set_property("Acquisition_1B.bit_transition_flag", "false"); +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition_1B.threshold", std::to_string(FLAGS_e1_value_threshold)); +#else + config->set_property("Acquisition_1B.threshold", std::to_string(absl::GetFlag(FLAGS_e1_value_threshold))); +#endif config->set_property("Acquisition_1B.doppler_max", "10000"); config->set_property("Acquisition_1B.doppler_step", "125"); config->set_property("Acquisition_1B.folding_factor", "2"); @@ -403,7 +420,11 @@ void GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test::config_3() config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); +#if USE_GLOG_AND_GFLAGS config->set_property("SignalSource.CN0_dB_0", std::to_string(FLAGS_e1_value_CN0_dB_0)); +#else + config->set_property("SignalSource.CN0_dB_0", std::to_string(absl::GetFlag(FLAGS_e1_value_CN0_dB_0))); +#endif config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", @@ -863,10 +884,18 @@ TEST_F(GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test, ValidationOfResul filenamepd.str(""); filenamepd << "../data/test_statistics_" << gnss_synchro.System << "_" << gnss_synchro.Signal << "_sat_" +#if USE_GLOG_AND_GFLAGS << gnss_synchro.PRN << "CN0_dB_0_" << FLAGS_e1_value_CN0_dB_0 << "_dBHz.csv"; - +#else + << gnss_synchro.PRN << "CN0_dB_0_" << absl::GetFlag(FLAGS_e1_value_CN0_dB_0) << "_dBHz.csv"; +#endif pdpfafile.open(filenamepd.str().c_str(), std::ios::app | std::ios::out); + +#if USE_GLOG_AND_GFLAGS pdpfafile << FLAGS_e1_value_threshold << "," << Pd << "," << Pfa_p << "," << Pmd << '\n'; +#else + pdpfafile << absl::GetFlag(FLAGS_e1_value_threshold) << "," << Pd << "," << Pfa_p << "," << Pmd << '\n'; +#endif pdpfafile.close(); } } @@ -881,10 +910,18 @@ TEST_F(GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test, ValidationOfResul filenamepf.str(""); filenamepf << "../data/test_statistics_" << gnss_synchro.System << "_" << gnss_synchro.Signal << "_sat_" +#if USE_GLOG_AND_GFLAGS << gnss_synchro.PRN << "CN0_dB_0_" << FLAGS_e1_value_CN0_dB_0 << "_dBHz.csv"; - +#else + << gnss_synchro.PRN << "CN0_dB_0_" << absl::GetFlag(FLAGS_e1_value_CN0_dB_0) << "_dBHz.csv"; +#endif pdpfafile.open(filenamepf.str().c_str(), std::ios::app | std::ios::out); + +#if USE_GLOG_AND_GFLAGS pdpfafile << FLAGS_e1_value_threshold << "," << Pfa_a << '\n'; +#else + pdpfafile << absl::GetFlag(FLAGS_e1_value_threshold) << "," << Pfa_a << '\n'; +#endif pdpfafile.close(); } } diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test.cc index 76056cb3b8..4aac0c1048 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test.cc @@ -28,7 +28,6 @@ #include "gps_l1_ca_pcps_acquisition.h" #include "in_memory_configuration.h" #include "test_flags.h" -#include #include #include #include @@ -39,6 +38,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include @@ -132,7 +137,7 @@ class GpsL1CaPcpsAcquisitionTest : public ::testing::Test gr::top_block_sptr top_block; std::shared_ptr config; - Gnss_Synchro gnss_synchro{}; + Gnss_Synchro gnss_synchro; size_t item_size; unsigned int doppler_max{5000}; unsigned int doppler_step{100}; @@ -150,7 +155,12 @@ void GpsL1CaPcpsAcquisitionTest::init() config->set_property("Acquisition_1C.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_1C.item_type", "gr_complex"); config->set_property("Acquisition_1C.coherent_integration_time_ms", "1"); + +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_acq_grid == true) +#else + if (absl::GetFlag(FLAGS_plot_acq_grid) == true) +#endif { config->set_property("Acquisition_1C.dump", "true"); } @@ -185,8 +195,12 @@ void GpsL1CaPcpsAcquisitionTest::plot_grid() const std::vector *doppler = &acq_dump.doppler; std::vector *samples = &acq_dump.samples; std::vector > *mag = &acq_dump.mag; - +#if USE_GLOG_AND_GFLAGS const std::string gnuplot_executable(FLAGS_gnuplot_executable); +#else + const std::string gnuplot_executable(absl::GetFlag(FLAGS_gnuplot_executable)); +#endif + if (gnuplot_executable.empty()) { std::cout << "WARNING: Although the flag plot_acq_grid has been set to TRUE,\n"; @@ -204,7 +218,11 @@ void GpsL1CaPcpsAcquisitionTest::plot_grid() const Gnuplot::set_GNUPlotPath(gnuplot_path); Gnuplot g1("lines"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g1.showonscreen(); // window output } @@ -286,7 +304,11 @@ TEST_F(GpsL1CaPcpsAcquisitionTest /*unused*/, ValidationOfResults /*unused*/) init(); +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_acq_grid == true) +#else + if (absl::GetFlag(FLAGS_plot_acq_grid) == true) +#endif { std::string data_str = "./tmp-acq-gps1"; if (fs::exists(data_str)) @@ -354,7 +376,11 @@ TEST_F(GpsL1CaPcpsAcquisitionTest /*unused*/, ValidationOfResults /*unused*/) EXPECT_LE(doppler_error_hz, 666) << "Doppler error exceeds the expected value: 666 Hz = 2/(3*integration period)"; EXPECT_LT(delay_error_chips, 0.5) << "Delay error exceeds the expected value: 0.5 chips"; +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_acq_grid == true) +#else + if (absl::GetFlag(FLAGS_plot_acq_grid) == true) +#endif { plot_grid(); } diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test_fpga.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test_fpga.cc index 60db2ec9b2..ee06f57ced 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test_fpga.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test_fpga.cc @@ -29,7 +29,6 @@ #include "in_memory_configuration.h" #include "test_flags.h" #include -#include #include #include #include // for abs, pow, floor @@ -37,6 +36,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + #ifdef GR_GREATER_38 #include #else diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_quicksync_acquisition_gsoc2014_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_quicksync_acquisition_gsoc2014_test.cc index 92a8e19ff1..1dce2a6f85 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_quicksync_acquisition_gsoc2014_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_quicksync_acquisition_gsoc2014_test.cc @@ -25,7 +25,6 @@ #include "in_memory_configuration.h" #include "signal_generator.h" #include "signal_generator_c.h" -#include #include #include #include @@ -33,9 +32,15 @@ #include #include #include +#include #include #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif #if HAS_GENERIC_LAMBDA #else #include @@ -51,9 +56,13 @@ namespace wht = boost; namespace wht = std; #endif +#if USE_GLOG_AND_GFLAGS DEFINE_double(value_threshold, 1, "Value of the threshold for the acquisition"); DEFINE_int32(value_CN0_dB_0, 44, "Value for the CN0_dB_0 in channel 0"); - +#else +ABSL_FLAG(double, value_threshold, 1, "Value of the threshold for the acquisition"); +ABSL_FLAG(int32_t, value_CN0_dB_0, 44, "Value for the CN0_dB_0 in channel 0"); +#endif // ######## GNURADIO BLOCK MESSAGE RECEVER ######### class GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test_msg_rx; @@ -304,7 +313,11 @@ void GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test::config_2() config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); +#if USE_GLOG_AND_GFLAGS config->set_property("SignalSource.CN0_dB_0", std::to_string(FLAGS_value_CN0_dB_0)); +#else + config->set_property("SignalSource.CN0_dB_0", std::to_string(absl::GetFlag(FLAGS_value_CN0_dB_0))); +#endif config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); @@ -354,7 +367,11 @@ void GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test::config_2() config->set_property("Acquisition_1C.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition_1C.max_dwells", "1"); +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition_1C.threshold", std::to_string(FLAGS_value_threshold)); +#else + config->set_property("Acquisition_1C.threshold", std::to_string(absl::GetFlag(FLAGS_value_threshold))); +#endif config->set_property("Acquisition_1C.doppler_max", "10000"); config->set_property("Acquisition_1C.doppler_step", "100"); config->set_property("Acquisition_1C.bit_transition_flag", "false"); @@ -395,7 +412,11 @@ void GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test::config_3() config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); +#if USE_GLOG_AND_GFLAGS config->set_property("SignalSource.CN0_dB_0", std::to_string(FLAGS_value_CN0_dB_0)); +#else + config->set_property("SignalSource.CN0_dB_0", std::to_string(absl::GetFlag(FLAGS_value_CN0_dB_0))); +#endif config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); @@ -830,10 +851,19 @@ TEST_F(GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test, ValidationOfResultsProbabili filenamepd.str(""); filenamepd << "../data/test_statistics_" << gnss_synchro.System << "_" << gnss_synchro.Signal << "_sat_" +#if USE_GLOG_AND_GFLAGS << gnss_synchro.PRN << "CN0_dB_0_" << FLAGS_value_CN0_dB_0 << "_dBHz.csv"; +#else + << gnss_synchro.PRN << "CN0_dB_0_" << absl::GetFlag(FLAGS_value_CN0_dB_0) << "_dBHz.csv"; +#endif pdpfafile.open(filenamepd.str().c_str(), std::ios::app | std::ios::out); + +#if USE_GLOG_AND_GFLAGS pdpfafile << FLAGS_value_threshold << "," << Pd << "," << Pfa_p << "," << Pmd << '\n'; +#else + pdpfafile << absl::GetFlag(FLAGS_value_threshold) << "," << Pd << "," << Pfa_p << "," << Pmd << '\n'; +#endif pdpfafile.close(); } } @@ -848,10 +878,18 @@ TEST_F(GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test, ValidationOfResultsProbabili filenamepf.str(""); filenamepf << "../data/test_statistics_" << gnss_synchro.System << "_" << gnss_synchro.Signal << "_sat_" +#if USE_GLOG_AND_GFLAGS << gnss_synchro.PRN << "CN0_dB_0_" << FLAGS_value_CN0_dB_0 << "_dBHz.csv"; - +#else + << gnss_synchro.PRN << "CN0_dB_0_" << absl::GetFlag(FLAGS_value_CN0_dB_0) << "_dBHz.csv"; +#endif pdpfafile.open(filenamepf.str().c_str(), std::ios::app | std::ios::out); + +#if USE_GLOG_AND_GFLAGS pdpfafile << FLAGS_value_threshold << "," << Pfa_a << '\n'; +#else + pdpfafile << absl::GetFlag(FLAGS_value_threshold) << "," << Pfa_a << '\n'; +#endif pdpfafile.close(); } } diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l2_m_pcps_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l2_m_pcps_acquisition_test.cc index a2d87201d6..bb65ec8c5d 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l2_m_pcps_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l2_m_pcps_acquisition_test.cc @@ -160,7 +160,11 @@ void GpsL2MPcpsAcquisitionTest::init() config->set_property("GNSS-SDR.internal_fs_sps", std::to_string(sampling_frequency_hz)); config->set_property("Acquisition_2S.implementation", "GPS_L2_M_PCPS_Acquisition"); config->set_property("Acquisition_2S.item_type", "gr_complex"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_acq_grid == true) +#else + if (absl::GetFlag(FLAGS_plot_acq_grid) == true) +#endif { config->set_property("Acquisition_2S.dump", "true"); } @@ -195,7 +199,11 @@ void GpsL2MPcpsAcquisitionTest::plot_grid() std::vector *samples = &acq_dump.samples; std::vector> *mag = &acq_dump.mag; +#if USE_GLOG_AND_GFLAGS const std::string gnuplot_executable(FLAGS_gnuplot_executable); +#else + const std::string gnuplot_executable(absl::GetFlag(FLAGS_gnuplot_executable)); +#endif if (gnuplot_executable.empty()) { std::cout << "WARNING: Although the flag plot_acq_grid has been set to TRUE,\n"; @@ -213,7 +221,11 @@ void GpsL2MPcpsAcquisitionTest::plot_grid() Gnuplot::set_GNUPlotPath(gnuplot_path); Gnuplot g1("impulses"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g1.showonscreen(); // window output } @@ -290,7 +302,11 @@ TEST_F(GpsL2MPcpsAcquisitionTest, ValidationOfResults) double expected_delay_samples = 1; // 2004; double expected_doppler_hz = 1200; // 3000; +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_acq_grid == true) +#else + if (absl::GetFlag(FLAGS_plot_acq_grid) == true) +#endif { std::string data_str = "./tmp-acq-gps2"; if (fs::exists(data_str)) @@ -372,7 +388,11 @@ TEST_F(GpsL2MPcpsAcquisitionTest, ValidationOfResults) EXPECT_LE(doppler_error_hz, 200) << "Doppler error exceeds the expected value: 2/(3*integration period)"; EXPECT_LT(delay_error_chips, 0.5) << "Delay error exceeds the expected value: 0.5 chips"; +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_acq_grid == true) +#else + if (absl::GetFlag(FLAGS_plot_acq_grid) == true) +#endif { plot_grid(); } diff --git a/src/tests/unit-tests/signal-processing-blocks/filter/fir_filter_test.cc b/src/tests/unit-tests/signal-processing-blocks/filter/fir_filter_test.cc index 97b27f51c8..9bebac3a93 100644 --- a/src/tests/unit-tests/signal-processing-blocks/filter/fir_filter_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/filter/fir_filter_test.cc @@ -14,7 +14,6 @@ * ----------------------------------------------------------------------------- */ -#include #include #include #include @@ -40,13 +39,24 @@ #include +#if USE_GLOG_AND_GFLAGS +#include DEFINE_int32(filter_test_nsamples, 1000000, "Number of samples to filter in the tests (max: 2147483647)"); +#else +#include +ABSL_FLAG(int32_t, filter_test_nsamples, 1000000, "Number of samples to filter in the tests (max: 2147483647)"); +#endif + class FirFilterTest : public ::testing::Test { protected: FirFilterTest() : item_size(sizeof(gr_complex)), +#if USE_GLOG_AND_GFLAGS nsamples(FLAGS_filter_test_nsamples) +#else + nsamples(absl::GetFlag(FLAGS_filter_test_nsamples)) +#endif { queue = std::make_shared>(); config = std::make_shared(); diff --git a/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_lite_test.cc b/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_lite_test.cc index 1c77dc929e..79cc01136f 100644 --- a/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_lite_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_lite_test.cc @@ -14,7 +14,6 @@ * ----------------------------------------------------------------------------- */ -#include #include #include #include @@ -38,14 +37,24 @@ #include #include - +#if USE_GLOG_AND_GFLAGS +#include DEFINE_int32(notch_filter_lite_test_nsamples, 1000000, "Number of samples to filter in the tests (max: 2147483647)"); +#else +#include +ABSL_FLAG(int32_t, notch_filter_lite_test_nsamples, 1000000, "Number of samples to filter in the tests (max: 2147483647)"); +#endif + class NotchFilterLiteTest : public ::testing::Test { protected: NotchFilterLiteTest() : item_size(sizeof(gr_complex)), +#if USE_GLOG_AND_GFLAGS nsamples(FLAGS_notch_filter_lite_test_nsamples) +#else + nsamples(absl::GetFlag(FLAGS_notch_filter_lite_test_nsamples)) +#endif { queue = std::make_shared>(); config = std::make_shared(); diff --git a/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_test.cc b/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_test.cc index cf4cde035f..17be01cc4a 100644 --- a/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_test.cc @@ -14,7 +14,6 @@ * ----------------------------------------------------------------------------- */ -#include #include #include #include @@ -38,14 +37,23 @@ #include #include - +#if USE_GLOG_AND_GFLAGS +#include DEFINE_int32(notch_filter_test_nsamples, 1000000, "Number of samples to filter in the tests (max: 2147483647)"); +#else +#include +ABSL_FLAG(int32_t, notch_filter_test_nsamples, 1000000, "Number of samples to filter in the tests (max: 2147483647)"); +#endif class NotchFilterTest : public ::testing::Test { protected: NotchFilterTest() : item_size(sizeof(gr_complex)), +#if USE_GLOG_AND_GFLAGS nsamples(FLAGS_notch_filter_test_nsamples) +#else + nsamples(absl::GetFlag(FLAGS_notch_filter_test_nsamples)) +#endif { queue = std::make_shared>(); config = std::make_shared(); diff --git a/src/tests/unit-tests/signal-processing-blocks/filter/pulse_blanking_filter_test.cc b/src/tests/unit-tests/signal-processing-blocks/filter/pulse_blanking_filter_test.cc index 4cb3c5c435..b99e17655e 100644 --- a/src/tests/unit-tests/signal-processing-blocks/filter/pulse_blanking_filter_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/filter/pulse_blanking_filter_test.cc @@ -14,7 +14,6 @@ * ----------------------------------------------------------------------------- */ -#include #include #include #include @@ -38,14 +37,23 @@ #include #include - +#if USE_GLOG_AND_GFLAGS +#include DEFINE_int32(pb_filter_test_nsamples, 1000000, "Number of samples to filter in the tests (max: 2147483647)"); +#else +#include +ABSL_FLAG(int32_t, pb_filter_test_nsamples, 1000000, "Number of samples to filter in the tests (max: 2147483647)"); +#endif class PulseBlankingFilterTest : public ::testing::Test { protected: PulseBlankingFilterTest() : item_size(sizeof(gr_complex)), +#if USE_GLOG_AND_GFLAGS nsamples(FLAGS_pb_filter_test_nsamples) +#else + nsamples(absl::GetFlag(FLAGS_pb_filter_test_nsamples)) +#endif { queue = std::make_shared>(); config = std::make_shared(); diff --git a/src/tests/unit-tests/signal-processing-blocks/libs/CMakeLists.txt b/src/tests/unit-tests/signal-processing-blocks/libs/CMakeLists.txt index 53545ef449..32a81ee01c 100644 --- a/src/tests/unit-tests/signal-processing-blocks/libs/CMakeLists.txt +++ b/src/tests/unit-tests/signal-processing-blocks/libs/CMakeLists.txt @@ -37,15 +37,20 @@ endif() target_link_libraries(signal_processing_testing_lib PUBLIC Armadillo::armadillo - Gflags::gflags Gnuradio::runtime Gnuradio::pmt PRIVATE Boost::headers Matio::matio - Glog::glog ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(signal_processing_testing_lib PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(signal_processing_testing_lib PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(signal_processing_testing_lib PRIVATE absl::flags absl::log) +endif() + target_include_directories(signal_processing_testing_lib PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/tests/unit-tests/signal-processing-blocks/libs/acquisition_msg_rx.cc b/src/tests/unit-tests/signal-processing-blocks/libs/acquisition_msg_rx.cc index c8701e41dc..fb86978985 100644 --- a/src/tests/unit-tests/signal-processing-blocks/libs/acquisition_msg_rx.cc +++ b/src/tests/unit-tests/signal-processing-blocks/libs/acquisition_msg_rx.cc @@ -17,10 +17,17 @@ */ #include "acquisition_msg_rx.h" -#include -#include #include #include + +#if USE_GLOG_AND_GFLAGS +#include +#include +#else +#include +#include +#endif + #if HAS_GENERIC_LAMBDA #else #include diff --git a/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc b/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc index 9cb2337d4e..f7540e0c04 100644 --- a/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc @@ -252,12 +252,18 @@ class HybridObservablesTest : public ::testing::Test std::string p3; std::string p4; std::string p5; - std::string implementation = FLAGS_trk_test_implementation; +#if USE_GLOG_AND_GFLAGS + std::string implementation = FLAGS_trk_test_implementation; const int baseband_sampling_freq = FLAGS_fs_gen_sps; - std::string filename_rinex_obs = FLAGS_filename_rinex_obs; std::string filename_raw_data = FLAGS_filename_raw_data; +#else + std::string implementation = absl::GetFlag(FLAGS_trk_test_implementation); + const int baseband_sampling_freq = absl::GetFlag(FLAGS_fs_gen_sps); + std::string filename_rinex_obs = absl::GetFlag(FLAGS_filename_rinex_obs); + std::string filename_raw_data = absl::GetFlag(FLAGS_filename_raw_data); +#endif int configure_generator(); int generate_signal(); @@ -340,6 +346,7 @@ class HybridObservablesTest : public ::testing::Test int HybridObservablesTest::configure_generator() { +#if USE_GLOG_AND_GFLAGS // Configure signal generator generator_binary = FLAGS_generator_binary; @@ -355,6 +362,24 @@ int HybridObservablesTest::configure_generator() p3 = std::string("-rinex_obs_file=") + FLAGS_filename_rinex_obs; // RINEX 2.10 observation file output p4 = std::string("-sig_out_file=") + FLAGS_filename_raw_data; // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] +#else + // Configure signal generator + generator_binary = absl::GetFlag(FLAGS_generator_binary); + + p1 = std::string("-rinex_nav_file=") + absl::GetFlag(FLAGS_rinex_nav_file); + if (absl::GetFlag(FLAGS_dynamic_position).empty()) + { + p2 = std::string("-static_position=") + absl::GetFlag(FLAGS_static_position) + std::string(",") + std::to_string(absl::GetFlag(FLAGS_duration) * 10); + } + else + { + p2 = std::string("-obs_pos_file=") + std::string(absl::GetFlag(FLAGS_dynamic_position)); + } + p3 = std::string("-rinex_obs_file=") + absl::GetFlag(FLAGS_filename_rinex_obs); // RINEX 2.10 observation file output + p4 = std::string("-sig_out_file=") + absl::GetFlag(FLAGS_filename_raw_data); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples + p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] +#endif + return 0; } @@ -395,8 +420,12 @@ bool HybridObservablesTest::acquire_signal() tmp_gnss_synchro.Channel_ID = 0; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_sps", std::to_string(baseband_sampling_freq)); - // Enable automatic resampler for the acquisition, if required +// Enable automatic resampler for the acquisition, if required +#if USE_GLOG_AND_GFLAGS if (FLAGS_use_acquisition_resampler == true) +#else + if (absl::GetFlag(FLAGS_use_acquisition_resampler) == true) +#endif { config->set_property("GNSS-SDR.use_acquisition_resampler", "true"); } @@ -418,8 +447,11 @@ bool HybridObservablesTest::acquire_signal() std::memcpy(static_cast(tmp_gnss_synchro.Signal), str, 3); // copy string into synchro char array: 2 char + null tmp_gnss_synchro.PRN = SV_ID; System_and_Signal = "GPS L1 CA"; +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_external_signal_acquisition_dwells)); - // acquisition = std::make_shared(config.get(), "Acquisition", 1, 0); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_external_signal_acquisition_dwells))); +#endif acquisition = std::make_shared(config.get(), "Acquisition", 1, 0); } else if (implementation == "Galileo_E1_DLL_PLL_VEML_Tracking") @@ -430,7 +462,11 @@ bool HybridObservablesTest::acquire_signal() std::memcpy(static_cast(tmp_gnss_synchro.Signal), str, 3); // copy string into synchro char array: 2 char + null tmp_gnss_synchro.PRN = SV_ID; System_and_Signal = "Galileo E1B"; +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_external_signal_acquisition_dwells)); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_external_signal_acquisition_dwells))); +#endif acquisition = std::make_shared(config.get(), "Acquisition", 1, 0); } else if (implementation == "GPS_L2_M_DLL_PLL_Tracking") @@ -441,7 +477,11 @@ bool HybridObservablesTest::acquire_signal() std::memcpy(static_cast(tmp_gnss_synchro.Signal), str, 3); // copy string into synchro char array: 2 char + null tmp_gnss_synchro.PRN = SV_ID; System_and_Signal = "GPS L2CM"; +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_external_signal_acquisition_dwells)); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_external_signal_acquisition_dwells))); +#endif acquisition = std::make_shared(config.get(), "Acquisition", 1, 0); } else if (implementation == "Galileo_E5a_DLL_PLL_Tracking_b") @@ -453,7 +493,11 @@ bool HybridObservablesTest::acquire_signal() tmp_gnss_synchro.PRN = SV_ID; System_and_Signal = "Galileo E5a"; config->set_property("Acquisition_5X.coherent_integration_time_ms", "1"); +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_external_signal_acquisition_dwells)); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_external_signal_acquisition_dwells))); +#endif config->set_property("Acquisition.CAF_window_hz", "0"); // **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is deactivated. Recommended value 3000 Hz config->set_property("Acquisition.Zero_padding", "0"); // **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF. config->set_property("Acquisition.bit_transition_flag", "false"); @@ -468,7 +512,11 @@ bool HybridObservablesTest::acquire_signal() std::memcpy(static_cast(tmp_gnss_synchro.Signal), str, 3); // copy string into synchro char array: 2 char + null tmp_gnss_synchro.PRN = SV_ID; System_and_Signal = "Galileo E5a"; +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_external_signal_acquisition_dwells)); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_external_signal_acquisition_dwells))); +#endif acquisition = std::make_shared(config.get(), "Acquisition", 1, 0); } else if (implementation == "GPS_L5_DLL_PLL_Tracking") @@ -479,7 +527,11 @@ bool HybridObservablesTest::acquire_signal() std::memcpy(static_cast(tmp_gnss_synchro.Signal), str, 3); // copy string into synchro char array: 2 char + null tmp_gnss_synchro.PRN = SV_ID; System_and_Signal = "GPS L5I"; +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_external_signal_acquisition_dwells)); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_external_signal_acquisition_dwells))); +#endif acquisition = std::make_shared(config.get(), "Acquisition", 1, 0); } else @@ -490,27 +542,43 @@ bool HybridObservablesTest::acquire_signal() acquisition->set_gnss_synchro(&tmp_gnss_synchro); acquisition->set_channel(0); +#if USE_GLOG_AND_GFLAGS acquisition->set_doppler_max(config->property("Acquisition.doppler_max", FLAGS_external_signal_acquisition_doppler_max_hz)); acquisition->set_doppler_step(config->property("Acquisition.doppler_step", FLAGS_external_signal_acquisition_doppler_step_hz)); acquisition->set_threshold(config->property("Acquisition.threshold", FLAGS_external_signal_acquisition_threshold)); +#else + acquisition->set_doppler_max(config->property("Acquisition.doppler_max", absl::GetFlag(FLAGS_external_signal_acquisition_doppler_max_hz))); + acquisition->set_doppler_step(config->property("Acquisition.doppler_step", absl::GetFlag(FLAGS_external_signal_acquisition_doppler_step_hz))); + acquisition->set_threshold(config->property("Acquisition.threshold", absl::GetFlag(FLAGS_external_signal_acquisition_threshold))); +#endif acquisition->init(); acquisition->set_local_code(); acquisition->set_state(1); // Ensure that acquisition starts at the first sample acquisition->connect(top_block_acq); gr::blocks::file_source::sptr file_source; +#if USE_GLOG_AND_GFLAGS std::string file = FLAGS_signal_file; +#else + std::string file = absl::GetFlag(FLAGS_signal_file); +#endif const char* file_name = file.c_str(); file_source = gr::blocks::file_source::make(sizeof(int8_t), file_name, false); +#if USE_GLOG_AND_GFLAGS file_source->seek(2 * FLAGS_skip_samples, 0); // skip head. ibyte, two bytes per complex sample +#else + file_source->seek(2 * absl::GetFlag(FLAGS_skip_samples), 0); // skip head. ibyte, two bytes per complex sample +#endif gr::blocks::interleaved_char_to_complex::sptr gr_interleaved_char_to_complex = gr::blocks::interleaved_char_to_complex::make(); - // gr::blocks::head::sptr head_samples = gr::blocks::head::make(sizeof(gr_complex), baseband_sampling_freq * FLAGS_duration); - // top_block_acq->connect(head_samples, 0, acquisition->get_left_block(), 0); - top_block_acq->connect(file_source, 0, gr_interleaved_char_to_complex, 0); // Enable automatic resampler for the acquisition, if required + +#if USE_GLOG_AND_GFLAGS if (FLAGS_use_acquisition_resampler == true) +#else + if (absl::GetFlag(FLAGS_use_acquisition_resampler) == true) +#endif { // create acquisition resamplers if required double resampler_ratio = 1.0; @@ -636,7 +704,11 @@ bool HybridObservablesTest::acquire_signal() top_block_acq->run(); if (start_msg == true) { +#if USE_GLOG_AND_GFLAGS std::cout << "Reading external signal file: " << FLAGS_signal_file << '\n'; +#else + std::cout << "Reading external signal file: " << absl::GetFlag(FLAGS_signal_file) << '\n'; +#endif std::cout << "Searching for " << System_and_Signal << " Satellites...\n"; std::cout << "["; start_msg = false; @@ -655,7 +727,11 @@ bool HybridObservablesTest::acquire_signal() std::cout << " . "; } top_block_acq->stop(); +#if USE_GLOG_AND_GFLAGS file_source->seek(2 * FLAGS_skip_samples, 0); // skip head. ibyte, two bytes per complex sample +#else + file_source->seek(2 * absl::GetFlag(FLAGS_skip_samples), 0); // skip head. ibyte, two bytes per complex sample +#endif std::cout.flush(); } std::cout << "]\n"; @@ -712,9 +788,15 @@ void HybridObservablesTest::configure_receiver( config->set_property("Tracking.extend_correlation_symbols", std::to_string(extend_correlation_symbols)); config->set_property("Tracking.pll_bw_narrow_hz", std::to_string(PLL_narrow_bw_hz)); config->set_property("Tracking.dll_bw_narrow_hz", std::to_string(DLL_narrow_bw_hz)); +#if USE_GLOG_AND_GFLAGS config->set_property("Tracking.fll_bw_hz", std::to_string(FLAGS_fll_bw_hz)); config->set_property("Tracking.enable_fll_pull_in", FLAGS_enable_fll_pull_in ? "true" : "false"); config->set_property("Tracking.enable_fll_steady_state", FLAGS_enable_fll_steady_state ? "true" : "false"); +#else + config->set_property("Tracking.fll_bw_hz", std::to_string(absl::GetFlag(FLAGS_fll_bw_hz))); + config->set_property("Tracking.enable_fll_pull_in", absl::GetFlag(FLAGS_enable_fll_pull_in) ? "true" : "false"); + config->set_property("Tracking.enable_fll_steady_state", absl::GetFlag(FLAGS_enable_fll_steady_state) ? "true" : "false"); +#endif config->set_property("Tracking.smoother_length", std::to_string(smoother_length)); config->set_property("Tracking.dump", "true"); config->set_property("Tracking.dump_filename", "./tracking_ch_"); @@ -877,7 +959,12 @@ void HybridObservablesTest::check_results_carrier_phase( std::cout.precision(ss); // plots + +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Accumulated Carrier phase error [cycles]"); @@ -968,7 +1055,12 @@ void HybridObservablesTest::check_results_carrier_phase_double_diff( std::cout.precision(ss); // plots + +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Double diff Carrier Phase error [Cycles]"); @@ -1061,8 +1153,12 @@ void HybridObservablesTest::check_results_carrier_doppler_double_diff( << " [Hz]\n"; std::cout.precision(ss); - // plots +// plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Double diff Carrier Doppler error [Hz]"); @@ -1147,7 +1243,11 @@ void HybridObservablesTest::check_results_carrier_doppler( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Carrier Doppler error [Hz]"); @@ -1282,7 +1382,11 @@ void HybridObservablesTest::check_results_duplicated_satellite( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Carrier Doppler error [Hz]"); @@ -1341,8 +1445,12 @@ void HybridObservablesTest::check_results_duplicated_satellite( << " [Cycles]\n"; std::cout.precision(ss); - // plots +// plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Carrier Phase error [Cycles]"); @@ -1401,7 +1509,12 @@ void HybridObservablesTest::check_results_duplicated_satellite( std::cout.precision(ss); // plots + +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Pseudorange error [m]"); @@ -1526,8 +1639,12 @@ void HybridObservablesTest::check_results_code_pseudorange( << " [meters]\n"; std::cout.precision(ss); - // plots +// plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Double diff Pseudorange error [m]"); @@ -1568,7 +1685,11 @@ bool HybridObservablesTest::ReadRinexObs(std::vector* obs_vec, Gnss_S // Open and read reference RINEX observables file try { +#if USE_GLOG_AND_GFLAGS gnsstk::Rinex3ObsStream r_ref(FLAGS_filename_rinex_obs); +#else + gnsstk::Rinex3ObsStream r_ref(absl::GetFlag(FLAGS_filename_rinex_obs)); +#endif r_ref.exceptions(std::ios::failbit); gnsstk::Rinex3ObsData r_ref_data; gnsstk::Rinex3ObsHeader r_ref_header; @@ -1727,7 +1848,12 @@ TEST_F(HybridObservablesTest, ValidationOfResults) configure_generator(); // Generate signal raw signal samples and observations RINEX file + +#if USE_GLOG_AND_GFLAGS if (FLAGS_disable_generator == false) +#else + if (absl::GetFlag(FLAGS_disable_generator) == false) +#endif { generate_signal(); } @@ -1736,7 +1862,12 @@ TEST_F(HybridObservablesTest, ValidationOfResults) std::chrono::duration elapsed_seconds(0); // use generator or use an external capture file + +#if USE_GLOG_AND_GFLAGS if (FLAGS_enable_external_signal_file) +#else + if (absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { // create and configure an acquisition block and perform an acquisition to obtain the synchronization parameters ASSERT_EQ(acquire_signal(), true); @@ -1747,8 +1878,11 @@ TEST_F(HybridObservablesTest, ValidationOfResults) tmp_gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(tmp_gnss_synchro.Signal, 2, 0); - +#if USE_GLOG_AND_GFLAGS std::istringstream ss(FLAGS_test_satellite_PRN_list); +#else + std::istringstream ss(absl::GetFlag(FLAGS_test_satellite_PRN_list)); +#endif std::string token; while (std::getline(ss, token, ',')) @@ -1758,6 +1892,7 @@ TEST_F(HybridObservablesTest, ValidationOfResults) } } +#if USE_GLOG_AND_GFLAGS configure_receiver(FLAGS_PLL_bw_hz_start, FLAGS_DLL_bw_hz_start, FLAGS_PLL_narrow_bw_hz, @@ -1765,11 +1900,25 @@ TEST_F(HybridObservablesTest, ValidationOfResults) FLAGS_extend_correlation_symbols, FLAGS_smoother_length, FLAGS_high_dyn); +#else + configure_receiver(absl::GetFlag(FLAGS_PLL_bw_hz_start), + absl::GetFlag(FLAGS_DLL_bw_hz_start), + absl::GetFlag(FLAGS_PLL_narrow_bw_hz), + absl::GetFlag(FLAGS_DLL_narrow_bw_hz), + absl::GetFlag(FLAGS_extend_correlation_symbols), + absl::GetFlag(FLAGS_smoother_length), + absl::GetFlag(FLAGS_high_dyn)); +#endif for (auto& n : gnss_synchro_vec) { // setup the signal synchronization, simulating an acquisition + +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { // based on true observables metadata (for custom sdr generator) // open true observables log file written by the simulator or based on provided RINEX obs @@ -1873,6 +2022,7 @@ TEST_F(HybridObservablesTest, ValidationOfResults) ASSERT_NO_THROW({ std::string file; +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { file = "./" + filename_raw_data; @@ -1881,6 +2031,16 @@ TEST_F(HybridObservablesTest, ValidationOfResults) { file = FLAGS_signal_file; } +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + file = "./" + filename_raw_data; + } + else + { + file = absl::GetFlag(FLAGS_signal_file); + } +#endif const char* file_name = file.c_str(); gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(int8_t), file_name, false); gr::blocks::interleaved_char_to_complex::sptr gr_interleaved_char_to_complex = gr::blocks::interleaved_char_to_complex::make(); @@ -1900,7 +2060,11 @@ TEST_F(HybridObservablesTest, ValidationOfResults) // connect sample counter and timmer to the last channel in observables block (extra channel) top_block_tlm->connect(samp_counter, 0, observables->get_left_block(), tracking_ch_vec.size()); +#if USE_GLOG_AND_GFLAGS file_source->seek(2 * FLAGS_skip_samples, 0); // skip head. ibyte, two bytes per complex sample +#else + file_source->seek(2 * absl::GetFlag(FLAGS_skip_samples), 0); // skip head. ibyte, two bytes per complex sample +#endif }) << "Failure connecting the blocks."; for (auto& n : tracking_ch_vec) @@ -1918,8 +2082,11 @@ TEST_F(HybridObservablesTest, ValidationOfResults) // check results // Matrices for storing columnwise true GPS time, Range, Doppler and Carrier phase std::vector true_obs_vec; - +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { // load the true values True_Observables_Reader true_observables; @@ -1963,7 +2130,11 @@ TEST_F(HybridObservablesTest, ValidationOfResults) } else { +#if USE_GLOG_AND_GFLAGS if (!FLAGS_duplicated_satellites_test) +#else + if (!absl::GetFlag(FLAGS_duplicated_satellites_test)) +#endif { ASSERT_EQ(ReadRinexObs(&true_obs_vec, gnss_synchro_master), true) << "Failure reading RINEX file"; @@ -2018,8 +2189,12 @@ TEST_F(HybridObservablesTest, ValidationOfResults) } } - // Cut measurement initial transitory of the measurements +// Cut measurement initial transitory of the measurements +#if USE_GLOG_AND_GFLAGS double initial_transitory_s = FLAGS_skip_obs_transitory_s; +#else + double initial_transitory_s = absl::GetFlag(FLAGS_skip_obs_transitory_s); +#endif for (unsigned int n = 0; n < measured_obs_vec.size(); n++) { index = arma::find(measured_obs_vec.at(n).col(0) >= (measured_obs_vec.at(n)(0, 0) + initial_transitory_s), 1, "first"); @@ -2027,8 +2202,11 @@ TEST_F(HybridObservablesTest, ValidationOfResults) { measured_obs_vec.at(n).shed_rows(0, index(0)); } - +#if USE_GLOG_AND_GFLAGS if (!FLAGS_duplicated_satellites_test) +#else + if (!absl::GetFlag(FLAGS_duplicated_satellites_test)) +#endif { index = arma::find(measured_obs_vec.at(n).col(0) >= true_obs_vec.at(n)(0, 0), 1, "first"); if ((!index.empty()) and (index(0) > 0)) @@ -2038,11 +2216,19 @@ TEST_F(HybridObservablesTest, ValidationOfResults) } } +#if USE_GLOG_AND_GFLAGS if (FLAGS_duplicated_satellites_test) +#else + if (absl::GetFlag(FLAGS_duplicated_satellites_test)) +#endif { // special test mode for duplicated satellites std::vector prn_pairs; +#if USE_GLOG_AND_GFLAGS std::stringstream ss(FLAGS_duplicated_satellites_prns); +#else + std::stringstream ss(absl::GetFlag(FLAGS_duplicated_satellites_prns)); +#endif unsigned int i; while (ss >> i) { @@ -2190,9 +2376,13 @@ TEST_F(HybridObservablesTest, ValidationOfResults) measured_obs_vec.at(n), measured_obs_vec.at(min_pr_ch_id), "[CH " + std::to_string(n) + "] PRN " + std::to_string(gnss_synchro_vec.at(n).PRN) + " "); - // Do not compare E5a with E5 RINEX due to the Doppler frequency discrepancy caused by the different center frequencies - // E5a_fc=1176.45e6, E5b_fc=1207.14e6, E5_fc=1191.795e6; +// Do not compare E5a with E5 RINEX due to the Doppler frequency discrepancy caused by the different center frequencies +// E5a_fc=1176.45e6, E5b_fc=1207.14e6, E5_fc=1191.795e6; +#if USE_GLOG_AND_GFLAGS if (strcmp("5X\0", gnss_synchro_vec.at(n).Signal) != 0 or FLAGS_compare_with_5X) +#else + if (strcmp("5X\0", gnss_synchro_vec.at(n).Signal) != 0 or absl::GetFlag(FLAGS_compare_with_5X)) +#endif { check_results_carrier_phase_double_diff(true_obs_vec.at(n), true_obs_vec.at(min_pr_ch_id), @@ -2215,7 +2405,11 @@ TEST_F(HybridObservablesTest, ValidationOfResults) { std::cout << "[CH " << std::to_string(n) << "] PRN " << std::to_string(gnss_synchro_vec.at(n).PRN) << " is the reference satellite\n"; } +#if USE_GLOG_AND_GFLAGS if (FLAGS_compute_single_diffs) +#else + if (absl::GetFlag(FLAGS_compute_single_diffs)) +#endif { check_results_carrier_phase(true_obs_vec.at(n), true_TOW_ch_s, diff --git a/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test_fpga.cc b/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test_fpga.cc index 492b5d1fc8..9824e1d177 100644 --- a/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test_fpga.cc +++ b/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test_fpga.cc @@ -224,12 +224,17 @@ class HybridObservablesTestFpga : public ::testing::Test std::string p3; std::string p4; std::string p5; +#if USE_GLOG_AND_GFLAGS std::string implementation = FLAGS_trk_test_implementation; - const int baseband_sampling_freq = FLAGS_fs_gen_sps; - std::string filename_rinex_obs = FLAGS_filename_rinex_obs; std::string filename_raw_data = FLAGS_filename_raw_data; +#else + std::string implementation = absl::GetFlag(FLAGS_trk_test_implementation); + const int baseband_sampling_freq = absl::GetFlag(FLAGS_fs_gen_sps); + std::string filename_rinex_obs = absl::GetFlag(FLAGS_filename_rinex_obs); + std::string filename_raw_data = absl::GetFlag(FLAGS_filename_raw_data); +#endif int configure_generator(); int generate_signal(); @@ -310,6 +315,7 @@ class HybridObservablesTestFpga : public ::testing::Test int HybridObservablesTestFpga::configure_generator() { +#if USE_GLOG_AND_GFLAGS // Configure signal generator generator_binary = FLAGS_generator_binary; @@ -325,6 +331,24 @@ int HybridObservablesTestFpga::configure_generator() p3 = std::string("-rinex_obs_file=") + FLAGS_filename_rinex_obs; // RINEX 2.10 observation file output p4 = std::string("-sig_out_file=") + FLAGS_filename_raw_data; // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] +#else + // Configure signal generator + generator_binary = absl::GetFlag(FLAGS_generator_binary); + + p1 = std::string("-rinex_nav_file=") + absl::GetFlag(FLAGS_rinex_nav_file); + if (absl::GetFlag(FLAGS_dynamic_position).empty()) + { + p2 = std::string("-static_position=") + absl::GetFlag(FLAGS_static_position) + std::string(",") + std::to_string(absl::GetFlag(FLAGS_duration) * 10); + } + else + { + p2 = std::string("-obs_pos_file=") + std::string(absl::GetFlag(FLAGS_dynamic_position)); + } + p3 = std::string("-rinex_obs_file=") + absl::GetFlag(FLAGS_filename_rinex_obs); // RINEX 2.10 observation file output + p4 = std::string("-sig_out_file=") + absl::GetFlag(FLAGS_filename_raw_data); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples + p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] +#endif + return 0; } @@ -422,12 +446,15 @@ void* handler_DMA_obs_test(void* arguments) return nullptr; } - // ************************************************************************* - // Open input file - // ************************************************************************* + // ************************************************************************* + // Open input file + // ************************************************************************* +#if USE_GLOG_AND_GFLAGS uint32_t skip_samples = static_cast(FLAGS_skip_samples); - +#else + uint32_t skip_samples = static_cast(absl::GetFlag(FLAGS_skip_samples)); +#endif if (skip_samples + skip_used_samples > 0) { try @@ -601,8 +628,11 @@ bool HybridObservablesTestFpga::acquire_signal() std::string signal; struct DMA_handler_args_obs_test args; struct acquisition_handler_args_obs_test args_acq; - +#if USE_GLOG_AND_GFLAGS std::string file = FLAGS_signal_file; +#else + std::string file = absl::GetFlag(FLAGS_signal_file); +#endif args.file = file; // DMA file configuration // instantiate the FPGA switch and set the @@ -669,11 +699,17 @@ bool HybridObservablesTestFpga::acquire_signal() acquisition->set_gnss_synchro(&tmp_gnss_synchro); acquisition->set_channel_fsm(channel_fsm_); acquisition->set_channel(0); +#if USE_GLOG_AND_GFLAGS acquisition->set_doppler_max(config->property("Acquisition.doppler_max", FLAGS_external_signal_acquisition_doppler_max_hz)); acquisition->set_doppler_step(config->property("Acquisition.doppler_step", FLAGS_external_signal_acquisition_doppler_step_hz)); acquisition->set_doppler_center(0); acquisition->set_threshold(config->property("Acquisition.threshold", FLAGS_external_signal_acquisition_threshold)); - +#else + acquisition->set_doppler_max(config->property("Acquisition.doppler_max", absl::GetFlag(FLAGS_external_signal_acquisition_doppler_max_hz))); + acquisition->set_doppler_step(config->property("Acquisition.doppler_step", absl::GetFlag(FLAGS_external_signal_acquisition_doppler_step_hz))); + acquisition->set_doppler_center(0); + acquisition->set_threshold(config->property("Acquisition.threshold", absl::GetFlag(FLAGS_external_signal_acquisition_threshold))); +#endif std::chrono::time_point start, end; std::chrono::duration elapsed_seconds; start = std::chrono::system_clock::now(); @@ -760,7 +796,11 @@ bool HybridObservablesTestFpga::acquire_signal() if (start_msg == true) { +#if USE_GLOG_AND_GFLAGS std::cout << "Reading external signal file: " << FLAGS_signal_file << '\n'; +#else + std::cout << "Reading external signal file: " << absl::GetFlag(FLAGS_signal_file) << '\n'; +#endif std::cout << "Searching for " << System_and_Signal << " Satellites...\n"; std::cout << "["; start_msg = false; @@ -850,9 +890,15 @@ void HybridObservablesTestFpga::configure_receiver( config->set_property("Tracking.extend_correlation_symbols", std::to_string(extend_correlation_symbols)); config->set_property("Tracking.pll_bw_narrow_hz", std::to_string(PLL_narrow_bw_hz)); config->set_property("Tracking.dll_bw_narrow_hz", std::to_string(DLL_narrow_bw_hz)); +#if USE_GLOG_AND_GFLAGS config->set_property("Tracking.fll_bw_hz", std::to_string(FLAGS_fll_bw_hz)); config->set_property("Tracking.enable_fll_pull_in", FLAGS_enable_fll_pull_in ? "true" : "false"); config->set_property("Tracking.enable_fll_steady_state", FLAGS_enable_fll_steady_state ? "true" : "false"); +#else + config->set_property("Tracking.fll_bw_hz", std::to_string(absl::GetFlag(FLAGS_fll_bw_hz))); + config->set_property("Tracking.enable_fll_pull_in", absl::GetFlag(FLAGS_enable_fll_pull_in) ? "true" : "false"); + config->set_property("Tracking.enable_fll_steady_state", absl::GetFlag(FLAGS_enable_fll_steady_state) ? "true" : "false"); +#endif config->set_property("Tracking.smoother_length", std::to_string(smoother_length)); config->set_property("Tracking.dump", "true"); config->set_property("Tracking.dump_filename", "./tracking_ch_"); @@ -995,7 +1041,11 @@ void HybridObservablesTestFpga::check_results_carrier_phase( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Accumulated Carrier phase error [cycles]"); @@ -1084,7 +1134,11 @@ void HybridObservablesTestFpga::check_results_carrier_phase_double_diff( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Double diff Carrier Phase error [Cycles]"); @@ -1171,8 +1225,12 @@ void HybridObservablesTestFpga::check_results_carrier_doppler_double_diff( << " [Hz]\n"; std::cout.precision(ss); - // plots +// plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Double diff Carrier Doppler error [Hz]"); @@ -1250,7 +1308,11 @@ void HybridObservablesTestFpga::check_results_carrier_doppler( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Carrier Doppler error [Hz]"); @@ -1384,7 +1446,11 @@ void HybridObservablesTestFpga::check_results_duplicated_satellite( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Carrier Doppler error [Hz]"); @@ -1444,7 +1510,11 @@ void HybridObservablesTestFpga::check_results_duplicated_satellite( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Carrier Phase error [Cycles]"); @@ -1503,7 +1573,11 @@ void HybridObservablesTestFpga::check_results_duplicated_satellite( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Pseudorange error [m]"); @@ -1627,8 +1701,12 @@ void HybridObservablesTestFpga::check_results_code_pseudorange( << " [meters]\n"; std::cout.precision(ss); - // plots +// plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Double diff Pseudorange error [m]"); @@ -1661,7 +1739,11 @@ bool HybridObservablesTestFpga::ReadRinexObs(std::vector* obs_vec, Gn // Open and read reference RINEX observables file try { +#if USE_GLOG_AND_GFLAGS gnsstk::Rinex3ObsStream r_ref(FLAGS_filename_rinex_obs); +#else + gnsstk::Rinex3ObsStream r_ref(absl::GetFlag(FLAGS_filename_rinex_obs)); +#endif r_ref.exceptions(std::ios::failbit); gnsstk::Rinex3ObsData r_ref_data; gnsstk::Rinex3ObsHeader r_ref_header; @@ -1828,7 +1910,11 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) configure_generator(); // Generate signal raw signal samples and observations RINEX file +#if USE_GLOG_AND_GFLAGS if (FLAGS_disable_generator == false) +#else + if (absl::GetFlag(FLAGS_disable_generator) == false) +#endif { generate_signal(); } @@ -1836,8 +1922,12 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) std::chrono::time_point start, end; std::chrono::duration elapsed_seconds(0); - // use generator or use an external capture file +// use generator or use an external capture file +#if USE_GLOG_AND_GFLAGS if (FLAGS_enable_external_signal_file) +#else + if (absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { // create and configure an acquisition block and perform an acquisition to obtain the synchronization parameters ASSERT_EQ(acquire_signal(), true); @@ -1849,7 +1939,11 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) std::string signal = "1C"; signal.copy(tmp_gnss_synchro.Signal, 2, 0); +#if USE_GLOG_AND_GFLAGS std::istringstream ss(FLAGS_test_satellite_PRN_list); +#else + std::istringstream ss(absl::GetFlag(FLAGS_test_satellite_PRN_list)); +#endif std::string token; while (std::getline(ss, token, ',')) @@ -1858,7 +1952,7 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) gnss_synchro_vec.push_back(tmp_gnss_synchro); } } - +#if USE_GLOG_AND_GFLAGS configure_receiver(FLAGS_PLL_bw_hz_start, FLAGS_DLL_bw_hz_start, FLAGS_PLL_narrow_bw_hz, @@ -1866,11 +1960,24 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) FLAGS_extend_correlation_symbols, FLAGS_smoother_length, FLAGS_high_dyn); +#else + configure_receiver(absl::GetFlag(FLAGS_PLL_bw_hz_start), + absl::GetFlag(FLAGS_DLL_bw_hz_start), + absl::GetFlag(FLAGS_PLL_narrow_bw_hz), + absl::GetFlag(FLAGS_DLL_narrow_bw_hz), + absl::GetFlag(FLAGS_extend_correlation_symbols), + absl::GetFlag(FLAGS_smoother_length), + absl::GetFlag(FLAGS_high_dyn)); +#endif for (auto& n : gnss_synchro_vec) { // setup the signal synchronization, simulating an acquisition +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { // based on true observables metadata (for custom sdr generator) // open true observables log file written by the simulator or based on provided RINEX obs @@ -2011,6 +2118,7 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) std::string file; ASSERT_NO_THROW({ +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { file = "./" + filename_raw_data; @@ -2019,6 +2127,16 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) { file = FLAGS_signal_file; } +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + file = "./" + filename_raw_data; + } + else + { + file = absl::GetFlag(FLAGS_signal_file); + } +#endif int observable_interval_ms = 20; double fs = static_cast(config->property("GNSS-SDR.internal_fs_sps", 0)); @@ -2051,7 +2169,12 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) usleep(1000000); args.file = file; +#if USE_GLOG_AND_GFLAGS args.nsamples_tx = baseband_sampling_freq * FLAGS_duration; +#else + args.nsamples_tx = baseband_sampling_freq * absl::GetFlag(FLAGS_duration); +#endif + args.skip_used_samples = 0; if (pthread_create(&thread_DMA, nullptr, handler_DMA_obs_test, reinterpret_cast(&args)) < 0) @@ -2087,8 +2210,11 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) // check results // Matrices for storing columnwise true GPS time, Range, Doppler and Carrier phase std::vector true_obs_vec; - +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { // load the true values True_Observables_Reader true_observables; @@ -2132,7 +2258,11 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) } else { +#if USE_GLOG_AND_GFLAGS if (!FLAGS_duplicated_satellites_test) +#else + if (!absl::GetFlag(FLAGS_duplicated_satellites_test)) +#endif { ASSERT_EQ(ReadRinexObs(&true_obs_vec, gnss_synchro_master), true) << "Failure reading RINEX file"; @@ -2188,8 +2318,12 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) } } - // Cut measurement initial transitory of the measurements +// Cut measurement initial transitory of the measurements +#if USE_GLOG_AND_GFLAGS double initial_transitory_s = FLAGS_skip_obs_transitory_s; +#else + double initial_transitory_s = absl::GetFlag(FLAGS_skip_obs_transitory_s); +#endif for (unsigned int n = 0; n < measured_obs_vec.size(); n++) { index = arma::find(measured_obs_vec.at(n).col(0) >= (measured_obs_vec.at(n)(0, 0) + initial_transitory_s), 1, "first"); @@ -2197,8 +2331,11 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) { measured_obs_vec.at(n).shed_rows(0, index(0)); } - +#if USE_GLOG_AND_GFLAGS if (!FLAGS_duplicated_satellites_test) +#else + if (!absl::GetFlag(FLAGS_duplicated_satellites_test)) +#endif { index = arma::find(measured_obs_vec.at(n).col(0) >= true_obs_vec.at(n)(0, 0), 1, "first"); if ((!index.empty()) and (index(0) > 0)) @@ -2207,12 +2344,19 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) } } } - +#if USE_GLOG_AND_GFLAGS if (FLAGS_duplicated_satellites_test) +#else + if (absl::GetFlag(FLAGS_duplicated_satellites_test)) +#endif { // special test mode for duplicated satellites std::vector prn_pairs; +#if USE_GLOG_AND_GFLAGS std::stringstream ss(FLAGS_duplicated_satellites_prns); +#else + std::stringstream ss(absl::GetFlag(FLAGS_duplicated_satellites_prns)); +#endif unsigned int i; while (ss >> i) { @@ -2363,7 +2507,11 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) "[CH " + std::to_string(n) + "] PRN " + std::to_string(gnss_synchro_vec.at(n).PRN) + " "); // Do not compare E5a with E5 RINEX due to the Doppler frequency discrepancy caused by the different center frequencies // E5a_fc=1176.45e6, E5b_fc=1207.14e6, E5_fc=1191.795e6; +#if USE_GLOG_AND_GFLAGS if (strcmp("5X\0", gnss_synchro_vec.at(n).Signal) != 0 or FLAGS_compare_with_5X) +#else + if (strcmp("5X\0", gnss_synchro_vec.at(n).Signal) != 0 or absl::GetFlag(FLAGS_compare_with_5X)) +#endif { check_results_carrier_phase_double_diff(true_obs_vec.at(n), true_obs_vec.at(min_pr_ch_id), @@ -2386,7 +2534,11 @@ TEST_F(HybridObservablesTestFpga, ValidationOfResults) { std::cout << "[CH " << std::to_string(n) << "] PRN " << std::to_string(gnss_synchro_vec.at(n).PRN) << " is the reference satellite\n"; } +#if USE_GLOG_AND_GFLAGS if (FLAGS_compute_single_diffs) +#else + if (absl::GetFlag(FLAGS_compute_single_diffs)) +#endif { check_results_carrier_phase(true_obs_vec.at(n), true_TOW_ch_s, diff --git a/src/tests/unit-tests/signal-processing-blocks/telemetry_decoder/gps_l1_ca_telemetry_decoder_test.cc b/src/tests/unit-tests/signal-processing-blocks/telemetry_decoder/gps_l1_ca_telemetry_decoder_test.cc index 3155a3ab80..f6916b29f7 100644 --- a/src/tests/unit-tests/signal-processing-blocks/telemetry_decoder/gps_l1_ca_telemetry_decoder_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/telemetry_decoder/gps_l1_ca_telemetry_decoder_test.cc @@ -186,11 +186,15 @@ class GpsL1CATelemetryDecoderTest : public ::testing::Test std::string p4; std::string p5; +#if USE_GLOG_AND_GFLAGS const int baseband_sampling_freq = FLAGS_fs_gen_sps; - std::string filename_rinex_obs = FLAGS_filename_rinex_obs; std::string filename_raw_data = FLAGS_filename_raw_data; - +#else + const int baseband_sampling_freq = absl::GetFlag(FLAGS_fs_gen_sps); + std::string filename_rinex_obs = absl::GetFlag(FLAGS_filename_rinex_obs); + std::string filename_raw_data = absl::GetFlag(FLAGS_filename_raw_data); +#endif int configure_generator(); int generate_signal(); void check_results(arma::vec& true_time_s, @@ -218,6 +222,7 @@ class GpsL1CATelemetryDecoderTest : public ::testing::Test int GpsL1CATelemetryDecoderTest::configure_generator() { +#if USE_GLOG_AND_GFLAGS // Configure signal generator generator_binary = FLAGS_generator_binary; @@ -233,6 +238,24 @@ int GpsL1CATelemetryDecoderTest::configure_generator() p3 = std::string("-rinex_obs_file=") + FLAGS_filename_rinex_obs; // RINEX 2.10 observation file output p4 = std::string("-sig_out_file=") + FLAGS_filename_raw_data; // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] +#else + // Configure signal generator + generator_binary = absl::GetFlag(FLAGS_generator_binary); + + p1 = std::string("-rinex_nav_file=") + absl::GetFlag(FLAGS_rinex_nav_file); + if (absl::GetFlag(FLAGS_dynamic_position).empty()) + { + p2 = std::string("-static_position=") + absl::GetFlag(FLAGS_static_position) + std::string(",") + std::to_string(absl::GetFlag(FLAGS_duration) * 10); + } + else + { + p2 = std::string("-obs_pos_file=") + std::string(absl::GetFlag(FLAGS_dynamic_position)); + } + p3 = std::string("-rinex_obs_file=") + absl::GetFlag(FLAGS_filename_rinex_obs); // RINEX 2.10 observation file output + p4 = std::string("-sig_out_file=") + absl::GetFlag(FLAGS_filename_raw_data); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples + p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] +#endif + return 0; } @@ -268,8 +291,11 @@ void GpsL1CATelemetryDecoderTest::configure_receiver() gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); +#if USE_GLOG_AND_GFLAGS gnss_synchro.PRN = FLAGS_test_satellite_PRN; - +#else + gnss_synchro.PRN = absl::GetFlag(FLAGS_test_satellite_PRN); +#endif config->set_property("GNSS-SDR.internal_fs_sps", std::to_string(baseband_sampling_freq)); // Set Tracking @@ -340,7 +366,11 @@ TEST_F(GpsL1CATelemetryDecoderTest, ValidationOfResults) configure_generator(); // Generate signal raw signal samples and observations RINEX file +#if USE_GLOG_AND_GFLAGS if (FLAGS_disable_generator == false) +#else + if (absl::GetFlag(FLAGS_disable_generator) == false) +#endif { generate_signal(); } @@ -352,7 +382,11 @@ TEST_F(GpsL1CATelemetryDecoderTest, ValidationOfResults) // open true observables log file written by the simulator Tracking_True_Obs_Reader true_obs_data; +#if USE_GLOG_AND_GFLAGS int test_satellite_PRN = FLAGS_test_satellite_PRN; +#else + int test_satellite_PRN = absl::GetFlag(FLAGS_test_satellite_PRN); +#endif std::cout << "Testing satellite PRN=" << test_satellite_PRN << '\n'; std::string true_obs_file = std::string("./gps_l1_ca_obs_prn"); true_obs_file.append(std::to_string(test_satellite_PRN)); diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/cpu_multicorrelator_real_codes_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/cpu_multicorrelator_real_codes_test.cc index 34c4894d73..7b7566f00e 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/cpu_multicorrelator_real_codes_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/cpu_multicorrelator_real_codes_test.cc @@ -18,18 +18,25 @@ #include "GPS_L1_CA.h" #include "cpu_multicorrelator_real_codes.h" #include "gps_sdr_signal_replica.h" -#include #include #include #include #include #include +#include #include #include - +#if USE_GLOG_AND_GFLAGS +#include DEFINE_int32(cpu_multicorrelator_real_codes_iterations_test, 100, "Number of averaged iterations in CPU multicorrelator test timing test"); DEFINE_int32(cpu_multicorrelator_real_codes_max_threads_test, 12, "Number of maximum concurrent correlators in CPU multicorrelator test timing test"); +#else +#include +ABSL_FLAG(int32_t, cpu_multicorrelator_real_codes_iterations_test, 100, "Number of averaged iterations in CPU multicorrelator test timing test"); +ABSL_FLAG(int32_t, cpu_multicorrelator_real_codes_max_threads_test, 12, "Number of maximum concurrent correlators in CPU multicorrelator test timing test"); +#endif + void run_correlator_cpu_real_codes(Cpu_Multicorrelator_Real_Codes* correlator, float d_rem_carrier_phase_rad, @@ -39,7 +46,11 @@ void run_correlator_cpu_real_codes(Cpu_Multicorrelator_Real_Codes* correlator, float d_rem_code_phase_chips, int correlation_size) { +#if USE_GLOG_AND_GFLAGS for (int k = 0; k < FLAGS_cpu_multicorrelator_real_codes_iterations_test; k++) +#else + for (int k = 0; k < absl::GetFlag(FLAGS_cpu_multicorrelator_real_codes_iterations_test); k++) +#endif { correlator->Carrier_wipeoff_multicorrelator_resampler(d_rem_carrier_phase_rad, d_carrier_phase_step_rad, @@ -56,7 +67,11 @@ TEST(CpuMulticorrelatorRealCodesTest, MeasureExecutionTime) std::chrono::time_point start; std::chrono::time_point end; std::chrono::duration elapsed_seconds(0); +#if USE_GLOG_AND_GFLAGS int max_threads = FLAGS_cpu_multicorrelator_real_codes_max_threads_test; +#else + int max_threads = absl::GetFlag(FLAGS_cpu_multicorrelator_real_codes_max_threads_test); +#endif std::vector thread_pool; std::vector correlator_pool(max_threads); unsigned int correlation_sizes[3] = {2048, 4096, 8192}; @@ -143,7 +158,11 @@ TEST(CpuMulticorrelatorRealCodesTest, MeasureExecutionTime) thread_pool.clear(); end = std::chrono::system_clock::now(); elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS execution_times[correlation_sizes_idx] = elapsed_seconds.count() / static_cast(FLAGS_cpu_multicorrelator_real_codes_iterations_test); +#else + execution_times[correlation_sizes_idx] = elapsed_seconds.count() / static_cast(absl::GetFlag(FLAGS_cpu_multicorrelator_real_codes_iterations_test)); +#endif std::cout << "CPU Multicorrelator (real codes) execution time for length=" << correlation_sizes[correlation_sizes_idx] << " : " << execution_times[correlation_sizes_idx] << " [s]\n"; } @@ -166,7 +185,11 @@ TEST(CpuMulticorrelatorRealCodesTest, MeasureExecutionTimeAlloc) std::chrono::time_point start; std::chrono::time_point end; std::chrono::duration elapsed_seconds(0); +#if USE_GLOG_AND_GFLAGS int max_threads = FLAGS_cpu_multicorrelator_real_codes_max_threads_test; +#else + int max_threads = absl::GetFlag(FLAGS_cpu_multicorrelator_real_codes_max_threads_test); +#endif std::vector thread_pool; std::vector correlator_pool(max_threads); unsigned int correlation_sizes[3] = {2048, 4096, 8192}; @@ -241,7 +264,11 @@ TEST(CpuMulticorrelatorRealCodesTest, MeasureExecutionTimeAlloc) thread_pool.clear(); end = std::chrono::system_clock::now(); elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS execution_times[correlation_sizes_idx] = elapsed_seconds.count() / static_cast(FLAGS_cpu_multicorrelator_real_codes_iterations_test); +#else + execution_times[correlation_sizes_idx] = elapsed_seconds.count() / static_cast(absl::GetFlag(FLAGS_cpu_multicorrelator_real_codes_iterations_test)); +#endif std::cout << "CPU Multicorrelator (real codes) execution time for length=" << correlation_sizes[correlation_sizes_idx] << " : " << execution_times[correlation_sizes_idx] << " [s]\n"; } diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/cpu_multicorrelator_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/cpu_multicorrelator_test.cc index 339205f437..7bd54c5a9a 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/cpu_multicorrelator_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/cpu_multicorrelator_test.cc @@ -18,7 +18,6 @@ #include "GPS_L1_CA.h" #include "cpu_multicorrelator.h" #include "gps_sdr_signal_replica.h" -#include #include #include #include @@ -27,9 +26,13 @@ #include #include - +#if USE_GLOG_AND_GFLAGS DEFINE_int32(cpu_multicorrelator_iterations_test, 100, "Number of averaged iterations in CPU multicorrelator test timing test"); DEFINE_int32(cpu_multicorrelator_max_threads_test, 12, "Number of maximum concurrent correlators in CPU multicorrelator test timing test"); +#else +ABSL_FLAG(int32_t, cpu_multicorrelator_iterations_test, 100, "Number of averaged iterations in CPU multicorrelator test timing test"); +ABSL_FLAG(int32_t, cpu_multicorrelator_max_threads_test, 12, "Number of maximum concurrent correlators in CPU multicorrelator test timing test"); +#endif void run_correlator_cpu(Cpu_Multicorrelator* correlator, float d_rem_carrier_phase_rad, @@ -38,7 +41,11 @@ void run_correlator_cpu(Cpu_Multicorrelator* correlator, float d_rem_code_phase_chips, int correlation_size) { +#if USE_GLOG_AND_GFLAGS for (int k = 0; k < FLAGS_cpu_multicorrelator_iterations_test; k++) +#else + for (int k = 0; k < absl::GetFlag(FLAGS_cpu_multicorrelator_iterations_test); k++) +#endif { correlator->Carrier_wipeoff_multicorrelator_resampler(d_rem_carrier_phase_rad, d_carrier_phase_step_rad, @@ -53,7 +60,11 @@ TEST(CpuMulticorrelatorTest, MeasureExecutionTime) { std::chrono::time_point start, end; std::chrono::duration elapsed_seconds(0); +#if USE_GLOG_AND_GFLAGS int max_threads = FLAGS_cpu_multicorrelator_max_threads_test; +#else + int max_threads = absl::GetFlag(FLAGS_cpu_multicorrelator_max_threads_test); +#endif std::vector thread_pool; std::vector correlator_pool(max_threads); unsigned int correlation_sizes[3] = {2048, 4096, 8192}; @@ -138,7 +149,11 @@ TEST(CpuMulticorrelatorTest, MeasureExecutionTime) thread_pool.clear(); end = std::chrono::system_clock::now(); elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS execution_times[correlation_sizes_idx] = elapsed_seconds.count() / static_cast(FLAGS_cpu_multicorrelator_iterations_test); +#else + execution_times[correlation_sizes_idx] = elapsed_seconds.count() / static_cast(absl::GetFlag(FLAGS_cpu_multicorrelator_iterations_test)); +#endif std::cout << "CPU Multicorrelator execution time for length=" << correlation_sizes[correlation_sizes_idx] << " : " << execution_times[correlation_sizes_idx] << " [s]\n"; } @@ -160,7 +175,11 @@ TEST(CpuMulticorrelatorTest, MeasureExecutionTimeAlloc) { std::chrono::time_point start, end; std::chrono::duration elapsed_seconds(0); +#if USE_GLOG_AND_GFLAGS int max_threads = FLAGS_cpu_multicorrelator_max_threads_test; +#else + int max_threads = absl::GetFlag(FLAGS_cpu_multicorrelator_max_threads_test); +#endif std::vector thread_pool; std::vector correlator_pool(max_threads); unsigned int correlation_sizes[3] = {2048, 4096, 8192}; @@ -236,7 +255,11 @@ TEST(CpuMulticorrelatorTest, MeasureExecutionTimeAlloc) thread_pool.clear(); end = std::chrono::system_clock::now(); elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS execution_times[correlation_sizes_idx] = elapsed_seconds.count() / static_cast(FLAGS_cpu_multicorrelator_iterations_test); +#else + execution_times[correlation_sizes_idx] = elapsed_seconds.count() / static_cast(absl::GetFlag(FLAGS_cpu_multicorrelator_iterations_test)); +#endif std::cout << "CPU Multicorrelator execution time for length=" << correlation_sizes[correlation_sizes_idx] << " : " << execution_times[correlation_sizes_idx] << " [s]\n"; } diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/galileo_e1_dll_pll_veml_tracking_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/galileo_e1_dll_pll_veml_tracking_test.cc index 0519b3de37..b5b92999bb 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/galileo_e1_dll_pll_veml_tracking_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/galileo_e1_dll_pll_veml_tracking_test.cc @@ -53,7 +53,7 @@ class GalileoE1DllPllVemlTrackingInternalTest : public ::testing::Test gr::top_block_sptr top_block; std::shared_ptr factory; std::shared_ptr config; - Gnss_Synchro gnss_synchro{}; + Gnss_Synchro gnss_synchro; size_t item_size; int message{0}; bool stop{false}; diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test.cc index 87af5fe452..a7464207c2 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test.cc @@ -138,10 +138,15 @@ class GpsL1CADllPllTrackingTest : public ::testing::Test std::string p6; std::string implementation = "GPS_L1_CA_DLL_PLL_Tracking"; +#if USE_GLOG_AND_GFLAGS const int baseband_sampling_freq = FLAGS_fs_gen_sps; - std::string filename_rinex_obs = FLAGS_filename_rinex_obs; std::string filename_raw_data = FLAGS_filename_raw_data; +#else + const int baseband_sampling_freq = absl::GetFlag(FLAGS_fs_gen_sps); + std::string filename_rinex_obs = absl::GetFlag(FLAGS_filename_rinex_obs); + std::string filename_raw_data = absl::GetFlag(FLAGS_filename_raw_data); +#endif int configure_generator(double CN0_dBHz, int file_idx); int generate_signal(); @@ -193,6 +198,7 @@ class GpsL1CADllPllTrackingTest : public ::testing::Test int GpsL1CADllPllTrackingTest::configure_generator(double CN0_dBHz, int file_idx) { +#if USE_GLOG_AND_GFLAGS // Configure signal generator generator_binary = FLAGS_generator_binary; @@ -209,6 +215,25 @@ int GpsL1CADllPllTrackingTest::configure_generator(double CN0_dBHz, int file_idx p4 = std::string("-sig_out_file=") + FLAGS_filename_raw_data + std::to_string(file_idx); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] p6 = std::string("-CN0_dBHz=") + std::to_string(CN0_dBHz); // Signal generator CN0 +#else + // Configure signal generator + generator_binary = absl::GetFlag(FLAGS_generator_binary); + + p1 = std::string("-rinex_nav_file=") + absl::GetFlag(FLAGS_rinex_nav_file); + if (absl::GetFlag(FLAGS_dynamic_position).empty()) + { + p2 = std::string("-static_position=") + absl::GetFlag(FLAGS_static_position) + std::string(",") + std::to_string(absl::GetFlag(FLAGS_duration) * 10); + } + else + { + p2 = std::string("-obs_pos_file=") + std::string(absl::GetFlag(FLAGS_dynamic_position)); + } + p3 = std::string("-rinex_obs_file=") + absl::GetFlag(FLAGS_filename_rinex_obs); // RINEX 2.10 observation file output + p4 = std::string("-sig_out_file=") + absl::GetFlag(FLAGS_filename_raw_data) + std::to_string(file_idx); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples + p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] + p6 = std::string("-CN0_dBHz=") + std::to_string(CN0_dBHz); // Signal generator CN0 +#endif + return 0; } @@ -249,7 +274,12 @@ void GpsL1CADllPllTrackingTest::configure_receiver( gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); + +#if USE_GLOG_AND_GFLAGS gnss_synchro.PRN = FLAGS_test_satellite_PRN; +#else + gnss_synchro.PRN = absl::GetFlag(FLAGS_test_satellite_PRN); +#endif config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_sps", std::to_string(baseband_sampling_freq)); @@ -464,6 +494,7 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) // *********************************************************** // ***** STEP 2: Tracking configuration parameters sweep ***** // *********************************************************** +#if USE_GLOG_AND_GFLAGS if (FLAGS_PLL_bw_hz_start == FLAGS_PLL_bw_hz_stop) { if (FLAGS_DLL_bw_hz_start == FLAGS_DLL_bw_hz_stop) @@ -491,25 +522,70 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) DLL_wide_bw_values.push_back(FLAGS_DLL_bw_hz_start); } } +#else + if (absl::GetFlag(FLAGS_PLL_bw_hz_start) == absl::GetFlag(FLAGS_PLL_bw_hz_stop)) + { + if (absl::GetFlag(FLAGS_DLL_bw_hz_start) == absl::GetFlag(FLAGS_DLL_bw_hz_stop)) + { + // NO PLL/DLL BW sweep + PLL_wide_bw_values.push_back(absl::GetFlag(FLAGS_PLL_bw_hz_start)); + DLL_wide_bw_values.push_back(absl::GetFlag(FLAGS_DLL_bw_hz_start)); + } + else + { + // DLL BW Sweep + for (double dll_bw = absl::GetFlag(FLAGS_DLL_bw_hz_start); dll_bw >= absl::GetFlag(FLAGS_DLL_bw_hz_stop); dll_bw = dll_bw - absl::GetFlag(FLAGS_DLL_bw_hz_step)) + { + PLL_wide_bw_values.push_back(absl::GetFlag(FLAGS_PLL_bw_hz_start)); + DLL_wide_bw_values.push_back(dll_bw); + } + } + } + else + { + // PLL BW Sweep + for (double pll_bw = absl::GetFlag(FLAGS_PLL_bw_hz_start); pll_bw >= absl::GetFlag(FLAGS_PLL_bw_hz_stop); pll_bw = pll_bw - absl::GetFlag(FLAGS_PLL_bw_hz_step)) + { + PLL_wide_bw_values.push_back(pll_bw); + DLL_wide_bw_values.push_back(absl::GetFlag(FLAGS_DLL_bw_hz_start)); + } + } +#endif // ********************************************* // ***** STEP 3: Generate the input signal ***** // ********************************************* std::vector cno_vector; +#if USE_GLOG_AND_GFLAGS if (FLAGS_CN0_dBHz_start == FLAGS_CN0_dBHz_stop) { generator_CN0_values.push_back(FLAGS_CN0_dBHz_start); } +#else + if (absl::GetFlag(FLAGS_CN0_dBHz_start) == absl::GetFlag(FLAGS_CN0_dBHz_stop)) + { + generator_CN0_values.push_back(absl::GetFlag(FLAGS_CN0_dBHz_start)); + } +#endif else { +#if USE_GLOG_AND_GFLAGS for (double cn0 = FLAGS_CN0_dBHz_start; cn0 > FLAGS_CN0_dBHz_stop; cn0 = cn0 - FLAGS_CN0_dB_step) +#else + for (double cn0 = absl::GetFlag(FLAGS_CN0_dBHz_start); cn0 > absl::GetFlag(FLAGS_CN0_dBHz_stop); cn0 = cn0 - absl::GetFlag(FLAGS_CN0_dB_step)) +#endif { generator_CN0_values.push_back(cn0); } } - // use generator or use an external capture file + // use generator or use an external capture file + +#if USE_GLOG_AND_GFLAGS if (FLAGS_enable_external_signal_file) +#else + if (absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { // todo: create and configure an acquisition block and perform an acquisition to obtain the synchronization parameters } @@ -520,7 +596,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) // Configure the signal generator configure_generator(generator_CN0_values.at(current_cn0_idx), current_cn0_idx); // Generate signal raw signal samples and observations RINEX file +#if USE_GLOG_AND_GFLAGS if (FLAGS_disable_generator == false) +#else + if (absl::GetFlag(FLAGS_disable_generator) == false) +#endif { generate_signal(); } @@ -561,17 +641,29 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) configure_receiver(PLL_wide_bw_values.at(config_idx), DLL_wide_bw_values.at(config_idx), +#if USE_GLOG_AND_GFLAGS FLAGS_PLL_narrow_bw_hz, FLAGS_DLL_narrow_bw_hz, FLAGS_extend_correlation_symbols); +#else + absl::GetFlag(FLAGS_PLL_narrow_bw_hz), + absl::GetFlag(FLAGS_DLL_narrow_bw_hz), + absl::GetFlag(FLAGS_extend_correlation_symbols)); +#endif for (unsigned int current_cn0_idx = 0; current_cn0_idx < generator_CN0_values.size(); current_cn0_idx++) { // ****************************************************************************************** // ***** Obtain the initial signal sinchronization parameters (emulating an acquisition) **** // ****************************************************************************************** +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { test_satellite_PRN = FLAGS_test_satellite_PRN; +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + test_satellite_PRN = absl::GetFlag(FLAGS_test_satellite_PRN); +#endif std::string true_obs_file = std::string("./gps_l1_ca_obs_prn"); true_obs_file.append(std::to_string(test_satellite_PRN)); true_obs_file.append(".dat"); @@ -580,7 +672,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) // load acquisition data based on the first epoch of the true observations ASSERT_EQ(true_obs_data.read_binary_obs(), true) << "Failure reading true tracking dump file.\n" +#if USE_GLOG_AND_GFLAGS << "Maybe sat PRN #" + std::to_string(FLAGS_test_satellite_PRN) + +#else + << "Maybe sat PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + +#endif " is not available?"; std::cout << "Testing satellite PRN=" << test_satellite_PRN << '\n'; std::cout << "Initial Doppler [Hz]=" << true_obs_data.doppler_l1_hz << " Initial code delay [Chips]=" << true_obs_data.prn_delay_chips << '\n'; @@ -694,10 +790,14 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) promptQ_sweep.push_back(promptQ); CN0_dBHz_sweep.push_back(CN0_dBHz); - // *********************************************************** - // ***** STEP 6: Compare with true values (if available) ***** - // *********************************************************** +// *********************************************************** +// ***** STEP 6: Compare with true values (if available) ***** +// *********************************************************** +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { std::vector doppler_error_hz; std::vector code_phase_error_chips; @@ -726,8 +826,12 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) true_tow_s(epoch_counter) = true_obs_data.tow; epoch_counter++; } - // Align initial measurements and cut the tracking pull-in transitory +// Align initial measurements and cut the tracking pull-in transitory +#if USE_GLOG_AND_GFLAGS double pull_in_offset_s = FLAGS_skip_trk_transitory_s; +#else + double pull_in_offset_s = absl::GetFlag(FLAGS_skip_trk_transitory_s); +#endif arma::uvec initial_meas_point = arma::find(trk_timestamp_s >= (true_timestamp_s(0) + pull_in_offset_s), 1, "first"); if (!initial_meas_point.empty() and tracking_last_msg != 3) @@ -782,8 +886,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) } } } // CN0 LOOP - +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { mean_doppler_error_sweep.push_back(mean_doppler_error); std_dev_doppler_error_sweep.push_back(std_dev_doppler_error); @@ -801,12 +908,18 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) generator_CN0_values_sweep_copy.push_back(valid_CN0_values); } - // ******************************** - // ***** STEP 7: Plot results ***** - // ******************************** +// ******************************** +// ***** STEP 7: Plot results ***** +// ******************************** +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_gps_l1_tracking_test == true) { const std::string gnuplot_executable(FLAGS_gnuplot_executable); +#else + if (absl::GetFlag(FLAGS_plot_gps_l1_tracking_test) == true) + { + const std::string gnuplot_executable(absl::GetFlag(FLAGS_gnuplot_executable)); +#endif if (gnuplot_executable.empty()) { std::cout << "WARNING: Although the flag plot_gps_l1_tracking_test has been set to TRUE,\n"; @@ -821,14 +934,26 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) fs::path dir = p.parent_path(); const std::string& gnuplot_path = dir.native(); Gnuplot::set_GNUPlotPath(gnuplot_path); +#if USE_GLOG_AND_GFLAGS auto decimate = static_cast(FLAGS_plot_decimate); if (FLAGS_plot_detail_level >= 2) +#else + auto decimate = static_cast(absl::GetFlag(FLAGS_plot_decimate)); + + if (absl::GetFlag(FLAGS_plot_detail_level) >= 2) +#endif + { for (unsigned int current_cn0_idx = 0; current_cn0_idx < generator_CN0_values.size(); current_cn0_idx++) { Gnuplot g1("linespoints"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif + { g1.showonscreen(); // window output } @@ -836,7 +961,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) { g1.disablescreen(); } +#if USE_GLOG_AND_GFLAGS g1.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz, " + "PLL/DLL BW: " + std::to_string(PLL_wide_bw_values.at(config_idx)) + "," + std::to_string(DLL_wide_bw_values.at(config_idx)) + " Hz" + "GPS L1 C/A (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); +#else + g1.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz, " + "PLL/DLL BW: " + std::to_string(PLL_wide_bw_values.at(config_idx)) + "," + std::to_string(DLL_wide_bw_values.at(config_idx)) + " Hz" + "GPS L1 C/A (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); +#endif g1.set_grid(); g1.set_xlabel("Time [s]"); g1.set_ylabel("Correlators' output"); @@ -849,7 +978,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) g1.savetopdf("Correlators_outputs" + std::to_string(generator_CN0_values.at(current_cn0_idx)), 18); } Gnuplot g2("points"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g2.showonscreen(); // window output } @@ -862,7 +995,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) for (unsigned int current_cn0_idx = 0; current_cn0_idx < generator_CN0_values.size(); current_cn0_idx++) { g2.reset_plot(); +#if USE_GLOG_AND_GFLAGS g2.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz Constellation " + "PLL/DLL BW: " + std::to_string(PLL_wide_bw_values.at(config_idx)) + "," + std::to_string(DLL_wide_bw_values.at(config_idx)) + " Hz" + "GPS L1 C/A (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); +#else + g2.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz Constellation " + "PLL/DLL BW: " + std::to_string(PLL_wide_bw_values.at(config_idx)) + "," + std::to_string(DLL_wide_bw_values.at(config_idx)) + " Hz" + "GPS L1 C/A (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); +#endif g2.set_grid(); g2.set_xlabel("Inphase"); g2.set_ylabel("Quadrature"); @@ -874,7 +1011,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) g2.savetopdf("Constellation", 18); Gnuplot g3("linespoints"); +#if USE_GLOG_AND_GFLAGS g3.set_title("GPS L1 C/A tracking CN0 output (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); +#else + g3.set_title("GPS L1 C/A tracking CN0 output (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); +#endif g3.set_grid(); g3.set_xlabel("Time [s]"); g3.set_ylabel("Reported CN0 [dB-Hz]"); @@ -887,7 +1028,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) g3.set_legend(); g3.savetops("CN0_output"); g3.savetopdf("CN0_output", 18); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g3.showonscreen(); // window output } @@ -897,13 +1042,22 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) } } - // PLOT ERROR FIGURES (only if it is used the signal generator) +// PLOT ERROR FIGURES (only if it is used the signal generator) +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { if (FLAGS_plot_detail_level >= 1) { Gnuplot g5("points"); if (FLAGS_show_plots) +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + if (absl::GetFlag(FLAGS_plot_detail_level) >= 1) + { + Gnuplot g5("points"); + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g5.showonscreen(); // window output } @@ -911,7 +1065,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) { g5.disablescreen(); } +#if USE_GLOG_AND_GFLAGS g5.set_title("Code delay error, PLL/DLL BW: " + std::to_string(PLL_wide_bw_values.at(config_idx)) + "," + std::to_string(DLL_wide_bw_values.at(config_idx)) + " Hz (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); +#else + g5.set_title("Code delay error, PLL/DLL BW: " + std::to_string(PLL_wide_bw_values.at(config_idx)) + "," + std::to_string(DLL_wide_bw_values.at(config_idx)) + " Hz (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); +#endif g5.set_grid(); g5.set_xlabel("Time [s]"); g5.set_ylabel("Code delay error [Chips]"); @@ -937,7 +1095,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) g5.savetopdf("Code_error_chips", 18); Gnuplot g5b("points"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g5b.showonscreen(); // window output } @@ -945,7 +1107,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) { g5b.disablescreen(); } +#if USE_GLOG_AND_GFLAGS g5b.set_title("Code delay error, PLL/DLL BW: " + std::to_string(PLL_wide_bw_values.at(config_idx)) + "," + std::to_string(DLL_wide_bw_values.at(config_idx)) + " Hz (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); +#else + g5b.set_title("Code delay error, PLL/DLL BW: " + std::to_string(PLL_wide_bw_values.at(config_idx)) + "," + std::to_string(DLL_wide_bw_values.at(config_idx)) + " Hz (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); +#endif g5b.set_grid(); g5b.set_xlabel("Time [s]"); g5b.set_ylabel("Code delay error [meters]"); @@ -971,7 +1137,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) g5b.savetopdf("Code_error_meters", 18); Gnuplot g6("points"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g6.showonscreen(); // window output } @@ -979,7 +1149,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) { g6.disablescreen(); } +#if USE_GLOG_AND_GFLAGS g6.set_title("Accumulated carrier phase error, PLL/DLL BW: " + std::to_string(PLL_wide_bw_values.at(config_idx)) + "," + std::to_string(DLL_wide_bw_values.at(config_idx)) + " Hz (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); +#else + g6.set_title("Accumulated carrier phase error, PLL/DLL BW: " + std::to_string(PLL_wide_bw_values.at(config_idx)) + "," + std::to_string(DLL_wide_bw_values.at(config_idx)) + " Hz (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); +#endif g6.set_grid(); g6.set_xlabel("Time [s]"); g6.set_ylabel("Accumulated carrier phase error [Cycles]"); @@ -1005,7 +1179,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) g6.savetopdf("Acc_carrier_phase_error_cycles", 18); Gnuplot g4("points"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g4.showonscreen(); // window output } @@ -1018,7 +1196,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) for (unsigned int current_cn0_idx = 0; current_cn0_idx < generator_CN0_values_sweep_copy.at(config_idx).size(); current_cn0_idx++) { g4.reset_plot(); +#if USE_GLOG_AND_GFLAGS g4.set_title("Dopper error" + std::to_string(static_cast(round(generator_CN0_values_sweep_copy.at(config_idx).at(current_cn0_idx)))) + "[dB-Hz], PLL/DLL BW: " + std::to_string(PLL_wide_bw_values.at(config_idx)) + "," + std::to_string(DLL_wide_bw_values.at(config_idx)) + " Hz (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); +#else + g4.set_title("Dopper error" + std::to_string(static_cast(round(generator_CN0_values_sweep_copy.at(config_idx).at(current_cn0_idx)))) + "[dB-Hz], PLL/DLL BW: " + std::to_string(PLL_wide_bw_values.at(config_idx)) + "," + std::to_string(DLL_wide_bw_values.at(config_idx)) + " Hz (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); +#endif g4.set_grid(); // g4.cmd("set key box opaque"); g4.set_xlabel("Time [s]"); @@ -1051,7 +1233,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) } } +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_gps_l1_tracking_test == true) +#else + if (absl::GetFlag(FLAGS_plot_gps_l1_tracking_test) == true) +#endif { std::cout << "Plotting performance metrics...\n"; try @@ -1060,7 +1246,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) { // plot metrics Gnuplot g7("linespoints"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g7.showonscreen(); // window output } @@ -1068,7 +1258,12 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) { g7.disablescreen(); } + +#if USE_GLOG_AND_GFLAGS g7.set_title("Doppler error metrics (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); +#else + g7.set_title("Doppler error metrics (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); +#endif g7.set_grid(); g7.set_xlabel("CN0 [dB-Hz]"); g7.set_ylabel("Doppler error [Hz]"); @@ -1093,7 +1288,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) g7.savetopdf("Doppler_error_metrics", 18); Gnuplot g8("linespoints"); +#if USE_GLOG_AND_GFLAGS g8.set_title("Accumulated carrier phase error metrics (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); +#else + g8.set_title("Accumulated carrier phase error metrics (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); +#endif g8.set_grid(); g8.set_xlabel("CN0 [dB-Hz]"); g8.set_ylabel("Accumulated Carrier Phase error [Cycles]"); @@ -1117,7 +1316,11 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) g8.savetopdf("Carrier_error_metrics", 18); Gnuplot g9("linespoints"); +#if USE_GLOG_AND_GFLAGS g9.set_title("Code Phase error metrics (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); +#else + g9.set_title("Code Phase error metrics (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); +#endif g9.set_grid(); g9.set_xlabel("CN0 [dB-Hz]"); g9.set_ylabel("Code Phase error [Chips]"); diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test_fpga.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test_fpga.cc index 81ca1df0c0..4bd43fc303 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test_fpga.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test_fpga.cc @@ -29,8 +29,6 @@ #include "tracking_true_obs_reader.h" #include #include // to test the FPGA we have to create a simultaneous task to send the samples using the DMA and stop the test -#include -#include #include #include #include @@ -46,6 +44,14 @@ #include #include #include + +#if USE_GLOG_AND_GFLAGS +#include +#include +#else +#include +#include +#endif #if HAS_GENERIC_LAMBDA #else #include @@ -232,11 +238,15 @@ class GpsL1CADllPllTrackingTestFpga : public ::testing::Test std::string p4; std::string p5; +#if USE_GLOG_AND_GFLAGS const int baseband_sampling_freq = FLAGS_fs_gen_sps; - std::string filename_rinex_obs = FLAGS_filename_rinex_obs; std::string filename_raw_data = FLAGS_filename_raw_data; - +#else + const int baseband_sampling_freq = absl::GetFlag(FLAGS_fs_gen_sps); + std::string filename_rinex_obs = absl::GetFlag(FLAGS_filename_rinex_obs); + std::string filename_raw_data = absl::GetFlag(FLAGS_filename_raw_data); +#endif int configure_generator(); int generate_signal(); void check_results_doppler(arma::vec &true_time_s, arma::vec &true_value, @@ -266,7 +276,8 @@ class GpsL1CADllPllTrackingTestFpga : public ::testing::Test int GpsL1CADllPllTrackingTestFpga::configure_generator() { - // Configure signal generator +// Configure signal generator +#if USE_GLOG_AND_GFLAGS generator_binary = FLAGS_generator_binary; p1 = std::string("-rinex_nav_file=") + FLAGS_rinex_nav_file; @@ -281,6 +292,23 @@ int GpsL1CADllPllTrackingTestFpga::configure_generator() p3 = std::string("-rinex_obs_file=") + FLAGS_filename_rinex_obs; // RINEX 2.10 observation file output p4 = std::string("-sig_out_file=") + FLAGS_filename_raw_data; // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] +#else + generator_binary = absl::GetFlag(FLAGS_generator_binary); + + p1 = std::string("-rinex_nav_file=") + absl::GetFlag(FLAGS_rinex_nav_file); + if (absl::GetFlag(FLAGS_dynamic_position).empty()) + { + p2 = std::string("-static_position=") + absl::GetFlag(FLAGS_static_position) + std::string(",") + std::to_string(absl::GetFlag(FLAGS_duration) * 10); + } + else + { + p2 = std::string("-obs_pos_file=") + std::string(absl::GetFlag(FLAGS_dynamic_position)); + } + p3 = std::string("-rinex_obs_file=") + absl::GetFlag(FLAGS_filename_rinex_obs); // RINEX 2.10 observation file output + p4 = std::string("-sig_out_file=") + absl::GetFlag(FLAGS_filename_raw_data); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples + p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] +#endif + return 0; } @@ -317,7 +345,11 @@ void GpsL1CADllPllTrackingTestFpga::configure_receiver() gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); +#if USE_GLOG_AND_GFLAGS gnss_synchro.PRN = FLAGS_test_satellite_PRN; +#else + gnss_synchro.PRN = absl::GetFlag(FLAGS_test_satellite_PRN); +#endif config->set_property("GNSS-SDR.internal_fs_sps", std::to_string(baseband_sampling_freq)); @@ -464,7 +496,11 @@ TEST_F(GpsL1CADllPllTrackingTestFpga, ValidationOfResultsFpga) // open true observables log file written by the simulator Tracking_True_Obs_Reader true_obs_data; +#if USE_GLOG_AND_GFLAGS int test_satellite_PRN = FLAGS_test_satellite_PRN; +#else + int test_satellite_PRN = absl::GetFlag(FLAGS_test_satellite_PRN); +#endif std::cout << "Testing satellite PRN=" << test_satellite_PRN << '\n'; std::string true_obs_file = std::string("./gps_l1_ca_obs_prn"); true_obs_file.append(std::to_string(test_satellite_PRN)); diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_gaussian_tracking_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_gaussian_tracking_test.cc index fbd1b2d0fb..8765ac60c6 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_gaussian_tracking_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_gaussian_tracking_test.cc @@ -60,8 +60,11 @@ namespace wht = boost; namespace wht = std; #endif +#if USE_GLOG_AND_GFLAGS DEFINE_bool(plot_gps_l1_gaussian_tracking_test, false, "Plots results of GpsL1CAGaussianTrackingTest with gnuplot"); - +#else +ABSL_FLAG(bool, plot_gps_l1_gaussian_tracking_test, false, "Plots results of GpsL1CAGaussianTrackingTest with gnuplot"); +#endif // ######## GNURADIO BLOCK MESSAGE RECEVER ######### class GpsL1CAGaussianTrackingTest_msg_rx; @@ -139,10 +142,15 @@ class GpsL1CAGaussianTrackingTest : public ::testing::Test std::string implementation = "GPS_L1_CA_Gaussian_Tracking"; +#if USE_GLOG_AND_GFLAGS const int baseband_sampling_freq = FLAGS_fs_gen_sps; - std::string filename_rinex_obs = FLAGS_filename_rinex_obs; std::string filename_raw_data = FLAGS_filename_raw_data; +#else + const int baseband_sampling_freq = absl::GetFlag(FLAGS_fs_gen_sps); + std::string filename_rinex_obs = absl::GetFlag(FLAGS_filename_rinex_obs); + std::string filename_raw_data = absl::GetFlag(FLAGS_filename_raw_data); +#endif int configure_generator(); int generate_signal(); @@ -181,6 +189,7 @@ class GpsL1CAGaussianTrackingTest : public ::testing::Test int GpsL1CAGaussianTrackingTest::configure_generator() { +#if USE_GLOG_AND_GFLAGS // Configure signal generator generator_binary = FLAGS_generator_binary; @@ -196,6 +205,24 @@ int GpsL1CAGaussianTrackingTest::configure_generator() p3 = std::string("-rinex_obs_file=") + FLAGS_filename_rinex_obs; // RINEX 2.10 observation file output p4 = std::string("-sig_out_file=") + FLAGS_filename_raw_data; // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] +#else + // Configure signal generator + generator_binary = absl::GetFlag(FLAGS_generator_binary); + + p1 = std::string("-rinex_nav_file=") + absl::GetFlag(FLAGS_rinex_nav_file); + if (absl::GetFlag(FLAGS_dynamic_position).empty()) + { + p2 = std::string("-static_position=") + absl::GetFlag(FLAGS_static_position) + std::string(",") + std::to_string(absl::GetFlag(FLAGS_duration) * 10); + } + else + { + p2 = std::string("-obs_pos_file=") + std::string(absl::GetFlag(FLAGS_dynamic_position)); + } + p3 = std::string("-rinex_obs_file=") + absl::GetFlag(FLAGS_filename_rinex_obs); // RINEX 2.10 observation file output + p4 = std::string("-sig_out_file=") + absl::GetFlag(FLAGS_filename_raw_data); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples + p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] +#endif + return 0; } @@ -231,16 +258,27 @@ void GpsL1CAGaussianTrackingTest::configure_receiver() gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); +#if USE_GLOG_AND_GFLAGS gnss_synchro.PRN = FLAGS_test_satellite_PRN; +#else + gnss_synchro.PRN = absl::GetFlag(FLAGS_test_satellite_PRN); +#endif config->set_property("GNSS-SDR.internal_fs_sps", std::to_string(baseband_sampling_freq)); // Set Tracking config->set_property("Tracking_1C.implementation", implementation); config->set_property("Tracking_1C.item_type", "gr_complex"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_dll_bw_hz != 0.0) { config->set_property("Tracking_1C.dll_bw_hz", std::to_string(FLAGS_dll_bw_hz)); } +#else + if (absl::GetFlag(FLAGS_dll_bw_hz) != 0.0) + { + config->set_property("Tracking_1C.dll_bw_hz", std::to_string(absl::GetFlag(FLAGS_dll_bw_hz))); + } +#endif else { config->set_property("Tracking_1C.dll_bw_hz", "2.0"); @@ -376,18 +414,28 @@ TEST_F(GpsL1CAGaussianTrackingTest, ValidationOfResults) configure_generator(); // Generate signal raw signal samples and observations RINEX file +#if USE_GLOG_AND_GFLAGS if (FLAGS_disable_generator == false) { generate_signal(); } - +#else + if (absl::GetFlag(FLAGS_disable_generator) == false) + { + generate_signal(); + } +#endif std::chrono::time_point start, end; configure_receiver(); // open true observables log file written by the simulator Tracking_True_Obs_Reader true_obs_data; +#if USE_GLOG_AND_GFLAGS int test_satellite_PRN = FLAGS_test_satellite_PRN; +#else + int test_satellite_PRN = absl::GetFlag(FLAGS_test_satellite_PRN); +#endif std::cout << "Testing satellite PRN=" << test_satellite_PRN << '\n'; std::string true_obs_file = std::string("./gps_l1_ca_obs_prn"); true_obs_file.append(std::to_string(test_satellite_PRN)); @@ -404,7 +452,11 @@ TEST_F(GpsL1CAGaussianTrackingTest, ValidationOfResults) // load acquisition data based on the first epoch of the true observations ASSERT_EQ(true_obs_data.read_binary_obs(), true) << "Failure reading true tracking dump file.\n" +#if USE_GLOG_AND_GFLAGS << "Maybe sat PRN #" + std::to_string(FLAGS_test_satellite_PRN) + +#else + << "Maybe sat PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + +#endif " is not available?"; // restart the epoch counter @@ -522,10 +574,15 @@ TEST_F(GpsL1CAGaussianTrackingTest, ValidationOfResults) std::chrono::duration elapsed_seconds = end - start; std::cout << "Signal tracking completed in " << elapsed_seconds.count() << " seconds.\n"; - +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_gps_l1_gaussian_tracking_test == true) { const std::string gnuplot_executable(FLAGS_gnuplot_executable); +#else + if (absl::GetFlag(FLAGS_plot_gps_l1_gaussian_tracking_test) == true) + { + const std::string gnuplot_executable(absl::GetFlag(FLAGS_gnuplot_executable)); +#endif if (gnuplot_executable.empty()) { std::cout << "WARNING: Although the flag plot_gps_l1_tracking_test has been set to TRUE,\n"; @@ -549,18 +606,30 @@ TEST_F(GpsL1CAGaussianTrackingTest, ValidationOfResults) t = t + GPS_L1_CA_CODE_PERIOD_S; } Gnuplot g1("linespoints"); +#if USE_GLOG_AND_GFLAGS g1.set_title("GPS L1 C/A signal tracking correlators' output (satellite PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); +#else + g1.set_title("GPS L1 C/A signal tracking correlators' output (satellite PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); +#endif g1.set_grid(); g1.set_xlabel("Time [s]"); g1.set_ylabel("Correlators' output"); g1.cmd("set key box opaque"); +#if USE_GLOG_AND_GFLAGS auto decimate = static_cast(FLAGS_plot_decimate); +#else + auto decimate = static_cast(absl::GetFlag(FLAGS_plot_decimate)); +#endif g1.plot_xy(timevec, prompt, "Prompt", decimate); g1.plot_xy(timevec, early, "Early", decimate); g1.plot_xy(timevec, late, "Late", decimate); g1.savetops("Correlators_outputs"); g1.savetopdf("Correlators_outputs", 18); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g1.showonscreen(); // window output } @@ -570,7 +639,11 @@ TEST_F(GpsL1CAGaussianTrackingTest, ValidationOfResults) } Gnuplot g2("points"); +#if USE_GLOG_AND_GFLAGS g2.set_title("Constellation diagram (satellite PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); +#else + g2.set_title("Constellation diagram (satellite PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); +#endif g2.set_grid(); g2.set_xlabel("Inphase"); g2.set_ylabel("Quadrature"); @@ -578,7 +651,11 @@ TEST_F(GpsL1CAGaussianTrackingTest, ValidationOfResults) g2.plot_xy(promptI, promptQ); g2.savetops("Constellation"); g2.savetopdf("Constellation", 18); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g2.showonscreen(); // window output } diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/gpu_multicorrelator_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/gpu_multicorrelator_test.cc index d8749dc39b..db5680d028 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/gpu_multicorrelator_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/gpu_multicorrelator_test.cc @@ -20,14 +20,19 @@ #include "gps_sdr_signal_replica.h" #include #include +#include #include #include #include #include - +#if USE_GLOG_AND_GFLAGS DEFINE_int32(gpu_multicorrelator_iterations_test, 1000, "Number of averaged iterations in GPU multicorrelator test timing test"); DEFINE_int32(gpu_multicorrelator_max_threads_test, 12, "Number of maximum concurrent correlators in GPU multicorrelator test timing test"); +#else +ABSL_FLAG(int32_t, gpu_multicorrelator_iterations_test, 1000, "Number of averaged iterations in GPU multicorrelator test timing test"); +ABSL_FLAG(int32_t, gpu_multicorrelator_max_threads_test, 12, "Number of maximum concurrent correlators in GPU multicorrelator test timing test"); +#endif void run_correlator_gpu(cuda_multicorrelator* correlator, float d_rem_carrier_phase_rad, @@ -37,7 +42,11 @@ void run_correlator_gpu(cuda_multicorrelator* correlator, int correlation_size, int d_n_correlator_taps) { +#if USE_GLOG_AND_GFLAGS for (int k = 0; k < FLAGS_cpu_multicorrelator_iterations_test; k++) +#else + for (int k = 0; k < absl::GetFlag(FLAGS_cpu_multicorrelator_iterations_test); k++) +#endif { correlator->Carrier_wipeoff_multicorrelator_resampler_cuda(d_rem_carrier_phase_rad, d_carrier_phase_step_rad, @@ -53,7 +62,11 @@ TEST(GpuMulticorrelatorTest, MeasureExecutionTime) { std::chrono::time_point start, end; std::chrono::duration elapsed_seconds(0); +#if USE_GLOG_AND_GFLAGS int max_threads = FLAGS_gpu_multicorrelator_max_threads_test; +#else + int max_threads = absl::GetFlag(FLAGS_gpu_multicorrelator_max_threads_test); +#endif std::vector thread_pool; cuda_multicorrelator* correlator_pool[max_threads]; unsigned int correlation_sizes[3] = {2048, 4096, 8192}; @@ -133,7 +146,11 @@ TEST(GpuMulticorrelatorTest, MeasureExecutionTime) thread_pool.clear(); end = std::chrono::system_clock::now(); elapsed_seconds = end - start; +#if USE_GLOG_AND_GFLAGS execution_times[correlation_sizes_idx] = elapsed_seconds.count() / static_cast(FLAGS_gpu_multicorrelator_iterations_test); +#else + execution_times[correlation_sizes_idx] = elapsed_seconds.count() / static_cast(absl::GetFlag(FLAGS_gpu_multicorrelator_iterations_test)); +#endif std::cout << "GPU Multicorrelator execution time for length=" << correlation_sizes[correlation_sizes_idx] << " : " << execution_times[correlation_sizes_idx] << " [s]\n"; } }); diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test.cc index 5f1265eddf..d5a28ffa99 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test.cc @@ -161,12 +161,18 @@ class TrackingPullInTest : public ::testing::Test std::string p4; std::string p5; std::string p6; - std::string implementation = FLAGS_trk_test_implementation; +#if USE_GLOG_AND_GFLAGS + std::string implementation = FLAGS_trk_test_implementation; const int baseband_sampling_freq = FLAGS_fs_gen_sps; - std::string filename_rinex_obs = FLAGS_filename_rinex_obs; std::string filename_raw_data = FLAGS_signal_file; +#else + std::string implementation = absl::GetFlag(FLAGS_trk_test_implementation); + const int baseband_sampling_freq = absl::GetFlag(FLAGS_fs_gen_sps); + std::string filename_rinex_obs = absl::GetFlag(FLAGS_filename_rinex_obs); + std::string filename_raw_data = absl::GetFlag(FLAGS_signal_file); +#endif std::map doppler_measurements_map; std::map code_delay_measurements_map; @@ -229,6 +235,7 @@ class TrackingPullInTest : public ::testing::Test int TrackingPullInTest::configure_generator(double CN0_dBHz, int file_idx) { +#if USE_GLOG_AND_GFLAGS // Configure signal generator generator_binary = FLAGS_generator_binary; @@ -245,6 +252,24 @@ int TrackingPullInTest::configure_generator(double CN0_dBHz, int file_idx) p4 = std::string("-sig_out_file=") + FLAGS_signal_file + std::to_string(file_idx); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] p6 = std::string("-CN0_dBHz=") + std::to_string(CN0_dBHz); // Signal generator CN0 +#else + // Configure signal generator + generator_binary = absl::GetFlag(FLAGS_generator_binary); + + p1 = std::string("-rinex_nav_file=") + absl::GetFlag(FLAGS_rinex_nav_file); + if (absl::GetFlag(FLAGS_dynamic_position).empty()) + { + p2 = std::string("-static_position=") + absl::GetFlag(FLAGS_static_position) + std::string(",") + std::to_string(absl::GetFlag(FLAGS_duration) * 10); + } + else + { + p2 = std::string("-obs_pos_file=") + std::string(absl::GetFlag(FLAGS_dynamic_position)); + } + p3 = std::string("-rinex_obs_file=") + absl::GetFlag(FLAGS_filename_rinex_obs); // RINEX 2.10 observation file output + p4 = std::string("-sig_out_file=") + absl::GetFlag(FLAGS_signal_file) + std::to_string(file_idx); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples + p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] + p6 = std::string("-CN0_dBHz=") + std::to_string(CN0_dBHz); // Signal generator CN0 +#endif return 0; } @@ -291,7 +316,11 @@ void TrackingPullInTest::configure_receiver( config->set_property("Tracking.extend_correlation_symbols", std::to_string(extend_correlation_symbols)); config->set_property("Tracking.pll_bw_narrow_hz", std::to_string(PLL_narrow_bw_hz)); config->set_property("Tracking.dll_bw_narrow_hz", std::to_string(DLL_narrow_bw_hz)); +#if USE_GLOG_AND_GFLAGS gnss_synchro.PRN = FLAGS_test_satellite_PRN; +#else + gnss_synchro.PRN = absl::GetFlag(FLAGS_test_satellite_PRN); +#endif gnss_synchro.Channel_ID = 0; config->set_property("GNSS-SDR.internal_fs_sps", std::to_string(baseband_sampling_freq)); @@ -383,8 +412,12 @@ bool TrackingPullInTest::acquire_signal(int SV_ID) config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_sps", std::to_string(baseband_sampling_freq)); - // Enable automatic resampler for the acquisition, if required +// Enable automatic resampler for the acquisition, if required +#if USE_GLOG_AND_GFLAGS if (FLAGS_use_acquisition_resampler == true) +#else + if (absl::GetFlag(FLAGS_use_acquisition_resampler) == true) +#endif { config->set_property("GNSS-SDR.use_acquisition_resampler", "true"); } @@ -406,7 +439,11 @@ bool TrackingPullInTest::acquire_signal(int SV_ID) std::memcpy(static_cast(tmp_gnss_synchro.Signal), str, 3); // copy string into synchro char array: 2 char + null tmp_gnss_synchro.PRN = SV_ID; System_and_Signal = "GPS L1 CA"; +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_external_signal_acquisition_dwells)); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_external_signal_acquisition_dwells))); +#endif // acquisition = std::make_shared(config.get(), "Acquisition", 1, 0); acquisition = std::make_shared(config.get(), "Acquisition", 1, 0); } @@ -418,7 +455,11 @@ bool TrackingPullInTest::acquire_signal(int SV_ID) std::memcpy(static_cast(tmp_gnss_synchro.Signal), str, 3); // copy string into synchro char array: 2 char + null tmp_gnss_synchro.PRN = SV_ID; System_and_Signal = "Galileo E1B"; +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_external_signal_acquisition_dwells)); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_external_signal_acquisition_dwells))); +#endif acquisition = std::make_shared(config.get(), "Acquisition", 1, 0); } else if (implementation == "GPS_L2_M_DLL_PLL_Tracking") @@ -429,7 +470,11 @@ bool TrackingPullInTest::acquire_signal(int SV_ID) std::memcpy(static_cast(tmp_gnss_synchro.Signal), str, 3); // copy string into synchro char array: 2 char + null tmp_gnss_synchro.PRN = SV_ID; System_and_Signal = "GPS L2CM"; +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_external_signal_acquisition_dwells)); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_external_signal_acquisition_dwells))); +#endif acquisition = std::make_shared(config.get(), "Acquisition", 1, 0); } else if (implementation == "Galileo_E5a_DLL_PLL_Tracking_b") @@ -441,7 +486,11 @@ bool TrackingPullInTest::acquire_signal(int SV_ID) tmp_gnss_synchro.PRN = SV_ID; System_and_Signal = "Galileo E5a"; config->set_property("Acquisition_5X.coherent_integration_time_ms", "1"); +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_external_signal_acquisition_dwells)); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_external_signal_acquisition_dwells))); +#endif config->set_property("Acquisition.CAF_window_hz", "0"); // **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is deactivated. Recommended value 3000 Hz config->set_property("Acquisition.Zero_padding", "0"); // **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF. config->set_property("Acquisition.bit_transition_flag", "false"); @@ -456,7 +505,11 @@ bool TrackingPullInTest::acquire_signal(int SV_ID) std::memcpy(static_cast(tmp_gnss_synchro.Signal), str, 3); // copy string into synchro char array: 2 char + null tmp_gnss_synchro.PRN = SV_ID; System_and_Signal = "Galileo E5a"; +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_external_signal_acquisition_dwells)); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_external_signal_acquisition_dwells))); +#endif acquisition = std::make_shared(config.get(), "Acquisition", 1, 0); } else if (implementation == "GPS_L5_DLL_PLL_Tracking") @@ -467,7 +520,11 @@ bool TrackingPullInTest::acquire_signal(int SV_ID) std::memcpy(static_cast(tmp_gnss_synchro.Signal), str, 3); // copy string into synchro char array: 2 char + null tmp_gnss_synchro.PRN = SV_ID; System_and_Signal = "GPS L5I"; +#if USE_GLOG_AND_GFLAGS config->set_property("Acquisition.max_dwells", std::to_string(FLAGS_external_signal_acquisition_dwells)); +#else + config->set_property("Acquisition.max_dwells", std::to_string(absl::GetFlag(FLAGS_external_signal_acquisition_dwells))); +#endif acquisition = std::make_shared(config.get(), "Acquisition", 1, 0); } else @@ -478,26 +535,44 @@ bool TrackingPullInTest::acquire_signal(int SV_ID) acquisition->set_gnss_synchro(&tmp_gnss_synchro); acquisition->set_channel(0); +#if USE_GLOG_AND_GFLAGS acquisition->set_doppler_max(config->property("Acquisition.doppler_max", FLAGS_external_signal_acquisition_doppler_max_hz)); acquisition->set_doppler_step(config->property("Acquisition.doppler_step", FLAGS_external_signal_acquisition_doppler_step_hz)); acquisition->set_threshold(config->property("Acquisition.threshold", FLAGS_external_signal_acquisition_threshold)); +#else + acquisition->set_doppler_max(config->property("Acquisition.doppler_max", absl::GetFlag(FLAGS_external_signal_acquisition_doppler_max_hz))); + acquisition->set_doppler_step(config->property("Acquisition.doppler_step", absl::GetFlag(FLAGS_external_signal_acquisition_doppler_step_hz))); + acquisition->set_threshold(config->property("Acquisition.threshold", absl::GetFlag(FLAGS_external_signal_acquisition_threshold))); +#endif acquisition->init(); acquisition->set_local_code(); acquisition->set_state(1); // Ensure that acquisition starts at the first sample acquisition->connect(top_block_acq); gr::blocks::file_source::sptr file_source; +#if USE_GLOG_AND_GFLAGS std::string file = FLAGS_signal_file; +#else + std::string file = absl::GetFlag(FLAGS_signal_file); +#endif const char* file_name = file.c_str(); file_source = gr::blocks::file_source::make(sizeof(int8_t), file_name, false); +#if USE_GLOG_AND_GFLAGS file_source->seek(2 * FLAGS_skip_samples, SEEK_SET); // skip head. ibyte, two bytes per complex sample +#else + file_source->seek(2 * absl::GetFlag(FLAGS_skip_samples), SEEK_SET); // skip head. ibyte, two bytes per complex sample +#endif gr::blocks::interleaved_char_to_complex::sptr gr_interleaved_char_to_complex = gr::blocks::interleaved_char_to_complex::make(); // gr::blocks::head::sptr head_samples = gr::blocks::head::make(sizeof(gr_complex), baseband_sampling_freq * FLAGS_duration); top_block_acq->connect(file_source, 0, gr_interleaved_char_to_complex, 0); - // Enable automatic resampler for the acquisition, if required +// Enable automatic resampler for the acquisition, if required +#if USE_GLOG_AND_GFLAGS if (FLAGS_use_acquisition_resampler == true) +#else + if (absl::GetFlag(FLAGS_use_acquisition_resampler) == true) +#endif { // create acquisition resamplers if required double resampler_ratio = 1.0; @@ -625,7 +700,11 @@ bool TrackingPullInTest::acquire_signal(int SV_ID) top_block_acq->run(); if (start_msg == true) { +#if USE_GLOG_AND_GFLAGS std::cout << "Reading external signal file: " << FLAGS_signal_file << '\n'; +#else + std::cout << "Reading external signal file: " << absl::GetFlag(FLAGS_signal_file) << '\n'; +#endif std::cout << "Searching for " << System_and_Signal << " Satellites...\n"; std::cout << "["; start_msg = false; @@ -646,7 +725,11 @@ bool TrackingPullInTest::acquire_signal(int SV_ID) std::cout << " . "; } top_block_acq->stop(); +#if USE_GLOG_AND_GFLAGS file_source->seek(2 * FLAGS_skip_samples, SEEK_SET); // skip head. ibyte, two bytes per complex sample +#else + file_source->seek(2 * absl::GetFlag(FLAGS_skip_samples), SEEK_SET); // skip head. ibyte, two bytes per complex sample +#endif std::cout.flush(); } std::cout << "]\n"; @@ -672,16 +755,23 @@ TEST_F(TrackingPullInTest, ValidationOfResults) // ************************************************* // ***** STEP 1: Prepare the parameters sweep ****** // ************************************************* - std::vector - acq_doppler_error_hz_values; + std::vector acq_doppler_error_hz_values; std::vector> acq_delay_error_chips_values; // vector of vector - +#if USE_GLOG_AND_GFLAGS for (double doppler_hz = FLAGS_acq_Doppler_error_hz_start; doppler_hz >= FLAGS_acq_Doppler_error_hz_stop; doppler_hz = doppler_hz + FLAGS_acq_Doppler_error_hz_step) +#else + for (double doppler_hz = absl::GetFlag(FLAGS_acq_Doppler_error_hz_start); doppler_hz >= absl::GetFlag(FLAGS_acq_Doppler_error_hz_stop); doppler_hz = doppler_hz + absl::GetFlag(FLAGS_acq_Doppler_error_hz_step)) +#endif + { acq_doppler_error_hz_values.push_back(doppler_hz); std::vector tmp_vector; - // Code Delay Sweep +// Code Delay Sweep +#if USE_GLOG_AND_GFLAGS for (double code_delay_chips = FLAGS_acq_Delay_error_chips_start; code_delay_chips >= FLAGS_acq_Delay_error_chips_stop; code_delay_chips = code_delay_chips + FLAGS_acq_Delay_error_chips_step) +#else + for (double code_delay_chips = absl::GetFlag(FLAGS_acq_Delay_error_chips_start); code_delay_chips >= absl::GetFlag(FLAGS_acq_Delay_error_chips_stop); code_delay_chips = code_delay_chips + absl::GetFlag(FLAGS_acq_Delay_error_chips_step)) +#endif { tmp_vector.push_back(code_delay_chips); } @@ -692,12 +782,17 @@ TEST_F(TrackingPullInTest, ValidationOfResults) // ***** STEP 2: Generate the input signal (if required) ***** // *********************************************************** std::vector generator_CN0_values; +#if USE_GLOG_AND_GFLAGS if (FLAGS_enable_external_signal_file) +#else + if (absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { generator_CN0_values.push_back(999); // an external input signal capture is selected, no CN0 information available } else { +#if USE_GLOG_AND_GFLAGS if (FLAGS_CN0_dBHz_start == FLAGS_CN0_dBHz_stop) { generator_CN0_values.push_back(FLAGS_CN0_dBHz_start); @@ -709,15 +804,39 @@ TEST_F(TrackingPullInTest, ValidationOfResults) generator_CN0_values.push_back(cn0); } } +#else + if (absl::GetFlag(FLAGS_CN0_dBHz_start) == absl::GetFlag(FLAGS_CN0_dBHz_stop)) + { + generator_CN0_values.push_back(absl::GetFlag(FLAGS_CN0_dBHz_start)); + } + else + { + for (double cn0 = absl::GetFlag(FLAGS_CN0_dBHz_start); cn0 > absl::GetFlag(FLAGS_CN0_dBHz_stop); cn0 = cn0 - absl::GetFlag(FLAGS_CN0_dB_step)) + { + generator_CN0_values.push_back(cn0); + } + } +#endif } - // use generator or use an external capture file + // use generator or use an external capture file + +#if USE_GLOG_AND_GFLAGS if (FLAGS_enable_external_signal_file) +#else + if (absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { +#if USE_GLOG_AND_GFLAGS // create and configure an acquisition block and perform an acquisition to obtain the synchronization parameters ASSERT_EQ(acquire_signal(FLAGS_test_satellite_PRN), true); bool found_satellite = doppler_measurements_map.find(FLAGS_test_satellite_PRN) != doppler_measurements_map.end(); EXPECT_TRUE(found_satellite) << "Error: satellite SV: " << FLAGS_test_satellite_PRN << " is not acquired"; +#else + ASSERT_EQ(acquire_signal(absl::GetFlag(FLAGS_test_satellite_PRN)), true); + bool found_satellite = doppler_measurements_map.find(absl::GetFlag(FLAGS_test_satellite_PRN)) != doppler_measurements_map.end(); + EXPECT_TRUE(found_satellite) << "Error: satellite SV: " << absl::GetFlag(FLAGS_test_satellite_PRN) << " is not acquired"; +#endif if (!found_satellite) { return; @@ -730,18 +849,30 @@ TEST_F(TrackingPullInTest, ValidationOfResults) // Configure the signal generator configure_generator(generator_CN0_values.at(current_cn0_idx), current_cn0_idx); // Generate signal raw signal samples and observations RINEX file +#if USE_GLOG_AND_GFLAGS if (FLAGS_disable_generator == false) +#else + if (absl::GetFlag(FLAGS_disable_generator) == false) +#endif { generate_signal(); } } } +#if USE_GLOG_AND_GFLAGS configure_receiver(FLAGS_PLL_bw_hz_start, FLAGS_DLL_bw_hz_start, FLAGS_PLL_narrow_bw_hz, FLAGS_DLL_narrow_bw_hz, FLAGS_extend_correlation_symbols); +#else + configure_receiver(absl::GetFlag(FLAGS_PLL_bw_hz_start), + absl::GetFlag(FLAGS_DLL_bw_hz_start), + absl::GetFlag(FLAGS_PLL_narrow_bw_hz), + absl::GetFlag(FLAGS_DLL_narrow_bw_hz), + absl::GetFlag(FLAGS_extend_correlation_symbols)); +#endif // ****************************************************************************************** // ***** Obtain the initial signal sinchronization parameters (emulating an acquisition) **** @@ -752,9 +883,15 @@ TEST_F(TrackingPullInTest, ValidationOfResults) uint64_t acq_samplestamp_samples = 0; Tracking_True_Obs_Reader true_obs_data; +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { test_satellite_PRN = FLAGS_test_satellite_PRN; +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + test_satellite_PRN = absl::GetFlag(FLAGS_test_satellite_PRN); +#endif std::string true_obs_file = std::string("./gps_l1_ca_obs_prn"); true_obs_file.append(std::to_string(test_satellite_PRN)); true_obs_file.append(".dat"); @@ -763,7 +900,11 @@ TEST_F(TrackingPullInTest, ValidationOfResults) // load acquisition data based on the first epoch of the true observations ASSERT_EQ(true_obs_data.read_binary_obs(), true) << "Failure reading true tracking dump file.\n" +#if USE_GLOG_AND_GFLAGS << "Maybe sat PRN #" + std::to_string(FLAGS_test_satellite_PRN) + +#else + << "Maybe sat PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + +#endif " is not available?"; std::cout << "Testing satellite PRN=" << test_satellite_PRN << '\n'; std::cout << "True Initial Doppler " << true_obs_data.doppler_l1_hz << " [Hz], true Initial code delay [Chips]=" << true_obs_data.prn_delay_chips << "[Chips]\n"; @@ -773,17 +914,30 @@ TEST_F(TrackingPullInTest, ValidationOfResults) } else { +#if USE_GLOG_AND_GFLAGS true_acq_doppler_hz = doppler_measurements_map.find(FLAGS_test_satellite_PRN)->second; true_acq_delay_samples = code_delay_measurements_map.find(FLAGS_test_satellite_PRN)->second; +#else + true_acq_doppler_hz = doppler_measurements_map.find(absl::GetFlag(FLAGS_test_satellite_PRN))->second; + true_acq_delay_samples = code_delay_measurements_map.find(absl::GetFlag(FLAGS_test_satellite_PRN))->second; +#endif acq_samplestamp_samples = 0; std::cout << "Estimated Initial Doppler " << true_acq_doppler_hz << " [Hz], estimated Initial code delay " << true_acq_delay_samples << " [Samples]" +#if USE_GLOG_AND_GFLAGS << " Acquisition SampleStamp is " << acq_samplestamp_map.find(FLAGS_test_satellite_PRN)->second << '\n'; +#else + << " Acquisition SampleStamp is " << acq_samplestamp_map.find(absl::GetFlag(FLAGS_test_satellite_PRN))->second << '\n'; +#endif } // create the msg queue for valve queue = std::make_shared>(); +#if USE_GLOG_AND_GFLAGS long long int acq_to_trk_delay_samples = ceil(static_cast(FLAGS_fs_gen_sps) * FLAGS_acq_to_trk_delay_s); +#else + long long int acq_to_trk_delay_samples = ceil(static_cast(absl::GetFlag(FLAGS_fs_gen_sps)) * absl::GetFlag(FLAGS_acq_to_trk_delay_s)); +#endif auto resetable_valve_ = gnss_sdr_make_valve(sizeof(gr_complex), acq_to_trk_delay_samples, queue.get(), false); // CN0 LOOP @@ -822,19 +976,31 @@ TEST_F(TrackingPullInTest, ValidationOfResults) std::string file; ASSERT_NO_THROW({ +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { file = "./" + filename_raw_data + std::to_string(current_cn0_idx); } else { +#if USE_GLOG_AND_GFLAGS file = FLAGS_signal_file; +#else + file = absl::GetFlag(FLAGS_signal_file); +#endif } const char* file_name = file.c_str(); gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(int8_t), file_name, false); gr::blocks::interleaved_char_to_complex::sptr gr_interleaved_char_to_complex = gr::blocks::interleaved_char_to_complex::make(); gr::blocks::null_sink::sptr sink = gr::blocks::null_sink::make(sizeof(Gnss_Synchro)); +#if USE_GLOG_AND_GFLAGS gr::blocks::head::sptr head_samples = gr::blocks::head::make(sizeof(gr_complex), baseband_sampling_freq * FLAGS_duration); +#else + gr::blocks::head::sptr head_samples = gr::blocks::head::make(sizeof(gr_complex), baseband_sampling_freq * absl::GetFlag(FLAGS_duration)); +#endif top_block_trk->connect(file_source, 0, gr_interleaved_char_to_complex, 0); top_block_trk->connect(gr_interleaved_char_to_complex, 0, head_samples, 0); if (acq_to_trk_delay_samples > 0) @@ -848,7 +1014,11 @@ TEST_F(TrackingPullInTest, ValidationOfResults) } top_block_trk->connect(tracking->get_right_block(), 0, sink, 0); top_block_trk->msg_connect(tracking->get_right_block(), pmt::mp("events"), msg_rx, pmt::mp("events")); +#if USE_GLOG_AND_GFLAGS file_source->seek(2 * FLAGS_skip_samples, 0); // skip head. ibyte, two bytes per complex sample +#else + file_source->seek(2 * absl::GetFlag(FLAGS_skip_samples), 0); // skip head. ibyte, two bytes per complex sample +#endif }) << "Failure connecting the blocks of tracking test."; // ******************************************************************** @@ -860,7 +1030,11 @@ TEST_F(TrackingPullInTest, ValidationOfResults) { EXPECT_NO_THROW({ start = std::chrono::system_clock::now(); +#if USE_GLOG_AND_GFLAGS std::cout << "--- SIMULATING A PULL-IN DELAY OF " << FLAGS_acq_to_trk_delay_s << " SECONDS ---\n"; +#else + std::cout << "--- SIMULATING A PULL-IN DELAY OF " << absl::GetFlag(FLAGS_acq_to_trk_delay_s) << " SECONDS ---\n"; +#endif top_block_trk->start(); std::cout << " Waiting for valve...\n"; // wait the valve message indicating the circulation of the amount of samples of the delay @@ -889,10 +1063,14 @@ TEST_F(TrackingPullInTest, ValidationOfResults) pull_in_results_v.push_back(msg_rx->rx_message != 3); // save last asynchronous tracking message in order to detect a loss of lock - // ******************************** - // ***** STEP 7: Plot results ***** - // ******************************** +// ******************************** +// ***** STEP 7: Plot results ***** +// ******************************** +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_detail_level >= 2 and FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_plot_detail_level) >= 2 and absl::GetFlag(FLAGS_show_plots)) +#endif { // load the measured values Tracking_Dump_Reader trk_dump; @@ -937,8 +1115,11 @@ TEST_F(TrackingPullInTest, ValidationOfResults) Doppler.push_back(trk_dump.carrier_doppler_hz); epoch_counter++; } - +#if USE_GLOG_AND_GFLAGS const std::string gnuplot_executable(FLAGS_gnuplot_executable); +#else + const std::string gnuplot_executable(absl::GetFlag(FLAGS_gnuplot_executable)); +#endif if (gnuplot_executable.empty()) { std::cout << "WARNING: Although the flag show_plots has been set to TRUE,\n"; @@ -953,6 +1134,7 @@ TEST_F(TrackingPullInTest, ValidationOfResults) fs::path dir = p.parent_path(); const std::string& gnuplot_path = dir.native(); Gnuplot::set_GNUPlotPath(gnuplot_path); +#if USE_GLOG_AND_GFLAGS auto decimate = static_cast(FLAGS_plot_decimate); if (FLAGS_plot_detail_level >= 2 and FLAGS_show_plots) @@ -967,6 +1149,22 @@ TEST_F(TrackingPullInTest, ValidationOfResults) { g1.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips], PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz], (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); } +#else + auto decimate = static_cast(absl::GetFlag(FLAGS_plot_decimate)); + + if (absl::GetFlag(FLAGS_plot_detail_level) >= 2 and absl::GetFlag(FLAGS_show_plots)) + { + Gnuplot g1("linespoints"); + g1.showonscreen(); // window output + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + g1.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz, " + "PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], GPS L1 C/A (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } + else + { + g1.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips], PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } +#endif g1.set_grid(); g1.set_xlabel("Time [s]"); @@ -985,6 +1183,7 @@ TEST_F(TrackingPullInTest, ValidationOfResults) Gnuplot g2("points"); g2.showonscreen(); // window output +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { g2.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz Constellation " + "PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz], (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); @@ -993,7 +1192,16 @@ TEST_F(TrackingPullInTest, ValidationOfResults) { g2.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips], PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz], (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); } - +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + g2.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz Constellation " + "PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } + else + { + g2.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips], PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } +#endif g2.set_grid(); g2.set_xlabel("Inphase"); g2.set_ylabel("Quadrature"); @@ -1002,6 +1210,7 @@ TEST_F(TrackingPullInTest, ValidationOfResults) g2.savetops("Constellation"); Gnuplot g3("linespoints"); +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { g3.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz, GPS L1 C/A tracking CN0 output (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); @@ -1010,6 +1219,16 @@ TEST_F(TrackingPullInTest, ValidationOfResults) { g3.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips] PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz], (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); } +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + g3.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz, GPS L1 C/A tracking CN0 output (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } + else + { + g3.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips] PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } +#endif g3.set_grid(); g3.set_xlabel("Time [s]"); g3.set_ylabel("Reported CN0 [dB-Hz]"); @@ -1024,6 +1243,7 @@ TEST_F(TrackingPullInTest, ValidationOfResults) g3.showonscreen(); // window output Gnuplot g4("linespoints"); +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { g4.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz, GPS L1 C/A tracking CN0 output (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); @@ -1032,6 +1252,16 @@ TEST_F(TrackingPullInTest, ValidationOfResults) { g4.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips] PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz], (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); } +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + g4.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz, GPS L1 C/A tracking CN0 output (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } + else + { + g4.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips] PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } +#endif g4.set_grid(); g4.set_xlabel("Time [s]"); g4.set_ylabel("Estimated Doppler [Hz]"); @@ -1075,7 +1305,11 @@ TEST_F(TrackingPullInTest, ValidationOfResults) pull_in_result_mesh = pull_in_results_v_v.at(current_cn0_idx); // plot grid Gnuplot g4("points palette pointsize 2 pointtype 7"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g4.showonscreen(); // window output } @@ -1087,6 +1321,7 @@ TEST_F(TrackingPullInTest, ValidationOfResults) g4.cmd("set key off"); g4.cmd("set view map"); std::string title; +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { title = std::string("Tracking Pull-in result grid at CN0:" + std::to_string(static_cast(round(generator_CN0_values.at(current_cn0_idx)))) + " [dB-Hz], PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz]."); @@ -1095,7 +1330,16 @@ TEST_F(TrackingPullInTest, ValidationOfResults) { title = std::string("Tracking Pull-in result grid, PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz], GPS L1 C/A (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); } - +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + title = std::string("Tracking Pull-in result grid at CN0:" + std::to_string(static_cast(round(generator_CN0_values.at(current_cn0_idx)))) + " [dB-Hz], PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz]."); + } + else + { + title = std::string("Tracking Pull-in result grid, PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], GPS L1 C/A (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } +#endif g4.set_title(title); g4.set_grid(); g4.set_xlabel("Acquisition Doppler error [Hz]"); @@ -1105,7 +1349,11 @@ TEST_F(TrackingPullInTest, ValidationOfResults) code_delay_error_mesh, pull_in_result_mesh); g4.set_legend(); +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { g4.savetops("trk_pull_in_grid_" + std::to_string(static_cast(round(generator_CN0_values.at(current_cn0_idx))))); g4.savetopdf("trk_pull_in_grid_" + std::to_string(static_cast(round(generator_CN0_values.at(current_cn0_idx)))), 12); diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test_fpga.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test_fpga.cc index dedfcb6581..39f87bdfa2 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test_fpga.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test_fpga.cc @@ -201,10 +201,15 @@ void* handler_DMA_trk_pull_in_test(void* arguments) return nullptr; } - // ************************************************************************* - // Open input file - // ************************************************************************* + // ************************************************************************* + // Open input file + // ************************************************************************* + +#if USE_GLOG_AND_GFLAGS uint32_t skip_samples = static_cast(FLAGS_skip_samples); +#else + uint32_t skip_samples = static_cast(absl::GetFlag(FLAGS_skip_samples)); +#endif if (skip_samples + skip_used_samples > 0) { @@ -328,12 +333,17 @@ class TrackingPullInTestFpga : public ::testing::Test std::string p4; std::string p5; std::string p6; +#if USE_GLOG_AND_GFLAGS std::string implementation = FLAGS_trk_test_implementation; - const int baseband_sampling_freq = FLAGS_fs_gen_sps; std::string filename_rinex_obs = FLAGS_filename_rinex_obs; std::string filename_raw_data = FLAGS_signal_file; - +#else + std::string implementation = absl::GetFlag(FLAGS_trk_test_implementation); + const int baseband_sampling_freq = absl::GetFlag(FLAGS_fs_gen_sps); + std::string filename_rinex_obs = absl::GetFlag(FLAGS_filename_rinex_obs); + std::string filename_raw_data = absl::GetFlag(FLAGS_signal_file); +#endif std::map doppler_measurements_map; std::map code_delay_measurements_map; std::map acq_samplestamp_map; @@ -391,6 +401,7 @@ class TrackingPullInTestFpga : public ::testing::Test int TrackingPullInTestFpga::configure_generator(double CN0_dBHz, int file_idx) { +#if USE_GLOG_AND_GFLAGS // Configure signal generator generator_binary = FLAGS_generator_binary; @@ -407,6 +418,25 @@ int TrackingPullInTestFpga::configure_generator(double CN0_dBHz, int file_idx) p4 = std::string("-sig_out_file=") + FLAGS_signal_file + std::to_string(file_idx); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] p6 = std::string("-CN0_dBHz=") + std::to_string(CN0_dBHz); // Signal generator CN0 +#else + // Configure signal generator + generator_binary = absl::GetFlag(FLAGS_generator_binary); + + p1 = std::string("-rinex_nav_file=") + absl::GetFlag(FLAGS_rinex_nav_file); + if (absl::GetFlag(FLAGS_dynamic_position).empty()) + { + p2 = std::string("-static_position=") + absl::GetFlag(FLAGS_static_position) + std::string(",") + std::to_string(absl::GetFlag(FLAGS_duration) * 10); + } + else + { + p2 = std::string("-obs_pos_file=") + std::string(absl::GetFlag(FLAGS_dynamic_position)); + } + p3 = std::string("-rinex_obs_file=") + absl::GetFlag(FLAGS_filename_rinex_obs); // RINEX 2.10 observation file output + p4 = std::string("-sig_out_file=") + absl::GetFlag(FLAGS_signal_file) + std::to_string(file_idx); // Baseband signal output file. Will be stored in int8_t IQ multiplexed samples + p5 = std::string("-sampling_freq=") + std::to_string(baseband_sampling_freq); // Baseband sampling frequency [MSps] + p6 = std::string("-CN0_dBHz=") + std::to_string(CN0_dBHz); // Signal generator CN0 +#endif + return 0; } @@ -497,7 +527,11 @@ void TrackingPullInTestFpga::configure_receiver( config->set_property("Tracking.extend_correlation_symbols", std::to_string(extend_correlation_symbols)); config->set_property("Tracking.pll_bw_narrow_hz", std::to_string(PLL_narrow_bw_hz)); config->set_property("Tracking.dll_bw_narrow_hz", std::to_string(DLL_narrow_bw_hz)); +#if USE_GLOG_AND_GFLAGS gnss_synchro.PRN = FLAGS_test_satellite_PRN; +#else + gnss_synchro.PRN = absl::GetFlag(FLAGS_test_satellite_PRN); +#endif gnss_synchro.Channel_ID = 0; config->set_property("GNSS-SDR.internal_fs_sps", std::to_string(baseband_sampling_freq)); @@ -590,7 +624,11 @@ bool TrackingPullInTestFpga::acquire_signal(int SV_ID) struct DMA_handler_args_trk_pull_in_test args; struct acquisition_handler_args_trk_pull_in_test args_acq; +#if USE_GLOG_AND_GFLAGS std::string file = FLAGS_signal_file; +#else + std::string file = absl::GetFlag(FLAGS_signal_file); +#endif args.file = file; // DMA file configuration // instantiate the FPGA switch and set the @@ -657,11 +695,17 @@ bool TrackingPullInTestFpga::acquire_signal(int SV_ID) acquisition->set_gnss_synchro(&tmp_gnss_synchro); acquisition->set_channel_fsm(channel_fsm_); acquisition->set_channel(0); +#if USE_GLOG_AND_GFLAGS acquisition->set_doppler_max(config->property("Acquisition.doppler_max", FLAGS_external_signal_acquisition_doppler_max_hz)); acquisition->set_doppler_step(config->property("Acquisition.doppler_step", FLAGS_external_signal_acquisition_doppler_step_hz)); acquisition->set_doppler_center(0); acquisition->set_threshold(config->property("Acquisition.threshold", FLAGS_external_signal_acquisition_threshold)); - +#else + acquisition->set_doppler_max(config->property("Acquisition.doppler_max", absl::GetFlag(FLAGS_external_signal_acquisition_doppler_max_hz))); + acquisition->set_doppler_step(config->property("Acquisition.doppler_step", absl::GetFlag(FLAGS_external_signal_acquisition_doppler_step_hz))); + acquisition->set_doppler_center(0); + acquisition->set_threshold(config->property("Acquisition.threshold", absl::GetFlag(FLAGS_external_signal_acquisition_threshold))); +#endif std::chrono::time_point start, end; std::chrono::duration elapsed_seconds; start = std::chrono::system_clock::now(); @@ -755,7 +799,11 @@ bool TrackingPullInTestFpga::acquire_signal(int SV_ID) if (start_msg == true) { +#if USE_GLOG_AND_GFLAGS std::cout << "Reading external signal file: " << FLAGS_signal_file << '\n'; +#else + std::cout << "Reading external signal file: " << absl::GetFlag(FLAGS_signal_file) << '\n'; +#endif std::cout << "Searching for " << System_and_Signal << " Satellites...\n"; std::cout << "["; start_msg = false; @@ -824,13 +872,20 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) std::vector acq_doppler_error_hz_values; std::vector> acq_delay_error_chips_values; // vector of vector - +#if USE_GLOG_AND_GFLAGS for (double doppler_hz = FLAGS_acq_Doppler_error_hz_start; doppler_hz >= FLAGS_acq_Doppler_error_hz_stop; doppler_hz = doppler_hz + FLAGS_acq_Doppler_error_hz_step) +#else + for (double doppler_hz = absl::GetFlag(FLAGS_acq_Doppler_error_hz_start); doppler_hz >= absl::GetFlag(FLAGS_acq_Doppler_error_hz_stop); doppler_hz = doppler_hz + absl::GetFlag(FLAGS_acq_Doppler_error_hz_step)) +#endif { acq_doppler_error_hz_values.push_back(doppler_hz); std::vector tmp_vector; // Code Delay Sweep +#if USE_GLOG_AND_GFLAGS for (double code_delay_chips = FLAGS_acq_Delay_error_chips_start; code_delay_chips >= FLAGS_acq_Delay_error_chips_stop; code_delay_chips = code_delay_chips + FLAGS_acq_Delay_error_chips_step) +#else + for (double code_delay_chips = absl::GetFlag(FLAGS_acq_Delay_error_chips_start); code_delay_chips >= absl::GetFlag(FLAGS_acq_Delay_error_chips_stop); code_delay_chips = code_delay_chips + absl::GetFlag(FLAGS_acq_Delay_error_chips_step)) +#endif { tmp_vector.push_back(code_delay_chips); } @@ -841,6 +896,7 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) // ***** STEP 2: Generate the input signal (if required) ***** // *********************************************************** std::vector generator_CN0_values; +#if USE_GLOG_AND_GFLAGS if (FLAGS_enable_external_signal_file) { generator_CN0_values.push_back(999); // an external input signal capture is selected, no CN0 information available @@ -859,14 +915,44 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) } } } +#else + if (absl::GetFlag(FLAGS_enable_external_signal_file)) + { + generator_CN0_values.push_back(999); // an external input signal capture is selected, no CN0 information available + } + else + { + if (absl::GetFlag(FLAGS_CN0_dBHz_start) == absl::GetFlag(FLAGS_CN0_dBHz_stop)) + { + generator_CN0_values.push_back(absl::GetFlag(FLAGS_CN0_dBHz_start)); + } + else + { + for (double cn0 = absl::GetFlag(FLAGS_CN0_dBHz_start); cn0 > absl::GetFlag(FLAGS_CN0_dBHz_stop); cn0 = cn0 - absl::GetFlag(FLAGS_CN0_dB_step)) + { + generator_CN0_values.push_back(cn0); + } + } + } +#endif + + // use generator or use an external capture file - // use generator or use an external capture file +#if USE_GLOG_AND_GFLAGS if (FLAGS_enable_external_signal_file) { // create and configure an acquisition block and perform an acquisition to obtain the synchronization parameters ASSERT_EQ(acquire_signal(FLAGS_test_satellite_PRN), true); bool found_satellite = doppler_measurements_map.find(FLAGS_test_satellite_PRN) != doppler_measurements_map.end(); EXPECT_TRUE(found_satellite) << "Error: satellite SV: " << FLAGS_test_satellite_PRN << " is not acquired"; +#else + if (absl::GetFlag(FLAGS_enable_external_signal_file)) + { + // create and configure an acquisition block and perform an acquisition to obtain the synchronization parameters + ASSERT_EQ(acquire_signal(absl::GetFlag(FLAGS_test_satellite_PRN)), true); + bool found_satellite = doppler_measurements_map.find(absl::GetFlag(FLAGS_test_satellite_PRN)) != doppler_measurements_map.end(); + EXPECT_TRUE(found_satellite) << "Error: satellite SV: " << absl::GetFlag(FLAGS_test_satellite_PRN) << " is not acquired"; +#endif if (!found_satellite) { return; @@ -879,18 +965,30 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) // Configure the signal generator configure_generator(generator_CN0_values.at(current_cn0_idx), current_cn0_idx); // Generate signal raw signal samples and observations RINEX file + +#if USE_GLOG_AND_GFLAGS if (FLAGS_disable_generator == false) +#else + if (absl::GetFlag(FLAGS_disable_generator) == false) +#endif { generate_signal(); } } } - +#if USE_GLOG_AND_GFLAGS configure_receiver(FLAGS_PLL_bw_hz_start, FLAGS_DLL_bw_hz_start, FLAGS_PLL_narrow_bw_hz, FLAGS_DLL_narrow_bw_hz, FLAGS_extend_correlation_symbols); +#else + configure_receiver(absl::GetFlag(FLAGS_PLL_bw_hz_start), + absl::GetFlag(FLAGS_DLL_bw_hz_start), + absl::GetFlag(FLAGS_PLL_narrow_bw_hz), + absl::GetFlag(FLAGS_DLL_narrow_bw_hz), + absl::GetFlag(FLAGS_extend_correlation_symbols)); +#endif // ****************************************************************************************** // ***** Obtain the initial signal sinchronization parameters (emulating an acquisition) **** @@ -901,9 +999,15 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) uint64_t acq_samplestamp_samples = 0; Tracking_True_Obs_Reader true_obs_data; +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { test_satellite_PRN = FLAGS_test_satellite_PRN; +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + test_satellite_PRN = absl::GetFlag(FLAGS_test_satellite_PRN); +#endif std::string true_obs_file = std::string("./gps_l1_ca_obs_prn"); true_obs_file.append(std::to_string(test_satellite_PRN)); true_obs_file.append(".dat"); @@ -912,7 +1016,11 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) // load acquisition data based on the first epoch of the true observations ASSERT_EQ(true_obs_data.read_binary_obs(), true) << "Failure reading true tracking dump file.\n" +#if USE_GLOG_AND_GFLAGS << "Maybe sat PRN #" + std::to_string(FLAGS_test_satellite_PRN) + +#else + << "Maybe sat PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + +#endif " is not available?"; std::cout << "Testing satellite PRN=" << test_satellite_PRN << '\n'; std::cout << "True Initial Doppler " << true_obs_data.doppler_l1_hz << " [Hz], true Initial code delay [Chips]=" << true_obs_data.prn_delay_chips << "[Chips]\n"; @@ -922,16 +1030,29 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) } else { +#if USE_GLOG_AND_GFLAGS true_acq_doppler_hz = doppler_measurements_map.find(FLAGS_test_satellite_PRN)->second; true_acq_delay_samples = code_delay_measurements_map.find(FLAGS_test_satellite_PRN)->second; acq_samplestamp_samples = acq_samplestamp_map.find(FLAGS_test_satellite_PRN)->second; +#else + true_acq_doppler_hz = doppler_measurements_map.find(absl::GetFlag(FLAGS_test_satellite_PRN))->second; + true_acq_delay_samples = code_delay_measurements_map.find(absl::GetFlag(FLAGS_test_satellite_PRN))->second; + acq_samplestamp_samples = acq_samplestamp_map.find(absl::GetFlag(FLAGS_test_satellite_PRN))->second; +#endif std::cout << "Estimated Initial Doppler " << true_acq_doppler_hz << " [Hz], estimated Initial code delay " << true_acq_delay_samples << " [Samples]" +#if USE_GLOG_AND_GFLAGS << " Acquisition SampleStamp is " << acq_samplestamp_map.find(FLAGS_test_satellite_PRN)->second << '\n'; +#else + << " Acquisition SampleStamp is " << acq_samplestamp_map.find(absl::GetFlag(FLAGS_test_satellite_PRN))->second << '\n'; +#endif } - +#if USE_GLOG_AND_GFLAGS int64_t acq_to_trk_delay_samples = ceil(static_cast(FLAGS_fs_gen_sps) * FLAGS_acq_to_trk_delay_s); +#else + int64_t acq_to_trk_delay_samples = ceil(static_cast(absl::GetFlag(FLAGS_fs_gen_sps)) * absl::GetFlag(FLAGS_acq_to_trk_delay_s)); +#endif // set the scaling factor args.scaling_factor = DMA_SIGNAL_SCALING_FACTOR; @@ -1006,13 +1127,21 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) std::string file; ASSERT_NO_THROW({ +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { file = "./" + filename_raw_data + std::to_string(current_cn0_idx); } else { +#if USE_GLOG_AND_GFLAGS file = FLAGS_signal_file; +#else + file = absl::GetFlag(FLAGS_signal_file); +#endif } gr::blocks::null_sink::sptr sink = gr::blocks::null_sink::make(sizeof(Gnss_Synchro)); @@ -1034,8 +1163,11 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) if (acq_to_trk_delay_samples > 0) { +#if USE_GLOG_AND_GFLAGS std::cout << "--- SIMULATING A PULL-IN DELAY OF " << FLAGS_acq_to_trk_delay_s << " SECONDS ---\n"; - +#else + std::cout << "--- SIMULATING A PULL-IN DELAY OF " << absl::GetFlag(FLAGS_acq_to_trk_delay_s) << " SECONDS ---\n"; +#endif args.file = file; args.nsamples_tx = acq_to_trk_delay_samples; // 150 s for now but will be all file @@ -1053,8 +1185,11 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) std::cout << " Waiting flowgraph..\n"; args.file = file; +#if USE_GLOG_AND_GFLAGS args.nsamples_tx = baseband_sampling_freq * FLAGS_duration; - +#else + args.nsamples_tx = baseband_sampling_freq * absl::GetFlag(FLAGS_duration); +#endif args.skip_used_samples = acq_to_trk_delay_samples; if (pthread_create(&thread_DMA, nullptr, handler_DMA_trk_pull_in_test, reinterpret_cast(&args)) < 0) @@ -1082,7 +1217,12 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) // ******************************** // ***** STEP 7: Plot results ***** // ******************************** + +#if USE_GLOG_AND_GFLAGS if (FLAGS_plot_detail_level >= 2 and FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_plot_detail_level) >= 2 and absl::GetFlag(FLAGS_show_plots)) +#endif { // load the measured values Tracking_Dump_Reader trk_dump; @@ -1127,8 +1267,11 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) Doppler.push_back(trk_dump.carrier_doppler_hz); epoch_counter++; } - +#if USE_GLOG_AND_GFLAGS const std::string gnuplot_executable(FLAGS_gnuplot_executable); +#else + const std::string gnuplot_executable(absl::GetFlag(FLAGS_gnuplot_executable)); +#endif if (gnuplot_executable.empty()) { std::cout << "WARNING: Although the flag show_plots has been set to TRUE,\n"; @@ -1143,6 +1286,7 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) fs::path dir = p.parent_path(); const std::string& gnuplot_path = dir.native(); Gnuplot::set_GNUPlotPath(gnuplot_path); +#if USE_GLOG_AND_GFLAGS auto decimate = static_cast(FLAGS_plot_decimate); if (FLAGS_plot_detail_level >= 2 and FLAGS_show_plots) @@ -1157,7 +1301,22 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) { g1.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips], PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz], (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); } +#else + auto decimate = static_cast(absl::GetFlag(FLAGS_plot_decimate)); + if (absl::GetFlag(FLAGS_plot_detail_level) >= 2 and absl::GetFlag(FLAGS_show_plots)) + { + Gnuplot g1("linespoints"); + g1.showonscreen(); // window output + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + g1.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz, " + "PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], GPS L1 C/A (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } + else + { + g1.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips], PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } +#endif g1.set_grid(); g1.set_xlabel("Time [s]"); g1.set_ylabel("Correlators' output"); @@ -1175,6 +1334,7 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) Gnuplot g2("points"); g2.showonscreen(); // window output +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { g2.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz Constellation " + "PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz], (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); @@ -1183,7 +1343,16 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) { g2.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips], PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz], (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); } - +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + g2.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz Constellation " + "PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } + else + { + g2.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips], PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } +#endif g2.set_grid(); g2.set_xlabel("Inphase"); g2.set_ylabel("Quadrature"); @@ -1192,6 +1361,7 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) g2.savetops("Constellation"); Gnuplot g3("linespoints"); +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { g3.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz, GPS L1 C/A tracking CN0 output (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); @@ -1200,6 +1370,16 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) { g3.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips] PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz], (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); } +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + g3.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz, GPS L1 C/A tracking CN0 output (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } + else + { + g3.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips] PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } +#endif g3.set_grid(); g3.set_xlabel("Time [s]"); g3.set_ylabel("Reported CN0 [dB-Hz]"); @@ -1214,6 +1394,7 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) g3.showonscreen(); // window output Gnuplot g4("linespoints"); +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { g4.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz, GPS L1 C/A tracking CN0 output (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); @@ -1222,6 +1403,16 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) { g4.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips] PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz], (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); } +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + g4.set_title(std::to_string(generator_CN0_values.at(current_cn0_idx)) + " dB-Hz, GPS L1 C/A tracking CN0 output (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } + else + { + g4.set_title("D_e=" + std::to_string(acq_doppler_error_hz_values.at(current_acq_doppler_error_idx)) + " [Hz] " + "T_e= " + std::to_string(acq_delay_error_chips_values.at(current_acq_doppler_error_idx).at(current_acq_code_error_idx)) + " [Chips] PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } +#endif g4.set_grid(); g4.set_xlabel("Time [s]"); g4.set_ylabel("Estimated Doppler [Hz]"); @@ -1265,7 +1456,11 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) pull_in_result_mesh = pull_in_results_v_v.at(current_cn0_idx); // plot grid Gnuplot g4("points palette pointsize 2 pointtype 7"); +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { g4.showonscreen(); // window output } @@ -1277,6 +1472,7 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) g4.cmd("set key off"); g4.cmd("set view map"); std::string title; +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) { title = std::string("Tracking Pull-in result grid at CN0:" + std::to_string(static_cast(round(generator_CN0_values.at(current_cn0_idx)))) + " [dB-Hz], PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz]."); @@ -1285,7 +1481,16 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) { title = std::string("Tracking Pull-in result grid, PLL/DLL BW: " + std::to_string(FLAGS_PLL_bw_hz_start) + "," + std::to_string(FLAGS_DLL_bw_hz_start) + " [Hz], GPS L1 C/A (PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); } - +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) + { + title = std::string("Tracking Pull-in result grid at CN0:" + std::to_string(static_cast(round(generator_CN0_values.at(current_cn0_idx)))) + " [dB-Hz], PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz]."); + } + else + { + title = std::string("Tracking Pull-in result grid, PLL/DLL BW: " + std::to_string(absl::GetFlag(FLAGS_PLL_bw_hz_start)) + "," + std::to_string(absl::GetFlag(FLAGS_DLL_bw_hz_start)) + " [Hz], GPS L1 C/A (PRN #" + std::to_string(absl::GetFlag(FLAGS_test_satellite_PRN)) + ")"); + } +#endif g4.set_title(title); g4.set_grid(); g4.set_xlabel("Acquisition Doppler error [Hz]"); @@ -1295,7 +1500,11 @@ TEST_F(TrackingPullInTestFpga, ValidationOfResults) code_delay_error_mesh, pull_in_result_mesh); g4.set_legend(); +#if USE_GLOG_AND_GFLAGS if (!FLAGS_enable_external_signal_file) +#else + if (!absl::GetFlag(FLAGS_enable_external_signal_file)) +#endif { g4.savetops("trk_pull_in_grid_" + std::to_string(static_cast(round(generator_CN0_values.at(current_cn0_idx))))); g4.savetopdf("trk_pull_in_grid_" + std::to_string(static_cast(round(generator_CN0_values.at(current_cn0_idx)))), 12); diff --git a/src/tests/unit-tests/system-parameters/has_decoding_test.cc b/src/tests/unit-tests/system-parameters/has_decoding_test.cc index 593ce79def..5dc12536f6 100644 --- a/src/tests/unit-tests/system-parameters/has_decoding_test.cc +++ b/src/tests/unit-tests/system-parameters/has_decoding_test.cc @@ -20,7 +20,6 @@ #include "galileo_has_page.h" #include "gnss_sdr_make_unique.h" #include "has_simple_printer.h" -#include #include #include #include @@ -35,8 +34,14 @@ // Usage: // ./run_tests --gtest_filter=HAS_Test.Decoder // ./run_tests --gtest_filter=HAS_Test.Decoder --has_data_test_file=../data/HAS_Messages_sample/encoded/Sample_HAS_Pages_Encoded_20210713_08.txt --start_page_test_file=70 + +#if USE_GLOG_AND_GFLAGS DEFINE_string(has_data_test_file, std::string(""), "File containing encoded HAS pages (format: [time sat_id HAS_page_in_hex] in each line)"); DEFINE_int32(start_page_test_file, 0, "Starting page in case of reading HAS pages from a file"); +#else +ABSL_FLAG(std::string, has_data_test_file, std::string(""), "File containing encoded HAS pages (format: [time sat_id HAS_page_in_hex] in each line)"); +ABSL_FLAG(int32_t, start_page_test_file, 0, "Starting page in case of reading HAS pages from a file"); +#endif #if PMT_USES_BOOST_ANY namespace wht = boost; @@ -212,7 +217,11 @@ class Read_Encoded_Pages TEST(HAS_Test, Decoder) { Read_Encoded_Pages read_pages{}; +#if USE_GLOG_AND_GFLAGS EXPECT_TRUE(read_pages.read_data(FLAGS_has_data_test_file)); +#else + EXPECT_TRUE(read_pages.read_data(absl::GetFlag(FLAGS_has_data_test_file))); +#endif auto gal_e6_has_rx_ = galileo_e6_has_msg_receiver_make(); auto has_tester = HasDecoderTester_make(); std::unique_ptr has_simple_printer = nullptr; @@ -224,10 +233,17 @@ TEST(HAS_Test, Decoder) if (!known_data) { has_simple_printer = std::make_unique(); +#if USE_GLOG_AND_GFLAGS if (static_cast(FLAGS_start_page_test_file) < read_pages.get_number_pages()) { init = FLAGS_start_page_test_file; } +#else + if (static_cast(absl::GetFlag(FLAGS_start_page_test_file)) < read_pages.get_number_pages()) + { + init = absl::GetFlag(FLAGS_start_page_test_file); + } +#endif else { std::cerr << "The flag --start_page_test_file is set beyond the total number of pages in the file (" << read_pages.get_number_pages() << "), ignoring it.\n"; diff --git a/src/utils/front-end-cal/CMakeLists.txt b/src/utils/front-end-cal/CMakeLists.txt index 14e55ca99e..8e328b0894 100644 --- a/src/utils/front-end-cal/CMakeLists.txt +++ b/src/utils/front-end-cal/CMakeLists.txt @@ -30,12 +30,17 @@ target_link_libraries(front_end_cal_lib core_libs PRIVATE Boost::headers - Gflags::gflags - Glog::glog Gnuradio::blocks Gnuradio::runtime ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(front_end_cal_lib PRIVATE Gflags::gflags Glog::glog) + target_compile_definitions(front_end_cal_lib PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(front_end_cal_lib PRIVATE absl::flags absl::log) +endif() + if(ENABLE_CLANG_TIDY) if(CLANG_TIDY_EXE) set_target_properties(front_end_cal_lib @@ -59,9 +64,15 @@ target_link_libraries(front-end-cal front_end_cal_lib gnss_sdr_flags Boost::headers - Glog::glog ) +if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(front-end-cal PRIVATE Glog::glog) + target_compile_definitions(front-end-cal PRIVATE -DUSE_GLOG_AND_GFLAGS=1) +else() + target_link_libraries(front-end-cal PRIVATE absl::flags absl::flags_parse absl::log absl::log_initialize absl::log_sink absl::log_sink_registry) +endif() + if(GNURADIO_USES_STD_POINTERS) target_compile_definitions(front-end-cal PRIVATE -DGNURADIO_USES_STD_POINTERS=1 @@ -102,6 +113,9 @@ if(PMT_USES_BOOST_ANY) ) endif() +include(XcodeRemoveWarningDuplicates) +xcode_remove_warning_duplicates(front-end-cal) + if(ENABLE_STRIP) set_target_properties(front-end-cal PROPERTIES LINK_FLAGS "-s") endif() diff --git a/src/utils/front-end-cal/front_end_cal.cc b/src/utils/front-end-cal/front_end_cal.cc index 9c527d10e4..dc26ab2a3b 100644 --- a/src/utils/front-end-cal/front_end_cal.cc +++ b/src/utils/front-end-cal/front_end_cal.cc @@ -26,7 +26,6 @@ #include "gps_iono.h" #include "gps_utc_model.h" #include -#include #include // for min #include #include // for operator<< @@ -34,6 +33,12 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#else +#include +#endif + extern Concurrent_Map global_gps_ephemeris_map; extern Concurrent_Map global_gps_iono_map; extern Concurrent_Map global_gps_utc_model_map; diff --git a/src/utils/front-end-cal/main.cc b/src/utils/front-end-cal/main.cc index 972e4a21e3..4da2c1730a 100644 --- a/src/utils/front-end-cal/main.cc +++ b/src/utils/front-end-cal/main.cc @@ -40,8 +40,6 @@ #include // for bad_any_cast #include #include -#include -#include #include // for block #include #include @@ -70,6 +68,23 @@ #include #include +#if USE_GLOG_AND_GFLAGS +#include +#include +#else +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#endif + #if HAS_GENERIC_LAMBDA #else #include @@ -81,14 +96,39 @@ namespace wht = boost; namespace wht = std; #endif +#if USE_GLOG_AND_GFLAGS #if GFLAGS_OLD_NAMESPACE namespace gflags { using namespace google; } #endif - DECLARE_string(log_dir); +#else +class FrontEndCalLogSink : public absl::LogSink +{ +public: + FrontEndCalLogSink() + { + if (!absl::GetFlag(FLAGS_log_dir).empty()) + { + logfile.open(absl::GetFlag(FLAGS_log_dir) + "/front_end_cal.log"); + } + else + { + logfile.open(GetTempDir() + "/front_end_cal.log"); + } + } + void Send(const absl::LogEntry& entry) override + { + logfile << entry.text_message_with_prefix_and_newline() << std::flush; + } + +private: + std::ofstream logfile; +}; +std::string FrontEndCalVersionString() { return std::string(FRONT_END_CAL_VERSION) + "\n"; } +#endif Concurrent_Map global_gps_ephemeris_map; Concurrent_Map global_gps_iono_map; @@ -100,7 +140,7 @@ Concurrent_Queue global_gps_acq_assist_queue; bool stop; Concurrent_Queue channel_internal_queue; std::vector gnss_sync_vector; -Gnss_Synchro gnss_synchro{}; +Gnss_Synchro gnss_synchro; // ######## GNURADIO BLOCK MESSAGE RECEVER ######### class FrontEndCal_msg_rx; @@ -277,10 +317,17 @@ int main(int argc, char** argv) "This program comes with ABSOLUTELY NO WARRANTY;\n" + "See COPYING file to see a copy of the General Public License\n \n"); +#if USE_GLOG_AND_GFLAGS gflags::SetUsageMessage(intro_help); google::SetVersionString(FRONT_END_CAL_VERSION); gflags::ParseCommandLineFlags(&argc, &argv, true); - +#else + absl::FlagsUsageConfig empty_config; + empty_config.version_string = &FrontEndCalVersionString; + absl::SetFlagsUsageConfig(empty_config); + absl::SetProgramUsageMessage(intro_help); + absl::ParseCommandLine(argc, argv); +#endif std::cout << "Initializing... Please wait.\n"; } catch (const std::exception& e) @@ -289,8 +336,16 @@ int main(int argc, char** argv) std::cout << "front-end-cal program ended.\n"; return 1; } + +#if USE_GLOG_AND_GFLAGS google::InitGoogleLogging(argv[0]); if (FLAGS_log_dir.empty()) +#else + absl::LogSink* fecLogSink = new FrontEndCalLogSink; + absl::AddLogSink(fecLogSink); + absl::InitializeLog(); + if (absl::GetFlag(FLAGS_log_dir).empty()) +#endif { std::cout << "Logging will be done at " << "/tmp" @@ -302,29 +357,49 @@ int main(int argc, char** argv) { try { +#if USE_GLOG_AND_GFLAGS const fs::path p(FLAGS_log_dir); +#else + const fs::path p(absl::GetFlag(FLAGS_log_dir)); +#endif if (!fs::exists(p)) { std::cout << "The path " +#if USE_GLOG_AND_GFLAGS << FLAGS_log_dir +#else + << absl::GetFlag(FLAGS_log_dir) +#endif << " does not exist, attempting to create it" << '\n'; errorlib::error_code ec; if (!fs::create_directory(p, ec)) { +#if USE_GLOG_AND_GFLAGS std::cerr << "Could not create the " << FLAGS_log_dir << " folder. Front-end-cal program ended.\n"; gflags::ShutDownCommandLineFlags(); +#else + std::cerr << "Could not create the " << absl::GetFlag(FLAGS_log_dir) << " folder. Front-end-cal program ended.\n"; +#endif return 1; } } std::cout << "Logging with be done at " +#if USE_GLOG_AND_GFLAGS << FLAGS_log_dir << '\n'; +#else + << absl::GetFlag(FLAGS_log_dir) << '\n'; +#endif } catch (const std::exception& e) { std::cerr << e.what() << '\n'; +#if USE_GLOG_AND_GFLAGS std::cerr << "Could not create the " << FLAGS_log_dir << " folder. Front-end-cal program ended.\n"; gflags::ShutDownCommandLineFlags(); +#else + std::cerr << "Could not create the " << absl::GetFlag(FLAGS_log_dir) << " folder. Front-end-cal program ended.\n"; +#endif return 1; } } @@ -335,7 +410,11 @@ int main(int argc, char** argv) FrontEndCal front_end_cal; // 1. Load configuration parameters from config file +#if USE_GLOG_AND_GFLAGS std::shared_ptr configuration = std::make_shared(FLAGS_config_file); +#else + std::shared_ptr configuration = std::make_shared(absl::GetFlag(FLAGS_config_file)); +#endif front_end_cal.set_configuration(configuration); // 2. Get SUPL information from server: Ephemeris record, assistance info and TOW @@ -541,7 +620,9 @@ int main(int argc, char** argv) else { std::cout << "Unable to get Ephemeris SUPL assistance. TOW is unknown!\n"; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif std::cout << "GNSS-SDR Front-end calibration program ended.\n"; return 0; } @@ -549,7 +630,9 @@ int main(int argc, char** argv) catch (const boost::exception& e) { std::cout << "Exception in getting Global ephemeris map\n"; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif std::cout << "GNSS-SDR Front-end calibration program ended.\n"; return 0; } @@ -568,7 +651,9 @@ int main(int argc, char** argv) if (doppler_measurements_map.empty()) { std::cout << "Sorry, no GPS satellites detected in the front-end capture, please check the antenna setup...\n"; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif std::cout << "GNSS-SDR Front-end calibration program ended.\n"; return 0; } @@ -673,17 +758,22 @@ int main(int argc, char** argv) catch (const std::exception& e) { std::cerr << "Exception: " << e.what(); +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } catch (...) { std::cerr << "Unknown error\n"; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } - +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif std::cout << "GNSS-SDR Front-end calibration program ended.\n"; return 0; } diff --git a/src/utils/nav-listener/CMakeLists.txt b/src/utils/nav-listener/CMakeLists.txt index 048a862f46..cc86a7bf4a 100644 --- a/src/utils/nav-listener/CMakeLists.txt +++ b/src/utils/nav-listener/CMakeLists.txt @@ -4,7 +4,7 @@ # SPDX-FileCopyrightText: 2021 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause -cmake_minimum_required(VERSION 3.9...3.23) +cmake_minimum_required(VERSION 3.9...3.30) project(nav-msg-listener CXX) set(CMAKE_CXX_STANDARD 11) diff --git a/src/utils/nav-listener/README.md b/src/utils/nav-listener/README.md index 147e9717f5..76b2aedaf0 100644 --- a/src/utils/nav-listener/README.md +++ b/src/utils/nav-listener/README.md @@ -17,7 +17,7 @@ as a example on how to retrieve data using the `nav_message.proto` file. # Build the software This software requires [Boost](https://www.boost.org/) and -[Protocol Buffers](https://developers.google.com/protocol-buffers). +[Protocol Buffers](https://protobuf.dev/). In a terminal, type: diff --git a/src/utils/nav-listener/main.cc b/src/utils/nav-listener/main.cc index 6fee013f7e..f2b789497f 100644 --- a/src/utils/nav-listener/main.cc +++ b/src/utils/nav-listener/main.cc @@ -31,6 +31,7 @@ int main(int argc, char *argv[]) unsigned short port = boost::lexical_cast(argv[1]); Nav_Msg_Udp_Listener udp_listener(port); + std::cout << "Listening on port " << static_cast(port) << ", press Control+C to exit ...\n"; while (true) { @@ -45,9 +46,15 @@ int main(int argc, char *argv[]) } } } + catch (boost::bad_lexical_cast &) + { + std::cerr << "Error: the argument " << argv[1] << " is not a valid port number.\n"; + return 1; + } catch (std::exception &e) { std::cerr << e.what() << '\n'; + return 1; } return 0; diff --git a/src/utils/nav-listener/nav_msg_udp_listener.cc b/src/utils/nav-listener/nav_msg_udp_listener.cc index 7961c8c8d1..5a291b8ed8 100644 --- a/src/utils/nav-listener/nav_msg_udp_listener.cc +++ b/src/utils/nav-listener/nav_msg_udp_listener.cc @@ -19,46 +19,67 @@ #include Nav_Msg_Udp_Listener::Nav_Msg_Udp_Listener(unsigned short port) - : socket{io_service}, endpoint{boost::asio::ip::udp::v4(), port} + : socket{io_service}, endpoint{boost::asio::ip::udp::v4(), port}, connected_socket(true) { - socket.open(endpoint.protocol(), error); // Open socket. - socket.bind(endpoint, error); // Bind the socket to the given local endpoint. + socket.open(endpoint.protocol(), error); // Open socket + if (error) + { + std::cerr << "Error opening socket: " << error.message() << '\n'; + connected_socket = false; + } + if (connected_socket) + { + socket.bind(endpoint, error); // Bind the socket to the given local endpoint. + if (error) + { + std::cerr << "Error binding socket: " << error.message() << '\n'; + connected_socket = false; + } + } } -/** - * !\brief blocking call to read nav_message from UDP port - * \param[out] message navigation message class to contain parsed output - * \return true if message parsed succesfully, false ow + +/* + * Blocking call to read nav_message from UDP port + * return true if message parsed succesfully, false ow */ bool Nav_Msg_Udp_Listener::receive_and_parse_nav_message(gnss_sdr::navMsg &message) { - char buff[8192]; // Buffer for storing the received data. + if (connected_socket) + { + char buff[8192]; // Buffer for storing the received data. - // This call will block until one or more bytes of data has been received. - int bytes = socket.receive(boost::asio::buffer(buff)); + // This call will block until one or more bytes of data has been received. + int bytes = socket.receive(boost::asio::buffer(buff)); - std::string data(&buff[0], bytes); - // Deserialize a stock of Nav_Msg objects from the binary string. - return message.ParseFromString(data); + std::string data(&buff[0], bytes); + // Deserialize a stock of Nav_Msg objects from the binary string. + return message.ParseFromString(data); + } + return false; } + /* - * !\brief prints navigation message content - * \param[in] message nav message to be printed + * Prints navigation message content + * param[in] message nav message to be printed */ void Nav_Msg_Udp_Listener::print_message(gnss_sdr::navMsg &message) const { - std::string system = message.system(); - std::string signal = message.signal(); - int prn = message.prn(); - int tow_at_current_symbol_ms = message.tow_at_current_symbol_ms(); - std::string nav_message = message.nav_message(); + if (connected_socket) + { + std::string system = message.system(); + std::string signal = message.signal(); + int prn = message.prn(); + int tow_at_current_symbol_ms = message.tow_at_current_symbol_ms(); + std::string nav_message = message.nav_message(); - std::cout << "\nNew Data received:\n"; - std::cout << "System: " << system << '\n'; - std::cout << "Signal: " << signal << '\n'; - std::cout << "PRN: " << prn << '\n'; - std::cout << "TOW of last symbol [ms]: " - << tow_at_current_symbol_ms << '\n'; - std::cout << "Nav message: " << nav_message << "\n\n"; + std::cout << "\nNew data received:\n"; + std::cout << "System: " << system << '\n'; + std::cout << "Signal: " << signal << '\n'; + std::cout << "PRN: " << prn << '\n'; + std::cout << "TOW of last symbol [ms]: " + << tow_at_current_symbol_ms << '\n'; + std::cout << "Nav message: " << nav_message << "\n\n"; + } } diff --git a/src/utils/nav-listener/nav_msg_udp_listener.h b/src/utils/nav-listener/nav_msg_udp_listener.h index c16654f40e..6f70a042e6 100644 --- a/src/utils/nav-listener/nav_msg_udp_listener.h +++ b/src/utils/nav-listener/nav_msg_udp_listener.h @@ -31,6 +31,7 @@ class Nav_Msg_Udp_Listener boost::asio::ip::udp::socket socket; boost::system::error_code error; boost::asio::ip::udp::endpoint endpoint; + bool connected_socket; }; #endif diff --git a/src/utils/rinex-tools/CMakeLists.txt b/src/utils/rinex-tools/CMakeLists.txt index 94906c04c6..695c369ee9 100644 --- a/src/utils/rinex-tools/CMakeLists.txt +++ b/src/utils/rinex-tools/CMakeLists.txt @@ -34,7 +34,9 @@ if("${ARMADILLO_VERSION_STRING}" VERSION_GREATER "9.800" OR (NOT ARMADILLO_FOUND endif() target_include_directories(obsdiff PUBLIC ${GNSSSDR_SOURCE_DIR}/src/tests/common-files) - set_property(TARGET obsdiff PROPERTY CXX_STANDARD 14) # Required by GPSTk v3.0.0 + if(GNSSTK_VERSION AND "${GNSSTK_VERSION}" VERSION_LESS 3.0.1) + set_property(TARGET obsdiff PROPERTY CXX_STANDARD 14) # Required by GPSTk v3.0.0 + endif() # Do not show warnings raised by GPSTk v3.0.0 if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options(obsdiff @@ -52,8 +54,10 @@ if("${ARMADILLO_VERSION_STRING}" VERSION_GREATER "9.800" OR (NOT ARMADILLO_FOUND if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO) add_dependencies(obsdiff armadillo-${armadillo_RELEASE}) endif() - if(NOT GFLAGS_FOUND) - add_dependencies(obsdiff gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) + if(ENABLE_GLOG_AND_GFLAGS) + if(NOT GFLAGS_FOUND) + add_dependencies(obsdiff gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) + endif() endif() if(NOT GNSSTK_FOUND OR ENABLE_OWN_GNSSTK) add_dependencies(obsdiff gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}) @@ -101,15 +105,24 @@ if("${ARMADILLO_VERSION_STRING}" VERSION_GREATER "9.800" OR (NOT ARMADILLO_FOUND PRIVATE Armadillo::armadillo Threads::Threads - Gflags::gflags Matio::matio Gnsstk::gnsstk ) + if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(obsdiff PRIVATE Gflags::gflags) + target_compile_definitions(obsdiff PRIVATE -DUSE_GLOG_AND_GFLAGS=1) + else() + target_link_libraries(obsdiff PUBLIC absl::flags absl::flags_parse) + endif() + if(ENABLE_STRIP) set_target_properties(obsdiff PROPERTIES LINK_FLAGS "-s") endif() + include(XcodeRemoveWarningDuplicates) + xcode_remove_warning_duplicates(obsdiff) + add_custom_command(TARGET obsdiff POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ ${LOCAL_INSTALL_BASE_DIR}/install/$ diff --git a/src/utils/rinex-tools/README.md b/src/utils/rinex-tools/README.md index 58a1bd259a..453ccd7a9c 100644 --- a/src/utils/rinex-tools/README.md +++ b/src/utils/rinex-tools/README.md @@ -17,7 +17,7 @@ observation files. Requirements: -- [Armadillo](http://arma.sourceforge.net/): A C++ library for linear algebra +- [Armadillo](https://arma.sourceforge.net/): A C++ library for linear algebra and scientific computing. This program requires version 9.800 or higher. If your installed Armadillo version is older, see below. - [Gflags](https://github.com/gflags/gflags): A C++ library that implements diff --git a/src/utils/rinex-tools/obsdiff.cc b/src/utils/rinex-tools/obsdiff.cc index 0b156bb86a..1b2cd1fc36 100644 --- a/src/utils/rinex-tools/obsdiff.cc +++ b/src/utils/rinex-tools/obsdiff.cc @@ -80,12 +80,16 @@ namespace gnsstk = gpstk; #endif #endif +#if USE_GLOG_AND_GFLAGS #if GFLAGS_OLD_NAMESPACE namespace gflags { using namespace google; } #endif +#else +#include +#endif // Create the lists of GNSS satellites std::set available_gps_prn = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, @@ -422,8 +426,12 @@ void carrier_phase_double_diff( << " [Cycles]\n"; std::cout.precision(ss); - // plots +// plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Double diff Carrier Phase error [Cycles]"); @@ -506,8 +514,12 @@ void carrier_phase_single_diff( << " [Cycles]\n"; std::cout.precision(ss); - // plots +// plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Single diff Carrier Phase error [Cycles]"); @@ -614,7 +626,11 @@ void carrier_doppler_double_diff( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Double diff Carrier Doppler error [Hz]"); @@ -697,7 +713,11 @@ void carrier_doppler_single_diff( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Single diff Carrier Doppler error [Hz]"); @@ -805,7 +825,11 @@ void code_pseudorange_double_diff( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Double diff Pseudorange error [m]"); @@ -890,7 +914,11 @@ void code_pseudorange_single_diff( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Single diff Pseudorange error [m]"); @@ -1039,7 +1067,11 @@ void coderate_phaserate_consistence( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Code rate - phase rate [m/s]"); @@ -1123,7 +1155,11 @@ void code_phase_diff( std::cout.precision(ss); // plots +#if USE_GLOG_AND_GFLAGS if (FLAGS_show_plots) +#else + if (absl::GetFlag(FLAGS_show_plots)) +#endif { Gnuplot g3("linespoints"); g3.set_title(data_title + "Code range - Carrier phase range [m]"); @@ -1396,13 +1432,23 @@ void RINEX_doublediff_dupli_sat() { // special test mode for duplicated satellites // read rinex receiver-under-test observations +#if USE_GLOG_AND_GFLAGS std::map rover_obs = ReadRinexObs(FLAGS_rover_rinex_obs, 'G', std::string("1C")); +#else + std::map rover_obs = ReadRinexObs(absl::GetFlag(FLAGS_rover_rinex_obs), 'G', std::string("1C")); +#endif + + if (rover_obs.empty()) { return; } - // Cut measurement initial transitory of the measurements + // Cut measurement initial transitory of the measurements +#if USE_GLOG_AND_GFLAGS double initial_transitory_s = FLAGS_skip_obs_transitory_s; +#else + double initial_transitory_s = absl::GetFlag(FLAGS_skip_obs_transitory_s); +#endif std::cout << "Skipping initial transitory of " << initial_transitory_s << " [s]\n"; arma::uvec index; for (auto& rover_ob : rover_obs) @@ -1415,7 +1461,11 @@ void RINEX_doublediff_dupli_sat() } std::vector prn_pairs; +#if USE_GLOG_AND_GFLAGS std::stringstream ss(FLAGS_dupli_sat_prns); +#else + std::stringstream ss(absl::GetFlag(FLAGS_dupli_sat_prns)); +#endif unsigned int i; while (ss >> i) { @@ -1463,11 +1513,17 @@ void RINEX_doublediff_dupli_sat() void RINEX_doublediff(bool remove_rx_clock_error) { +#if USE_GLOG_AND_GFLAGS // read rinex base observations std::map base_obs = ReadRinexObs(FLAGS_base_rinex_obs, FLAGS_system.c_str()[0], FLAGS_signal); // read rinex receiver-under-test (rover) observations std::map rover_obs = ReadRinexObs(FLAGS_rover_rinex_obs, FLAGS_system.c_str()[0], FLAGS_signal); - +#else + // read rinex base observations + std::map base_obs = ReadRinexObs(absl::GetFlag(FLAGS_base_rinex_obs), absl::GetFlag(FLAGS_system).c_str()[0], absl::GetFlag(FLAGS_signal)); + // read rinex receiver-under-test (rover) observations + std::map rover_obs = ReadRinexObs(absl::GetFlag(FLAGS_rover_rinex_obs), absl::GetFlag(FLAGS_system).c_str()[0], absl::GetFlag(FLAGS_signal)); +#endif if (base_obs.empty() or rover_obs.empty()) { return; @@ -1478,14 +1534,24 @@ void RINEX_doublediff(bool remove_rx_clock_error) double rover_rx_clock_error_s = 0.0; if (remove_rx_clock_error == true) { +#if USE_GLOG_AND_GFLAGS base_rx_clock_error_s = compute_rx_clock_error(FLAGS_rinex_nav, FLAGS_base_rinex_obs); rover_rx_clock_error_s = compute_rx_clock_error(FLAGS_rinex_nav, FLAGS_rover_rinex_obs); +#else + base_rx_clock_error_s = compute_rx_clock_error(absl::GetFlag(FLAGS_rinex_nav), absl::GetFlag(FLAGS_base_rinex_obs)); + rover_rx_clock_error_s = compute_rx_clock_error(absl::GetFlag(FLAGS_rinex_nav), absl::GetFlag(FLAGS_rover_rinex_obs)); +#endif } double common_clock_error_s = rover_rx_clock_error_s - base_rx_clock_error_s; // Cut measurement initial transitory of the measurements + +#if USE_GLOG_AND_GFLAGS double initial_transitory_s = FLAGS_skip_obs_transitory_s; +#else + double initial_transitory_s = absl::GetFlag(FLAGS_skip_obs_transitory_s); +#endif std::cout << "Skipping initial transitory of " << initial_transitory_s << " [s]\n"; arma::uvec index; for (auto& rover_ob : rover_obs) @@ -1535,7 +1601,11 @@ void RINEX_doublediff(bool remove_rx_clock_error) base_obs_time = base_obs.begin()->second.col(0); rover_obs_time = rover_obs.begin()->second.col(0); +#if USE_GLOG_AND_GFLAGS double skip_ends_s = FLAGS_skip_obs_ends_s; +#else + double skip_ends_s = absl::GetFlag(FLAGS_skip_obs_ends_s); +#endif std::cout << "Skipping last " << skip_ends_s << " [s] of observations\n"; for (auto& rover_ob : rover_obs) { @@ -1653,16 +1723,24 @@ void RINEX_doublediff(bool remove_rx_clock_error) void RINEX_singlediff() { +#if USE_GLOG_AND_GFLAGS // read rinex receiver-under-test observations std::map rover_obs = ReadRinexObs(FLAGS_rover_rinex_obs, FLAGS_system.c_str()[0], FLAGS_signal); - +#else + // read rinex receiver-under-test observations + std::map rover_obs = ReadRinexObs(absl::GetFlag(FLAGS_rover_rinex_obs), absl::GetFlag(FLAGS_system).c_str()[0], absl::GetFlag(FLAGS_signal)); +#endif if (rover_obs.empty()) { return; } - // Cut measurement initial transitory of the measurements + // Cut measurement initial transitory of the measurements +#if USE_GLOG_AND_GFLAGS double initial_transitory_s = FLAGS_skip_obs_transitory_s; +#else + double initial_transitory_s = absl::GetFlag(FLAGS_skip_obs_transitory_s); +#endif std::cout << "Skipping initial transitory of " << initial_transitory_s << " [s]\n"; arma::uvec index; for (auto& rover_ob : rover_obs) @@ -1677,7 +1755,11 @@ void RINEX_singlediff() // also skip last seconds of the observations (some artifacts are present in some RINEX endings) arma::colvec rover_obs_time = rover_obs.begin()->second.col(0); +#if USE_GLOG_AND_GFLAGS double skip_ends_s = FLAGS_skip_obs_ends_s; +#else + double skip_ends_s = absl::GetFlag(FLAGS_skip_obs_ends_s); +#endif std::cout << "Skipping last " << skip_ends_s << " [s] of observations\n"; for (auto& rover_ob : rover_obs) { @@ -1727,12 +1809,22 @@ void RINEX_singlediff() int main(int argc, char** argv) { std::cout << "Running RINEX observables difference tool...\n"; +#if USE_GLOG_AND_GFLAGS gflags::ParseCommandLineFlags(&argc, &argv, true); +#else + absl::ParseCommandLine(argc, argv); +#endif try { +#if USE_GLOG_AND_GFLAGS if (FLAGS_single_diff) { if (FLAGS_dupli_sat) +#else + if (absl::GetFlag(FLAGS_single_diff)) + { + if (absl::GetFlag(FLAGS_dupli_sat)) +#endif { RINEX_doublediff_dupli_sat(); } @@ -1743,27 +1835,39 @@ int main(int argc, char** argv) } else { +#if USE_GLOG_AND_GFLAGS RINEX_doublediff(FLAGS_remove_rx_clock_error); +#else + RINEX_doublediff(absl::GetFlag(FLAGS_remove_rx_clock_error)); +#endif } } catch (const gnsstk::Exception& e) { std::cerr << e; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } catch (const std::exception& e) { std::cerr << "Exception: " << e.what(); +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } catch (...) { std::cerr << "Unknown error\n"; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 0; } diff --git a/src/utils/rinex-tools/obsdiff_flags.h b/src/utils/rinex-tools/obsdiff_flags.h index 961ae9536b..d3b9a607c8 100644 --- a/src/utils/rinex-tools/obsdiff_flags.h +++ b/src/utils/rinex-tools/obsdiff_flags.h @@ -18,6 +18,7 @@ #ifndef GNSS_SDR_OBSDIFF_FLAGS_H #define GNSS_SDR_OBSDIFF_FLAGS_H +#if USE_GLOG_AND_GFLAGS #include DEFINE_double(skip_obs_transitory_s, 30.0, "Skip the initial observable outputs to avoid transitory results [s]"); @@ -33,5 +34,24 @@ DEFINE_string(rover_rinex_obs, "base.obs", "Filename of test RINEX observation f DEFINE_string(system, "G", "GNSS satellite system: G for GPS, E for Galileo"); DEFINE_string(signal, "1C", "GNSS signal: 1C for GPS L1 CA, 1B for Galileo E1"); DEFINE_bool(remove_rx_clock_error, false, "Compute and remove the receivers clock error prior to compute observable differences (requires a valid RINEX nav file for both receivers)"); +#else +#include +#include +#include +ABSL_FLAG(double, skip_obs_transitory_s, 30.0, "Skip the initial observable outputs to avoid transitory results [s]"); +ABSL_FLAG(double, skip_obs_ends_s, 5.0, "Skip the lasts observable outputs to avoid transitory results [s]"); +ABSL_FLAG(bool, single_diffs, false, "Compute also the single difference errors for Accumulated Carrier Phase and Carrier Doppler (requires LO synchronization between receivers)"); +ABSL_FLAG(bool, compare_with_5X, false, "Compare the E5a Doppler and Carrier Phases with the E5 full bw in RINEX (expect discrepancy due to the center frequencies difference)"); +ABSL_FLAG(bool, dupli_sat, false, "Enable special observable test mode where the scenario contains duplicated satellite orbits"); +ABSL_FLAG(bool, single_diff, false, "Enable special observable test mode using only rover observables"); +ABSL_FLAG(std::string, dupli_sat_prns, "1,2,3,4", "List of duplicated satellites PRN pairs (i.e. 1,2,3,4 indicates that the PRNs 1,2 share the same orbit. The same applies for PRNs 3,4)"); +ABSL_FLAG(std::string, base_rinex_obs, "base.obs", "Filename of reference RINEX observation file"); +ABSL_FLAG(std::string, rinex_nav, "base.nav", "Filename of reference RINEX navigation file"); +ABSL_FLAG(std::string, rover_rinex_obs, "base.obs", "Filename of test RINEX observation file"); +ABSL_FLAG(std::string, system, "G", "GNSS satellite system: G for GPS, E for Galileo"); +ABSL_FLAG(std::string, signal, "1C", "GNSS signal: 1C for GPS L1 CA, 1B for Galileo E1"); +ABSL_FLAG(bool, remove_rx_clock_error, false, "Compute and remove the receivers clock error prior to compute observable differences (requires a valid RINEX nav file for both receivers)"); + +#endif #endif diff --git a/src/utils/rinex2assist/CMakeLists.txt b/src/utils/rinex2assist/CMakeLists.txt index 4f9e31b88e..277a924b1f 100644 --- a/src/utils/rinex2assist/CMakeLists.txt +++ b/src/utils/rinex2assist/CMakeLists.txt @@ -19,7 +19,19 @@ if(NOT GNSSTK_FOUND OR ENABLE_OWN_GNSSTK) endif() endif() -find_package(Boost COMPONENTS iostreams serialization QUIET) +if(CMAKE_VERSION VERSION_LESS 3.30) + find_package(Boost COMPONENTS iostreams serialization QUIET) +else() + find_package(Boost COMPONENTS iostreams serialization) + if(NOT TARGET Boost::iostreams) + message(STATUS "Trying deprecated FindBoost Module ...") + if(POLICY CMP0167) + cmake_policy(SET CMP0167 OLD) + find_package(Boost COMPONENTS iostreams serialization) + endif() + endif() +endif() + if(CMAKE_VERSION VERSION_LESS 3.5) if(NOT TARGET Boost::iostreams) add_library(Boost::iostreams IMPORTED SHARED) @@ -47,7 +59,7 @@ find_program(UNCOMPRESS_EXECUTABLE uncompress /usr/sbin ) -if(Boost_FOUND) +if(TARGET Boost::iostreams AND TARGET Boost::serialization) message(STATUS "The rinex2assist utility tool will be built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'") if(USE_CMAKE_TARGET_SOURCES) add_executable(rinex2assist) @@ -59,7 +71,10 @@ if(Boost_FOUND) add_executable(rinex2assist ${CMAKE_CURRENT_SOURCE_DIR}/main.cc) endif() - set_property(TARGET rinex2assist PROPERTY CXX_STANDARD 14) # Required by GPSTk + if(GNSSTK_VERSION AND "${GNSSTK_VERSION}" VERSION_LESS 3.0.1) + set_property(TARGET rinex2assist PROPERTY CXX_STANDARD 14) # Required by GPSTk v3.0.0 + endif() + # Do not show warnings raised by GPSTk v3.0.0 if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options(rinex2assist @@ -79,11 +94,17 @@ if(Boost_FOUND) Boost::iostreams Boost::serialization ${GNSSTK_LIBRARY} - Gflags::gflags Threads::Threads core_system_parameters ) + if(ENABLE_GLOG_AND_GFLAGS) + target_link_libraries(rinex2assist PRIVATE Gflags::gflags) + target_compile_definitions(rinex2assist PRIVATE -DUSE_GLOG_AND_GFLAGS=1) + else() + target_link_libraries(rinex2assist PRIVATE absl::flags absl::flags_parse) + endif() + if(GNSSTK_USES_GPSTK_NAMESPACE) target_compile_definitions(rinex2assist PUBLIC -DGNSSTK_USES_GPSTK_NAMESPACE=1) target_include_directories(rinex2assist diff --git a/src/utils/rinex2assist/main.cc b/src/utils/rinex2assist/main.cc index b100ac95d8..7ae45a286a 100644 --- a/src/utils/rinex2assist/main.cc +++ b/src/utils/rinex2assist/main.cc @@ -27,7 +27,6 @@ #include #include #include -#include #include // for size_t #include #include @@ -44,12 +43,21 @@ namespace gnsstk = gpstk; #include #endif +#if USE_GLOG_AND_GFLAGS +#include #if GFLAGS_OLD_NAMESPACE namespace gflags { using namespace google; } #endif +#else +#include +#include +#include +#include +std::string TstVersionString() { return "1.0"; } +#endif int main(int argc, char** argv) { @@ -61,17 +69,26 @@ int main(int argc, char** argv) "Usage: \n" + " rinex2assist "); +#if USE_GLOG_AND_GFLAGS gflags::SetUsageMessage(intro_help); google::SetVersionString("1.0"); gflags::ParseCommandLineFlags(&argc, &argv, true); - +#else + absl::FlagsUsageConfig empty_config; + empty_config.version_string = &TstVersionString; + absl::SetFlagsUsageConfig(empty_config); + absl::SetProgramUsageMessage(intro_help); + absl::ParseCommandLine(argc, argv); +#endif if ((argc != 2)) { std::cerr << "Usage:\n"; std::cerr << " " << argv[0] << " " << '\n'; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } std::string xml_filename; @@ -327,14 +344,18 @@ int main(int argc, char** argv) { std::cerr << "Error reading the RINEX file: " << e.what() << '\n'; std::cerr << "No XML file will be created.\n"; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } if (i == 0 and j == 0) { std::cerr << "No navigation data found in the RINEX file. No XML file will be created.\n"; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } @@ -355,7 +376,9 @@ int main(int argc, char** argv) catch (std::exception& e) { std::cerr << "Problem creating the XML file " << xml_filename << ": " << e.what() << '\n'; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } std::cout << "Generated file: " << xml_filename << '\n'; @@ -373,7 +396,9 @@ int main(int argc, char** argv) catch (std::exception& e) { std::cerr << "Problem creating the XML file " << xml_filename << ": " << e.what() << '\n'; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } std::cout << "Generated file: " << xml_filename << '\n'; @@ -393,7 +418,9 @@ int main(int argc, char** argv) catch (std::exception& e) { std::cerr << "Problem creating the XML file " << xml_filename << ": " << e.what() << '\n'; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } std::cout << "Generated file: " << xml_filename << '\n'; @@ -413,7 +440,9 @@ int main(int argc, char** argv) catch (std::exception& e) { std::cerr << "Problem creating the XML file " << xml_filename << ": " << e.what() << '\n'; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } std::cout << "Generated file: " << xml_filename << '\n'; @@ -432,7 +461,9 @@ int main(int argc, char** argv) catch (std::exception& e) { std::cerr << "Problem creating the XML file " << xml_filename << ": " << e.what() << '\n'; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } std::cout << "Generated file: " << xml_filename << '\n'; @@ -450,11 +481,15 @@ int main(int argc, char** argv) catch (std::exception& e) { std::cerr << "Problem creating the XML file " << xml_filename << ": " << e.what() << '\n'; +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 1; } std::cout << "Generated file: " << xml_filename << '\n'; } +#if USE_GLOG_AND_GFLAGS gflags::ShutDownCommandLineFlags(); +#endif return 0; }