building.rst 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  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 python-six
  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 works as well): https://python.org/downloads
  39. - Install python-six with the pip package manager (``pip install six``)
  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 six # python 2/3 compatibility workarounds
  61. pip install sphinx # for documentation generation
  62. pip install sphinx_rtd_theme # documentation style
  63. brew install graphviz # for graphics in the documentation
  64. brew install check # for unit tests
  65. brew install userspace-rcu # for multi-threading support
  66. Follow Ubuntu instructions without the ``apt-get`` commands as these are taken care of by the above packages.
  67. Building on OpenBSD
  68. ^^^^^^^^^^^^^^^^^^^
  69. 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.
  70. - Install a recent gcc, python and cmake:
  71. .. code-block:: bash
  72. pkg_add gcc python cmake
  73. - Tell the system to actually use the recent gcc (it gets installed as egcc on OpenBSD):
  74. .. code-block:: bash
  75. export CC=egcc CXX=eg++
  76. - Now procede as described for Ubuntu/Debian:
  77. .. code-block:: bash
  78. cd open62541
  79. mkdir build
  80. cd build
  81. cmake ..
  82. make
  83. Build Options
  84. -------------
  85. The open62541 project uses CMake to manage the build options, for code
  86. generation and to generate build projects for the different systems and IDEs.
  87. The tools *ccmake* or *cmake-gui* can be used to graphically set the build
  88. options.
  89. Most options can be changed manually in :file:`ua_config.h` (:file:`open62541.h`
  90. for the single-file release) after the code generation. But usually there is no
  91. need to adjust them.
  92. Build Type and Logging
  93. ^^^^^^^^^^^^^^^^^^^^^^
  94. **CMAKE_BUILD_TYPE**
  95. - ``RelWithDebInfo`` -O2 optimization with debug symbols
  96. - ``Release`` -O2 optimization without debug symbols
  97. - ``Debug`` -O0 optimization with debug symbols
  98. - ``MinSizeRel`` -Os optimization without debug symbols
  99. **UA_LOGLEVEL**
  100. The SDK logs events of the level defined in ``UA_LOGLEVEL`` and above only.
  101. The logging event levels are as follows:
  102. - 600: Fatal
  103. - 500: Error
  104. - 400: Warning
  105. - 300: Info
  106. - 200: Debug
  107. - 100: Trace
  108. UA_BUILD_* group
  109. ^^^^^^^^^^^^^^^^
  110. By default only the shared object libopen62541.so or the library open62541.dll
  111. and open62541.dll.a resp. open62541.lib are build. Additional artifacts can be
  112. specified by the following options:
  113. **UA_BUILD_EXAMPLES**
  114. Compile example servers and clients from :file:`examples/{xyz}.c`. A static and a dynamic binary is linked, respectively.
  115. **UA_BUILD_UNIT_TESTS**
  116. Compile unit tests with Check framework. The tests can be executed with ``make test``
  117. **UA_BUILD_EXAMPLES_NODESET_COMPILER**
  118. Generate an OPC UA information model from a nodeset XML (experimental)
  119. **UA_BUILD_SELFIGNED_CERTIFICATE**
  120. Generate a self-signed certificate for the server (openSSL required)
  121. UA_ENABLE_* group
  122. ^^^^^^^^^^^^^^^^^
  123. This group contains build options related to the supported OPC UA features.
  124. **UA_ENABLE_SUBSCRIPTIONS**
  125. Enable subscriptions
  126. **UA_ENABLE_METHODCALLS**
  127. Enable the Method service set
  128. **UA_ENABLE_NODEMANAGEMENT**
  129. Enable dynamic addition and removal of nodes at runtime
  130. **UA_ENABLE_AMALGAMATION**
  131. Compile a single-file release into the files :file:`open62541.c` and :file:`open62541.h`
  132. **UA_ENABLE_MULTITHREADING**
  133. Enable multi-threading support
  134. **UA_ENABLE_COVERAGE**
  135. Measure the coverage of unit tests
  136. Some options are marked as advanced. The advanced options need to be toggled to
  137. be visible in the cmake GUIs.
  138. **UA_ENABLE_TYPENAMES**
  139. Add the type and member names to the UA_DataType structure. Enabled by default.
  140. **UA_ENABLE_STATUSCODE_DESCRIPTIONS**
  141. Compile the human-readable name of the StatusCodes into the binary. Enabled by default.
  142. **UA_ENABLE_GENERATE_NAMESPACE0**
  143. Generate and load UA XML Namespace 0 definition
  144. ``UA_GENERATE_NAMESPACE0_FILE`` is used to specify the file for NS0 generation from namespace0 folder. Default value is ``Opc.Ua.NodeSet2.xml``
  145. **UA_ENABLE_NONSTANDARD_UDP**
  146. Enable udp extension
  147. UA_DEBUG_* group
  148. ^^^^^^^^^^^^^^^^
  149. This group contains build options mainly useful for development of the library itself.
  150. **UA_DEBUG**
  151. Enable assertions and additional definitions not intended for production builds
  152. **UA_DEBUG_DUMP_PKGS**
  153. Dump every package received by the server as hexdump format
  154. Building a shared library
  155. ^^^^^^^^^^^^^^^^^^^^^^^^^
  156. open62541 is small enough that most users will want to statically link the
  157. library into their programs. If a shared library (.dll, .so) is required, this
  158. can be enabled in CMake with the ``BUILD_SHARED_LIBS`` option. Note that this
  159. option modifies the :file:`ua_config.h` file that is also included in
  160. :file:`open62541.h` for the single-file distribution.
  161. Minimizing the binary size
  162. ^^^^^^^^^^^^^^^^^^^^^^^^^^
  163. The size of the generated binary can be reduced considerably by adjusting the
  164. build configuration. First, in CMake, the build type can be set to
  165. ``CMAKE_BUILD_TYPE=MinSizeRel``. This sets the compiler flags to minimize the
  166. binary size. The build type also strips out debug information. Second, the
  167. binary size can be reduced by removing features via the build-flags described
  168. above.
  169. Especially, logging takes up a lot of space in the binary and might not be
  170. needed in embedded scenarios. Setting ``UA_LOGLEVEL`` to a value above 600
  171. (=FATAL) disables all logging. In addition, the feature-flags
  172. ``UA_ENABLE_TYPENAMES`` and ``UA_ENABLE_STATUSCODE_DESCRIPTIONS`` add static
  173. information to the binary that is only used for human-readable logging and
  174. debugging.