building.rst 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. .. _building:
  2. Building open62541
  3. ==================
  4. Building the Examples
  5. ---------------------
  6. Using the GCC compiler, the following calls build the examples on Linux.
  7. .. code-block:: bash
  8. cp /path-to/open62541.* . # copy single-file distribution to the local directory
  9. cp /path-to/examples/tutorial_server_variable.c . # copy the example server
  10. gcc -std=c99 -DUA_ARCHITECTURE_POSIX open62541.c tutorial_server_variable.c -o server
  11. Building the Library
  12. --------------------
  13. Building with CMake on Ubuntu or Debian
  14. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  15. .. code-block:: bash
  16. sudo apt-get install git build-essential gcc pkg-config cmake python
  17. # enable additional features
  18. sudo apt-get install cmake-curses-gui # for the ccmake graphical interface
  19. sudo apt-get install libmbedtls-dev # for encryption support
  20. sudo apt-get install check # for unit tests
  21. sudo apt-get install python-sphinx graphviz # for documentation generation
  22. sudo apt-get install python-sphinx-rtd-theme # documentation style
  23. cd open62541
  24. mkdir build
  25. cd build
  26. cmake ..
  27. make
  28. # select additional features
  29. ccmake ..
  30. make
  31. # build documentation
  32. make doc # html documentation
  33. make doc_pdf # pdf documentation (requires LaTeX)
  34. Building with CMake on Windows
  35. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  36. Here we explain the build process for Visual Studio (2013 or newer). To build
  37. with MinGW, just replace the compiler selection in the call to CMake.
  38. - Download and install
  39. - Python 2.7.x (Python 3.x works as well): https://python.org/downloads
  40. - CMake: http://www.cmake.org/cmake/resources/software.html
  41. - Microsoft Visual Studio: https://www.visualstudio.com/products/visual-studio-community-vs
  42. - Download the open62541 sources (using git or as a zipfile from github)
  43. - Open a command shell (cmd) and run
  44. .. code-block:: bat
  45. cd <path-to>\open62541
  46. mkdir build
  47. cd build
  48. <path-to>\cmake.exe .. -G "Visual Studio 14 2015"
  49. :: You can use use cmake-gui for a graphical user-interface to select features
  50. - Then open :file:`build\open62541.sln` in Visual Studio 2015 and build as usual
  51. Building on OS X
  52. ^^^^^^^^^^^^^^^^
  53. - Download and install
  54. - Xcode: https://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12
  55. - Homebrew: http://brew.sh/
  56. - Pip (a package manager for python, may be preinstalled): ``sudo easy_install pip``
  57. - Run the following in a shell
  58. .. code-block:: bash
  59. brew install cmake
  60. pip install sphinx # for documentation generation
  61. pip install sphinx_rtd_theme # documentation style
  62. brew install graphviz # for graphics in the documentation
  63. brew install check # for unit tests
  64. Follow Ubuntu instructions without the ``apt-get`` commands as these are taken care of by the above packages.
  65. Building on OpenBSD
  66. ^^^^^^^^^^^^^^^^^^^
  67. The procedure below works on OpenBSD 5.8 with gcc version 4.8.4, cmake version 3.2.3 and Python version 2.7.10.
  68. - Install a recent gcc, python and cmake:
  69. .. code-block:: bash
  70. pkg_add gcc python cmake
  71. - Tell the system to actually use the recent gcc (it gets installed as egcc on OpenBSD):
  72. .. code-block:: bash
  73. export CC=egcc CXX=eg++
  74. - Now procede as described for Ubuntu/Debian:
  75. .. code-block:: bash
  76. cd open62541
  77. mkdir build
  78. cd build
  79. cmake ..
  80. make
  81. .. _build_options:
  82. Build Options
  83. -------------
  84. The open62541 project uses CMake to manage the build options, for code
  85. generation and to generate build projects for the different systems and IDEs.
  86. The tools *ccmake* or *cmake-gui* can be used to graphically set the build
  87. options.
  88. Most options can be changed manually in :file:`ua_config.h` (:file:`open62541.h`
  89. for the single-file release) after the code generation. But usually there is no
  90. need to adjust them.
  91. Main Build Options
  92. ^^^^^^^^^^^^^^^^^^
  93. **CMAKE_BUILD_TYPE**
  94. - ``RelWithDebInfo`` -O2 optimization with debug symbols
  95. - ``Release`` -O2 optimization without debug symbols
  96. - ``Debug`` -O0 optimization with debug symbols
  97. - ``MinSizeRel`` -Os optimization without debug symbols
  98. **UA_LOGLEVEL**
  99. The SDK logs events of the level defined in ``UA_LOGLEVEL`` and above only.
  100. The logging event levels are as follows:
  101. - 600: Fatal
  102. - 500: Error
  103. - 400: Warning
  104. - 300: Info
  105. - 200: Debug
  106. - 100: Trace
  107. Select build artefacts
  108. ^^^^^^^^^^^^^^^^^^^^^^
  109. By default only the main library shared object libopen62541.so (open62541.dll)
  110. or static linking archive open62541.a (open62541.lib) is built. Additional
  111. artifacts can be specified by the following options:
  112. **UA_BUILD_EXAMPLES**
  113. Compile example servers and clients from :file:`examples/*.c`.
  114. **UA_BUILD_UNIT_TESTS**
  115. Compile unit tests. The tests can be executed with ``make test``
  116. **UA_BUILD_SELFSIGNED_CERTIFICATE**
  117. Generate a self-signed certificate for the server (openSSL required)
  118. Detailed SDK Features
  119. ^^^^^^^^^^^^^^^^^^^^^
  120. **UA_ENABLE_SUBSCRIPTIONS**
  121. Enable subscriptions
  122. **UA_ENABLE_SUBSCRIPTIONS_EVENTS (EXPERIMENTAL)**
  123. Enable the use of events for subscriptions. This is a new feature and currently marked as EXPERIMENTAL.
  124. **UA_ENABLE_METHODCALLS**
  125. Enable the Method service set
  126. **UA_ENABLE_NODEMANAGEMENT**
  127. Enable dynamic addition and removal of nodes at runtime
  128. **UA_ENABLE_AMALGAMATION**
  129. Compile a single-file release into the files :file:`open62541.c` and :file:`open62541.h`. Not receommended for installation.
  130. **UA_ENABLE_MULTITHREADING (EXPERIMENTAL)**
  131. Enable multi-threading support. Work is distributed to a number of worker threads.
  132. This is a new feature and currently marked as EXPERIMENTAL.
  133. **UA_ENABLE_IMMUTABLE_NODES**
  134. Nodes in the information model are not edited but copied and replaced. The
  135. replacement is done with atomic operations so that the information model is
  136. always consistent and can be accessed from an interrupt or parallel thread
  137. (depends on the node storage plugin implementation). This feature is a
  138. prerequisite for ``UA_ENABLE_MULTITHREADING``.
  139. **UA_ENABLE_COVERAGE**
  140. Measure the coverage of unit tests
  141. **UA_ENABLE_DISCOVERY**
  142. Enable Discovery Service (LDS)
  143. **UA_ENABLE_DISCOVERY_MULTICAST**
  144. Enable Discovery Service with multicast support (LDS-ME)
  145. **UA_ENABLE_DISCOVERY_SEMAPHORE**
  146. Enable Discovery Semaphore support
  147. **UA_NAMESPACE_ZERO**
  148. Namespace zero contains the standard-defined nodes. The full namespace zero
  149. may not be required for all applications. The selectable options are as follows:
  150. - ``MINIMAL``: A barebones namespace zero that is compatible with most
  151. clients. But this namespace 0 is so small that it does not pass the CTT
  152. (Conformance Testing Tools of the OPC Foundation).
  153. - ``REDUCED``: Small namespace zero that passes the CTT.
  154. - ``FULL``: Full namespace zero generated from the official XML definitions.
  155. The advanced build option ``UA_FILE_NS0`` can be used to override the XML
  156. file used for namespace zero generation.
  157. Some options are marked as advanced. The advanced options need to be toggled to
  158. be visible in the cmake GUIs.
  159. **UA_ENABLE_TYPENAMES**
  160. Add the type and member names to the UA_DataType structure. Enabled by default.
  161. **UA_ENABLE_STATUSCODE_DESCRIPTIONS**
  162. Compile the human-readable name of the StatusCodes into the binary. Enabled by default.
  163. **UA_ENABLE_FULL_NS0**
  164. Use the full NS0 instead of a minimal Namespace 0 nodeset
  165. ``UA_FILE_NS0`` is used to specify the file for NS0 generation from namespace0 folder. Default value is ``Opc.Ua.NodeSet2.xml``
  166. Debug Build Options
  167. ^^^^^^^^^^^^^^^^^^^
  168. This group contains build options mainly useful for development of the library itself.
  169. **UA_DEBUG**
  170. Enable assertions and additional definitions not intended for production builds
  171. **UA_DEBUG_DUMP_PKGS**
  172. Dump every package received by the server as hexdump format
  173. Building a shared library
  174. ^^^^^^^^^^^^^^^^^^^^^^^^^
  175. open62541 is small enough that most users will want to statically link the
  176. library into their programs. If a shared library (.dll, .so) is required, this
  177. can be enabled in CMake with the ``BUILD_SHARED_LIBS`` option. Note that this
  178. option modifies the :file:`ua_config.h` file that is also included in
  179. :file:`open62541.h` for the single-file distribution.
  180. Minimizing the binary size
  181. ^^^^^^^^^^^^^^^^^^^^^^^^^^
  182. The size of the generated binary can be reduced considerably by adjusting the
  183. build configuration. With open2541, it is possible to configure minimal servers
  184. that require less than 100kB of RAM and ROM.
  185. The following options influence the ROM requirements:
  186. First, in CMake, the build type can be set to ``CMAKE_BUILD_TYPE=MinSizeRel``.
  187. This sets the compiler flags to minimize the binary size. The build type also
  188. strips out debug information. Second, the binary size can be reduced by removing
  189. features via the build-flags described above.
  190. Second, setting ``UA_NAMESPACE_ZERO`` to ``MINIMAL`` reduces the size of the
  191. builtin information model. Setting this option can reduce the binary size by
  192. half in some cases.
  193. Third, some features might not be needed and can be disabled to reduce the
  194. binary footprint. Examples for this are Subscriptions or encrypted
  195. communication.
  196. Last, logging messages take up a lot of space in the binary and might not be
  197. needed in embedded scenarios. Setting ``UA_LOGLEVEL`` to a value above 600
  198. (``FATAL``) disables all logging. In addition, the feature-flags
  199. ``UA_ENABLE_TYPENAMES`` and ``UA_ENABLE_STATUSCODE_DESCRIPTIONS`` add static
  200. information to the binary that is only used for human-readable logging and
  201. debugging.
  202. The RAM requirements of a server are mostly due to the following settings:
  203. - The size of the information model
  204. - The number of connected clients
  205. - The configured maximum message size that is preallocated