From a65d2d238e8b3af95e55e5175d5ae3fe2b014f3f Mon Sep 17 00:00:00 2001 From: Jim Melton Date: Tue, 16 Aug 2022 19:52:49 -0600 Subject: [PATCH 01/12] don't detect spdlog explicitly; let gnuradio handle it --- CMakeLists.txt | 39 --------- 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 -- .../gnuradio_blocks/CMakeLists.txt | 8 -- src/core/monitor/CMakeLists.txt | 8 -- .../libs/CMakeLists.txt | 8 -- 15 files changed, 227 deletions(-) delete mode 100644 cmake/Modules/FindSPDLOG.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c38528a6e..02f3096beb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -628,45 +628,6 @@ endif() -################################################################################ -# Log4cpp - http://log4cpp.sourceforge.net/ -################################################################################ -if(GNURADIO_USES_LOG4CPP) - find_package(LOG4CPP) - set_package_properties(LOG4CPP PROPERTIES - PURPOSE "Required by GNU Radio." - 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() - - - ################################################################################ # Detect availability of std::filesystem and set C++ standard accordingly ################################################################################ diff --git a/cmake/Modules/FindSPDLOG.cmake b/cmake/Modules/FindSPDLOG.cmake deleted file mode 100644 index ac53fc8705..0000000000 --- a/cmake/Modules/FindSPDLOG.cmake +++ /dev/null @@ -1,84 +0,0 @@ -# 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 3cf70fe955..6b9ff33e61 100644 --- a/src/algorithms/PVT/adapters/CMakeLists.txt +++ b/src/algorithms/PVT/adapters/CMakeLists.txt @@ -39,14 +39,6 @@ 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 90607d700f..63e0d72d83 100644 --- a/src/algorithms/channel/libs/CMakeLists.txt +++ b/src/algorithms/channel/libs/CMakeLists.txt @@ -54,14 +54,6 @@ 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 265965e67e..7c24d008eb 100644 --- a/src/algorithms/conditioner/adapters/CMakeLists.txt +++ b/src/algorithms/conditioner/adapters/CMakeLists.txt @@ -42,14 +42,6 @@ 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 ${GNSSSDR_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 a0e1f2ddcd..5a05385c26 100644 --- a/src/algorithms/data_type_adapter/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/data_type_adapter/gnuradio_blocks/CMakeLists.txt @@ -55,14 +55,6 @@ 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 c652131ea9..5b1a6762ab 100644 --- a/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt @@ -55,14 +55,6 @@ 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 ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/libs/CMakeLists.txt b/src/algorithms/libs/CMakeLists.txt index e8f0d63665..1e31cf4c3f 100644 --- a/src/algorithms/libs/CMakeLists.txt +++ b/src/algorithms/libs/CMakeLists.txt @@ -119,14 +119,6 @@ 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 7f6537ccfb..225518612a 100644 --- a/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt @@ -37,14 +37,6 @@ target_link_libraries(obs_gr_blocks Gnuradio::pmt ) -if(GNURADIO_USES_SPDLOG) - target_link_libraries(obs_gr_blocks - PUBLIC - fmt::fmt - spdlog::spdlog - ) -endif() - target_include_directories(obs_gr_blocks PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/resampler/gnuradio_blocks/CMakeLists.txt b/src/algorithms/resampler/gnuradio_blocks/CMakeLists.txt index ae521eeb97..9a7ea4e5d3 100644 --- a/src/algorithms/resampler/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/resampler/gnuradio_blocks/CMakeLists.txt @@ -50,14 +50,6 @@ 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 ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/algorithms/signal_generator/adapters/CMakeLists.txt b/src/algorithms/signal_generator/adapters/CMakeLists.txt index e8486b3260..c430af3c26 100644 --- a/src/algorithms/signal_generator/adapters/CMakeLists.txt +++ b/src/algorithms/signal_generator/adapters/CMakeLists.txt @@ -44,14 +44,6 @@ 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 34cb13e88f..2823283b73 100644 --- a/src/algorithms/signal_source/libs/CMakeLists.txt +++ b/src/algorithms/signal_source/libs/CMakeLists.txt @@ -80,14 +80,6 @@ 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/gnuradio_blocks/CMakeLists.txt b/src/algorithms/telemetry_decoder/gnuradio_blocks/CMakeLists.txt index d6bed4f970..c71184aa81 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/CMakeLists.txt @@ -69,14 +69,6 @@ if(GNURADIO_USES_STD_POINTERS) ) endif() -if(GNURADIO_USES_SPDLOG) - target_link_libraries(telemetry_decoder_gr_blocks - PUBLIC - fmt::fmt - spdlog::spdlog - ) -endif() - target_include_directories(telemetry_decoder_gr_blocks PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces diff --git a/src/core/monitor/CMakeLists.txt b/src/core/monitor/CMakeLists.txt index 4f6211a40e..cfd2cdab3b 100644 --- a/src/core/monitor/CMakeLists.txt +++ b/src/core/monitor/CMakeLists.txt @@ -73,14 +73,6 @@ 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/unit-tests/signal-processing-blocks/libs/CMakeLists.txt b/src/tests/unit-tests/signal-processing-blocks/libs/CMakeLists.txt index 6740932fb0..53545ef449 100644 --- a/src/tests/unit-tests/signal-processing-blocks/libs/CMakeLists.txt +++ b/src/tests/unit-tests/signal-processing-blocks/libs/CMakeLists.txt @@ -53,14 +53,6 @@ target_include_directories(signal_processing_testing_lib ${GNSSSDR_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) From 6eafa59864f2afe695f73316251d9d8a44cbee76 Mon Sep 17 00:00:00 2001 From: Jim Melton Date: Wed, 17 Aug 2022 00:24:43 -0600 Subject: [PATCH 02/12] put log4cpp back; gnuradio 3.8 doesn't properly expose it? --- CMakeLists.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 02f3096beb..b2d4571757 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -628,6 +628,17 @@ endif() +################################################################################ +# Log4cpp - http://log4cpp.sourceforge.net/ +################################################################################ +if(GNURADIO_USES_LOG4CPP) + find_package(LOG4CPP) + set_package_properties(LOG4CPP PROPERTIES + PURPOSE "Required by GNU Radio." + TYPE REQUIRED + ) +endif() + ################################################################################ # Detect availability of std::filesystem and set C++ standard accordingly ################################################################################ From e6cb473388b95f1c9ec2f2d8933b70600b067403 Mon Sep 17 00:00:00 2001 From: Jim Melton Date: Thu, 18 Aug 2022 16:30:23 -0600 Subject: [PATCH 03/12] work around ancient code with a new compiler --- src/core/libs/supl/CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/core/libs/supl/CMakeLists.txt b/src/core/libs/supl/CMakeLists.txt index 36b7261c71..b5bf8ef6f7 100644 --- a/src/core/libs/supl/CMakeLists.txt +++ b/src/core/libs/supl/CMakeLists.txt @@ -56,6 +56,14 @@ target_link_libraries(core_libs_supl ${GNUTLS_OPENSSL_LIBRARY} ) +# This is ancient and unmaintained code. As the project migrates to modern compilers, +# non-standards-conforming constructs will be flagged as errors. This should be +# upgraded, but until then, allow non-standards-conforming constructs +set_target_properties(core_libs_supl + PROPERTIES + C_EXTENSIONS on +) + target_include_directories(core_libs_supl PUBLIC ${GNUTLS_INCLUDE_DIR} From f7583ff47713f5fb10a89fd0273b2a12e4f7fdbe Mon Sep 17 00:00:00 2001 From: Jim Melton Date: Thu, 18 Aug 2022 17:24:36 -0600 Subject: [PATCH 04/12] This should pass the ArchLinux GNU Radio 3.10 regression Working through all the regressions one at a time --- CMakeLists.txt | 126 ++++++++------------------ cmake/Modules/FindGNURADIO.cmake | 58 +++++++++--- cmake/Modules/FindVOLK.cmake | 147 ------------------------------- 3 files changed, 83 insertions(+), 248 deletions(-) delete mode 100644 cmake/Modules/FindVOLK.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index b2d4571757..298ea02c4f 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.23) +cmake_minimum_required(VERSION 3.7...3.23) project(gnss-sdr CXX C) set(GNSSSDR_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # Allows to be a sub-project @@ -132,9 +132,6 @@ if(ENABLE_FPGA) endif() option(ENABLE_BENCHMARKS "Build code snippets benchmarks" OFF) -if(CMAKE_VERSION VERSION_LESS 3.5.1) - set(ENABLE_BENCHMARKS OFF) -endif() option(ENABLE_EXTERNAL_MATHJAX "Use MathJax from an external CDN in HTML docs" ON) @@ -336,8 +333,7 @@ set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.2") set(GNSSSDR_GLOG_LOCAL_VERSION "0.6.0") set(GNSSSDR_ARMADILLO_LOCAL_VERSION "11.2.x") 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) + (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) ) set(GNSSSDR_GTEST_LOCAL_VERSION "1.10.x") else() set(GNSSSDR_GTEST_LOCAL_VERSION "1.12.1") @@ -354,15 +350,6 @@ if(CMAKE_VERSION VERSION_LESS "3.16") set(GNSSSDR_GLOG_LOCAL_VERSION "0.5.0") endif() -if(CMAKE_VERSION VERSION_LESS "3.3") - set(GNSSSDR_GLOG_LOCAL_VERSION "0.4.0") # Fix for Debian 8 -endif() - -if(CMAKE_VERSION VERSION_LESS "3.0.2") - set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.1") # Fix for CentOS 7 - set(GNSSSDR_GLOG_LOCAL_VERSION "0.3.4") # Fix for Ubuntu 14.04 -endif() - ################################################################################ @@ -438,42 +425,9 @@ endif() ################################################################################ # Set minimal C and C++ standards ################################################################################ -if(NOT (CMAKE_VERSION VERSION_LESS "3.1")) - set(CMAKE_C_STANDARD 11) - set(CMAKE_CXX_STANDARD 14) - set(CMAKE_CXX_EXTENSIONS OFF) -else() - add_compile_options("$<$,C>:-std=gnu11>") - set(CMAKE_C_STANDARD 11) # set variable just for reporting - if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.1.1") - add_compile_options("$<$,CXX>:-std=c++11>") - set(CMAKE_CXX_STANDARD 11) # set variable just for reporting - else() - add_compile_options("$<$,CXX>:-std=c++14>") - set(CMAKE_CXX_STANDARD 14) # set variable just for reporting - endif() - endif() - if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") - if(CLANG_VERSION VERSION_LESS "600") - add_compile_options("$<$,CXX>:-std=c++11>") - set(CMAKE_CXX_STANDARD 11) - else() - add_compile_options("$<$,CXX>:-std=c++14>") - set(CMAKE_CXX_STANDARD 14) - endif() - else() - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5.0") - add_compile_options("$<$,CXX>:-std=c++11>") - set(CMAKE_CXX_STANDARD 11) - else() - add_compile_options("$<$,CXX>:-std=c++14>") - set(CMAKE_CXX_STANDARD 14) - endif() - endif() - endif() -endif() +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_EXTENSIONS OFF) # Visibility # See https://gcc.gnu.org/wiki/Visibility @@ -521,31 +475,14 @@ find_package(PkgConfig) ################################################################################ # Find the POSIX thread (pthread) libraries ################################################################################ -if(CMAKE_VERSION VERSION_LESS 3.1) - # Workaround for CMake < 3.1 - find_package(Threads REQUIRED) - add_library(Threads::Threads SHARED IMPORTED) - set_property(TARGET Threads::Threads PROPERTY INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}") - set_property(TARGET Threads::Threads PROPERTY IMPORTED_LINK_INTERFACE_LANGUAGES "CXX") - include(GNUInstallDirs) - # Fix bug in Debian 8.11 - if(${LINUX_DISTRIBUTION} MATCHES "Debian") - if(${LINUX_VER} VERSION_LESS 8.12) - if(ARCH_64BITS) - set(FIX_PTHREADS_LOCATION "x86_64-linux-gnu/") - endif() - endif() - endif() - set_property(TARGET Threads::Threads PROPERTY IMPORTED_LOCATION /usr/${CMAKE_INSTALL_LIBDIR}/${FIX_PTHREADS_LOCATION}${CMAKE_FIND_LIBRARY_PREFIXES}pthread${CMAKE_SHARED_LIBRARY_SUFFIX}) +set(CMAKE_THREAD_PREFER_PTHREAD TRUE) +if(CMAKE_CROSSCOMPILING) + set(THREADS_PREFER_PTHREAD_FLAG FALSE) else() - set(CMAKE_THREAD_PREFER_PTHREAD TRUE) - if(CMAKE_CROSSCOMPILING) - set(THREADS_PREFER_PTHREAD_FLAG FALSE) - else() - set(THREADS_PREFER_PTHREAD_FLAG TRUE) - endif() - find_package(Threads REQUIRED) + set(THREADS_PREFER_PTHREAD_FLAG TRUE) endif() +find_package(Threads REQUIRED) + set_package_properties(Threads PROPERTIES URL "https://computing.llnl.gov/tutorials/pthreads/" DESCRIPTION "Implements the POSIX Threads execution model" @@ -584,11 +521,11 @@ endif() ################################################################################ # VOLK - Vector-Optimized Library of Kernels ################################################################################ -find_package(VOLK) +find_package(Volk CONFIG) if(NOT VOLK_FOUND) message(FATAL_ERROR "*** VOLK is required to build gnss-sdr") endif() -set_package_properties(VOLK PROPERTIES +set_package_properties(Volk PROPERTIES PURPOSE "Provides an abstraction of optimized math routines targeting several SIMD processors." TYPE REQUIRED ) @@ -598,6 +535,7 @@ set_package_properties(VOLK PROPERTIES ################################################################################ # GNU Radio - https://www.gnuradio.org ################################################################################ +# move into FindGNURADIO.cmake? list(APPEND GR_REQUIRED_COMPONENTS RUNTIME PMT BLOCKS FFT FILTER ANALOG) find_package(UHD) set_package_properties(UHD PROPERTIES @@ -616,13 +554,18 @@ if(ENABLE_ZMQ) list(APPEND GR_REQUIRED_COMPONENTS ZEROMQ) endif() -find_package(GNURADIO) +find_package(GNURADIO ${GNSSSDR_GNURADIO_MIN_VERSION} + COMPONENTS ${GR_REQUIRED_COMPONENTS} +) + set_package_properties(GNURADIO PROPERTIES PURPOSE "Implements flowgraph scheduler, provides some processing blocks and classes to create new ones." TYPE REQUIRED ) -if(NOT (GNURADIO_VERSION VERSION_LESS "3.8")) +# GNU Radio 3.8 changed include file names +# move into FindGNURADIO.cmake? +if(GNURADIO_VERSION VERSION_GREATER_EQUAL "3.8") set(GNURADIO_IS_38_OR_GREATER ON) endif() @@ -631,13 +574,14 @@ endif() ################################################################################ # Log4cpp - http://log4cpp.sourceforge.net/ ################################################################################ -if(GNURADIO_USES_LOG4CPP) - find_package(LOG4CPP) - set_package_properties(LOG4CPP PROPERTIES - PURPOSE "Required by GNU Radio." - TYPE REQUIRED - ) -endif() +# move into FindGNURADIO.cmake? +#if(GNURADIO_USES_LOG4CPP) +# find_package(LOG4CPP) +# set_package_properties(LOG4CPP PROPERTIES +# PURPOSE "Required by GNU Radio." +# TYPE REQUIRED +# ) +#endif() ################################################################################ # Detect availability of std::filesystem and set C++ standard accordingly @@ -660,7 +604,13 @@ else() unset(GNSSTK_OLDER_THAN_9 CACHE) unset(GNSSTK_OLDER_THAN_13 CACHE) endif() -if(NOT (GNURADIO_VERSION VERSION_LESS 3.8) AND (LOG4CPP_READY_FOR_CXX17 OR GNURADIO_USES_SPDLOG)) + +# Proper CMake support added in 3.10.x +# should this be hidden in FindGNURADIO.cmake? +if( GNURADIO_VERSION VERSION_GREATER 3.10 ) + include(GrMinReq) + include(GrCompilerSettings) +elseif((GNURADIO_VERSION VERSION_GREATER_EQUAL 3.8) AND LOG4CPP_READY_FOR_CXX17) # Check if we have std::filesystem if(NOT (CMAKE_VERSION VERSION_LESS 3.8)) if(NOT GNSSTK_FOUND OR NOT (GNSSTK_FOUND AND GNSSTK_OLDER_THAN_8)) # Fix for GNSSTk < 8.0.0 @@ -688,8 +638,8 @@ if(NOT (GNURADIO_VERSION VERSION_LESS 3.8) AND (LOG4CPP_READY_FOR_CXX17 OR GNURA # endif() # endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) - endif() - endif() + endif() # GNURADIO > 3.8 + endif() # GNURADIO > 3.10 endif() if((NOT PMT_USES_BOOST_ANY) AND (CMAKE_CXX_STANDARD VERSION_LESS 17)) message(FATAL_ERROR "GNU Radio v${GNURADIO_VERSION} requires C++17. Please update your environment.") diff --git a/cmake/Modules/FindGNURADIO.cmake b/cmake/Modules/FindGNURADIO.cmake index e7a5610181..89d052e9b1 100644 --- a/cmake/Modules/FindGNURADIO.cmake +++ b/cmake/Modules/FindGNURADIO.cmake @@ -26,6 +26,7 @@ endif() # Allows us to use all .cmake files in this directory list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_LIST_DIR}) + # Easily access all libraries and includes of GNU Radio set(GNURADIO_ALL_LIBRARIES "") set(GNURADIO_ALL_INCLUDE_DIRS "") @@ -67,6 +68,32 @@ set(GNURADIO_INSTALL_PREFIX_USER_PROVIDED ${CMAKE_INSTALL_PREFIX} ) +# Maintainer note: +# Most of this is to support older GNU Radio without CMake support. Better to use CMake than to fight against it. +# GNU Radio exposes its components in lower-case ("runtime" and "pmt" are always provided, and cannot be selected) +# Convert the list of required components to lower case, and see if find_package() can find them. We want to use +# find_package() because it adds the GNU Radio cmake directory to the path. +# TODO if FPHSA still adds value here +set(find_GR_REQUIRED_COMPONENTS ${GR_REQUIRED_COMPONENTS}) +list(TRANSFORM find_GR_REQUIRED_COMPONENTS TOLOWER) +list(REMOVE_ITEM find_GR_REQUIRED_COMPONENTS runtime pmt) + +find_package(Gnuradio QUIET NO_MODULE COMPONENTS ${find_GR_REQUIRED_COMPONENTS}) + +# These are a given, if the package is found, but if I don't set them, GNURADIO_FOUND will be false +set(PC_GNURADIO_RUNTIME_FOUND ${Gnuradio_FOUND}) +set(PC_GNURADIO_PMT_FOUND ${Gnuradio_FOUND}) + +find_package_handle_standard_args(GNURADIO + DEFAULT_MSG +# HANDLE_VERSION_RANGE +# HANDLE_COMPONENTS +) + +# This legacy function exists among other reasons to create the "Gnuradio::" targets use in GNSS-SDR +# Where possible, it's better to use the "gnuradio::" targets provided by GNU Radio, because all of +# the dependency linkage is built in. When we abandon support for non-CMake GNU Radio, this should be +# removed and our CMakeLists.txt files updated to use the "gnuradio::gnuradio-xxx" targets function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE) list_contains(REQUIRED_MODULE ${EXTVAR} ${GR_REQUIRED_COMPONENTS}) if(NOT REQUIRED_MODULE) @@ -75,6 +102,7 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE) endif() message(STATUS "Checking for GNU Radio Module: ${EXTVAR}") + string(TOLOWER ${EXTVAR} gnuradio_component) # check for .pc hints pkg_check_modules(PC_GNURADIO_${EXTVAR} QUIET ${PCNAME}) @@ -161,18 +189,23 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE) endif() # Create imported target - string(TOLOWER ${EXTVAR} gnuradio_component) if(NOT TARGET Gnuradio::${gnuradio_component}) - add_library(Gnuradio::${gnuradio_component} SHARED IMPORTED) - set(GNURADIO_LIBRARY ${GNURADIO_${EXTVAR}_LIBRARIES}) - list(GET GNURADIO_LIBRARY 0 FIRST_DIR) - get_filename_component(GNURADIO_DIR ${FIRST_DIR} ABSOLUTE) - set_target_properties(Gnuradio::${gnuradio_component} PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" - IMPORTED_LOCATION "${GNURADIO_DIR}" - INTERFACE_INCLUDE_DIRECTORIES "${GNURADIO_${EXTVAR}_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${GNURADIO_LIBRARY}" - ) + if(TARGET gnuradio::gnuradio-${gnuradio_component}) + # maintain legacy targets by creating an alias + add_library(Gnuradio::${gnuradio_component} ALIAS gnuradio::gnuradio-${gnuradio_component}) + else() + # legacy targets + add_library(Gnuradio::${gnuradio_component} SHARED IMPORTED) + set(GNURADIO_LIBRARY ${GNURADIO_${EXTVAR}_LIBRARIES}) + list(GET GNURADIO_LIBRARY 0 FIRST_DIR) + get_filename_component(GNURADIO_DIR ${FIRST_DIR} ABSOLUTE) + set_target_properties(Gnuradio::${gnuradio_component} PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" + IMPORTED_LOCATION "${GNURADIO_DIR}" + INTERFACE_INCLUDE_DIRECTORIES "${GNURADIO_${EXTVAR}_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${GNURADIO_LIBRARY}" + ) + endif() endif() mark_as_advanced(GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS) @@ -272,8 +305,6 @@ else() ) endif() -find_package_handle_standard_args(GNURADIO DEFAULT_MSG GNURADIO_RUNTIME_FOUND) - # Detect if using standard pointers set(GNURADIO_USES_STD_POINTERS FALSE) if(GNURADIO_VERSION VERSION_GREATER 3.8.99) @@ -396,6 +427,7 @@ if(GNURADIO_PMT_INCLUDE_DIRS) endif() # Check if GNU Radio uses log4cpp or spdlog +# Seems like this should just be a version_less 3.10? 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) diff --git a/cmake/Modules/FindVOLK.cmake b/cmake/Modules/FindVOLK.cmake deleted file mode 100644 index f67efdfbbf..0000000000 --- a/cmake/Modules/FindVOLK.cmake +++ /dev/null @@ -1,147 +0,0 @@ -# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. -# This file is part of GNSS-SDR. -# -# SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es -# SPDX-License-Identifier: BSD-3-Clause - -# -# Provides the following imported target: -# Volk::volk -# - -######################################################################## -# Find VOLK (Vector-Optimized Library of Kernels) -######################################################################## -if(NOT COMMAND feature_summary) - include(FeatureSummary) -endif() - -if(NOT PKG_CONFIG_FOUND) - include(FindPkgConfig) -endif() - -pkg_check_modules(PC_VOLK volk QUIET) - -if(NOT VOLK_ROOT) - set(VOLK_ROOT_USER_PROVIDED /usr) -else() - set(VOLK_ROOT_USER_PROVIDED ${VOLK_ROOT}) -endif() -if(DEFINED ENV{VOLK_ROOT}) - set(VOLK_ROOT_USER_PROVIDED - ${VOLK_ROOT_USER_PROVIDED} - $ENV{VOLK_ROOT} - ) -endif() -if(DEFINED ENV{VOLK_DIR}) - set(VOLK_ROOT_USER_PROVIDED - ${VOLK_ROOT_USER_PROVIDED} - $ENV{VOLK_DIR} - ) -endif() -set(VOLK_ROOT_USER_PROVIDED - ${VOLK_ROOT_USER_PROVIDED} - ${CMAKE_INSTALL_PREFIX} -) - -find_path(VOLK_INCLUDE_DIRS - NAMES volk/volk.h - HINTS ${PC_VOLK_INCLUDEDIR} - PATHS ${VOLK_ROOT_USER_PROVIDED}/include - /usr/include - /usr/local/include - /opt/local/include -) - -find_library(VOLK_LIBRARIES - NAMES volk - HINTS ${PC_VOLK_LIBDIR} - PATHS ${VOLK_ROOT_USER_PROVIDED}/lib - ${VOLK_ROOT_USER_PROVIDED}/lib64 - /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/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(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS) - -if(PC_VOLK_VERSION) - set(VOLK_VERSION ${PC_VOLK_VERSION}) -endif() - -if(NOT VOLK_VERSION) - set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION}) - unset(PACKAGE_VERSION) - list(GET VOLK_LIBRARIES 0 FIRST_DIR) - get_filename_component(VOLK_LIB_DIR ${FIRST_DIR} DIRECTORY) - if(EXISTS ${VOLK_LIB_DIR}/cmake/volk/VolkConfigVersion.cmake) - set(PACKAGE_FIND_VERSION_MAJOR 0) - include(${VOLK_LIB_DIR}/cmake/volk/VolkConfigVersion.cmake) - endif() - if(PACKAGE_VERSION) - set(VOLK_VERSION ${PACKAGE_VERSION}) - endif() - set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION}) -endif() - -set_package_properties(VOLK PROPERTIES - URL "https://www.libvolk.org" -) - -if(VOLK_FOUND AND VOLK_VERSION) - set_package_properties(VOLK PROPERTIES - DESCRIPTION "Vector-Optimized Library of Kernels (found: v${VOLK_VERSION})" - ) -else() - set_package_properties(VOLK PROPERTIES - DESCRIPTION "Vector-Optimized Library of Kernels" - ) -endif() - -mark_as_advanced(VOLK_LIBRARIES VOLK_INCLUDE_DIRS VOLK_VERSION) - -if(NOT ORC_FOUND) - find_package(ORC QUIET) -endif() -if(ORC_LIBRARIES_STATIC) - set(VOLK_LINK_LIBRARIES ${VOLK_LIBRARIES} ${ORC_LIBRARIES_STATIC}) - set(VOLK_INCLUDE_DIRS ${VOLK_INCLUDE_DIRS} ${ORC_INCLUDE_DIRS}) -else() - set(VOLK_LINK_LIBRARIES ${VOLK_LIBRARIES}) -endif() - -if(VOLK_FOUND AND NOT TARGET Volk::volk) - add_library(Volk::volk SHARED IMPORTED) - set_target_properties(Volk::volk PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" - IMPORTED_LOCATION "${VOLK_LIBRARIES}" - INTERFACE_INCLUDE_DIRECTORIES "${VOLK_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${VOLK_LINK_LIBRARIES}" - ) -endif() From f9e2a4ce7b8b7331ec8a4ad683c118ddec8944ee Mon Sep 17 00:00:00 2001 From: Jim Melton Date: Fri, 19 Aug 2022 10:32:47 -0600 Subject: [PATCH 05/12] untabify --- cmake/Modules/FindGNURADIO.cmake | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cmake/Modules/FindGNURADIO.cmake b/cmake/Modules/FindGNURADIO.cmake index 89d052e9b1..0c2189bd84 100644 --- a/cmake/Modules/FindGNURADIO.cmake +++ b/cmake/Modules/FindGNURADIO.cmake @@ -85,9 +85,9 @@ set(PC_GNURADIO_RUNTIME_FOUND ${Gnuradio_FOUND}) set(PC_GNURADIO_PMT_FOUND ${Gnuradio_FOUND}) find_package_handle_standard_args(GNURADIO - DEFAULT_MSG -# HANDLE_VERSION_RANGE -# HANDLE_COMPONENTS + DEFAULT_MSG +# HANDLE_VERSION_RANGE +# HANDLE_COMPONENTS ) # This legacy function exists among other reasons to create the "Gnuradio::" targets use in GNSS-SDR @@ -191,10 +191,10 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE) # Create imported target if(NOT TARGET Gnuradio::${gnuradio_component}) if(TARGET gnuradio::gnuradio-${gnuradio_component}) - # maintain legacy targets by creating an alias + # maintain legacy targets by creating an alias add_library(Gnuradio::${gnuradio_component} ALIAS gnuradio::gnuradio-${gnuradio_component}) - else() - # legacy targets + else() + # legacy targets add_library(Gnuradio::${gnuradio_component} SHARED IMPORTED) set(GNURADIO_LIBRARY ${GNURADIO_${EXTVAR}_LIBRARIES}) list(GET GNURADIO_LIBRARY 0 FIRST_DIR) @@ -205,7 +205,7 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE) INTERFACE_INCLUDE_DIRECTORIES "${GNURADIO_${EXTVAR}_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${GNURADIO_LIBRARY}" ) - endif() + endif() endif() mark_as_advanced(GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS) From 97bd0a1ca059327a249be49281676667cf3a4725 Mon Sep 17 00:00:00 2001 From: Jim Melton Date: Mon, 22 Aug 2022 11:40:50 -0600 Subject: [PATCH 06/12] Ubuntu now requires liborc-0.4.0 When pulling gnuradio, it brings in libvolk2 (2.2.1). That tag was cut 2/24/2020 While that library ships with an internal dependency (ldd, INTERFACE_LINK_LIBRARIES) on liborc-0.4, the package does not expose the dependency explicitly. A fix was provided in https://github.com/gnuradio/volk/pull/367 that was merged on 3/23/2020. Since we are now using Volk's provided CMake files, we have to work around their mistake --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cc27accc34..fd7536197c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/checkout@v1 - name: install dependencies - run: sudo apt-get update && sudo apt-get install ninja-build libboost-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev libboost-thread-dev libboost-chrono-dev libboost-serialization-dev liblog4cpp5-dev gnuradio-dev gr-osmosdr libpugixml-dev libpcap-dev libblas-dev liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev libgnutls-openssl-dev libmatio-dev googletest protobuf-compiler libprotobuf-dev python3-mako + run: sudo apt-get update && sudo apt-get install ninja-build libboost-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev libboost-thread-dev libboost-chrono-dev libboost-serialization-dev liblog4cpp5-dev gnuradio-dev gr-osmosdr libpugixml-dev libpcap-dev libblas-dev liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev libgnutls-openssl-dev libmatio-dev googletest protobuf-compiler libprotobuf-dev python3-mako liborc-0.4.0 - name: configure run: cd build && cmake -GNinja .. - name: build From 546b325edb3bb1578dcc51a4b137fb392a1993d3 Mon Sep 17 00:00:00 2001 From: Jim Melton Date: Mon, 22 Aug 2022 12:31:28 -0600 Subject: [PATCH 07/12] fix typo; need the dev version to link --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fd7536197c..0b747318d0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/checkout@v1 - name: install dependencies - run: sudo apt-get update && sudo apt-get install ninja-build libboost-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev libboost-thread-dev libboost-chrono-dev libboost-serialization-dev liblog4cpp5-dev gnuradio-dev gr-osmosdr libpugixml-dev libpcap-dev libblas-dev liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev libgnutls-openssl-dev libmatio-dev googletest protobuf-compiler libprotobuf-dev python3-mako liborc-0.4.0 + run: sudo apt-get update && sudo apt-get install ninja-build libboost-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev libboost-thread-dev libboost-chrono-dev libboost-serialization-dev liblog4cpp5-dev gnuradio-dev gr-osmosdr libpugixml-dev libpcap-dev libblas-dev liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev libgnutls-openssl-dev libmatio-dev googletest protobuf-compiler libprotobuf-dev python3-mako liborc-0.4-dev - name: configure run: cd build && cmake -GNinja .. - name: build From 94ba3bb8c788313e1833c60f6d23de07be266f9f Mon Sep 17 00:00:00 2001 From: Jim Melton Date: Mon, 22 Aug 2022 13:23:13 -0600 Subject: [PATCH 08/12] this builds for Ubuntu 20.04 CI --- CMakeLists.txt | 17 ----- cmake/Modules/FindGNURADIO.cmake | 71 +++++++++++-------- .../gnuradio_blocks/CMakeLists.txt | 7 -- 3 files changed, 43 insertions(+), 52 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 298ea02c4f..7353e13c7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -558,11 +558,6 @@ find_package(GNURADIO ${GNSSSDR_GNURADIO_MIN_VERSION} COMPONENTS ${GR_REQUIRED_COMPONENTS} ) -set_package_properties(GNURADIO PROPERTIES - PURPOSE "Implements flowgraph scheduler, provides some processing blocks and classes to create new ones." - TYPE REQUIRED -) - # GNU Radio 3.8 changed include file names # move into FindGNURADIO.cmake? if(GNURADIO_VERSION VERSION_GREATER_EQUAL "3.8") @@ -571,18 +566,6 @@ endif() -################################################################################ -# Log4cpp - http://log4cpp.sourceforge.net/ -################################################################################ -# move into FindGNURADIO.cmake? -#if(GNURADIO_USES_LOG4CPP) -# find_package(LOG4CPP) -# set_package_properties(LOG4CPP PROPERTIES -# PURPOSE "Required by GNU Radio." -# TYPE REQUIRED -# ) -#endif() - ################################################################################ # Detect availability of std::filesystem and set C++ standard accordingly ################################################################################ diff --git a/cmake/Modules/FindGNURADIO.cmake b/cmake/Modules/FindGNURADIO.cmake index 0c2189bd84..4e39daf2de 100644 --- a/cmake/Modules/FindGNURADIO.cmake +++ b/cmake/Modules/FindGNURADIO.cmake @@ -68,17 +68,37 @@ set(GNURADIO_INSTALL_PREFIX_USER_PROVIDED ${CMAKE_INSTALL_PREFIX} ) +macro(add_property_if src dst prop_name) + get_target_property(_prop ${src} ${prop_name}) + if(_prop) + set_target_properties(${dst} PROPERTIES ${prop_name} "${_prop}") + get_target_property(_check ${dst} ${prop_name}) + if(NOT ("${_check}" STREQUAL "${_prop}")) + message(FATAL_ERROR "failed to set ${prop_name} on ${dst}: ${_check} != ${_prop}") + endif() + endif() +endmacro() + # Maintainer note: # Most of this is to support older GNU Radio without CMake support. Better to use CMake than to fight against it. # GNU Radio exposes its components in lower-case ("runtime" and "pmt" are always provided, and cannot be selected) # Convert the list of required components to lower case, and see if find_package() can find them. We want to use -# find_package() because it adds the GNU Radio cmake directory to the path. +# find_package() because it adds the GNU Radio cmake module directory to the path. # TODO if FPHSA still adds value here + set(find_GR_REQUIRED_COMPONENTS ${GR_REQUIRED_COMPONENTS}) list(TRANSFORM find_GR_REQUIRED_COMPONENTS TOLOWER) list(REMOVE_ITEM find_GR_REQUIRED_COMPONENTS runtime pmt) find_package(Gnuradio QUIET NO_MODULE COMPONENTS ${find_GR_REQUIRED_COMPONENTS}) +# Gnuradio_FOUND is set +# Gnuradio_VERSION is set +# GNURADIO_FIND_VERSION is the desired version (${GNSS_GNURADIO_MIN_VERSION}) + +# The GNU Radio module directory was (intentionally) added to the path. However, make sure ours remains first +# Allows us to use all .cmake files in this directory +list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) +list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_LIST_DIR}) # These are a given, if the package is found, but if I don't set them, GNURADIO_FOUND will be false set(PC_GNURADIO_RUNTIME_FOUND ${Gnuradio_FOUND}) @@ -90,7 +110,7 @@ find_package_handle_standard_args(GNURADIO # HANDLE_COMPONENTS ) -# This legacy function exists among other reasons to create the "Gnuradio::" targets use in GNSS-SDR +# This legacy function exists among other reasons to create the "Gnuradio::" targets uses in GNSS-SDR # Where possible, it's better to use the "gnuradio::" targets provided by GNU Radio, because all of # the dependency linkage is built in. When we abandon support for non-CMake GNU Radio, this should be # removed and our CMakeLists.txt files updated to use the "gnuradio::gnuradio-xxx" targets @@ -189,10 +209,18 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE) endif() # Create imported target - if(NOT TARGET Gnuradio::${gnuradio_component}) - if(TARGET gnuradio::gnuradio-${gnuradio_component}) + set(_target "Gnuradio::${gnuradio_component}") + if(NOT TARGET ${_target}) + set(_component "gnuradio::gnuradio-${gnuradio_component}") + if(TARGET ${_component}) # maintain legacy targets by creating an alias - add_library(Gnuradio::${gnuradio_component} ALIAS gnuradio::gnuradio-${gnuradio_component}) + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.18) + add_library(${_target} ALIAS ${_component}) + else() + # CMake < 3.18 doesn't allow ALIAS targets on non-global symbols + add_library(${_target} INTERFACE IMPORTED) + set_target_properties(${_target} PROPERTIES INTERFACE_LINK_LIBRARIES ${_component}) + endif() else() # legacy targets add_library(Gnuradio::${gnuradio_component} SHARED IMPORTED) @@ -426,31 +454,18 @@ if(GNURADIO_PMT_INCLUDE_DIRS) endif() endif() -# Check if GNU Radio uses log4cpp or spdlog -# Seems like this should just be a version_less 3.10? -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() +if(GNURADIO_VERSION VERSION_LESS 3.10) + find_package(LOG4CPP) + set_package_properties(LOG4CPP PROPERTIES + PURPOSE "Required by GNU Radio." + TYPE REQUIRED + ) endif() + set_package_properties(GNURADIO PROPERTIES URL "https://www.gnuradio.org/" + PURPOSE "Implements flowgraph scheduler, provides some processing blocks and classes to create new ones." + TYPE REQUIRED ) + diff --git a/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt b/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt index 5b1a6762ab..c657272963 100644 --- a/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt @@ -48,13 +48,6 @@ target_link_libraries(input_filter_gr_blocks Volk::volk ) -if(LOG4CPP_FOUND) - target_link_libraries(input_filter_gr_blocks - PRIVATE - Log4cpp::log4cpp - ) -endif() - target_include_directories(input_filter_gr_blocks PUBLIC ${GNSSSDR_SOURCE_DIR}/src/core/interfaces From c8c5ca059c48ffdd5f59673ca2a2b4ac8510f08d Mon Sep 17 00:00:00 2001 From: Jim Melton Date: Mon, 22 Aug 2022 13:55:42 -0600 Subject: [PATCH 09/12] untabify ... I know better --- cmake/Modules/FindGNURADIO.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/Modules/FindGNURADIO.cmake b/cmake/Modules/FindGNURADIO.cmake index 4e39daf2de..affe8b92db 100644 --- a/cmake/Modules/FindGNURADIO.cmake +++ b/cmake/Modules/FindGNURADIO.cmake @@ -216,10 +216,10 @@ function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE) # maintain legacy targets by creating an alias if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.18) add_library(${_target} ALIAS ${_component}) - else() + else() # CMake < 3.18 doesn't allow ALIAS targets on non-global symbols add_library(${_target} INTERFACE IMPORTED) - set_target_properties(${_target} PROPERTIES INTERFACE_LINK_LIBRARIES ${_component}) + set_target_properties(${_target} PROPERTIES INTERFACE_LINK_LIBRARIES ${_component}) endif() else() # legacy targets From bbd4b3d2e18955b9ebf3e33f76f8110d9d37287a Mon Sep 17 00:00:00 2001 From: Jim Melton Date: Mon, 22 Aug 2022 14:01:12 -0600 Subject: [PATCH 10/12] missed one --- src/core/libs/supl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/libs/supl/CMakeLists.txt b/src/core/libs/supl/CMakeLists.txt index b5bf8ef6f7..38239f27a4 100644 --- a/src/core/libs/supl/CMakeLists.txt +++ b/src/core/libs/supl/CMakeLists.txt @@ -61,7 +61,7 @@ target_link_libraries(core_libs_supl # upgraded, but until then, allow non-standards-conforming constructs set_target_properties(core_libs_supl PROPERTIES - C_EXTENSIONS on + C_EXTENSIONS on ) target_include_directories(core_libs_supl From e8a177391644174d0c1c6692b432029e58d187a7 Mon Sep 17 00:00:00 2001 From: Jim Melton Date: Mon, 22 Aug 2022 16:04:52 -0600 Subject: [PATCH 11/12] untabify ... this is just embarrassing --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7353e13c7e..963983134b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -555,7 +555,7 @@ if(ENABLE_ZMQ) endif() find_package(GNURADIO ${GNSSSDR_GNURADIO_MIN_VERSION} - COMPONENTS ${GR_REQUIRED_COMPONENTS} + COMPONENTS ${GR_REQUIRED_COMPONENTS} ) # GNU Radio 3.8 changed include file names From fe70880487ec79320fe3a40fdc1f171d6a83ea95 Mon Sep 17 00:00:00 2001 From: Jim Melton Date: Mon, 22 Aug 2022 20:33:24 -0600 Subject: [PATCH 12/12] include what you use --- src/utils/front-end-cal/main.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/utils/front-end-cal/main.cc b/src/utils/front-end-cal/main.cc index 42d7a7601b..692062080b 100644 --- a/src/utils/front-end-cal/main.cc +++ b/src/utils/front-end-cal/main.cc @@ -60,6 +60,7 @@ #include #include // for ctime #include +#include #include #include #include