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

Merge branch '18-adapt-to-wolf-core-cmakelists-txt-refactor' into 'devel'

Resolve "Adapt to wolf core CMakeLists.txt refactor"

Closes #18

See merge request mobile_robotics/gauss_project/gnss_utils!22
parents d4841302 febb6a82
No related branches found
No related tags found
2 merge requests!23after cmake refactor,!22Resolve "Adapt to wolf core CMakeLists.txt refactor"
Pipeline #10955 failed
This commit is part of merge request !23. Comments created here will be created in the context of that merge request.
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)
......
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