1 cmake_minimum_required(VERSION 3.19)
6 DESCRIPTION "Library for maritime navigation."
9 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
10 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
11 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
14 set(CMAKE_CXX_STANDARD 17)
15 set(CMAKE_CXX_STANDARD_REQUIRED ON)
16 set(CMAKE_CXX_EXTENSIONS OFF)
17 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
20 option(ENABLE_STATIC "Enable static library" ON)
21 option(ENABLE_EXAMPLES "Enable Examples" ON)
22 option(ENABLE_TESTS "Enable Tests" ON)
23 option(ENABLE_TOOLS "Enable Tools" ON)
26 set(CMAKE_DEBUG_POSTFIX "d")
28 set(ENABLE_PROFILING OFF)
29 set(ENABLE_BENCHMARK OFF)
30 set(ENABLE_SANITIZER OFF)
31 set(ENABLE_TESTS_BENCHMARK OFF)
34 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
35 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
36 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
37 set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
39 option(ENABLE_PROFILING "Enable Profiling" OFF)
40 option(ENABLE_BENCHMARK "Enable Benchmark" OFF)
41 option(ENABLE_SANITIZER "Enable Sanitizing (address, undefined)" OFF)
42 option(ENABLE_TESTS_BENCHMARK "Enable Test Benchmarks" ON)
43 option(ENABLE_IWYU "Enable include-what-you-use" OFF)
46 if(NOT DEFINED BUILD_SHARED_LIBS)
48 set(BUILD_SHARED_LIBS FALSE)
50 set(BUILD_SHARED_LIBS TRUE)
55 set(BUILD_TESTING TRUE)
58 set(BUILD_TESTING FALSE)
62 include(RepoInformation)
63 include(Documentation)
68 set(CXXOPTS_BUILD_EXAMPLES FALSE CACHE BOOL "" FORCE)
69 set(CXXOPTS_BUILD_TESTS FALSE CACHE BOOL "" FORCE)
70 FetchContent_Declare(cxxopts
71 URL "${CMAKE_CURRENT_SOURCE_DIR}/extern/cxxopts"
73 FetchContent_MakeAvailable(cxxopts)
75 set(FMT_INSTALL TRUE CACHE BOOL "" FORCE)
76 FetchContent_Declare(fmt
77 URL "${CMAKE_CURRENT_SOURCE_DIR}/extern/fmt"
79 FetchContent_MakeAvailable(fmt)
83 message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
85 ${CMAKE_CURRENT_BINARY_DIR}/doc
86 ${CMAKE_CURRENT_BINARY_DIR}/doc/coverage
87 ${CMAKE_CURRENT_BINARY_DIR}/local/include
94 message(STATUS "Build Examples : ${ENABLE_EXAMPLES}")
96 add_subdirectory(examples)
100 message(STATUS "Build Tests : ${ENABLE_TESTS}")
101 message(STATUS "Build Tests Benchmark: ${ENABLE_TESTS_BENCHMARK}")
103 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^ARM$|^aarch64$")
104 set(gtest_disable_pthreads TRUE CACHE BOOL "" FORCE)
106 FetchContent_Declare(googletest
107 URL "${CMAKE_CURRENT_SOURCE_DIR}/extern/googletest-1.11.0"
109 FetchContent_MakeAvailable(googletest)
111 if(ENABLE_TESTS_BENCHMARK)
112 set(BENCHMARK_ENABLE_TESTING FALSE CACHE BOOL "" FORCE)
113 set(BENCHMARK_ENABLE_GTEST_TESTS FALSE CACHE BOOL "" FORCE)
114 FetchContent_Declare(benchmark
115 URL "${CMAKE_CURRENT_SOURCE_DIR}/extern/benchmark-1.6.0"
117 FetchContent_MakeAvailable(benchmark)
120 add_subdirectory(test)
124 if(CMAKE_BUILD_TYPE MATCHES Coverage)
125 include(CodeCoverage)
126 setup_target_for_coverage(coverage
132 set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
133 set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
134 set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
135 set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
136 set(CPACK_PACKAGE_NAME "marnav")
137 set(CPACK_PACKAGE_VENDOR "Mario Konrad")
138 set(CPACK_PACKAGE_CONTACT "Mario Konrad <mario.konrad@gmx.net>")
139 set(CPACK_PACAKGE_DESCRIPTION "Library for maritime navigation.")
140 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Library")
141 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
142 set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
143 set(CPACK_MONOLITHIC_INSTALL 1)
144 #set(CPACK_PACKAGE_EXECUTABLES "??" "??")
145 set(CPACK_STRIP_FILES true)
148 set(CPACK_DEBIAN_PACKAGE_NAME ${CPACK_DEBIAN_PACKAGE_NAME})
149 set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_CONTACT})
150 set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${CPACK_PACAKGE_DESCRIPTION})
151 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libstdc++6 (>= 7.0)")
152 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3)")
153 set(CPACK_DEBIAN_PACKAGE_SECTION "misc")
154 if (CMAKE_SIZEOF_VOID_P MATCHES "8")
155 set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
157 set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "i386")