Parcourir la source

clean up build script

Julius Pfrommer il y a 9 ans
Parent
commit
84351c098e
4 fichiers modifiés avec 112 ajouts et 121 suppressions
  1. 96 111
      CMakeLists.txt
  2. 10 6
      examples/networklayer.c
  3. 4 2
      src/ua_config.h.in
  4. 2 2
      tests/CMakeLists.txt

+ 96 - 111
CMakeLists.txt

@@ -1,79 +1,16 @@
 cmake_minimum_required(VERSION 2.6)
+# set(CMAKE_VERBOSE_MAKEFILE on )
 
 project(open62541)
-
 set(open62541_VERSION_MAJOR 0)
 set(open62541_VERSION_MINOR 1)
 
-# set(CMAKE_VERBOSE_MAKEFILE on )
-
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules")
-
-# compiler options
-if(CMAKE_COMPILER_IS_GNUCC)
-add_definitions(-std=c99 -pedantic -pipe -fstack-protector -Wall -Wextra
-                 -Wno-unused-parameter -Wno-unused-function -Wno-unused-label
-                 -Wpointer-arith -Wformat -Wreturn-type -Wsign-compare -Wmultichar
-                 -Wformat-nonliteral -Winit-self -Wuninitialized -Wno-deprecated
-                 -Wformat-security -Werror -ffunction-sections -fdata-sections
-                 -Wl,--gc-sections)
-	if(WIN32)
-	    add_definitions(-fno-stack-protector)
-	endif(WIN32)
-endif(CMAKE_COMPILER_IS_GNUCC)
-
-# multithreading
-set(MULTITHREADING OFF CACHE BOOL "Enable multithreading")
-if(MULTITHREADING)
-    find_package(Threads REQUIRED)
-endif(MULTITHREADING)
-
-# encodings
-set(UA_ENCODING_AMOUNT 1) # binary encoding
-
-set(UA_ENCODING_XML OFF CACHE BOOL "Enable XML-encoding of the UA types")
-if(UA_ENCODING_XML)
-    MATH(EXPR UA_ENCODING_AMOUNT "${UA_ENCODING_AMOUNT}+1")
-    find_package(EXPAT REQUIRED)
-    if(EXPAT_FOUND)
-        include_directories(${EXPAT_INCLUDE_DIRS})
-    else(EXPAT_FOUND)
-        message(FATAL_ERROR "Expat library not found.")
-    endif(EXPAT_FOUND)
-endif(UA_ENCODING_XML)
-
-set(UA_ENCODING_JSON OFF CACHE BOOL "Enable JSON-encoding of the UA types")
-if(UA_ENCODING_JSON)
-    MATH(EXPR UA_ENCODING_AMOUNT "${UA_ENCODING_AMOUNT}+1")
-endif(UA_ENCODING_JSON)
-
-#included types
-set(TYPES_ONLY_NEEDED OFF CACHE BOOL "Inlcude only compile-needed types")
-
-# coverage
-option(ENABLE_COVERAGE "Enable gcov coverage" OFF)
-if(ENABLE_COVERAGE)
-    message(STATUS "Enabling gcov support")
-    set(CMAKE_BUILD_TYPE DEBUG)
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
-    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
-    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
-endif(ENABLE_COVERAGE)
-
-# directory for generated source files
-file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/src_generated")
-include_directories("${PROJECT_BINARY_DIR}/src_generated") 
-
-# build the library
-configure_file("src/ua_config.h.in" "${PROJECT_BINARY_DIR}/src_generated/ua_config.h")
-
+# main sources of libopen62541
 include_directories("${CMAKE_CURRENT_SOURCE_DIR}/src")
 include_directories("${CMAKE_CURRENT_SOURCE_DIR}/src/server")
 include_directories("${CMAKE_CURRENT_SOURCE_DIR}/src/util")
-
 file(GLOB_RECURSE headers "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h")
 file(GLOB generated_headers "${PROJECT_BINARY_DIR}/src_generated/*.h")
-
 set(lib_sources src/ua_types.c
                 src/ua_types_encoding_binary.c
                 ${PROJECT_BINARY_DIR}/src_generated/ua_types_generated.c
@@ -95,44 +32,91 @@ set(lib_sources src/ua_types.c
                 src/server/ua_channel_manager.c
                 src/server/ua_session_manager.c
                 src/server/ua_transport_connection_manager.c
-		src/server/ua_server.c
+                src/server/ua_server.c
                 src/server/ua_application.c
                 src/util/ua_util.c
                 src/util/ua_list.c
                 src/util/ua_indexedList.c
                 src/util/ua_base64.c
-		${headers}
-		${generated_headers})
+                ${headers}
+                ${generated_headers})
 
