Просмотр исходного кода

Set target dependencies between types, NS files and executables

This fixes race conditions on multicore compile
Stefan Profanter лет назад: 7
Родитель
Сommit
6bf0f47346

+ 6 - 0
examples/nodeset/CMakeLists.txt

@@ -53,6 +53,7 @@ if(UA_ENABLE_FULL_NS0)
                        DEPENDS ${PROJECT_SOURCE_DIR}/tools/generate_datatypes.py
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/OpcUaDiModel.csv
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.Types.bsd)
+    add_custom_target(open62541-generator-types-di DEPENDS ${PROJECT_BINARY_DIR}/src_generated/${UA_TYPES_OUT}_generated.c)
 
     # generate DI namespace
     add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di.c
@@ -76,6 +77,8 @@ if(UA_ENABLE_FULL_NS0)
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml
                        )
+    add_custom_target(open62541-generator-ns-di DEPENDS ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di.c)
+    add_dependencies(open62541-generator-ns-di open62541-generator-types-di)
 
     # generate PLCopen namespace which is using DI
     add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc.c
@@ -103,11 +106,14 @@ if(UA_ENABLE_FULL_NS0)
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/PLCopen/Opc.Ua.Plc.NodeSet2.xml
                        )
+    add_custom_target(open62541-generator-ns-plc DEPENDS ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc.c)
+    add_dependencies(open62541-generator-ns-plc open62541-generator-ns-di)
 
     add_example(server_nodeset_plcopen server_nodeset_plcopen.c
                 ${PROJECT_BINARY_DIR}/src_generated/ua_types_di_generated.c
                 ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di.c
                 ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc.c)
+    add_dependencies(server_nodeset_plcopen open62541-generator-ns-plc)
     target_include_directories(server_nodeset_plcopen PRIVATE ${PROJECT_SOURCE_DIR}/src) # needs an internal header
 
     if(UA_COMPILE_AS_CXX)

+ 39 - 26
tests/CMakeLists.txt

@@ -205,43 +205,47 @@ add_test_valgrind(check_client_highlevel ${TESTS_BINARY_DIR}/check_client_highle
 
 if (UA_ENABLE_FULL_NS0)
 
+    file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/src_generated/tests")
+
     # Generate types for DI namespace
     set(UA_TYPES_OUT "ua_types_di")
-    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/${UA_TYPES_OUT}_generated.c
-                       ${PROJECT_BINARY_DIR}/src_generated/${UA_TYPES_OUT}_generated.h
-                       ${PROJECT_BINARY_DIR}/src_generated/${UA_TYPES_OUT}_generated_handling.h
-                       ${PROJECT_BINARY_DIR}/src_generated/${UA_TYPES_OUT}_generated_encoding_binary.h
+    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/tests/${UA_TYPES_OUT}_generated.c
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/${UA_TYPES_OUT}_generated.h
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/${UA_TYPES_OUT}_generated_handling.h
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/${UA_TYPES_OUT}_generated_encoding_binary.h
                        PRE_BUILD
                        COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/generate_datatypes.py
                        --namespace=2
                        --type-csv=${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/OpcUaDiModel.csv
                        --type-bsd=${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.Types.bsd
                        --no-builtin
-                       ${PROJECT_BINARY_DIR}/src_generated/${UA_TYPES_OUT}
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/${UA_TYPES_OUT}
                        DEPENDS ${PROJECT_SOURCE_DIR}/tools/generate_datatypes.py
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/OpcUaDiModel.csv
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.Types.bsd)
+    add_custom_target(open62541-generator-tests-types-di DEPENDS ${PROJECT_BINARY_DIR}/src_generated/tests/${UA_TYPES_OUT}_generated.c)
 
     # Generate types for ADI namespace
     set(UA_TYPES_OUT "ua_types_adi")
-    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/${UA_TYPES_OUT}_generated.c
-                       ${PROJECT_BINARY_DIR}/src_generated/${UA_TYPES_OUT}_generated.h
-                       ${PROJECT_BINARY_DIR}/src_generated/${UA_TYPES_OUT}_generated_handling.h
-                       ${PROJECT_BINARY_DIR}/src_generated/${UA_TYPES_OUT}_generated_encoding_binary.h
+    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/tests/${UA_TYPES_OUT}_generated.c
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/${UA_TYPES_OUT}_generated.h
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/${UA_TYPES_OUT}_generated_handling.h
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/${UA_TYPES_OUT}_generated_encoding_binary.h
                        PRE_BUILD
                        COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/generate_datatypes.py
                        --namespace=3
                        --type-csv=${PROJECT_SOURCE_DIR}/deps/ua-nodeset/ADI/OpcUaAdiModel.csv
                        --type-bsd=${PROJECT_SOURCE_DIR}/deps/ua-nodeset/ADI/Opc.Ua.Adi.Types.bsd
                        --no-builtin
-                       ${PROJECT_BINARY_DIR}/src_generated/${UA_TYPES_OUT}
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/${UA_TYPES_OUT}
                        DEPENDS ${PROJECT_SOURCE_DIR}/tools/generate_datatypes.py
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/ADI/OpcUaAdiModel.csv
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/ADI/Opc.Ua.Adi.Types.bsd)
+    add_custom_target(open62541-generator-tests-types-adi DEPENDS ${PROJECT_BINARY_DIR}/src_generated/tests/${UA_TYPES_OUT}_generated.c)
 
     # generate DI namespace
-    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di.c
-                       ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di.h
+    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_di.c
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_di.h
                        PRE_BUILD
                        COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset_compiler.py
                        --internal-headers
@@ -249,7 +253,7 @@ if (UA_ENABLE_FULL_NS0)
                        --types-array=UA_TYPES_DI
                        --existing ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml
                        --xml ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml
-                       ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_di
                        DEPENDS ${UA_NAMESPACE0_XML}
                        ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset_compiler.py
                        ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodes.py
@@ -261,11 +265,13 @@ if (UA_ENABLE_FULL_NS0)
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml
                        )
