summaryrefslogtreecommitdiffstats
path: root/doc/build.dox
blob: 77fd16553b4de169b1f93240c19a9c3f834c6008 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/**
 * @page build Building libyang
 * 
 * [TOC]
 *
 * libyang utilizes CMake build system to detect necessary dependencies, checkout the build environment and prepare Makefiles
 * for the compilation of the library and acompanied tools.
 *
 * @section buildRequirements Requirements
 *
 * @subsection buildRequirementsCompile Building Requirements
 *
 * - C compiler (gcc, clang, ...)
 * - CMake >= 2.8.12
 * - libpcre2 (including headers - devel package) >= 10.30
 *
 * @subsubsection buildRequirementsCompileOptional Optional Requirements
 *
 * - doxygen (for generating documentation)
 * - cmocka >= 1.0.0 (for tests)
 * - valgrind (for enhanced testing)
 * - gcov (for code coverage)
 * - lcov (for code coverage)
 * - genhtml (for code coverage)
 *
 * @subsection buildRequirementsRun Runtime Requirements
 *
 * - libpcre2 (runtime package) >= 10.30
 *
 * @section buildCommands Building
 *
 * To simply build libyang library and the accompanied tools with the default settings, follow these steps (the `#` character
 * indicates command(s) to run with `root` privileges):
 *
 *     $ mkdir build; cd build
 *     $ cmake ..
 *     $ make
 *     # make install
 *
 * The default settings can be changed with various CMake variables set via command line or using e.g. `ccmake(1)` tool.
 * The following sections introduces those variables and explain their meaning.
 *
 * @section buildTypes Build Types
 * 
 * There are several build types according to the primary goal of using the built binaries.
 *
 * @subsection buildTypesRelese Release
 *
 * Build type to produce final binaries for production use without any debug option. The compiler flags are set as follows:
 *
 *     -Wall -Wextra -Wno-missing-field-initializers -std=c99 -O3 -DNDEBUG
 *
 * Here is the list of the selected additional options available in the *Release* build type.
 * 
 * Option                | Description                                                                        | Default
 * ----------------------|------------------------------------------------------------------------------------|--------
 * ENABLE_BUILD_TESTS    | Build tests.                                                                       | OFF
 * ENABLE_VALGRIND_TESTS | Build tests with valgrind.                                                         | OFF
 * ENABLE_COVERAGE       | Build code coverage report from tests.                                             | OFF
 * ENABLE_FUZZ_TARGETS   | Build target programs suitable for fuzzing with AFL.                               | OFF
 * ENABLE_STATIC         | Build static (.a) library                                                          | OFF
 * INTERNAL_DOCS         | Include developers notes and internal API description into generated Documentation | OFF
 *
 * Here is the list of available important targets for the `make(1)` tool:
 *
 * Target | Description
 * -------|------------------------------------------------------------------------------------------------------------
 * all    | Default target, builds libyang library (.so), `yanglint(1)` and `yangre(1)`.
 * clean  | Removes files generated by the make process.
 * cclean | Extends the `clean` target by removing all the cmake generated files.
 * doc    | Generate HTML documentation. Requires `doxygen(1)`.
 * 
 * @subsection buildTypesDebug Debug
 *
 * `Debug` is the default build type, the produced binaries include additional debug information and the prepared tests are
 * also built. The compiler flags are set as follows:
 *
 *     -Wall -Wextra -Wno-missing-field-initializers -std=c99 -g3 -O0
 *
 * Here is the list of the selected additional options available in the *Debug* build type.
 * 
 * Option                | Description                                                                        | Default
 * ----------------------|------------------------------------------------------------------------------------|--------
 * ENABLE_BUILD_TESTS    | Build tests.                                                                       | ON
 * ENABLE_VALGRIND_TESTS | Build tests with valgrind.                                                         | ON
 * ENABLE_COVERAGE       | Build code coverage report from tests.                                             | OFF
 * ENABLE_FUZZ_TARGETS   | Build target programs suitable for fuzzing with AFL.                               | OFF
 * ENABLE_STATIC         | Build static (.a) library                                                          | OFF
 * INTERNAL_DOCS         | Include developers notes and internal API description into generated Documentation | OFF
 *
 * Here is the list of available important targets for the `make(1)` tool:
 *
 * Target       | Description
 * -------------|------------------------------------------------------------------------------------------------------
 * all          | Default target, builds libyang library (.so), `yanglint(1)` and `yangre(1)`.
 * clean        | Removes files generated by the make process.
 * cclean       | Extends the `clean` target by removing all the cmake generated files.
 * doc          | Generate HTML documentation. Requires `doxygen(1)`.
 * test         | Run implementation tests. Requires `cmocka` (and `valgrind(1)` for part of the tests).
 * format       | Reformat source codes using `uncrustify(1)`.
 * format-check | Dry-run of the `format` target.
 *
 * @subsection buildTypesABICheck ABICheck
 *
 * Special build type to perform check of the ABI/API compatibility and generate reports. In addition to the basic 
 * requirements, the build type requires some of the <a href="https://abi-laboratory.pro/">ABI Laboratory tools</a>:
 * `abi-dumper(1)` and `abi-compliance-checker(1)`.
 *
 * The compiler flags are set as follows:
 *
 *     -Wall -Wextra -Wno-missing-field-initializers -std=c99 -g -Og
 *
 * All the additional options are switched OFF and the settings should not be changed.
 *
 * Here is the list of available important targets for the `make(1)` tool:
 *
 * Target       | Description
 * -------------|------------------------------------------------------------------------------------------------------
 * all          | Default target, builds libyang library (.so), `yanglint(1)` and `yangre(1)`.
 * clean        | Removes files generated by the make process.
 * cclean       | Extends the `clean` target by removing all the cmake generated files.
 * doc          | Generate HTML documentation. Requires `doxygen(1)`.
 * abi-check    | Check the backward compatibility of the API/ABI changes. Requires `abi-compliance-checker(1)` and `abi-dump(1)`.
 * abi-dump     | Helper target for `abi-check` generating API/ABI reports. Requires `abi-dump(1)`.
 
 * @subsection buildTypesDocOnly DocOnly
 *
 * Special build type to avoid any requirements except those for building documentation. There are no compiler flags set
 * since the build type does not allow building any binary output. The settings of the additional options should not be
 * changed.
 *
 * Here is the list of available important targets for the `make(1)` tool:
 *
 * Target       | Description
 * -------------|------------------------------------------------------------------------------------------------------
 * all          | Default target, does nothing.
 * doc          | Generate HTML documentation. Requires `doxygen(1)`.
 *
 */