-if(MULTITHREADING)
-    list(APPEND lib_sources src/server/ua_namespace_concurrent.c)
-else()
-    list(APPEND lib_sources src/server/ua_namespace.c)
-endif(MULTITHREADING)
+# build settings
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules")
+set(generate_src_options) # the options for the tools that generate code from xml-schema definitions
 
-set(generate_src_options)
+## compiler flags
+if(CMAKE_COMPILER_IS_GNUCC)
+add_definitions(-std=c99 -pedantic -pipe -fstack-protector -Wall -Wextra
+                -Wno-unused-parameter -Wno-unused-function -Wno-unused-label
+                -Wpointer-arith -Wformat -Wreturn-type -Wsign-compare -Wmultichar
+                -Wformat-nonliteral -Winit-self -Wuninitialized -Wno-deprecated
+                -Wformat-security -Werror -ffunction-sections -fdata-sections
+                -Wl,--gc-sections)
+	if(WIN32)
+	    add_definitions(-fno-stack-protector)
+	endif(WIN32)
+endif(CMAKE_COMPILER_IS_GNUCC)
 
-#types
+## auto-generate all types or only the relevant subset?
+option(TYPES_ONLY_NEEDED "Include only compile-needed types" OFF)
 if(TYPES_ONLY_NEEDED)
     list(APPEND generate_src_options "--only-needed")
 endif(TYPES_ONLY_NEEDED)
 
+## encodings
+set(UA_ENCODING_AMOUNT 1) # binary encoding
 
-if(UA_ENCODING_XML)
+### xml
+option(ENABLE_XML_ENCODING "Enable XML-encoding of the UA types" OFF)
+if(ENABLE_XML_ENCODING)
+    MATH(EXPR UA_ENCODING_AMOUNT "${UA_ENCODING_AMOUNT}+1")
+    find_package(EXPAT REQUIRED)
+    if(EXPAT_FOUND)
+        include_directories(${EXPAT_INCLUDE_DIRS})
+    else(EXPAT_FOUND)
+        message(FATAL_ERROR "Expat library not found.")
+    endif(EXPAT_FOUND)
     list(APPEND lib_sources src/ua_types_encoding_xml.c
                             src/server/ua_namespace_xml.c
                             src/ua_xml.c)
     list(APPEND generate_src_options "--with-xml")
-endif(UA_ENCODING_XML)
+endif(ENABLE_XML_ENCODING)
 
-if(UA_ENCODING_JSON)
+### json
+option(ENABLE_JSON_ENCODING "Enable JSON-encoding of the UA types" OFF)
+if(ENABLE_JSON_ENCODING)
+    MATH(EXPR UA_ENCODING_AMOUNT "${UA_ENCODING_AMOUNT}+1")
     list(APPEND lib_sources src/ua_types_encoding_json.c)
     list(APPEND generate_src_options "--with-json")
-endif(UA_ENCODING_JSON)
+endif(ENABLE_JSON_ENCODING)
+
+configure_file("src/ua_config.h.in" "${PROJECT_BINARY_DIR}/src_generated/ua_config.h")
+
+## multithreading
+option(ENABLE_MULTITHREADING "Enable multithreading" OFF)
+if(ENABLE_MULTITHREADING)
+    find_package(Threads REQUIRED)
+    list(APPEND lib_sources src/server/ua_namespace_concurrent.c)
+else()
+    list(APPEND lib_sources src/server/ua_namespace.c)
+endif(ENABLE_MULTITHREADING)
 
 add_library(open62541 ${lib_sources})
 
-# generate data structures
+## coverage
+option(ENABLE_COVERAGE "Enable gcov coverage" OFF)
+if(ENABLE_COVERAGE)
+    message(STATUS "Enabling gcov support")
+    set(CMAKE_BUILD_TYPE DEBUG)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
+    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
+    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
+endif(ENABLE_COVERAGE)
+
+# build generated code
+file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/src_generated")
+include_directories("${PROJECT_BINARY_DIR}/src_generated") 
 add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_types_generated.c
                           ${PROJECT_BINARY_DIR}/src_generated/ua_types_generated.h
                    COMMAND python ${PROJECT_SOURCE_DIR}/tools/generate_builtin.py ${generate_src_options} ${PROJECT_SOURCE_DIR}/schema/Opc.Ua.Types.bsd ${PROJECT_BINARY_DIR}/src_generated/ua_types_generated
