1 cmake_minimum_required(VERSION 3.2)
3 option(ENABLE_STATIC "Enable static library" ON)
8 set(LIBRARY_TYPE "STATIC")
10 set(LIBRARY_TYPE "SHARED")
12 message(STATUS "Build library type: ${LIBRARY_TYPE}")
14 message(STATUS "Build AIS support : ${ENABLE_AIS}")
15 message(STATUS "Build SeaTalk support: ${ENABLE_SEATALK}")
16 message(STATUS "Build IO support : ${ENABLE_IO}")
19 ${CMAKE_CURRENT_SOURCE_DIR}/marnav/version.hpp.in
20 ${CMAKE_CURRENT_BINARY_DIR}/marnav/version.hpp
24 # intentionally left blank
28 set(SOURCES ${SOURCES}
29 marnav/seatalk/seatalk.cpp
30 marnav/seatalk/message.cpp
31 marnav/seatalk/message_00.cpp
32 marnav/seatalk/message_01.cpp
33 marnav/seatalk/message_05.cpp
34 marnav/seatalk/message_10.cpp
35 marnav/seatalk/message_11.cpp
36 marnav/seatalk/message_20.cpp
37 marnav/seatalk/message_21.cpp
38 marnav/seatalk/message_22.cpp
39 marnav/seatalk/message_23.cpp
40 marnav/seatalk/message_24.cpp
41 marnav/seatalk/message_25.cpp
42 marnav/seatalk/message_26.cpp
43 marnav/seatalk/message_27.cpp
44 marnav/seatalk/message_30.cpp
45 marnav/seatalk/message_36.cpp
46 marnav/seatalk/message_38.cpp
47 marnav/seatalk/message_50.cpp
48 marnav/seatalk/message_51.cpp
49 marnav/seatalk/message_52.cpp
50 marnav/seatalk/message_53.cpp
51 marnav/seatalk/message_54.cpp
52 marnav/seatalk/message_56.cpp
53 marnav/seatalk/message_58.cpp
54 marnav/seatalk/message_59.cpp
55 marnav/seatalk/message_65.cpp
56 marnav/seatalk/message_66.cpp
57 marnav/seatalk/message_6c.cpp
58 marnav/seatalk/message_86.cpp
59 marnav/seatalk/message_87.cpp
60 marnav/seatalk/message_89.cpp
65 set(SOURCES ${SOURCES}
69 marnav/ais/message.cpp
70 marnav/ais/message_01.cpp
71 marnav/ais/message_02.cpp
72 marnav/ais/message_03.cpp
73 marnav/ais/message_04.cpp
74 marnav/ais/message_05.cpp
75 marnav/ais/message_09.cpp
76 marnav/ais/message_10.cpp
77 marnav/ais/message_11.cpp
78 marnav/ais/message_18.cpp
79 marnav/ais/message_19.cpp
80 marnav/ais/message_21.cpp
81 marnav/ais/message_22.cpp
82 marnav/ais/message_23.cpp
83 marnav/ais/message_24.cpp
88 set(SOURCES ${SOURCES}
90 marnav/io/nmea_reader.cpp
91 marnav/io/default_nmea_reader.cpp
95 set(SOURCES ${SOURCES}
96 marnav/io/seatalk_reader.cpp
97 marnav/io/default_seatalk_reader.cpp
102 add_library(marnav ${LIBRARY_TYPE}
103 marnav/math/floatingpoint.hpp
104 marnav/math/vector.hpp
105 marnav/math/matrix.hpp
106 marnav/math/quaternion.hpp
107 marnav/utils/mmsi.cpp
109 marnav/geo/position.cpp
110 marnav/geo/region.cpp
112 marnav/geo/geodesic.cpp
113 marnav/nmea/waypoint.cpp
114 marnav/nmea/convert.cpp
115 marnav/nmea/manufacturer.cpp
116 marnav/nmea/checks.cpp
117 marnav/nmea/split.cpp
118 marnav/nmea/angle.cpp
119 marnav/nmea/string.cpp
124 marnav/nmea/checksum.cpp
125 marnav/nmea/sentence.cpp
126 marnav/nmea/detail.cpp
127 marnav/nmea/ais_helper.cpp
203 marnav/nmea/pgrme.cpp
204 marnav/nmea/pgrmm.cpp
205 marnav/nmea/pgrmz.cpp
209 target_include_directories(marnav
211 ${CMAKE_CURRENT_SOURCE_DIR}
212 ${CMAKE_CURRENT_BINARY_DIR}
215 target_compile_options(marnav
225 target_compile_options(marnav
231 target_compile_options(marnav
233 -fno-omit-frame-pointer
236 if(ENABLE_WARNING_HELL)
237 message(STATUS "Behold: entering the hell of extended warnings")
238 target_compile_options(marnav
240 # some are not enabled on purpose
244 -Wdisabled-optimization
252 -Wmissing-field-initializers
253 -Wmissing-format-attribute
254 -Wmissing-include-dirs
267 # explicitly disabled on purpose:
276 -Wno-format-nonliteral
283 if(build_type_lower MATCHES coverage)
284 message(STATUS "Coverage: enabled")
285 target_compile_options(marnav
291 -fno-inline-small-functions
296 set_target_properties(marnav
297 PROPERTIES VERSION "${PROJECT_VERSION}"
298 SOVERSION "${PROJECT_VERSION}"
303 LIBRARY DESTINATION lib
304 ARCHIVE DESTINATION lib
305 RUNTIME DESTINATION bin
310 ${CMAKE_CURRENT_BINARY_DIR}/marnav/version.hpp
311 DESTINATION include/marnav
316 marnav/nmea/constants.hpp
317 marnav/nmea/talker_id.hpp
318 marnav/nmea/sentence_id.hpp
319 marnav/nmea/convert.hpp
320 marnav/nmea/waypoint.hpp
321 marnav/nmea/manufacturer.hpp
322 marnav/nmea/angle.hpp
323 marnav/nmea/string.hpp
328 marnav/nmea/checksum.hpp
329 marnav/nmea/sentence.hpp
330 marnav/nmea/detail.hpp
331 marnav/nmea/ais_helper.hpp
407 marnav/nmea/pgrme.hpp
408 DESTINATION include/marnav/nmea
417 marnav/ais/message.hpp
418 marnav/ais/message_01.hpp
419 marnav/ais/message_02.hpp
420 marnav/ais/message_03.hpp
421 marnav/ais/message_04.hpp
422 marnav/ais/message_05.hpp
423 marnav/ais/message_09.hpp
424 marnav/ais/message_10.hpp
425 marnav/ais/message_11.hpp
426 marnav/ais/message_18.hpp
427 marnav/ais/message_19.hpp
428 marnav/ais/message_21.hpp
429 marnav/ais/message_22.hpp
430 marnav/ais/message_23.hpp
431 marnav/ais/message_24.hpp
432 DESTINATION include/marnav/ais
439 marnav/seatalk/key.hpp
440 marnav/seatalk/equipment.hpp
441 marnav/seatalk/seatalk.hpp
442 marnav/seatalk/message.hpp
443 marnav/seatalk/message_00.hpp
444 marnav/seatalk/message_01.hpp
445 marnav/seatalk/message_05.hpp
446 marnav/seatalk/message_10.hpp
447 marnav/seatalk/message_11.hpp
448 marnav/seatalk/message_20.hpp
449 marnav/seatalk/message_21.hpp
450 marnav/seatalk/message_22.hpp
451 marnav/seatalk/message_23.hpp
452 marnav/seatalk/message_24.hpp
453 marnav/seatalk/message_25.hpp
454 marnav/seatalk/message_26.hpp
455 marnav/seatalk/message_27.hpp
456 marnav/seatalk/message_30.hpp
457 marnav/seatalk/message_36.hpp
458 marnav/seatalk/message_38.hpp
459 marnav/seatalk/message_50.hpp
460 marnav/seatalk/message_51.hpp
461 marnav/seatalk/message_52.hpp
462 marnav/seatalk/message_53.hpp
463 marnav/seatalk/message_54.hpp
464 marnav/seatalk/message_56.hpp
465 marnav/seatalk/message_58.hpp
466 marnav/seatalk/message_59.hpp
467 marnav/seatalk/message_65.hpp
468 marnav/seatalk/message_66.hpp
469 marnav/seatalk/message_6c.hpp
470 marnav/seatalk/message_86.hpp
471 marnav/seatalk/message_87.hpp
472 marnav/seatalk/message_89.hpp
473 DESTINATION include/marnav/seatalk
479 marnav/utils/unused.hpp
480 marnav/utils/unique.hpp
481 marnav/utils/bitset.hpp
482 marnav/utils/optional.hpp
483 marnav/utils/mmsi.hpp
484 DESTINATION include/marnav/utils
489 marnav/math/floatingpoint.hpp
490 marnav/math/vector.hpp
491 marnav/math/matrix.hpp
492 marnav/math/quaternion.hpp
493 DESTINATION include/marnav/math
499 marnav/geo/position.hpp
500 marnav/geo/region.hpp
502 marnav/geo/geodesic.hpp
503 DESTINATION include/marnav/geo
511 marnav/io/nmea_reader.hpp
512 marnav/io/default_nmea_reader.hpp
513 marnav/io/default_nmea_serial.hpp
514 DESTINATION include/marnav/io
519 marnav/io/seatalk_reader.hpp
520 marnav/io/default_seatalk_reader.hpp
521 marnav/io/default_seatalk_serial.hpp
522 DESTINATION include/marnav/io
527 # stuff for the config and config-version files
528 set(INCLUDE_INSTALL_DIR include)
529 set(LIB_INSTALL_DIR lib)
530 include(CMakePackageConfigHelpers)
531 configure_package_config_file(
533 "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
534 INSTALL_DESTINATION "${LIB_INSTALL_DIR}/${PROJECT_NAME}/cmake"
535 PATH_VARS INCLUDE_INSTALL_DIR
537 write_basic_package_version_file(
538 "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
539 VERSION "${PROJECT_VERSION}"
540 COMPATIBILITY SameMajorVersion)
543 "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
544 "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
546 "${LIB_INSTALL_DIR}/${PROJECT_NAME}/cmake"
551 add_executable(nmeasum
555 target_include_directories(nmeasum PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
557 target_compile_options(nmeasum
568 if(ENABLE_AIS AND ENABLE_IO)
569 add_executable(nmeadump
573 target_include_directories(nmeadump
575 ${CMAKE_CURRENT_SOURCE_DIR}
576 ${CMAKE_CURRENT_SOURCE_DIR}/../extern
579 target_compile_options(nmeadump
588 target_link_libraries(nmeadump