NMEA: sentence APA added.
[marnav.git] / src / CMakeLists.txt
blobb9d5241044b5a84c3530dc5a1f84efd0a1521c76
1 cmake_minimum_required(VERSION 3.2)
3 option(ENABLE_STATIC "Enable static library" ON)
5 ### bin: nmeasum
7 add_executable(nmeasum
8         nmeasum.cpp
9         )
11 target_include_directories(nmeasum PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
13 target_compile_options(nmeasum
14         PRIVATE
15                 -pipe
16                 -ggdb
17                 -Wall
18                 -Wextra
19                 -pedantic-errors
20         )
22 ### lib: marnav
24 if(${ENABLE_STATIC})
25         set(LIBRARY_TYPE "STATIC")
26 else()
27         set(LIBRARY_TYPE "SHARED")
28 endif()
29 message(STATUS "Build library type: ${LIBRARY_TYPE}")
31 message(STATUS "Build AIS support    : ${ENABLE_AIS}")
32 message(STATUS "Build SeaTalk support: ${ENABLE_SEATALK}")
33 message(STATUS "Build IO support     : ${ENABLE_IO}")
35 configure_file(
36         ${CMAKE_CURRENT_SOURCE_DIR}/marnav/version.hpp.in
37         ${CMAKE_CURRENT_BINARY_DIR}/marnav/version.hpp
38         )
40 set(SOURCES
41         # intentionally left blank
42         )
44 if(ENABLE_SEATALK)
45         set(SOURCES ${SOURCES}
46                 marnav/seatalk/seatalk.cpp
47                 marnav/seatalk/message.cpp
48                 marnav/seatalk/message_00.cpp
49                 marnav/seatalk/message_01.cpp
50                 marnav/seatalk/message_05.cpp
51                 marnav/seatalk/message_10.cpp
52                 marnav/seatalk/message_11.cpp
53                 marnav/seatalk/message_20.cpp
54                 marnav/seatalk/message_21.cpp
55                 marnav/seatalk/message_22.cpp
56                 marnav/seatalk/message_23.cpp
57                 marnav/seatalk/message_24.cpp
58                 marnav/seatalk/message_25.cpp
59                 marnav/seatalk/message_26.cpp
60                 marnav/seatalk/message_27.cpp
61                 marnav/seatalk/message_30.cpp
62                 marnav/seatalk/message_36.cpp
63                 marnav/seatalk/message_38.cpp
64                 marnav/seatalk/message_50.cpp
65                 marnav/seatalk/message_51.cpp
66                 marnav/seatalk/message_52.cpp
67                 marnav/seatalk/message_53.cpp
68                 marnav/seatalk/message_54.cpp
69                 marnav/seatalk/message_56.cpp
70                 marnav/seatalk/message_58.cpp
71                 marnav/seatalk/message_59.cpp
72                 marnav/seatalk/message_65.cpp
73                 marnav/seatalk/message_66.cpp
74                 marnav/seatalk/message_6c.cpp
75                 marnav/seatalk/message_86.cpp
76                 marnav/seatalk/message_87.cpp
77                 marnav/seatalk/message_89.cpp
78                 )
79 endif()
81 if(ENABLE_AIS)
82         set(SOURCES ${SOURCES}
83                 marnav/ais/ais.cpp
84                 marnav/ais/angle.cpp
85                 marnav/ais/message.cpp
86                 marnav/ais/message_01.cpp
87                 marnav/ais/message_02.cpp
88                 marnav/ais/message_03.cpp
89                 marnav/ais/message_04.cpp
90                 marnav/ais/message_05.cpp
91                 marnav/ais/message_09.cpp
92                 marnav/ais/message_10.cpp
93                 marnav/ais/message_11.cpp
94                 marnav/ais/message_18.cpp
95                 marnav/ais/message_19.cpp
96                 marnav/ais/message_21.cpp
97                 marnav/ais/message_22.cpp
98                 marnav/ais/message_23.cpp
99                 marnav/ais/message_24.cpp
100                 )
101 endif()
103 if(ENABLE_IO)
104         set(SOURCES ${SOURCES}
105                 marnav/io/serial.cpp
106                 marnav/io/nmea_reader.cpp
107                 marnav/io/default_nmea_reader.cpp
108                 )
110         if(ENABLE_SEATALK)
111                 set(SOURCES ${SOURCES}
112                         marnav/io/seatalk_reader.cpp
113                         marnav/io/default_seatalk_reader.cpp
114                         )
115         endif()
116 endif()
118 add_library(marnav ${LIBRARY_TYPE}
119         marnav/math/floatingpoint.hpp
120         marnav/math/vector.hpp
121         marnav/math/matrix.hpp
122         marnav/math/quaternion.hpp
123         marnav/utils/mmsi.cpp
124         marnav/geo/angle.cpp
125         marnav/geo/position.cpp
126         marnav/geo/region.cpp
127         marnav/geo/cpa.cpp
128         marnav/geo/geodesic.cpp
129         marnav/nmea/waypoint.cpp
130         marnav/nmea/convert.cpp
131         marnav/nmea/manufacturer.cpp
132         marnav/nmea/checks.cpp
133         marnav/nmea/split.cpp
134         marnav/nmea/angle.cpp
135         marnav/nmea/string.cpp
136         marnav/nmea/io.cpp
137         marnav/nmea/date.cpp
138         marnav/nmea/time.cpp
139         marnav/nmea/checksum.cpp
140         marnav/nmea/sentence.cpp
141         marnav/nmea/detail.cpp
142         marnav/nmea/nmea.cpp
143         marnav/nmea/aam.cpp
144         marnav/nmea/alm.cpp
145         marnav/nmea/apa.cpp
146         marnav/nmea/apb.cpp
147         marnav/nmea/bod.cpp
148         marnav/nmea/bwc.cpp
149         marnav/nmea/bww.cpp
150         marnav/nmea/bwr.cpp
151         marnav/nmea/dbk.cpp
152         marnav/nmea/dbt.cpp
153         marnav/nmea/dpt.cpp
154         marnav/nmea/dsc.cpp
155         marnav/nmea/dse.cpp
156         marnav/nmea/dtm.cpp
157         marnav/nmea/fsi.cpp
158         marnav/nmea/gbs.cpp
159         marnav/nmea/gga.cpp
160         marnav/nmea/glc.cpp
161         marnav/nmea/gll.cpp
162         marnav/nmea/gns.cpp
163         marnav/nmea/grs.cpp
164         marnav/nmea/gsa.cpp
165         marnav/nmea/gst.cpp
166         marnav/nmea/gsv.cpp
167         marnav/nmea/gtd.cpp
168         marnav/nmea/hdg.cpp
169         marnav/nmea/hfb.cpp
170         marnav/nmea/hdm.cpp
171         marnav/nmea/hsc.cpp
172         marnav/nmea/its.cpp
173         marnav/nmea/lcd.cpp
174         marnav/nmea/msk.cpp
175         marnav/nmea/mss.cpp
176         marnav/nmea/mtw.cpp
177         marnav/nmea/mwd.cpp
178         marnav/nmea/mwv.cpp
179         marnav/nmea/osd.cpp
180         marnav/nmea/r00.cpp
181         marnav/nmea/rma.cpp
182         marnav/nmea/rmb.cpp
183         marnav/nmea/rmc.cpp
184         marnav/nmea/rot.cpp
185         marnav/nmea/rpm.cpp
186         marnav/nmea/rsa.cpp
187         marnav/nmea/rsd.cpp
188         marnav/nmea/rte.cpp
189         marnav/nmea/sfi.cpp
190         marnav/nmea/tds.cpp
191         marnav/nmea/tfi.cpp
192         marnav/nmea/tll.cpp
193         marnav/nmea/tpc.cpp
194         marnav/nmea/tpr.cpp
195         marnav/nmea/tpt.cpp
196         marnav/nmea/ttm.cpp
197         marnav/nmea/vbw.cpp
198         marnav/nmea/vdm.cpp
199         marnav/nmea/vdo.cpp
200         marnav/nmea/vdr.cpp
201         marnav/nmea/vhw.cpp
202         marnav/nmea/vlw.cpp
203         marnav/nmea/vpw.cpp
204         marnav/nmea/vtg.cpp
205         marnav/nmea/vwr.cpp
206         marnav/nmea/wcv.cpp
207         marnav/nmea/wnc.cpp
208         marnav/nmea/wpl.cpp
209         marnav/nmea/xdr.cpp
210         marnav/nmea/xte.cpp
211         marnav/nmea/xtr.cpp
212         marnav/nmea/zda.cpp
213         marnav/nmea/zdl.cpp
214         marnav/nmea/zfo.cpp
215         marnav/nmea/ztg.cpp
216         marnav/nmea/pgrme.cpp
217         ${SOURCES}
218         )
220 target_include_directories(marnav
221         PRIVATE
222                 ${CMAKE_CURRENT_SOURCE_DIR}
223                 ${CMAKE_CURRENT_BINARY_DIR}
224         )
226 target_compile_options(marnav
227         PRIVATE
228                 -pipe
229                 -ggdb
230                 -Wall
231                 -Wextra
232                 -pedantic-errors
233                 -Wold-style-cast
234         )
235 if(ENABLE_PROFILING)
236         target_compile_options(marnav
237                 PUBLIC
238                         -pg
239                 )
240 endif()
241 if(ENABLE_BENCHMARK)
242         target_compile_options(marnav
243                 PUBLIC
244                         -fno-omit-frame-pointer
245                 )
246 endif()
247 if(ENABLE_WARNING_HELL)
248         message(STATUS "Behold: entering the hell of extended warnings")
249         target_compile_options(marnav
250                 PRIVATE
251                         # some are not enabled on purpose
252                         -Wcast-align
253                         -Wcast-qual
254                         -Werror
255                         -Wdisabled-optimization
256                         -Wfloat-equal
257                         -Wformat=2
258                         -Wformat-security
259                         -Wformat-y2k
260                         -Wimport
261                         -Winit-self
262                         -Winline
263                         -Wmissing-field-initializers
264                         -Wmissing-format-attribute
265                         -Wmissing-include-dirs
266                         -Wmissing-noreturn
267                         -Woverloaded-virtual
268                         -Wpacked
269                         -Wpointer-arith
270                         -Wredundant-decls
271                         -Wstrict-aliasing=2
272                         -Wswitch
273                         -Wunreachable-code
274                         -Wunused
275                         -Wunused-parameter
276                         -Wvariadic-macros
277                         -Wwrite-strings
278                         # explicitly disabled on purpose:
279                         #-Wconversion
280                         #-Wsign-conversion
281                         #-Wstack-protector
282                         -Wno-effc++
283                         -Wno-padded
284                         -Wno-long-long
285                         -Wno-unused-function
286                         -Wno-comment
287                         -Wno-format-nonliteral
288                         -Wno-shadow
289                         -Wno-switch-enum
290                         -Wno-switch-default
291                 )
292 endif()
294 if(build_type_lower MATCHES coverage)
295         message(STATUS "Coverage: enabled")
296         target_compile_options(marnav
297                 PUBLIC
298                         --coverage
299                         -fprofile-arcs
300                         -ftest-coverage
301                         -fno-inline
302                         -fno-inline-small-functions
303                         -fno-default-inline
304                 )
305 endif()
307 set_target_properties(marnav
308         PROPERTIES VERSION "${PROJECT_VERSION}"
309         SOVERSION "${PROJECT_VERSION}"
310         )
312 install(
313         TARGETS marnav
314         LIBRARY DESTINATION lib
315         ARCHIVE DESTINATION lib
316         RUNTIME DESTINATION bin
317         )
319 install(
320         FILES
321                 ${CMAKE_CURRENT_BINARY_DIR}/marnav/version.hpp
322         DESTINATION include/marnav
323         )
325 install(
326         FILES
327                 marnav/nmea/constants.hpp
328                 marnav/nmea/talker_id.hpp
329                 marnav/nmea/sentence_id.hpp
330                 marnav/nmea/convert.hpp
331                 marnav/nmea/waypoint.hpp
332                 marnav/nmea/manufacturer.hpp
333                 marnav/nmea/angle.hpp
334                 marnav/nmea/string.hpp
335                 marnav/nmea/io.hpp
336                 marnav/nmea/date.hpp
337                 marnav/nmea/time.hpp
338                 marnav/nmea/checksum.hpp
339                 marnav/nmea/sentence.hpp
340                 marnav/nmea/detail.hpp
341                 marnav/nmea/nmea.hpp
342                 marnav/nmea/aam.hpp
343                 marnav/nmea/alm.hpp
344                 marnav/nmea/apa.hpp
345                 marnav/nmea/apb.hpp
346                 marnav/nmea/bod.hpp
347                 marnav/nmea/bwc.hpp
348                 marnav/nmea/bww.hpp
349                 marnav/nmea/bwr.hpp
350                 marnav/nmea/dbk.hpp
351                 marnav/nmea/dbt.hpp
352                 marnav/nmea/dpt.hpp
353                 marnav/nmea/dsc.hpp
354                 marnav/nmea/dse.hpp
355                 marnav/nmea/dtm.hpp
356                 marnav/nmea/fsi.hpp
357                 marnav/nmea/gbs.hpp
358                 marnav/nmea/gga.hpp
359                 marnav/nmea/glc.hpp
360                 marnav/nmea/gll.hpp
361                 marnav/nmea/gns.hpp
362                 marnav/nmea/grs.hpp
363                 marnav/nmea/gsa.hpp
364                 marnav/nmea/gst.hpp
365                 marnav/nmea/gsv.hpp
366                 marnav/nmea/gtd.hpp
367                 marnav/nmea/hdg.hpp
368                 marnav/nmea/hfb.hpp
369                 marnav/nmea/hdm.hpp
370                 marnav/nmea/hsc.hpp
371                 marnav/nmea/its.hpp
372                 marnav/nmea/lcd.hpp
373                 marnav/nmea/msk.hpp
374                 marnav/nmea/mss.hpp
375                 marnav/nmea/mtw.hpp
376                 marnav/nmea/mwd.hpp
377                 marnav/nmea/mwv.hpp
378                 marnav/nmea/osd.hpp
379                 marnav/nmea/r00.hpp
380                 marnav/nmea/rma.hpp
381                 marnav/nmea/rmb.hpp
382                 marnav/nmea/rmc.hpp
383                 marnav/nmea/rot.hpp
384                 marnav/nmea/rpm.hpp
385                 marnav/nmea/rsa.hpp
386                 marnav/nmea/rsd.hpp
387                 marnav/nmea/rte.hpp
388                 marnav/nmea/sfi.hpp
389                 marnav/nmea/tds.hpp
390                 marnav/nmea/tfi.hpp
391                 marnav/nmea/tll.hpp
392                 marnav/nmea/tpc.hpp
393                 marnav/nmea/tpr.hpp
394                 marnav/nmea/tpt.hpp
395                 marnav/nmea/ttm.hpp
396                 marnav/nmea/vbw.hpp
397                 marnav/nmea/vdm.hpp
398                 marnav/nmea/vdo.hpp
399                 marnav/nmea/vdr.hpp
400                 marnav/nmea/vhw.hpp
401                 marnav/nmea/vlw.hpp
402                 marnav/nmea/vpw.hpp
403                 marnav/nmea/vtg.hpp
404                 marnav/nmea/vwr.hpp
405                 marnav/nmea/wcv.hpp
406                 marnav/nmea/wnc.hpp
407                 marnav/nmea/wpl.hpp
408                 marnav/nmea/xdr.hpp
409                 marnav/nmea/xte.hpp
410                 marnav/nmea/xtr.hpp
411                 marnav/nmea/zda.hpp
412                 marnav/nmea/zdl.hpp
413                 marnav/nmea/zfo.hpp
414                 marnav/nmea/ztg.hpp
415                 marnav/nmea/pgrme.hpp
416         DESTINATION include/marnav/nmea
417         )
419 if(ENABLE_AIS)
420         install(
421                 FILES
422                         marnav/ais/ais.hpp
423                         marnav/ais/angle.hpp
424                         marnav/ais/message.hpp
425                         marnav/ais/message_01.hpp
426                         marnav/ais/message_02.hpp
427                         marnav/ais/message_03.hpp
428                         marnav/ais/message_04.hpp
429                         marnav/ais/message_05.hpp
430                         marnav/ais/message_09.hpp
431                         marnav/ais/message_10.hpp
432                         marnav/ais/message_11.hpp
433                         marnav/ais/message_18.hpp
434                         marnav/ais/message_19.hpp
435                         marnav/ais/message_21.hpp
436                         marnav/ais/message_22.hpp
437                         marnav/ais/message_23.hpp
438                         marnav/ais/message_24.hpp
439                 DESTINATION include/marnav/ais
440                 )
441 endif()
443 if(ENABLE_SEATALK)
444         install(
445                 FILES
446                         marnav/seatalk/key.hpp
447                         marnav/seatalk/equipment.hpp
448                         marnav/seatalk/seatalk.hpp
449                         marnav/seatalk/message.hpp
450                         marnav/seatalk/message_00.hpp
451                         marnav/seatalk/message_01.hpp
452                         marnav/seatalk/message_05.hpp
453                         marnav/seatalk/message_10.hpp
454                         marnav/seatalk/message_11.hpp
455                         marnav/seatalk/message_20.hpp
456                         marnav/seatalk/message_21.hpp
457                         marnav/seatalk/message_22.hpp
458                         marnav/seatalk/message_23.hpp
459                         marnav/seatalk/message_24.hpp
460                         marnav/seatalk/message_25.hpp
461                         marnav/seatalk/message_26.hpp
462                         marnav/seatalk/message_27.hpp
463                         marnav/seatalk/message_30.hpp
464                         marnav/seatalk/message_36.hpp
465                         marnav/seatalk/message_38.hpp
466                         marnav/seatalk/message_50.hpp
467                         marnav/seatalk/message_51.hpp
468                         marnav/seatalk/message_52.hpp
469                         marnav/seatalk/message_53.hpp
470                         marnav/seatalk/message_54.hpp
471                         marnav/seatalk/message_56.hpp
472                         marnav/seatalk/message_58.hpp
473                         marnav/seatalk/message_59.hpp
474                         marnav/seatalk/message_65.hpp
475                         marnav/seatalk/message_66.hpp
476                         marnav/seatalk/message_6c.hpp
477                         marnav/seatalk/message_86.hpp
478                         marnav/seatalk/message_87.hpp
479                         marnav/seatalk/message_89.hpp
480                 DESTINATION include/marnav/seatalk
481                 )
482 endif()
484 install(
485         FILES
486                 marnav/utils/unused.hpp
487                 marnav/utils/unique.hpp
488                 marnav/utils/bitset.hpp
489                 marnav/utils/optional.hpp
490                 marnav/utils/mmsi.hpp
491         DESTINATION include/marnav/utils
492         )
494 install(
495         FILES
496                 marnav/math/floatingpoint.hpp
497                 marnav/math/vector.hpp
498                 marnav/math/matrix.hpp
499                 marnav/math/quaternion.hpp
500         DESTINATION include/marnav/math
501         )
503 install(
504         FILES
505                 marnav/geo/angle.hpp
506                 marnav/geo/position.hpp
507                 marnav/geo/region.hpp
508                 marnav/geo/cpa.hpp
509                 marnav/geo/geodesic.hpp
510         DESTINATION include/marnav/geo
511         )
513 if(ENABLE_IO)
514         install(
515                 FILES
516                         marnav/io/device.hpp
517                         marnav/io/serial.hpp
518                         marnav/io/nmea_reader.hpp
519                         marnav/io/default_nmea_reader.hpp
520                         marnav/io/default_nmea_serial.hpp
521                 DESTINATION include/marnav/io
522                 )
523         if(ENABLE_SEATALK)
524                 install(
525                         FILES
526                                 marnav/io/seatalk_reader.hpp
527                                 marnav/io/default_seatalk_reader.hpp
528                                 marnav/io/default_seatalk_serial.hpp
529                         DESTINATION include/marnav/io
530                         )
531         endif()
532 endif()
534 # stuff for the config and config-version files
535 set(INCLUDE_INSTALL_DIR include)
536 set(LIB_INSTALL_DIR lib)
537 include(CMakePackageConfigHelpers)
538 configure_package_config_file(
539         config.cmake.in
540         "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
541         INSTALL_DESTINATION "${LIB_INSTALL_DIR}/${PROJECT_NAME}/cmake"
542         PATH_VARS INCLUDE_INSTALL_DIR
543         )
544 write_basic_package_version_file(
545         "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
546         VERSION "${PROJECT_VERSION}"
547         COMPATIBILITY SameMajorVersion)
548 install(
549         FILES
550                 "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
551                 "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
552         DESTINATION
553                 "${LIB_INSTALL_DIR}/${PROJECT_NAME}/cmake"
554         )