@@ -145,40 +129,25 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_namespace_0.c
                    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_namespace.py
                            ${CMAKE_CURRENT_SOURCE_DIR}/schema/NodeIds.csv)
 
-# download queue.h if required
-if(WIN32)
-    if(NOT EXISTS "${PROJECT_BINARY_DIR}/src_generated/queue.h")
-        file(DOWNLOAD "http://openbsd.cs.toronto.edu/cgi-bin/cvsweb/~checkout~/src/sys/sys/queue.h" "${PROJECT_BINARY_DIR}/src_generated/queue.h" STATUS result)
-        list(GET result 0 download_ok)
-        if(NOT ${download_ok} MATCHES 0)
-            file(REMOVE "${PROJECT_BINARY_DIR}/src_generated/queue.h") # remove empty file if created
-            message(FATAL_ERROR "queue.h could not be downloaded")
-        endif()
-    endif()
-endif(WIN32)
-
-# build example implementations
+# build example server
 add_executable(exampleServer examples/opcuaServer.c
                              examples/networklayer.c)
 target_link_libraries(exampleServer open62541)
 if(WIN32)
     target_link_libraries(exampleServer ws2_32)
 endif(WIN32)
-if(MULTITHREADING)
+if(ENABLE_MULTITHREADING)
     target_link_libraries(exampleServer urcu-cds urcu)
-endif(MULTITHREADING)
+endif(ENABLE_MULTITHREADING)
 
-# build api server specificaion
-#add_executable(api-design examples/api-design/server.c)
-#target_link_libraries(api-design open62541)
-#if(WIN32)
-#    target_link_libraries(api-design ws2_32)
-#endif(WIN32)
-#if(MULTITHREADING)
-#    target_link_libraries(api-design urcu-cds urcu)
-#endif(MULTITHREADING)
+# build unit tests
+option(ENABLE_UNIT_TESTS "Run unit tests after building" OFF)
+if(ENABLE_UNIT_TESTS)
+    enable_testing()
+    add_subdirectory(tests)
+endif(ENABLE_UNIT_TESTS)
 
-# generate documentation
+# build documentation
 option(GENERATE_DOCUMENTATION "Generate doxygen documentation" OFF)
 if(GENERATE_DOCUMENTATION)
     find_package(Doxygen)
@@ -192,9 +161,25 @@ if(GENERATE_DOCUMENTATION)
                       COMMENT "Generating API documentation with Doxygen")
 endif(GENERATE_DOCUMENTATION)
 
-# run unit tests
-option(UNIT_TESTS "Run unit tests after building" OFF)
-if(UNIT_TESTS)
-    enable_testing()
-    add_subdirectory(tests)
-endif(UNIT_TESTS)
+# download queue.h if required
+if(WIN32)
+    if(NOT EXISTS "${PROJECT_BINARY_DIR}/src_generated/queue.h")
+        file(DOWNLOAD "http://openbsd.cs.toronto.edu/cgi-bin/cvsweb/~checkout~/src/sys/sys/queue.h" "${PROJECT_BINARY_DIR}/src_generated/queue.h" STATUS result)
+        list(GET result 0 download_ok)
+        if(NOT ${download_ok} MATCHES 0)
+            file(REMOVE "${PROJECT_BINARY_DIR}/src_generated/queue.h") # remove empty file if created
+            message(FATAL_ERROR "queue.h could not be downloaded")
+        endif()
+    endif()
+endif(WIN32)
+
+# build api server specificaion
+#add_executable(api-design examples/api-design/server.c)
+#target_link_libraries(api-design open62541)
+#if(WIN32)
+#    target_link_libraries(api-design ws2_32)
+#endif(WIN32)
+#if(MULTITHREADING)
+#    target_link_libraries(api-design urcu-cds urcu)
+#endif(MULTITHREADING)
+

+ 10 - 6
examples/networklayer.c

@@ -22,6 +22,10 @@
 #include <memory.h> // memset
 #include <fcntl.h> // fcntl
 
