Doc: minor update, tested compilers.
[marnav.git] / doc / devenv.dox
blob6b68b1281948c129dfd732a2c426a6f31e0575d0
1 /**
3 \page development_environment Development Environment
5 \tableofcontents
7 This page describes the requirements in order to build the library.
9 \subsection subsec_devenv_requirements Requirements
10 Compiler supported (older/others may work, but not tested):
11 - GCC 4.9
12 - GCC 5
13 - GCC 6
14 - GCC 7
15 - Clang 3.6
16 - Clang 3.7
17 - Clang 3.8
18 - Clang 3.9
19 - Clang 4.0
21 Tools needed to build the library:
22 - cmake 3.2 or newer
24 Tools needed to develop the library:
25 - git
26 - clang-format 3.9
28 Tools needed to build the documentation:
29 - doxygen
30 - graphviz
31 - LaTeX (there are formulas!)
33 optional (used for development only):
34 - lcov / genhtml, c++filt
35 - cppcheck
36 - clang-analyze 3.9
37 - ctags, cscope
38 - perf
40 optional (no core dependency):
41 - Boost.ASIO (used only for some examples)
42 - Qt 5 (used only for some examples)
44 There are no other dependencies despite the standard library (C++11) to build this library.
46 Other compilers may work, however untested.
48 \subsection subsec_devenv_build Build
49 For normal, debug and release builds use the standard cmake CMAKE_BUILD_TYPE variable.
50 For example a debug build:
52 Full information developpers build:
53 \code
54         mkdir build
55         cd build
56         cmake -DCMAKE_BUILD_TYPE=Coverage ..
57         make
58         make coverage doc cppcheck
59 \endcode
61 Debug build:
62 \code
63         mkdir build
64         cd build
65         cmake -DCMAKE_BUILD_TYPE=Debug ..
66         make
67 \endcode
69 If you like to perform code coverage using the unit tests, do:
70 \code
71         mkdir build
72         cd build
73         cmake -DCMAKE_BUILD_TYPE=Coverage ..
74         make
75         make coverage
76 \endcode
78 As packaging system, cpack is used. Do after build:
79 \code
80         make package
81 \endcode
83 or for individual package types:
85 \code
86         cpack -G TGZ
87         cpack -G DEB
88 \endcode
90 Build documentation:
91 \code
92         mkdir build
93         cd build
94         cmake ..
95         make doc
96 \endcode
98 After proper building and execution:
99 - [Code Coverage](../coverage/index.html)
100 - [cppcheck](../cppcheck.txt)
101 - [Doxygen Warnings](../doxygen-warnings.txt)
104 \subsection subsec_devenv_buildoptions Build Options
105 The following build types (-DCMAKE_BUILD_TYPE=x) are possible:
106 - Debug
107 - Release
108 - Coverage
110 Build options:
111 - `ENABLE_STATIC` : enables static build, if `OFF`, a shared library is being built.
112   Default: `ON`
113 - `ENABLE_WARNING_HELL` : enables _much_ more warnings, used for development purposes.
114   Currently implemented only for GCC.  Default is `OFF`
115 - `ENABLE_PROFILING` : enables profiling for `gprof`
116 - `ENABLE_BENCHMARK` : enables benchmarking (disables some optimization)
117 - `ENABLE_SANITIZER` : enables address and undefined sanitizers
119 Features:
120 - `ENABLE_AIS ` : enables AIS support. Default: `ON`
121 - `ENABLE_SEATALK` : enables SeaTalk support. Default: `ON`
122 - `ENABLE_IO` : enables IO support. Default: `ON`
124 Components:
125 - `ENABLE_EXAMPLES`: enables examples. Default: `ON`
126 - `ENABLE_TESTS`: enables unit tests, integration tests and benchmarks. Default: `ON`
127 - `ENABLE_TOOLS`: enables tools. Default: `ON`
130 \subsection subsec_devenv_clang_static_analysis Static Analysis with Clang
131 There is a script ```bin/static-analysis-clang``` for doing this, or do it manually:
132 \code
133         mkdir build
134         cd build
135         cmake -DCMAKE_CXX_COMPILER=/usr/share/clang/scan-build-3.9/libexec/c++-analyzer ..
136         scan-build-3.9 -o doc/analysis --use-analyzer=/usr/bin/clang++-3.9 make
137 \endcode
139 After the build, ```scan-build``` will tell you what to do in order to inspect
140 the findings.
143 \subsection subsec_devenv_benchmarks Perform Benchmarks
144 Build in ```Release``` mode, perform individual benchmarks:
145 \code
146         mkdir build
147         cd build
148         cmake -DCMAKE_BUILD_TYPE=Release ..
149         make -j 8
150         test/benchmark_nmea_split
151 \endcode
153 Using `perf` to do performance analysis:
154 \code
155         mkdir build
156         cd build
157         cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_BENCHMARK=ON ..
158         make -j 8
159         perf record -g test/benchmark_nmea_split
160         perf report -g 'graph,0.5,caller'
161 \endcode