From bcec8331e6bf320d0740c0691ddf08ef33cd9d7d Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Tue, 23 Nov 2021 16:38:50 +0100 Subject: [PATCH] Fixes for building against GNU Radio master Log4cpp has been replaced by spdlog and fmt --- CMakeLists.txt | 29 ++++++- cmake/Modules/FindFMT.cmake | 76 +++++++++++++++++ cmake/Modules/FindGNURADIO.cmake | 7 ++ cmake/Modules/FindSPDLOG.cmake | 84 +++++++++++++++++++ src/algorithms/PVT/adapters/CMakeLists.txt | 8 ++ src/algorithms/channel/libs/CMakeLists.txt | 8 ++ .../conditioner/adapters/CMakeLists.txt | 8 ++ .../gnuradio_blocks/CMakeLists.txt | 8 ++ .../gnuradio_blocks/CMakeLists.txt | 8 ++ src/algorithms/libs/CMakeLists.txt | 8 ++ .../gnuradio_blocks/CMakeLists.txt | 8 ++ .../resampler/gnuradio_blocks/CMakeLists.txt | 8 ++ .../signal_generator/adapters/CMakeLists.txt | 8 ++ .../signal_source/libs/CMakeLists.txt | 8 ++ .../telemetry_decoder/adapters/CMakeLists.txt | 8 ++ src/core/monitor/CMakeLists.txt | 8 ++ src/tests/system-tests/position_test.cc | 2 + src/tests/system-tests/ttff.cc | 2 + .../libs/CMakeLists.txt | 8 ++ 19 files changed, 303 insertions(+), 1 deletion(-) create mode 100644 cmake/Modules/FindFMT.cmake create mode 100644 cmake/Modules/FindSPDLOG.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 99d5c7274..8bc9b9c91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -613,7 +613,33 @@ if(GNURADIO_USES_LOG4CPP) find_package(LOG4CPP) set_package_properties(LOG4CPP PROPERTIES PURPOSE "Required by GNU Radio." - TYPE OPTIONAL + TYPE REQUIRED + ) +endif() + + + +################################################################################ +# spdlog - https://github.com/gabime/spdlog +################################################################################ +if(GNURADIO_USES_SPDLOG) + find_package(SPDLOG REQUIRED) + set_package_properties(SPDLOG PROPERTIES + PURPOSE "Required by GNU Radio." + TYPE REQUIRED + ) +endif() + + + +################################################################################ +# fmt - https://github.com/fmtlib/fmt +################################################################################ +if(GNURADIO_USES_SPDLOG) + find_package(FMT REQUIRED) + set_package_properties(FMT PROPERTIES + PURPOSE "Required by GNU Radio." + TYPE REQUIRED ) endif() @@ -665,6 +691,7 @@ if((NOT PMT_USES_BOOST_ANY) AND (CMAKE_CXX_STANDARD VERSION_LESS 17)) endif() + ################################################################################ # Boost - https://www.boost.org ################################################################################ diff --git a/cmake/Modules/FindFMT.cmake b/cmake/Modules/FindFMT.cmake new file mode 100644 index 000000000..49d091d8a --- /dev/null +++ b/cmake/Modules/FindFMT.cmake @@ -0,0 +1,76 @@ +# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. +# This file is part of GNSS-SDR. +# +# SPDX-FileCopyrightText: 2021 C. Fernandez-Prades cfernandez(at)cttc.es +# SPDX-License-Identifier: BSD-3-Clause + +if(NOT COMMAND feature_summary) + include(FeatureSummary) +endif() + +# Locate header +find_path(FMT_INCLUDE_DIR fmt/core.h + HINTS ${FMT_ROOT_DIR}/include + PATHS + /usr/include + /usr/local/include + /opt/local/include +) + +# Locate library +find_library(FMT_LIBRARY NAMES fmt + HINTS ${FMT_ROOT_DIR}/lib ${FMT_ROOT_DIR}/lib64 + PATHS + /usr/lib + /usr/lib64 + /usr/lib/x86_64-linux-gnu + /usr/lib/i386-linux-gnu + /usr/lib/arm-linux-gnueabihf + /usr/lib/arm-linux-gnueabi + /usr/lib/aarch64-linux-gnu + /usr/lib/mipsel-linux-gnu + /usr/lib/mips-linux-gnu + /usr/lib/mips64el-linux-gnuabi64 + /usr/lib/powerpc-linux-gnu + /usr/lib/powerpc64-linux-gnu + /usr/lib/powerpc64le-linux-gnu + /usr/lib/powerpc-linux-gnuspe + /usr/lib/hppa-linux-gnu + /usr/lib/s390x-linux-gnu + /usr/lib/i386-gnu + /usr/lib/hppa-linux-gnu + /usr/lib/x86_64-kfreebsd-gnu + /usr/lib/i386-kfreebsd-gnu + /usr/lib/m68k-linux-gnu + /usr/lib/sh4-linux-gnu + /usr/lib/sparc64-linux-gnu + /usr/lib/x86_64-linux-gnux32 + /usr/lib/alpha-linux-gnu + /usr/lib/riscv64-linux-gnu + /usr/local/lib + /usr/local/lib64 + /opt/local/lib +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(FMT DEFAULT_MSG FMT_INCLUDE_DIR FMT_LIBRARY) + +set_package_properties(FMT PROPERTIES + URL "https://github.com/fmtlib/fmt" + DESCRIPTION "An open-source formatting library" +) + +# Add imported target. +if(FMT_FOUND) + set(FMT_INCLUDE_DIRS "${FMT_INCLUDE_DIR}") + + if(NOT TARGET fmt::fmt) + add_library(fmt::fmt UNKNOWN IMPORTED) + set_target_properties(fmt::fmt PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FMT_INCLUDE_DIRS}" + ) + set_property(TARGET fmt::fmt APPEND PROPERTY + IMPORTED_LOCATION "${FMT_LIBRARY}" + ) + endif() +endif() diff --git a/cmake/Modules/FindGNURADIO.cmake b/cmake/Modules/FindGNURADIO.cmake index 39b0d2997..93e6082cd 100644 --- a/cmake/Modules/FindGNURADIO.cmake +++ b/cmake/Modules/FindGNURADIO.cmake @@ -397,15 +397,22 @@ if(GNURADIO_RUNTIME_INCLUDE_DIRS) if(EXISTS "${GNURADIO_RUNTIME_INCLUDE_DIRS}/gnuradio/logger.h") file(STRINGS ${GNURADIO_RUNTIME_INCLUDE_DIRS}/gnuradio/logger.h _logger_content) set(_uses_log4cpp FALSE) + set(_uses_spdlog FALSE) foreach(_loop_var IN LISTS _logger_content) string(STRIP "${_loop_var}" _file_line) if("#include " STREQUAL "${_file_line}") set(_uses_log4cpp TRUE) endif() + if("#include " STREQUAL "${_file_line}") + set(_uses_spdlog TRUE) + endif() endforeach() if(${_uses_log4cpp}) set(GNURADIO_USES_LOG4CPP TRUE) endif() + if(${_uses_spdlog}) + set(GNURADIO_USES_SPDLOG TRUE) + endif() endif() endif() diff --git a/cmake/Modules/FindSPDLOG.cmake b/cmake/Modules/FindSPDLOG.cmake new file mode 100644 index 000000000..ac53fc870 --- /dev/null +++ b/cmake/Modules/FindSPDLOG.cmake @@ -0,0 +1,84 @@ +# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. +# This file is part of GNSS-SDR. +# +# SPDX-FileCopyrightText: 2021 C. Fernandez-Prades cfernandez(at)cttc.es +# SPDX-License-Identifier: BSD-3-Clause + +if(NOT COMMAND feature_summary) + include(FeatureSummary) +endif() + +# Locate header +find_path(SPDLOG_INCLUDE_DIR spdlog/spdlog.h + HINTS ${SPDLOG_ROOT_DIR}/include + PATHS + /usr/include + /usr/local/include + /opt/local/include +) + +# Locate library +find_library(SPDLOG_LIBRARY NAMES spdlog spdlogd + HINTS ${SPDLOG_ROOT_DIR}/lib ${SPDLOG_ROOT_DIR}/lib64 + PATHS + /usr/lib + /usr/lib64 + /usr/lib/x86_64-linux-gnu + /usr/lib/i386-linux-gnu + /usr/lib/arm-linux-gnueabihf + /usr/lib/arm-linux-gnueabi + /usr/lib/aarch64-linux-gnu + /usr/lib/mipsel-linux-gnu + /usr/lib/mips-linux-gnu + /usr/lib/mips64el-linux-gnuabi64 + /usr/lib/powerpc-linux-gnu + /usr/lib/powerpc64-linux-gnu + /usr/lib/powerpc64le-linux-gnu + /usr/lib/powerpc-linux-gnuspe + /usr/lib/hppa-linux-gnu + /usr/lib/s390x-linux-gnu + /usr/lib/i386-gnu + /usr/lib/hppa-linux-gnu + /usr/lib/x86_64-kfreebsd-gnu + /usr/lib/i386-kfreebsd-gnu + /usr/lib/m68k-linux-gnu + /usr/lib/sh4-linux-gnu + /usr/lib/sparc64-linux-gnu + /usr/lib/x86_64-linux-gnux32 + /usr/lib/alpha-linux-gnu + /usr/lib/riscv64-linux-gnu + /usr/local/lib + /usr/local/lib64 + /opt/local/lib +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(SPDLOG DEFAULT_MSG SPDLOG_INCLUDE_DIR SPDLOG_LIBRARY) + +set_package_properties(SPDLOG PROPERTIES + URL "https://github.com/gabime/spdlog" + DESCRIPTION "Very fast, header-only/compiled, C++ logging library" +) + +# Add imported target. +if(SPDLOG_FOUND) + set(SPDLOG_INCLUDE_DIRS "${SPDLOG_INCLUDE_DIR}") + + if(NOT TARGET spdlog::spdlog) + add_library(spdlog::spdlog UNKNOWN IMPORTED) + set_target_properties(spdlog::spdlog PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${SPDLOG_INCLUDE_DIRS}" + ) + set_property(TARGET spdlog::spdlog APPEND PROPERTY + IMPORTED_LOCATION "${SPDLOG_LIBRARY}" + ) + endif() + + if(CMAKE_VERSION VERSION_GREATER 3.11.0) + target_compile_definitions(spdlog::spdlog INTERFACE -DSPDLOG_FMT_EXTERNAL=1) + else() + set_property(TARGET spdlog::spdlog APPEND PROPERTY + INTERFACE_COMPILE_DEFINITIONS SPDLOG_FMT_EXTERNAL=1 + ) + endif() +endif() diff --git a/src/algorithms/PVT/adapters/CMakeLists.txt b/src/algorithms/PVT/adapters/CMakeLists.txt index 023ffce27..57ab83031 100644 --- a/src/algorithms/PVT/adapters/CMakeLists.txt +++ b/src/algorithms/PVT/adapters/CMakeLists.txt @@ -39,6 +39,14 @@ if(USE_OLD_BOOST_MATH_COMMON_FACTOR) ) endif() +if(GNURADIO_USES_SPDLOG) + target_link_libraries(pvt_adapters + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + if(ENABLE_CLANG_TIDY) if(CLANG_TIDY_EXE) set_target_properties(pvt_adapters diff --git a/src/algorithms/channel/libs/CMakeLists.txt b/src/algorithms/channel/libs/CMakeLists.txt index 5d65ca047..1454d9d7c 100644 --- a/src/algorithms/channel/libs/CMakeLists.txt +++ b/src/algorithms/channel/libs/CMakeLists.txt @@ -54,6 +54,14 @@ if(GNURADIO_USES_STD_POINTERS) ) endif() +if(GNURADIO_USES_SPDLOG) + target_link_libraries(channel_libs + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + if(USE_GENERIC_LAMBDAS) set(has_generic_lambdas HAS_GENERIC_LAMBDA=1) set(no_has_generic_lambdas HAS_GENERIC_LAMBDA=0) diff --git a/src/algorithms/conditioner/adapters/CMakeLists.txt b/src/algorithms/conditioner/adapters/CMakeLists.txt index d8683e4de..cb4db5424 100644 --- a/src/algorithms/conditioner/adapters/CMakeLists.txt +++ b/src/algorithms/conditioner/adapters/CMakeLists.txt @@ -42,6 +42,14 @@ target_link_libraries(conditioner_adapters Glog::glog ) +if(GNURADIO_USES_SPDLOG) + target_link_libraries(conditioner_adapters + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + target_include_directories(conditioner_adapters PUBLIC ${CMAKE_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/data_type_adapter/gnuradio_blocks/CMakeLists.txt b/src/algorithms/data_type_adapter/gnuradio_blocks/CMakeLists.txt index d7be7b5f5..56c821b01 100644 --- a/src/algorithms/data_type_adapter/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/data_type_adapter/gnuradio_blocks/CMakeLists.txt @@ -55,6 +55,14 @@ if(GNURADIO_USES_STD_POINTERS) ) endif() +if(GNURADIO_USES_SPDLOG) + target_link_libraries(data_type_gr_blocks + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + set_property(TARGET data_type_gr_blocks APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $ diff --git a/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt b/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt index 72942522c..a6a22a351 100644 --- a/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt @@ -55,6 +55,14 @@ if(LOG4CPP_FOUND) ) endif() +if(GNURADIO_USES_SPDLOG) + target_link_libraries(input_filter_gr_blocks + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + target_include_directories(input_filter_gr_blocks PUBLIC ${CMAKE_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/libs/CMakeLists.txt b/src/algorithms/libs/CMakeLists.txt index 7eb20fa87..57e614b34 100644 --- a/src/algorithms/libs/CMakeLists.txt +++ b/src/algorithms/libs/CMakeLists.txt @@ -117,6 +117,14 @@ if(GNURADIO_USES_STD_POINTERS) ) endif() +if(GNURADIO_USES_SPDLOG) + target_link_libraries(algorithms_libs + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + if(FILESYSTEM_FOUND) target_compile_definitions(algorithms_libs PUBLIC -DHAS_STD_FILESYSTEM=1) if(find_experimental) diff --git a/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt b/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt index 5035ab2ee..192e307c9 100644 --- a/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt @@ -36,6 +36,14 @@ target_link_libraries(obs_gr_blocks Matio::matio ) +if(GNURADIO_USES_SPDLOG) + target_link_libraries(obs_gr_blocks + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + target_include_directories(obs_gr_blocks PUBLIC ${CMAKE_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/resampler/gnuradio_blocks/CMakeLists.txt b/src/algorithms/resampler/gnuradio_blocks/CMakeLists.txt index 8e182b23a..0a27cf6d8 100644 --- a/src/algorithms/resampler/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/resampler/gnuradio_blocks/CMakeLists.txt @@ -50,6 +50,14 @@ if(GNURADIO_USES_STD_POINTERS) ) endif() +if(NOT GNURADIO_USES_LOG4CPP) + target_link_libraries(resampler_gr_blocks + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + target_include_directories(resampler_gr_blocks PUBLIC ${CMAKE_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/signal_generator/adapters/CMakeLists.txt b/src/algorithms/signal_generator/adapters/CMakeLists.txt index 2b08f3c44..aa3d3d9fc 100644 --- a/src/algorithms/signal_generator/adapters/CMakeLists.txt +++ b/src/algorithms/signal_generator/adapters/CMakeLists.txt @@ -44,6 +44,14 @@ if(GNURADIO_USES_STD_POINTERS) ) endif() +if(GNURADIO_USES_SPDLOG) + target_link_libraries(signal_generator_adapters + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + if(ENABLE_CLANG_TIDY) if(CLANG_TIDY_EXE) set_target_properties(signal_generator_adapters diff --git a/src/algorithms/signal_source/libs/CMakeLists.txt b/src/algorithms/signal_source/libs/CMakeLists.txt index 30bb8f5d8..fbb1f2911 100644 --- a/src/algorithms/signal_source/libs/CMakeLists.txt +++ b/src/algorithms/signal_source/libs/CMakeLists.txt @@ -76,6 +76,14 @@ if(GNURADIO_USES_STD_POINTERS) ) endif() +if(GNURADIO_USES_SPDLOG) + target_link_libraries(signal_source_libs + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + if(ENABLE_FMCOMMS2 OR ENABLE_AD9361) target_link_libraries(signal_source_libs PUBLIC diff --git a/src/algorithms/telemetry_decoder/adapters/CMakeLists.txt b/src/algorithms/telemetry_decoder/adapters/CMakeLists.txt index a374f25d0..12c3e8a25 100644 --- a/src/algorithms/telemetry_decoder/adapters/CMakeLists.txt +++ b/src/algorithms/telemetry_decoder/adapters/CMakeLists.txt @@ -64,6 +64,14 @@ target_link_libraries(telemetry_decoder_adapters Gnuradio::runtime ) +if(GNURADIO_USES_SPDLOG) + target_link_libraries(telemetry_decoder_adapters + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + target_include_directories(telemetry_decoder_adapters PUBLIC ${CMAKE_SOURCE_DIR}/src/core/interfaces diff --git a/src/core/monitor/CMakeLists.txt b/src/core/monitor/CMakeLists.txt index 9d067c909..fe8743c05 100644 --- a/src/core/monitor/CMakeLists.txt +++ b/src/core/monitor/CMakeLists.txt @@ -73,6 +73,14 @@ if(GNURADIO_USES_STD_POINTERS) ) endif() +if(GNURADIO_USES_SPDLOG) + target_link_libraries(core_monitor + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + if(USE_BOOST_ASIO_IO_CONTEXT) target_compile_definitions(core_monitor PUBLIC diff --git a/src/tests/system-tests/position_test.cc b/src/tests/system-tests/position_test.cc index 29fc4b2e0..f3f96c0da 100644 --- a/src/tests/system-tests/position_test.cc +++ b/src/tests/system-tests/position_test.cc @@ -36,6 +36,8 @@ #include "test_flags.h" #include "tracking_tests_flags.h" // acquisition resampler #include +#include +#include #include #include #include diff --git a/src/tests/system-tests/ttff.cc b/src/tests/system-tests/ttff.cc index 0816e0ad2..55f0698cf 100644 --- a/src/tests/system-tests/ttff.cc +++ b/src/tests/system-tests/ttff.cc @@ -24,6 +24,8 @@ #include "gps_acq_assist.h" #include "in_memory_configuration.h" #include +#include +#include #include #include #include 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 8b9096c68..f5da39a39 100644 --- a/src/tests/unit-tests/signal-processing-blocks/libs/CMakeLists.txt +++ b/src/tests/unit-tests/signal-processing-blocks/libs/CMakeLists.txt @@ -53,6 +53,14 @@ target_include_directories(signal_processing_testing_lib ${CMAKE_SOURCE_DIR}/src/tests/common-files ) +if(GNURADIO_USES_SPDLOG) + target_link_libraries(signal_processing_testing_lib + PUBLIC + fmt::fmt + spdlog::spdlog + ) +endif() + if(USE_GENERIC_LAMBDAS) set(has_generic_lambdas HAS_GENERIC_LAMBDA=1) set(no_has_generic_lambdas HAS_GENERIC_LAMBDA=0)