+    add_custom_target(open62541-generator-tests-ns-di DEPENDS ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_di.c)
+    add_dependencies(open62541-generator-tests-ns-di open62541-generator-tests-types-di)
 
 
     # generate ADI namespace which is using DI
-    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_adi.c
-                       ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_adi.h
+    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_adi.c
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_adi.h
                        PRE_BUILD
                        COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset_compiler.py
                        --internal-headers
@@ -275,7 +281,7 @@ if (UA_ENABLE_FULL_NS0)
                        --existing ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml
                        --existing ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml
                        --xml ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/ADI/Opc.Ua.Adi.NodeSet2.xml
-                       ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_adi
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_adi
                        DEPENDS ${UA_NAMESPACE0_XML}
                        ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset_compiler.py
                        ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodes.py
@@ -288,10 +294,12 @@ if (UA_ENABLE_FULL_NS0)
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/ADI/Opc.Ua.Adi.NodeSet2.xml
                        )
+    add_custom_target(open62541-generator-tests-ns-adi DEPENDS ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_adi.c)
+    add_dependencies(open62541-generator-tests-ns-adi open62541-generator-tests-types-adi open62541-generator-tests-ns-di)
 
     # generate PLCopen namespace which is using DI
-    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc.c
-                       ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc.h
+    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_plc.c
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_plc.h
                        PRE_BUILD
                        COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset_compiler.py
                        --internal-headers
@@ -302,7 +310,7 @@ if (UA_ENABLE_FULL_NS0)
                        --existing ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml
                        --existing ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml
                        --xml ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/PLCopen/Opc.Ua.Plc.NodeSet2.xml
-                       ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc
+                       ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_plc
                        DEPENDS ${UA_NAMESPACE0_XML}
                        ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodeset_compiler.py
                        ${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/nodes.py
@@ -314,23 +322,28 @@ if (UA_ENABLE_FULL_NS0)
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml
                        ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/PLCopen/Opc.Ua.Plc.NodeSet2.xml
                        )
+    add_custom_target(open62541-generator-tests-ns-plc DEPENDS ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_plc.c)
+    add_dependencies(open62541-generator-tests-ns-plc open62541-generator-tests-ns-di)
+
 
     add_executable(check_nodeset_compiler_adi
                    check_nodeset_compiler_adi.c
-                   ${PROJECT_BINARY_DIR}/src_generated/ua_types_di_generated.c
-                   ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di.c
-                   ${PROJECT_BINARY_DIR}/src_generated/ua_types_adi_generated.c
-                   ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_adi.c
+                   ${PROJECT_BINARY_DIR}/src_generated/tests/ua_types_di_generated.c
+                   ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_di.c
+                   ${PROJECT_BINARY_DIR}/src_generated/tests/ua_types_adi_generated.c
+                   ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_adi.c
                    $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)
+    add_dependencies(check_nodeset_compiler_adi open62541-generator-tests-ns-adi)
     target_link_libraries(check_nodeset_compiler_adi ${LIBS})
     add_test_valgrind(check_nodeset_compiler_adi ${TESTS_BINARY_DIR}/check_nodeset_compiler_adi)
 
     add_executable(check_nodeset_compiler_plc
                    check_nodeset_compiler_plc.c
-                   ${PROJECT_BINARY_DIR}/src_generated/ua_types_di_generated.c
-                   ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_di.c
-                   ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_plc.c
+                   ${PROJECT_BINARY_DIR}/src_generated/tests/ua_types_di_generated.c
+                   ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_di.c
+                   ${PROJECT_BINARY_DIR}/src_generated/tests/ua_namespace_plc.c
                    $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)
+    add_dependencies(check_nodeset_compiler_plc open62541-generator-tests-ns-plc)
     target_link_libraries(check_nodeset_compiler_plc ${LIBS})
     add_test_valgrind(check_nodeset_compiler_plc ${TESTS_BINARY_DIR}/check_nodeset_compiler_plc)
 endif()

+ 2 - 2
tests/check_nodeset_compiler_adi.c

@@ -5,8 +5,8 @@
 #include "ua_server.h"
 #include "ua_config_default.h"
 
-#include "ua_namespace_di.h"
-#include "ua_namespace_adi.h"
+#include "tests/ua_namespace_di.h"
+#include "tests/ua_namespace_adi.h"
 
 #include "check.h"
 #include "testing_clock.h"

+ 4 - 2
tests/check_nodeset_compiler_plc.c

@@ -5,8 +5,10 @@
 #include "ua_server.h"
 #include "ua_config_default.h"
 
-#include "ua_namespace_di.h"
-#include "ua_namespace_plc.h"
+#include "ua_types.h"
+
+#include "tests/ua_namespace_di.h"
+#include "tests/ua_namespace_plc.h"
 
 #include "check.h"
 #include "testing_clock.h"