+#ifdef ENABLE_MULTITHREADING
+#include <pthread.h>
+#endif
+
 NL_Description NL_Description_TcpBinary  = {
 	NL_UA_ENCODING_BINARY,
 	NL_CONNECTIONTYPE_TCPV4,
@@ -34,7 +38,7 @@ NL_Description NL_Description_TcpBinary  = {
  * for activities. We then iterate over the list, check if we've got some activites
  * and call the corresponding callback (reader, listener).
  */
-#ifndef MULTITASKING
+#ifndef ENABLE_MULTITHREADING
 _Bool NL_ConnectionComparer(void *p1, void* p2) {
 	NL_Connection* c1 = (NL_Connection*) p1;
 	NL_Connection* c2 = (NL_Connection*) p2;
@@ -168,7 +172,7 @@ UA_Int32 NL_msgLoop(NL_data* nl, struct timeval *tv, UA_Int32(*worker)(void*), v
 #endif
 	return UA_SUCCESS;
 }
-#endif /* MULTITASKING */
+#endif /* ENABLE_MULTITHREADING */
 
 
 /** the tcp reader function */
@@ -225,7 +229,7 @@ void* NL_TCP_reader(NL_Connection *c) {
 	if (connectionState == CONNECTIONSTATE_CLOSE) {
 		// set connection's state to CONNECTIONSTATE_CLOSED and call callback to actually close
 		UA_TL_Connection_close(c->connection);
-#ifndef MULTITHREADING
+#ifndef ENABLE_MULTITHREADING
 		DBG_VERBOSE(printf("NL_TCP_reader - search element to remove\n"));
 		UA_list_Element* lec = UA_list_search(&(c->networkLayer->connections),NL_ConnectionComparer,c);
 		DBG_VERBOSE(printf("NL_TCP_reader - remove connection for handle=%d\n",((NL_Connection*)lec->payload)->connection.connectionHandle));
@@ -238,7 +242,7 @@ void* NL_TCP_reader(NL_Connection *c) {
 	return UA_NULL;
 }
 
-#ifdef MULTITHREADING
+#ifdef ENABLE_MULTITHREADING
 /** the tcp reader thread */
 void* NL_TCP_readerThread(NL_Connection *c) {
 	// just loop, NL_TCP_Reader will call the stack
@@ -379,7 +383,7 @@ void* NL_TCP_accept(NL_Connection* c) {
 			UA_Int32 retval = UA_SUCCESS;
 			retval |= UA_alloc((void**)&cclient,sizeof(NL_Connection));
 			NL_Connection_init(cclient, tld, newsockfd, NL_TCP_reader, (TL_Writer) NL_TCP_writer);
-#ifdef MULTITHREADING
+#ifdef ENABLE_MULTITHREADING
 			pthread_create( &(cclient->readerThreadHandle), NULL, (void*(*)(void*)) NL_TCP_readerThread, (void*) cclient);
 #else
 			UA_list_addPayloadToBack(&(tld->connections),cclient);
@@ -392,7 +396,7 @@ void* NL_TCP_accept(NL_Connection* c) {
 	return UA_NULL;
 }
 
-#ifdef MULTITHREADING
+#ifdef ENABLE_MULTITHREADING
 void* NL_TCP_listenThread(NL_Connection* c) {
 	NL_data* tld = c->networkLayer;
 

+ 4 - 2
src/ua_config.h.in

@@ -1,5 +1,7 @@
-/* Definitions to be set by cmake. */
+/* Buid options and configuration (set by cmake) */
 #define UA_ENCODING_AMOUNT @UA_ENCODING_AMOUNT@
+#cmakedefine ENABLE_MULTITHREADING
+
 #cmakedefine MSVC
 #cmakedefine WIN32
 
@@ -7,4 +9,4 @@
 #define INLINE inline
 #else
 #define INLINE __inline
-#endif
+#endif

+ 2 - 2
tests/CMakeLists.txt

@@ -5,9 +5,9 @@ set(LIBS open62541 ${CHECK_LIBRARIES} m)
 if(NOT WIN32)
     list(APPEND LIBS rt pthread)
 endif(NOT WIN32)
-if(MULTITHREADING)
+if(ENABLE_MULTITHREADING)
     list(APPEND LIBS urcu-cds urcu)
-endif(MULTITHREADING)
+endif(ENABLE_MULTITHREADING)
 
 add_executable(check_builtin check_builtin.c)
 target_link_libraries(check_builtin ${LIBS})