Skip to content
Snippets Groups Projects
Commit 94a53023 authored by Joan Vallvé Navarro's avatar Joan Vallvé Navarro
Browse files

Merge branch 'devel' into 'main'

after cmake refactor

See merge request mobile_robotics/gauss_project/gnss_utils!23
parents f1e286fa 744f96ad
No related branches found
No related tags found
2 merge requests!25Main,!23after cmake refactor
Pipeline #10957 passed
lib/* lib/
build/* build*/
bin/* bin/
.settings/language.settings.xml .settings/language.settings.xml
.project .project
.cproject .cproject
deps/RTKLIB deps/RTKLIB
.vscode/* .vscode/
...@@ -2,13 +2,7 @@ ...@@ -2,13 +2,7 @@
MESSAGE("Starting gnss-utils CMakeLists ...") MESSAGE("Starting gnss-utils CMakeLists ...")
# Pre-requisites about cmake itself # Pre-requisites about cmake itself
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
if(COMMAND cmake_policy)
cmake_policy(SET CMP0005 NEW)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
# MAC OSX RPATH # MAC OSX RPATH
set(CMAKE_MACOSX_RPATH true) set(CMAKE_MACOSX_RPATH true)
...@@ -18,7 +12,8 @@ PROJECT(gnss_utils) ...@@ -18,7 +12,8 @@ PROJECT(gnss_utils)
SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib) SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib)
SET(CMAKE_INSTALL_PREFIX /usr/local) set(INCLUDE_INSTALL_DIR include/iri-algorithms)
set(LIB_INSTALL_DIR lib/)
IF (NOT CMAKE_BUILD_TYPE) IF (NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE "RELEASE") SET(CMAKE_BUILD_TYPE "RELEASE")
...@@ -45,12 +40,6 @@ endif() ...@@ -45,12 +40,6 @@ endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
FIND_PACKAGE(Eigen3 3.3 REQUIRED)
IF(Eigen3_FOUND)
INCLUDE_DIRECTORIES(${EIGEN3_INCLUDE_DIRS})
ENDIF(Eigen3_FOUND)
# Testing # Testing
IF(NOT BUILD_TESTS) IF(NOT BUILD_TESTS)
OPTION(BUILD_TESTS "Build Unit tests" ON) OPTION(BUILD_TESTS "Build Unit tests" ON)
...@@ -84,14 +73,13 @@ message("CONFIG DIRECTORY ${PROJECT_BINARY_DIR}") ...@@ -84,14 +73,13 @@ message("CONFIG DIRECTORY ${PROJECT_BINARY_DIR}")
include_directories("${PROJECT_BINARY_DIR}/conf") include_directories("${PROJECT_BINARY_DIR}/conf")
# rtklib path # rtklib path
SET(RTKLIB_DIR deps/RTKLIB) SET(RTKLIB_SRC_DIR deps/RTKLIB/src)
SET(RTKLIB_SRC_DIR ${RTKLIB_DIR}/src)
# driver source files # driver source files
SET(SOURCES SET(SOURCES
src/navigation.cpp src/navigation.cpp
src/observations.cpp src/observations.cpp
src/range.cpp src/range.cpp
src/receiver_raw_base.cpp src/receiver_raw_base.cpp
src/receivers/ublox_raw.cpp src/receivers/ublox_raw.cpp
src/receivers/novatel_raw.cpp src/receivers/novatel_raw.cpp
...@@ -131,41 +119,68 @@ SET(RTKLIB_SRC ...@@ -131,41 +119,68 @@ SET(RTKLIB_SRC
${RTKLIB_SRC_DIR}/rcv/tersus.c ${RTKLIB_SRC_DIR}/rcv/tersus.c
${RTKLIB_SRC_DIR}/rcv/ublox.c) ${RTKLIB_SRC_DIR}/rcv/ublox.c)
# application header files
# NOT SET SINCE WE COPY THE WHOLE include FOLDER FIND_PACKAGE(Eigen3 3.3 REQUIRED CONFIG)
# Eigen #######
FIND_PACKAGE(Eigen3 REQUIRED)
# Adding libraries' directories
link_directories(/usr/lib/x86_64-linux-gnu/)
# Adding include directories # Adding include directories
INCLUDE_DIRECTORIES(include/ ${EIGEN3_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${RTKLIB_SRC_DIR}) INCLUDE_DIRECTORIES(BEFORE include ${RTKLIB_SRC_DIR})
# create the shared library # create the shared library
ADD_LIBRARY(gnss_utils SHARED ${SOURCES} ${RTKLIB_SRC}) ADD_LIBRARY(gnss_utils SHARED ${SOURCES} ${RTKLIB_SRC})
TARGET_LINK_LIBRARIES(gnss_utils ${Boost_LIBRARIES})
# Link this library wrt. its dependencies
TARGET_LINK_LIBRARIES(gnss_utils Eigen3::Eigen)
# Examples # Examples
ADD_SUBDIRECTORY(src/examples) ADD_SUBDIRECTORY(src/examples)
# Testing # Testing
if(BUILD_TESTS) if(BUILD_TESTS)
add_subdirectory(test) add_subdirectory(test)
endif() endif()
# Installing # Installing
INSTALL(TARGETS ${PROJECT_NAME} INSTALL(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets
RUNTIME DESTINATION bin RUNTIME DESTINATION bin
LIBRARY DESTINATION lib LIBRARY DESTINATION ${LIB_INSTALL_DIR}
ARCHIVE DESTINATION lib) ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
INSTALL(DIRECTORY include/gnss_utils DESTINATION include/iri-algorithms) )
INSTALL(FILES ${RTKLIB_SRC_DIR}/rtklib.h DESTINATION include/iri-algorithms/gnss_utils) install(EXPORT ${PROJECT_NAME}Targets DESTINATION lib/${PROJECT_NAME}/cmake)
INSTALL(FILES Findgnss_utils.cmake DESTINATION ${CMAKE_ROOT}/Modules/)
# Configure the package installation
include(CMakePackageConfigHelpers)
configure_package_config_file(
${CMAKE_SOURCE_DIR}/cmake_modules/${PROJECT_NAME}Config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
INSTALL_DESTINATION ${LIB_INSTALL_DIR}/${PROJECT_NAME}/cmake
PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR
)
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
DESTINATION
${LIB_INSTALL_DIR}/${PROJECT_NAME}/cmake
)
# Specifies include directories to use when compiling the plugin target
# This way, include_directories does not need to be called in plugins depending on this one
target_include_directories(${PROJECT_NAME} INTERFACE
$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
)
INSTALL(DIRECTORY include/gnss_utils DESTINATION ${INCLUDE_INSTALL_DIR})
INSTALL(FILES ${RTKLIB_SRC_DIR}/rtklib.h DESTINATION ${INCLUDE_INSTALL_DIR}/gnss_utils)
INSTALL(FILES "${GNSS_UTILS_CONFIG_DIR}/config.h" INSTALL(FILES "${GNSS_UTILS_CONFIG_DIR}/config.h"
DESTINATION include/iri-algorithms/gnss_utils/internal) DESTINATION ${INCLUDE_INSTALL_DIR}/gnss_utils/internal)
FIND_PACKAGE(Doxygen) ###############
# Documentation
###############
FIND_PACKAGE(Doxygen MODULE)
FIND_PATH(IRI_DOC_DIR doxygen.conf ${CMAKE_SOURCE_DIR}/doc/iri_doc/) FIND_PATH(IRI_DOC_DIR doxygen.conf ${CMAKE_SOURCE_DIR}/doc/iri_doc/)
IF (IRI_DOC_DIR) IF (IRI_DOC_DIR)
......
FIND_PATH( FIND_PATH(
gnss_utils_INCLUDE_DIRS gnss_utils_INCLUDE_DIRS
NAMES gnss_utils.h NAMES gnss_utils/gnss_utils.h
PATHS /usr/local/include/iri-algorithms/gnss_utils /usr/local/lib/iri-algorithms/gnss_utils) PATHS /usr/local/include/iri-algorithms)
#change INCLUDE_DIRS to its parent directory (to force includes with libname in front
get_filename_component(gnss_utils_INCLUDE_DIRS ${gnss_utils_INCLUDE_DIRS} DIRECTORY)
IF(gnss_utils_INCLUDE_DIRS) IF(gnss_utils_INCLUDE_DIRS)
MESSAGE("Found gnss_utils include dirs: ${gnss_utils_INCLUDE_DIRS}") MESSAGE("Found gnss_utils include dirs: ${gnss_utils_INCLUDE_DIRS}")
ELSE(gnss_utils_INCLUDE_DIRS) ELSE(gnss_utils_INCLUDE_DIRS)
......
set(@PROJECT_NAME@_VERSION 0.0.1)
@PACKAGE_INIT@
set_and_check(@PROJECT_NAME@_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
set(@PROJECT_NAME@_INCLUDE_DIRS @PROJECT_NAME@_INCLUDE_DIR)
set_and_check(@PROJECT_NAME@_LIB_INSTALL_DIR "@PACKAGE_LIB_INSTALL_DIR@")
set(@PROJECT_NAME@_LIB_INSTALL_DIRS @PROJECT_NAME@_LIB_INSTALL_DIR)
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
check_required_components(@PROJECT_NAME@)
\ No newline at end of file
# Retrieve googletest from github & compile # Retrieve googletest from github & compile
add_subdirectory(gtest) add_subdirectory(gtest)
# Include gtest directory.
include_directories(${GTEST_INCLUDE_DIRS})
############# USE THIS TEST AS AN EXAMPLE #################### ############# USE THIS TEST AS AN EXAMPLE ####################
# # # #
# Create a specific test executable for gtest_example # # Create a specific test executable for gtest_example #
# gnss_utils_add_gtest(gtest_example gtest_example.cpp) # # gnss_utils_add_gtest(gtest_example gtest_example.cpp) #
# target_link_libraries(gtest_example ${PROJECT_NAME}) #
# # # #
############################################################## ##############################################################
# Navigation test # Navigation test
gnss_utils_add_gtest(gtest_navigation gtest_navigation.cpp) gnss_utils_add_gtest(gtest_navigation gtest_navigation.cpp)
target_link_libraries(gtest_navigation libgtest ${PROJECT_NAME})
# Observations test # Observations test
gnss_utils_add_gtest(gtest_observations gtest_observations.cpp) gnss_utils_add_gtest(gtest_observations gtest_observations.cpp)
target_link_libraries(gtest_observations libgtest ${PROJECT_NAME})
# TDCP test # TDCP test
gnss_utils_add_gtest(gtest_tdcp gtest_tdcp.cpp) gnss_utils_add_gtest(gtest_tdcp gtest_tdcp.cpp)
target_link_libraries(gtest_tdcp ${PROJECT_NAME})
# Transformations test # Transformations test
gnss_utils_add_gtest(gtest_transformations gtest_transformations.cpp) gnss_utils_add_gtest(gtest_transformations gtest_transformations.cpp)
target_link_libraries(gtest_transformations ${PROJECT_NAME})
# ChiSquare test # ChiSquare test
gnss_utils_add_gtest(gtest_chisquare gtest_chisquare.cpp) gnss_utils_add_gtest(gtest_chisquare gtest_chisquare.cpp)
target_link_libraries(gtest_chisquare ${PROJECT_NAME}) \ No newline at end of file
\ No newline at end of file
cmake_minimum_required(VERSION 2.8.8) if(${CMAKE_VERSION} VERSION_LESS "3.11.0")
project(gtest_builder C CXX) message("CMake version less than 3.11.0")
# We need thread support # Enable ExternalProject CMake module
#find_package(Threads REQUIRED) include(ExternalProject)
# Enable ExternalProject CMake module set(GTEST_FORCE_SHARED_CRT ON)
include(ExternalProject) set(GTEST_DISABLE_PTHREADS ON) # without this in ubuntu 18.04 we get linking errors
# Download GoogleTest
ExternalProject_Add(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.8.x
# TIMEOUT 1 # We'll try this
CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
-DCMAKE_CXX_FLAGS=${MSVC_COMPILER_DEFS}
-Dgtest_force_shared_crt=${GTEST_FORCE_SHARED_CRT}
-Dgtest_disable_pthreads=${GTEST_DISABLE_PTHREADS}
-DBUILD_GTEST=ON
PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
# Disable install step
INSTALL_COMMAND ""
UPDATE_DISCONNECTED 1 # 1: do not update googletest; 0: update googletest via github
)
set(GTEST_FORCE_SHARED_CRT ON) # Get GTest source and binary directories from CMake project
set(GTEST_DISABLE_PTHREADS OFF)
# For some reason I need to disable PTHREADS # Specify include dir
# with g++ (Ubuntu 4.9.3-8ubuntu2~14.04) 4.9.3 ExternalProject_Get_Property(googletest source_dir)
# This is a known issue for MinGW : set(GTEST_INCLUDE_DIRS ${source_dir}/googletest/include PARENT_SCOPE)
# https://github.com/google/shaderc/pull/174
#if(MINGW)
set(GTEST_DISABLE_PTHREADS ON)
#endif()
# Download GoogleTest # Specify MainTest's link libraries
ExternalProject_Add(googletest ExternalProject_Get_Property(googletest binary_dir)
GIT_REPOSITORY https://github.com/google/googletest.git set(GTEST_LIBS_DIR ${binary_dir}/googlemock/gtest PARENT_SCOPE)
GIT_TAG v1.8.x
# TIMEOUT 1 # We'll try this
CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
-DCMAKE_CXX_FLAGS=${MSVC_COMPILER_DEFS}
-Dgtest_force_shared_crt=${GTEST_FORCE_SHARED_CRT}
-Dgtest_disable_pthreads=${GTEST_DISABLE_PTHREADS}
-DBUILD_GTEST=ON
PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
# Disable install step
INSTALL_COMMAND ""
UPDATE_DISCONNECTED 1 # 1: do not update googletest; 0: update googletest via github
)
# Get GTest source and binary directories from CMake project # Create a libgtest target to be used as a dependency by test programs
add_library(libgtest IMPORTED STATIC GLOBAL)
add_dependencies(libgtest googletest)
# Specify include dir # Set libgtest properties
ExternalProject_Get_Property(googletest source_dir) set_target_properties(libgtest PROPERTIES
set(GTEST_INCLUDE_DIRS ${source_dir}/googletest/include PARENT_SCOPE) "IMPORTED_LOCATION" "${binary_dir}/googlemock/gtest/libgtest.a"
"IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}"
)
# Specify MainTest's link libraries else()
ExternalProject_Get_Property(googletest binary_dir)
set(GTEST_LIBS_DIR ${binary_dir}/googlemock/gtest PARENT_SCOPE)
# Create a libgtest target to be used as a dependency by test programs message("CMake version equal or greater than 3.11.0")
add_library(libgtest IMPORTED STATIC GLOBAL)
add_dependencies(libgtest googletest)
# Set libgtest properties include(FetchContent)
set_target_properties(libgtest PROPERTIES
"IMPORTED_LOCATION" "${binary_dir}/googlemock/gtest/libgtest.a"
"IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}"
)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG main)
#FetchContent_MakeAvailable(googletest)
# Disable installation of googletest: https://stackoverflow.com/questions/65527126/disable-install-for-fetchcontent
FetchContent_GetProperties(googletest)
if(NOT googletest_POPULATED)
FetchContent_Populate(googletest)
add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
endif()
function(gnss_utils_add_gtest target) function(gnss_utils_add_gtest target)
add_executable(${target} ${ARGN}) add_executable(${target} ${ARGN})
add_dependencies(${target} libgtest) if(${CMAKE_VERSION} VERSION_LESS "3.11.0")
target_link_libraries(${target} libgtest) add_dependencies(${target} libgtest)
target_link_libraries(${target} PUBLIC libgtest ${PROJECT_NAME})
#WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin target_include_directories(${target} PUBLIC ${GTEST_INCLUDE_DIRS})
else()
target_link_libraries(${target} PUBLIC gtest_main ${PROJECT_NAME})
endif()
add_test(NAME ${target} COMMAND ${target}) add_test(NAME ${target} COMMAND ${target})
endfunction() endfunction()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment