mirror of
https://github.com/open62541/open62541.git
synced 2025-06-03 04:00:21 +00:00
Fix occasional build errors on travis/appveyor
There were again occasional build errors due to a race condition which causes the amalagamation to start two times a the same moment and thus one overwrites the other. This should fix it. Additionally the amalgamation sources are only needed if amalgamation is enabled. Thus open62541 target now only depends on the amalgamated header
This commit is contained in:
parent
812bab56a3
commit
acb35c337f
@ -296,6 +296,7 @@ set(lib_sources ${PROJECT_SOURCE_DIR}/src/ua_types.c
|
||||
${PROJECT_SOURCE_DIR}/src/ua_types_encoding_binary.c
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_types_generated.c
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_transport_generated.c
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_statuscode_descriptions.c
|
||||
${PROJECT_SOURCE_DIR}/src/ua_util.c
|
||||
${PROJECT_SOURCE_DIR}/src/ua_connection.c
|
||||
${PROJECT_SOURCE_DIR}/src/ua_securechannel.c
|
||||
@ -388,6 +389,12 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_types_generated
|
||||
${PROJECT_SOURCE_DIR}/tools/schema/datatypes_minimal.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tools/schema/Opc.Ua.Types.bsd
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tools/schema/NodeIds.csv)
|
||||
# we need a custom target to avoid that the generator is called concurrently and thus overwriting files while the other thread is compiling
|
||||
add_custom_target(open62541-generator-types DEPENDS
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_types_generated.c
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_types_generated.h
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_types_generated_handling.h
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_types_generated_encoding_binary.h)
|
||||
|
||||
# transport data types
|
||||
add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_transport_generated.c
|
||||
@ -403,6 +410,12 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_transport_gener
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_datatypes.py
|
||||
${PROJECT_SOURCE_DIR}/tools/schema/datatypes_transport.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tools/schema/Custom.Opc.Ua.Transport.bsd)
|
||||
# we need a custom target to avoid that the generator is called concurrently and thus overwriting files while the other thread is compiling
|
||||
add_custom_target(open62541-generator-transport DEPENDS
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_transport_generated.c
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_transport_generated.h
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_transport_generated_handling.h
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_transport_generated_encoding_binary.h)
|
||||
|
||||
# statuscode explanation
|
||||
add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_statuscode_descriptions.c
|
||||
@ -411,24 +424,9 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_statuscode_desc
|
||||
${PROJECT_SOURCE_DIR}/tools/schema/Opc.Ua.StatusCodes.csv ${PROJECT_BINARY_DIR}/src_generated/ua_statuscode_descriptions
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_statuscode_descriptions.py
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tools/schema/Opc.Ua.StatusCodes.csv)
|
||||
list(APPEND lib_sources ${PROJECT_BINARY_DIR}/src_generated/ua_statuscode_descriptions.c)
|
||||
|
||||
# generated namespace 0
|
||||
add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_generated.c
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_generated.h
|
||||
PRE_BUILD
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
|
||||
-i ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_AssumeExternal.txt
|
||||
-s description -b ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_Blacklist.txt
|
||||
${PROJECT_SOURCE_DIR}/tools/schema/namespace0/${GENERATE_NAMESPACE0_FILE}
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_generated
|
||||
DEPENDS ${PROJECT_SOURCE_DIR}/tools/schema/namespace0/${GENERATE_NAMESPACE0_FILE}
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/open62541_MacroHelper.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_builtin_types.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_constants.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_namespace.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_node_types.py)
|
||||
# we need a custom target to avoid that the generator is called concurrently and thus overwriting files while the other thread is compiling
|
||||
add_custom_target(open62541-generator-statuscode DEPENDS
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_statuscode_descriptions.c)
|
||||
|
||||
# single-file release
|
||||
add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/open62541.h
|
||||
@ -445,8 +443,32 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/open62541.c
|
||||
${internal_headers} ${lib_sources} ${default_plugin_sources}
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py ${internal_headers} ${lib_sources})
|
||||
|
||||
ADD_CUSTOM_TARGET(open62541_amalgamation DEPENDS ${PROJECT_BINARY_DIR}/open62541.h
|
||||
${PROJECT_BINARY_DIR}/open62541.c)
|
||||
add_custom_target(open62541_amalgamation_source DEPENDS ${PROJECT_BINARY_DIR}/open62541.c)
|
||||
add_custom_target(open62541_amalgamation_header DEPENDS ${PROJECT_BINARY_DIR}/open62541.h)
|
||||
|
||||
add_dependencies(open62541_amalgamation_source open62541-generator-types open62541-generator-transport open62541-generator-statuscode)
|
||||
add_dependencies(open62541_amalgamation_header open62541-generator-types)
|
||||
|
||||
# generated namespace 0
|
||||
add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_generated.c
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_generated.h
|
||||
PRE_BUILD
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
|
||||
-i ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_AssumeExternal.txt
|
||||
-s description -b ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_Blacklist.txt
|
||||
${PROJECT_SOURCE_DIR}/tools/schema/namespace0/${GENERATE_NAMESPACE0_FILE}
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_generated
|
||||
DEPENDS ${PROJECT_SOURCE_DIR}/tools/schema/namespace0/${GENERATE_NAMESPACE0_FILE}
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/open62541_MacroHelper.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_builtin_types.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_constants.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_namespace.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_node_types.py)
|
||||
# we need a custom target to avoid that the generator is called concurrently and thus overwriting files while the other thread is compiling
|
||||
add_custom_target(open62541-generator-namespace DEPENDS
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_generated.c
|
||||
${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_generated.h)
|
||||
|
||||
#####################
|
||||
# Build the Library #
|
||||
@ -460,9 +482,10 @@ if(UA_ENABLE_AMALGAMATION)
|
||||
add_library(open62541-object OBJECT ${PROJECT_BINARY_DIR}/open62541.c ${PROJECT_BINARY_DIR}/open62541.h)
|
||||
target_include_directories(open62541-object PRIVATE ${PROJECT_BINARY_DIR})
|
||||
|
||||
# make sure the open62541_amalgamation target builds before so that amalgamation is finished and it is not executed again for open62541-object
|
||||
# make sure the open62541_amalgamation target builds before so that amalgamation is finished and it is not executed again for open62541-object
|
||||
# and thus may overwrite the amalgamation result during multiprocessor compilation
|
||||
add_dependencies(open62541-object open62541_amalgamation)
|
||||
# the header is already a dependency of open62541 target itself
|
||||
add_dependencies(open62541-object open62541_amalgamation_source)
|
||||
|
||||
add_library(open62541 $<TARGET_OBJECTS:open62541-object>)
|
||||
|
||||
@ -472,9 +495,11 @@ if(UA_ENABLE_AMALGAMATION)
|
||||
else()
|
||||
add_definitions(-DUA_NO_AMALGAMATION)
|
||||
add_library(open62541-object OBJECT ${lib_sources} ${internal_headers} ${exported_headers})
|
||||
add_dependencies(open62541-object open62541-generator-types open62541-generator-transport open62541-generator-statuscode)
|
||||
target_include_directories(open62541-object PRIVATE ${PROJECT_SOURCE_DIR}/src)
|
||||
|
||||
add_library(open62541-plugins OBJECT ${default_plugin_sources} ${exported_headers})
|
||||
add_dependencies(open62541-plugins open62541-generator-types)
|
||||
target_include_directories(open62541-plugins PRIVATE ${PROJECT_SOURCE_DIR}/plugins)
|
||||
target_include_directories(open62541-plugins PRIVATE ${PROJECT_BINARY_DIR}/src_generated)
|
||||
target_compile_definitions(open62541-plugins PRIVATE -DUA_DYNAMIC_LINKING_EXPORT)
|
||||
@ -487,6 +512,13 @@ else()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(UA_ENABLE_GENERATE_NAMESPACE0)
|
||||
add_dependencies(open62541_amalgamation_source open62541-generator-namespace)
|
||||
if(NOT UA_ENABLE_AMALGAMATION)
|
||||
add_dependencies(open62541-object open62541-generator-namespace)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Export Symbols
|
||||
target_compile_definitions(open62541-object PRIVATE -DUA_DYNAMIC_LINKING_EXPORT)
|
||||
target_compile_definitions(open62541 PRIVATE -DUA_DYNAMIC_LINKING_EXPORT)
|
||||
@ -499,7 +531,7 @@ endif()
|
||||
target_link_libraries(open62541 ${open62541_LIBRARIES})
|
||||
|
||||
# Always generate the amalgamated header
|
||||
add_dependencies(open62541 open62541_amalgamation)
|
||||
add_dependencies(open62541 open62541_amalgamation_header)
|
||||
|
||||
# Generate properly versioned shared library links on Linux
|
||||
SET_TARGET_PROPERTIES(open62541 PROPERTIES SOVERSION 0 VERSION "${OPEN62541_VER_MAJOR}.${OPEN62541_VER_MINOR}.${OPEN62541_VER_PATCH}")
|
||||
|
@ -12,7 +12,7 @@ macro(add_example EXAMPLE_NAME EXAMPLE_SOURCE)
|
||||
add_executable(${EXAMPLE_NAME} ${STATIC_OBJECTS} ${EXAMPLE_SOURCE} ${ARGN})
|
||||
target_link_libraries(${EXAMPLE_NAME} open62541 ${open62541_LIBRARIES})
|
||||
assign_source_group(${EXAMPLE_SOURCE})
|
||||
add_dependencies(${EXAMPLE_NAME} open62541_amalgamation)
|
||||
add_dependencies(${EXAMPLE_NAME} open62541_amalgamation_header open62541_amalgamation_source)
|
||||
set_target_properties(${EXAMPLE_NAME} PROPERTIES FOLDER "open62541/examples")
|
||||
if(UA_COMPILE_AS_CXX)
|
||||
set_source_files_properties(${EXAMPLE_SOURCE} PROPERTIES LANGUAGE CXX)
|
||||
|
Loading…
Reference in New Issue
Block a user