CMakeLists.txt 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. ####################
  2. # Nodeset Examples #
  3. ####################
  4. ###################
  5. # Custom XML #
  6. ###################
  7. # generate namespace from XML file
  8. add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/example_nodeset.c
  9. ${PROJECT_BINARY_DIR}/src_generated/example_nodeset.h
  10. PRE_BUILD
  11. COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset_compiler.py
  12. --types-array=UA_TYPES
  13. --existing ${UA_FILE_NS0}
  14. --xml ${PROJECT_SOURCE_DIR}/examples/nodeset/server_nodeset.xml
  15. ${PROJECT_BINARY_DIR}/src_generated/example_nodeset
  16. DEPENDS ${UA_FILE_NS0}
  17. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset_compiler.py
  18. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodes.py
  19. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset.py
  20. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/datatypes.py
  21. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/backend_open62541.py
  22. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/backend_open62541_nodes.py
  23. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/backend_open62541_datatypes.py
  24. ${PROJECT_SOURCE_DIR}/examples/nodeset/server_nodeset.xml)
  25. # The .csv file can be created from within UaModeler or manually
  26. add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/example_nodeset_ids.h
  27. PRE_BUILD
  28. COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/generate_nodeid_header.py
  29. ${PROJECT_SOURCE_DIR}/examples/nodeset/server_nodeset.csv ${PROJECT_BINARY_DIR}/src_generated/example_nodeset_ids EXAMPLE_NS
  30. DEPENDS ${PROJECT_SOURCE_DIR}/tools/generate_nodeid_header.py
  31. ${PROJECT_SOURCE_DIR}/examples/nodeset/server_nodeset.csv)
  32. add_example(server_nodeset server_nodeset.c ${PROJECT_BINARY_DIR}/src_generated/example_nodeset.c ${PROJECT_BINARY_DIR}/src_generated/example_nodeset_ids.h)
  33. if(UA_COMPILE_AS_CXX)
  34. set_source_files_properties(${PROJECT_BINARY_DIR}/src_generated/example_nodeset.c PROPERTIES LANGUAGE CXX)
  35. endif()
  36. ###################
  37. # PLCopen Nodeset #
  38. ###################
  39. # PLCopen requires the full ns0 as basis
  40. if(UA_NAMESPACE_ZERO STREQUAL "FULL")
  41. # Generate types for DI namespace
  42. ua_generate_datatypes(
  43. NAME "ua_types_di"
  44. TARGET_SUFFIX "types-di"
  45. NAMESPACE_IDX 2
  46. FILE_CSV "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/OpcUaDiModel.csv"
  47. FILES_BSD "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.Types.bsd"
  48. )
  49. # generate DI namespace
  50. add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di.c
  51. ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di.h
  52. PRE_BUILD
  53. COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset_compiler.py
  54. --internal-headers
  55. --types-array=UA_TYPES
  56. --types-array=UA_TYPES_DI
  57. --existing ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml
  58. --xml ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml
  59. ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di
  60. DEPENDS ${UA_FILE_NS0}
  61. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset_compiler.py
  62. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodes.py
  63. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset.py
  64. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/datatypes.py
  65. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/backend_open62541.py
  66. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/backend_open62541_nodes.py
  67. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/backend_open62541_datatypes.py
  68. ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml
  69. ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml
  70. )
  71. add_custom_target(open62541-generator-ns-di DEPENDS ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di.c)
  72. add_dependencies(open62541-generator-ns-di open62541-generator-types-di)
  73. # generate PLCopen namespace which is using DI
  74. add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc.c
  75. ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc.h
  76. PRE_BUILD
  77. COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset_compiler.py
  78. --internal-headers
  79. --types-array=UA_TYPES
  80. --types-array=UA_TYPES_DI
  81. # PLCopen has no specific type definition, thus use the default UA_TYPES to ignore it
  82. --types-array=UA_TYPES
  83. --existing ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml
  84. --existing ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml
  85. --xml ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/PLCopen/Opc.Ua.Plc.NodeSet2.xml
  86. ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc
  87. DEPENDS ${UA_FILE_NS0}
  88. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset_compiler.py
  89. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodes.py
  90. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset.py
  91. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/datatypes.py
  92. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/backend_open62541.py
  93. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/backend_open62541_nodes.py
  94. ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/backend_open62541_datatypes.py
  95. ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml
  96. ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml
  97. ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/PLCopen/Opc.Ua.Plc.NodeSet2.xml
  98. )
  99. add_custom_target(open62541-generator-ns-plc DEPENDS ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc.c)
  100. add_dependencies(open62541-generator-ns-plc open62541-generator-ns-di)
  101. add_example(server_nodeset_plcopen server_nodeset_plcopen.c
  102. ${PROJECT_BINARY_DIR}/src_generated/ua_types_di_generated.c
  103. ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di.c
  104. ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc.c)
  105. add_dependencies(server_nodeset_plcopen open62541-generator-ns-plc)
  106. target_include_directories(server_nodeset_plcopen PRIVATE ${PROJECT_SOURCE_DIR}/src) # needs an internal header
  107. if(UA_COMPILE_AS_CXX)
  108. set_source_files_properties(${PROJECT_BINARY_DIR}/src_generated/ua_types_di_generated.c PROPERTIES LANGUAGE CXX)
  109. set_source_files_properties(${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di.c PROPERTIES LANGUAGE CXX)
  110. set_source_files_properties(${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc.c PROPERTIES LANGUAGE CXX)
  111. endif()
  112. endif()