building.rst 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  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/server_variable.c . # copy the example server
  10. gcc -std=c99 open62541.c 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 liburcu-dev # for multithreading
  19. sudo apt-get install check # for unit tests
  20. sudo apt-get install python-sphinx graphviz # for documentation generation
  21. sudo apt-get install python-sphinx-rtd-theme # documentation style
  22. cd open62541
  23. mkdir build
  24. cd build
  25. cmake ..
  26. make
  27. # select additional features
  28. ccmake ..
  29. make
  30. # build documentation
  31. make doc # html documentation
  32. make doc_pdf # pdf documentation (requires LaTeX)
  33. Building with CMake on Windows
  34. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  35. Here we explain the build process for Visual Studio (2013 or newer). To build
  36. with MinGW, just replace the compiler selection in the call to CMake.
  37. - Download and install
  38. - Python 2.7.x (Python 3.x should work, too): https://python.org/downloads
  39. - CMake: http://www.cmake.org/cmake/resources/software.html
  40. - Microsoft Visual Studio 2015 Community Edition: https://www.visualstudio.com/products/visual-studio-community-vs
  41. - Download the open62541 sources (using git or as a zipfile from github)
  42. - Open a command shell (cmd) and run
  43. .. code-block:: bat
  44. cd <path-to>\open62541
  45. mkdir build
  46. cd build
  47. <path-to>\cmake.exe .. -G "Visual Studio 14 2015"
  48. :: You can use use cmake-gui for a graphical user-interface to select features
  49. - Then open :file:`build\open62541.sln` in Visual Studio 2015 and build as usual
  50. Building on OS X
  51. ^^^^^^^^^^^^^^^^
  52. - Download and install
  53. - Xcode: https://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12
  54. - Homebrew: http://brew.sh/
  55. - Pip (a package manager for python, may be preinstalled): ``sudo easy_install pip``
  56. - Run the following in a shell
  57. .. code-block:: bash
  58. brew install cmake
  59. pip install sphinx # for documentation generation
  60. pip install sphinx_rtd_theme # documentation style
  61. brew install graphviz # for graphics in the documentation
  62. brew install check # for unit tests
  63. brew install userspace-rcu # for multi-threading support
  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. -------------
  83. The open62541 project uses CMake to manage the build options, for code
  84. generation and to generate build projects for the different systems and IDEs.
  85. The tools *ccmake* or *cmake-gui* can be used to graphically set the build
  86. options.
  87. Most options can be changed manually in :file:`ua_config.h` (:file:`open62541.h`
  88. for the single-file release) after the code generation. But usually there is no
  89. need to adjust them.
  90. Build Type and Logging
  91. ^^^^^^^^^^^^^^^^^^^^^^
  92. **CMAKE_BUILD_TYPE**
  93. - ``RelWithDebInfo`` -O2 optimization with debug symbols
  94. - ``Release`` -O2 optimization without debug symbols
  95. - ``Debug`` -O0 optimization with debug symbols
  96. - ``MinSizeRel`` -Os optimization without debug symbols
  97. **UA_LOGLEVEL**
  98. The SDK logs events of the level defined in ``UA_LOGLEVEL`` and above only.
  99. The logging event levels are as follows:
  100. - 600: Fatal
  101. - 500: Error
  102. - 400: Warning
  103. - 300: Info
  104. - 200: Debug
  105. - 100: Trace
  106. UA_BUILD_* group
  107. ^^^^^^^^^^^^^^^^
  108. By default only the shared object libopen62541.so or the library open62541.dll
  109. and open62541.dll.a resp. open62541.lib are build. Additional artifacts can be
  110. specified by the following options:
  111. **UA_BUILD_EXAMPLES**
  112. Compile example servers and clients from :file:`examples/{xyz}.c`. A static and a dynamic binary is linked, respectively.
  113. **UA_BUILD_UNIT_TESTS**
  114. Compile unit tests with Check framework. The tests can be executed with ``make test``
  115. **UA_BUILD_EXAMPLES_NODESET_COMPILER**
  116. Generate an OPC UA information model from a nodeset XML (experimental)
  117. **UA_BUILD_SELFIGNED_CERTIFICATE**
  118. Generate a self-signed certificate for the server (openSSL required)
  119. UA_ENABLE_* group
  120. ^^^^^^^^^^^^^^^^^
  121. This group contains build options related to the supported OPC UA features.
  122. **UA_ENABLE_SUBSCRIPTIONS**
  123. Enable subscriptions
  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`
  130. **UA_ENABLE_MULTITHREADING**
  131. Enable multi-threading support
  132. **UA_ENABLE_COVERAGE**
  133. Measure the coverage of unit tests
  134. Some options are marked as advanced. The advanced options need to be toggled to
  135. be visible in the cmake GUIs.
  136. **UA_ENABLE_TYPENAMES**
  137. Add the type and member names to the UA_DataType structure. Enabled by default.
  138. **UA_ENABLE_STATUSCODE_DESCRIPTIONS**
  139. Compile the human-readable name of the StatusCodes into the binary. Enabled by default.
  140. **UA_ENABLE_GENERATE_NAMESPACE0**
  141. Generate and load UA XML Namespace 0 definition
  142. ``UA_GENERATE_NAMESPACE0_FILE`` is used to specify the file for NS0 generation from namespace0 folder. Default value is ``Opc.Ua.NodeSet2.xml``
  143. **UA_ENABLE_EMBEDDED_LIBC**
  144. Use a custom implementation of some libc functions that might be missing on embedded targets (e.g. string handling).
  145. **UA_ENABLE_NONSTANDARD_UDP**
  146. Enable udp extension
  147. Building a shared library
  148. ^^^^^^^^^^^^^^^^^^^^^^^^^
  149. open62541 is small enough that most users will want to statically link the
  150. library into their programs. If a shared library (.dll, .so) is required, this
  151. can be enabled in CMake with the ``BUILD_SHARED_LIBS`` option. Note that this
  152. option modifies the :file:`ua_config.h` file that is also included in
  153. :file:`open62541.h` for the single-file distribution.
  154. Minimizing the binary size
  155. ^^^^^^^^^^^^^^^^^^^^^^^^^^
  156. The size of the generated binary can be reduced considerably by adjusting the
  157. build configuration. First, in CMake, the build type can be set to
  158. ``CMAKE_BUILD_TYPE=MinSizeRel``. This sets the compiler flags to minimize the
  159. binary size. The build type also strips out debug information. Second, the
  160. binary size can be reduced by removing features via the build-flags described
  161. above.
  162. Especially, logging takes up a lot of space in the binary and might not be
  163. needed in embedded scenarios. Setting ``UA_LOGLEVEL`` to a value above 600
  164. (=FATAL) disables all logging. In addition, the feature-flags
  165. ``UA_ENABLE_TYPENAMES`` and ``UA_ENABLE_STATUSCODE_DESCRIPTIONS`` add static
  166. information to the binary that is only used for human-readable logging and
  167. debugging.