|
@@ -21,7 +21,7 @@ endif()
|
|
|
if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
|
|
|
add_definitions(-std=c99 -pipe -Wall -Wextra -Werror -Wformat
|
|
|
-Wno-unused-parameter -Wno-unused-function -Wno-unused-label -Wpointer-arith -Wreturn-type -Wsign-compare -Wmultichar
|
|
|
- -Wshadow -Wcast-qual -Wmissing-prototypes -Wstrict-prototypes # -Wconversion
|
|
|
+ -Wcast-qual -Wmissing-prototypes -Wstrict-prototypes # -Wconversion -Wshadow
|
|
|
-Winit-self -Wuninitialized -Wno-deprecated -Wformat-security -ffunction-sections -fdata-sections)
|
|
|
if(NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
|
|
|
add_definitions(-Wformat-nonliteral)
|
|
@@ -99,15 +99,21 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_nodeids.h
|
|
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_nodeids.py
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/tools/schema/NodeIds.csv)
|
|
|
|
|
|
+## build amalgamated source files
|
|
|
+add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/open62541.h ${PROJECT_BINARY_DIR}/open62541.c
|
|
|
+ PRE_BUILD
|
|
|
+ COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py ${CMAKE_CURRENT_BINARY_DIR}/open62541.h ${exported_headers}
|
|
|
+ COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py ${CMAKE_CURRENT_BINARY_DIR}/open62541.c
|
|
|
+ ${PROJECT_BINARY_DIR}/src_generated/ua_config.h ${internal_headers} ${PROJECT_SOURCE_DIR}/src/server/ua_nodestore_hash.inc ${lib_sources}
|
|
|
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py ${exported_headers} ${internal_headers}
|
|
|
+ ${PROJECT_BINARY_DIR}/src_generated/ua_config.h ${PROJECT_SOURCE_DIR}/src/server/ua_nodestore_hash.inc ${lib_sources})
|
|
|
+
|
|
|
## logging
|
|
|
set(UA_LOGLEVEL 300 CACHE STRING "Level at which logs shall be reported")
|
|
|
|
|
|
-## set the precompiler flags
|
|
|
-configure_file("src/ua_config.h.in" "${PROJECT_BINARY_DIR}/src_generated/ua_config.h")
|
|
|
-
|
|
|
## multithreading
|
|
|
-option(MULTITHREADING "Enable multithreading" OFF)
|
|
|
-if(MULTITHREADING)
|
|
|
+option(ENABLE_MULTITHREADING "Enable multithreading" OFF)
|
|
|
+if(ENABLE_MULTITHREADING)
|
|
|
set(UA_MULTITHREADING ON)
|
|
|
find_package(Threads REQUIRED)
|
|
|
list(APPEND lib_sources ${PROJECT_SOURCE_DIR}/src/server/ua_nodestore_concurrent.c)
|
|
@@ -115,14 +121,8 @@ else()
|
|
|
list(APPEND lib_sources ${PROJECT_SOURCE_DIR}/src/server/ua_nodestore.c)
|
|
|
endif()
|
|
|
|
|
|
-## build amalgamated source files
|
|
|
-add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/open62541.h ${PROJECT_BINARY_DIR}/open62541.c
|
|
|
- PRE_BUILD
|
|
|
- COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py ${CMAKE_CURRENT_BINARY_DIR}/open62541.h ${exported_headers}
|
|
|
- COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py ${CMAKE_CURRENT_BINARY_DIR}/open62541.c
|
|
|
- ${internal_headers} ${PROJECT_SOURCE_DIR}/src/server/ua_nodestore_hash.inc ${lib_sources}
|
|
|
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py ${exported_headers} ${internal_headers}
|
|
|
- ${PROJECT_SOURCE_DIR}/src/server/ua_nodestore_hash.inc ${lib_sources})
|
|
|
+## set the precompiler flags
|
|
|
+configure_file("src/ua_config.h.in" "${PROJECT_BINARY_DIR}/src_generated/ua_config.h")
|
|
|
|
|
|
## extensions
|
|
|
option(EXTENSION_UDP "Enable udp extension" OFF)
|
|
@@ -138,26 +138,19 @@ if(EXTENSION_STATELESS)
|
|
|
add_definitions(-DEXTENSION_STATELESS)
|
|
|
endif()
|
|
|
|
|
|
-option(DEMO_NODESET "Create a demo node for every built-in datatype" OFF)
|
|
|
-if(DEMO_NODESET)
|
|
|
+option(BUILD_DEMO_NODESET "Create a demo node for every built-in datatype" OFF)
|
|
|
+if(BUILD_DEMO_NODESET)
|
|
|
message(STATUS "Enabling demo nodeset")
|
|
|
add_definitions(-DDEMO_NODESET)
|
|
|
endif()
|
|
|
|
|
|
-option(BUILD_AMALGAMATION "Build the single-file distribution" ON)
|
|
|
-if(BUILD_AMALGAMATION)
|
|
|
- add_custom_target(open62541-amalgamation DEPENDS ${PROJECT_BINARY_DIR}/open62541.h ${PROJECT_BINARY_DIR}/open62541.c)
|
|
|
-endif()
|
|
|
-
|
|
|
-option(BUILD_LIBRARY "Build a shared library (.so/.dll)" ON)
|
|
|
-if(BUILD_LIBRARY)
|
|
|
- add_library(open62541 SHARED ${lib_sources} ${exported_headers} ${internal_headers})
|
|
|
- target_include_directories(open62541 PRIVATE ${PROJECT_SOURCE_DIR}/include)
|
|
|
- target_include_directories(open62541 PRIVATE ${PROJECT_SOURCE_DIR}/deps)
|
|
|
- target_include_directories(open62541 PRIVATE ${PROJECT_SOURCE_DIR}/src)
|
|
|
- target_include_directories(open62541 PRIVATE ${PROJECT_BINARY_DIR}/src_generated)
|
|
|
- target_compile_definitions(open62541 PRIVATE UA_DYNAMIC_LINKING)
|
|
|
-endif()
|
|
|
+# add_library(open62541-object OBJECT ${lib_sources})
|
|
|
+# include_directories(${PROJECT_SOURCE_DIR}/include)
|
|
|
+# include_directories(${PROJECT_SOURCE_DIR}/deps)
|
|
|
+# include_directories(${PROJECT_SOURCE_DIR}/src)
|
|
|
+# include_directories(${PROJECT_BINARY_DIR}/src_generated)
|
|
|
+add_library(open62541-object OBJECT ${PROJECT_BINARY_DIR}/open62541.c)
|
|
|
+add_library(open62541 SHARED $<TARGET_OBJECTS:open62541-object>)
|
|
|
|
|
|
# build language bindings for the library
|
|
|
option(ENABLE_BINDING_LUA "Build Lua bindings" OFF)
|
|
@@ -179,8 +172,8 @@ endif()
|
|
|
# build example server
|
|
|
option(BUILD_EXAMPLESERVER "Build the example server" OFF)
|
|
|
if(BUILD_EXAMPLESERVER)
|
|
|
- add_executable(exampleServer examples/server.c ${PROJECT_BINARY_DIR}/open62541.c examples/networklayer_tcp.c examples/logger_stdout.c)
|
|
|
- add_executable(exampleServer_datasource examples/server_datasource.c ${PROJECT_BINARY_DIR}/open62541.c examples/networklayer_tcp.c examples/logger_stdout.c)
|
|
|
+ add_executable(exampleServer examples/server.c $<TARGET_OBJECTS:open62541-object> examples/networklayer_tcp.c examples/logger_stdout.c)
|
|
|
+ add_executable(exampleServer_datasource examples/server_datasource.c $<TARGET_OBJECTS:open62541-object> examples/networklayer_tcp.c examples/logger_stdout.c)
|
|
|
target_include_directories(exampleServer PRIVATE ${PROJECT_BINARY_DIR})
|
|
|
target_include_directories(exampleServer_datasource PRIVATE ${PROJECT_BINARY_DIR})
|
|
|
if(WIN32)
|
|
@@ -190,7 +183,7 @@ if(BUILD_EXAMPLESERVER)
|
|
|
target_link_libraries(exampleServer rt)
|
|
|
target_link_libraries(exampleServer_datasource rt)
|
|
|
endif()
|
|
|
- if(MULTITHREADING)
|
|
|
+ if(ENABLE_MULTITHREADING)
|
|
|
target_link_libraries(exampleServer urcu-cds urcu urcu-common pthread)
|
|
|
target_link_libraries(exampleServer_datasource urcu-cds urcu urcu-common pthread)
|
|
|
endif()
|
|
@@ -219,18 +212,16 @@ if(BUILD_EXAMPLECLIENT)
|
|
|
add_definitions( -DBENCHMARK=1 )
|
|
|
add_executable(exampleClient ${PROJECT_BINARY_DIR}/open62541.c examples/client.c)
|
|
|
target_include_directories(exampleClient PRIVATE ${PROJECT_BINARY_DIR})
|
|
|
- if(MULTITHREADING)
|
|
|
+ if(ENABLE_MULTITHREADING)
|
|
|
target_link_libraries(exampleClient urcu-cds urcu urcu-common pthread)
|
|
|
endif()
|
|
|
if ((CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") AND (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" OR CMAKE_BUILD_TYPE STREQUAL "Release"))
|
|
|
- add_custom_command(TARGET exampleClient POST_BUILD
|
|
|
- COMMAND ${CMAKE_STRIP} $<TARGET_FILE:exampleClient>
|
|
|
- )
|
|
|
+ add_custom_command(TARGET exampleClient POST_BUILD COMMAND ${CMAKE_STRIP} $<TARGET_FILE:exampleClient>)
|
|
|
endif()
|
|
|
if(EXTENSION_STATELESS)
|
|
|
add_executable(statelessClient ${PROJECT_BINARY_DIR}/open62541.c examples/client_stateless.c)
|
|
|
target_include_directories(statelessClient PRIVATE ${PROJECT_BINARY_DIR})
|
|
|
- if(MULTITHREADING)
|
|
|
+ if(ENABLE_MULTITHREADING)
|
|
|
target_link_libraries(statelessClient urcu-cds urcu urcu-common pthread)
|
|
|
endif()
|
|
|
if ((CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") AND (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" OR CMAKE_BUILD_TYPE STREQUAL "Release"))
|
|
@@ -242,16 +233,13 @@ endif()
|
|
|
# build unit tests
|
|
|
option(BUILD_UNIT_TESTS "Run unit tests after building" OFF)
|
|
|
if(BUILD_UNIT_TESTS)
|
|
|
- if(NOT BUILD_LIBRARY)
|
|
|
- message(SEND_ERROR "Can't build unit tests without building the library")
|
|
|
- endif()
|
|
|
enable_testing()
|
|
|
add_subdirectory(tests)
|
|
|
endif()
|
|
|
|
|
|
# build documentation
|
|
|
-option(GENERATE_DOCUMENTATION "Generate doxygen documentation" OFF)
|
|
|
-if(GENERATE_DOCUMENTATION)
|
|
|
+option(BUILD_DOCUMENTATION "Generate doxygen documentation" OFF)
|
|
|
+if(BUILD_DOCUMENTATION)
|
|
|
find_package(Doxygen)
|
|
|
if(NOT DOXYGEN_FOUND)
|
|
|
message(FATAL_ERROR "Doxygen is not installed or not properly configured")
|