From fdda4edffb0489a38a8ac967b9ae84a3eaf62513 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Wed, 2 Dec 2020 16:19:56 +0100 Subject: [PATCH] Improve handling of the ORC library --- CMakeLists.txt | 16 ++--- cmake/Modules/FindORC.cmake | 56 +++++++++++++++++ cmake/Modules/FindVOLK.cmake | 12 +++- cmake/Modules/FindVOLKGNSSSDR.cmake | 12 +++- docs/changelog.md | 3 +- src/algorithms/libs/CMakeLists.txt | 2 +- .../volk_gnsssdr/CMakeLists.txt | 2 +- .../volk_gnsssdr/cmake/Modules/FindORC.cmake | 60 ++++++++++++++++++- .../volk_gnsssdr/lib/CMakeLists.txt | 28 ++++++--- 9 files changed, 168 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7461e130f..7d1ad2a2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1123,15 +1123,15 @@ if(NOT VOLKGNSSSDR_FOUND) include(GNUInstallDirs) set(SUPPORTED_CPU_FEATURES_ARCH FALSE) if(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips") - set(SUPPORTED_CPU_FEATURES_ARCH TRUE) + set(SUPPORTED_CPU_FEATURES_ARCH TRUE) elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") - set(SUPPORTED_CPU_FEATURES_ARCH TRUE) + set(SUPPORTED_CPU_FEATURES_ARCH TRUE) elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64") - set(SUPPORTED_CPU_FEATURES_ARCH TRUE) + set(SUPPORTED_CPU_FEATURES_ARCH TRUE) elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64)|(AMD64|amd64)|(^i.86$)") - set(SUPPORTED_CPU_FEATURES_ARCH TRUE) + set(SUPPORTED_CPU_FEATURES_ARCH TRUE) elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)") - set(SUPPORTED_CPU_FEATURES_ARCH TRUE) + set(SUPPORTED_CPU_FEATURES_ARCH TRUE) endif() if(${CMAKE_INSTALL_LIBDIR} MATCHES lib64) set(VOLK_GNSSSDR_LIB_SUFFIX 64) @@ -1187,15 +1187,15 @@ if(NOT VOLKGNSSSDR_FOUND) endif() endif() - if(NOT ORC_FOUND) - set(ORC_LIBRARIES "") + if(NOT ORC_LIBRARIES_STATIC) + set(ORC_LIBRARIES_STATIC "") set(ORC_INCLUDE_DIRS "") endif() add_library(volk_gnsssdr UNKNOWN IMPORTED) set_property(TARGET volk_gnsssdr PROPERTY IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/volk_gnsssdr_module/install/lib${VOLK_GNSSSDR_LIB_SUFFIX}/libvolk_gnsssdr${CMAKE_STATIC_LIBRARY_SUFFIX}) set(VOLK_GNSSSDR_INCLUDE_DIRS "${CMAKE_BINARY_DIR}/volk_gnsssdr_module/build/include/;${CMAKE_SOURCE_DIR}/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include;${ORC_INCLUDE_DIRS}") - set(VOLK_GNSSSDR_LIBRARIES volk_gnsssdr ${ORC_LIBRARIES}) + set(VOLK_GNSSSDR_LIBRARIES volk_gnsssdr ${ORC_LIBRARIES_STATIC}) if(NOT TARGET Volkgnsssdr::volkgnsssdr) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/volk_gnsssdr_module/build/include) diff --git a/cmake/Modules/FindORC.cmake b/cmake/Modules/FindORC.cmake index 0ae4721ff..a924c6fdd 100644 --- a/cmake/Modules/FindORC.cmake +++ b/cmake/Modules/FindORC.cmake @@ -6,6 +6,11 @@ # # SPDX-License-Identifier: GPL-3.0-or-later +if(DEFINED __INCLUDED_GNSSSDR_CMAKE_FIND_ORC) + return() +endif() +set(__INCLUDED_GNSSSDR_CMAKE_FIND_ORC TRUE) + if(NOT COMMAND feature_summary) include(FeatureSummary) endif() @@ -60,6 +65,8 @@ find_path(ORC_LIBRARY_DIR HINTS ${PC_ORC_LIBDIR} PATHS ${ORC_ROOT_USER_PROVIDED}/lib ${ORC_ROOT_USER_PROVIDED}/lib64 + ${CMAKE_INSTALL_PREFIX}/lib + ${CMAKE_INSTALL_PREFIX}/lib64 /usr/lib /usr/lib64 /usr/lib/x86_64-linux-gnu @@ -84,6 +91,54 @@ find_library(ORC_LIB orc-0.4 HINTS ${PC_ORC_LIBRARY_DIRS} PATHS ${ORC_ROOT_USER_PROVIDED}/lib ${ORC_ROOT_USER_PROVIDED}/lib64 + ${CMAKE_INSTALL_PREFIX}/lib + ${CMAKE_INSTALL_PREFIX}/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/hppa-linux-gnu + /usr/lib/s390x-linux-gnu + /usr/local/lib + /usr/local/lib64 + /opt/local/lib +) + +find_library(ORC_LIBRARY_STATIC ${CMAKE_STATIC_LIBRARY_PREFIX}orc-0.4${CMAKE_STATIC_LIBRARY_SUFFIX} + HINTS ${PC_ORC_LIBRARY_DIRS} + PATHS ${ORC_ROOT}/lib + ${ORC_ROOT}/lib64 + ${CMAKE_INSTALL_PREFIX}/lib + ${CMAKE_INSTALL_PREFIX}/lib64 + ${ORC_ROOT_USER_PROVIDED}/lib + ${ORC_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/hppa-linux-gnu + /usr/lib/s390x-linux-gnu + /usr/local/lib + /usr/local/lib64 + /opt/local/lib ) if(PC_ORC_VERSION) @@ -95,6 +150,7 @@ list(APPEND ORC_LIBRARY ${ORC_LIB}) set(ORC_INCLUDE_DIRS ${ORC_INCLUDE_DIR}) set(ORC_LIBRARIES ${ORC_LIBRARY}) set(ORC_LIBRARY_DIRS ${ORC_LIBRARY_DIR}) +set(ORC_LIBRARIES_STATIC ${ORC_LIBRARY_STATIC}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(ORC "orc files" ORC_LIBRARY ORC_INCLUDE_DIR ORCC_EXECUTABLE) diff --git a/cmake/Modules/FindVOLK.cmake b/cmake/Modules/FindVOLK.cmake index fcdbe8f4d..81083eb4d 100644 --- a/cmake/Modules/FindVOLK.cmake +++ b/cmake/Modules/FindVOLK.cmake @@ -128,12 +128,22 @@ 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_LIBRARIES}" + INTERFACE_LINK_LIBRARIES "${VOLK_LINK_LIBRARIES}" ) endif() diff --git a/cmake/Modules/FindVOLKGNSSSDR.cmake b/cmake/Modules/FindVOLKGNSSSDR.cmake index 416774731..4eb3ada65 100644 --- a/cmake/Modules/FindVOLKGNSSSDR.cmake +++ b/cmake/Modules/FindVOLKGNSSSDR.cmake @@ -88,12 +88,22 @@ else() ) endif() +if(NOT ORC_FOUND) + find_package(ORC QUIET) +endif() +if(ORC_FOUND) + set(VOLK_GNSSSDR_LINK_LIBRARIES ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES}) + set(VOLK_GNSSSDR_INCLUDE_DIRS ${VOLK_GNSSSDR_INCLUDE_DIRS} ${ORC_INCLUDE_DIRS}) +else() + set(VOLK_GNSSSDR_LINK_LIBRARIES ${VOLK_GNSSSDR_LIBRARIES}) +endif() + if(VOLKGNSSSDR_FOUND AND NOT TARGET Volkgnsssdr::volkgnsssdr) add_library(Volkgnsssdr::volkgnsssdr SHARED IMPORTED) set_target_properties(Volkgnsssdr::volkgnsssdr PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${VOLK_GNSSSDR_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${VOLK_GNSSSDR_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${VOLK_GNSSSDR_LIBRARIES}" + INTERFACE_LINK_LIBRARIES "${VOLK_GNSSSDR_LINK_LIBRARIES}" ) endif() diff --git a/docs/changelog.md b/docs/changelog.md index 892b05e50..def020fce 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -59,7 +59,8 @@ SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades ) endif() + target_link_libraries(volk_gnsssdr_static PUBLIC ${volk_gnsssdr_libraries}) if(USE_CPU_FEATURES) target_link_libraries(volk_gnsssdr_static PRIVATE cpu_features ) endif() - target_link_libraries(volk_gnsssdr_static PUBLIC ${volk_gnsssdr_libraries} pthread) + if(ORC_FOUND) + target_link_libraries(volk_gnsssdr_static PUBLIC ${ORC_LIBRARIES_STATIC}) + endif() + target_link_libraries(volk_gnsssdr_static PRIVATE pthread) if(NOT MSVC) target_link_libraries(volk_gnsssdr_static PUBLIC m) endif() @@ -630,12 +637,19 @@ if(ENABLE_TESTING) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/.unittest) include(VolkAddTest) - volk_gen_test(volk_gnsssdr_test_all - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/testqa.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_utils.cc - TARGET_DEPS volk_gnsssdr - ) - + if(ENABLE_STATIC_LIBS) + volk_gen_test(volk_gnsssdr_test_all + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/testqa.cc + ${CMAKE_CURRENT_SOURCE_DIR}/qa_utils.cc + TARGET_DEPS volk_gnsssdr_static + ) + else() + volk_gen_test(volk_gnsssdr_test_all + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/testqa.cc + ${CMAKE_CURRENT_SOURCE_DIR}/qa_utils.cc + TARGET_DEPS volk_gnsssdr + ) + endif() foreach(kernel ${h_files}) get_filename_component(kernel ${kernel} NAME) string(REPLACE ".h" "" kernel ${kernel})