summaryrefslogtreecommitdiff
path: root/src/lib/CMakeLists.txt
diff options
context:
space:
mode:
authordimitri staessens <[email protected]>2017-08-18 15:56:55 +0200
committerdimitri staessens <[email protected]>2017-08-21 10:25:19 +0200
commit8f58e5a3ec0e4a15fc8ae0911cc864f5dbf86c6e (patch)
tree0535742162921dc0d19c16f5b02d2f1c8f4fc493 /src/lib/CMakeLists.txt
parenteefae235dd7af96eef3dc4f82f706170c379d260 (diff)
downloadouroboros-8f58e5a3ec0e4a15fc8ae0911cc864f5dbf86c6e.tar.gz
ouroboros-8f58e5a3ec0e4a15fc8ae0911cc864f5dbf86c6e.zip
build: Revise the build system
This revises the build system to have configuration per system component. System settings can now be set using cmake. The standard compliance defines were removed from configuration header and are set in the sources where needed. Also some small code refactors, such as moving the data for shims out of the ipcp structure to the respective shims were performed.
Diffstat (limited to 'src/lib/CMakeLists.txt')
-rw-r--r--src/lib/CMakeLists.txt104
1 files changed, 89 insertions, 15 deletions
diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt
index 728d975a..4522613b 100644
--- a/src/lib/CMakeLists.txt
+++ b/src/lib/CMakeLists.txt
@@ -15,7 +15,7 @@ protobuf_generate_c(CACEP_PROTO_SRCS CACEP_PROTO_HDRS cacep.proto)
if (NOT APPLE)
find_library(LIBRT_LIBRARIES rt)
if (NOT LIBRT_LIBRARIES)
- message(FATAL_ERROR "Could not find librt.")
+ message(FATAL_ERROR "Could not find librt")
endif ()
else ()
set(LIBRT_LIBRARIES "")
@@ -23,7 +23,7 @@ endif ()
find_library(LIBPTHREAD_LIBRARIES pthread)
if (NOT LIBPTHREAD_LIBRARIES)
- message(FATAL_ERROR "Could not find libpthread.")
+ message(FATAL_ERROR "Could not find libpthread")
endif ()
include(CheckSymbolExists)
@@ -31,30 +31,60 @@ list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=200809L)
list(APPEND CMAKE_REQUIRED_DEFINITIONS -D__XSI_VISIBLE=500)
list(APPEND CMAKE_REQUIRED_LIBRARIES pthread)
check_symbol_exists(pthread_mutexattr_setrobust pthread.h HAVE_ROBUST_MUTEX)
-set(HAVE_ROBUST_MUTEX CACHE STRING "Have robust mutexes")
+
+if (HAVE_ROBUST_MUTEX)
+ set(DISABLE_ROBUST_MUTEXES FALSE CACHE BOOL "Disable robust mutex support")
+ if (NOT DISABLE_ROBUST_MUTEXES)
+ message(STATUS "Robust mutex support enabled")
+ set(HAVE_ROBUST_MUTEX TRUE)
+ else ()
+ message(STATUS "Robust mutex support disabled by user")
+ set(HAVE_ROBUST_MUTEX FALSE)
+ endif ()
+endif ()
find_library(LIBGCRYPT_LIBRARIES gcrypt)
if (LIBGCRYPT_LIBRARIES)
- find_path(LIBGCRYPT_INCLUDE_DIR gcrypt.h HINTS /usr/include /usr/local/include)
- if (NOT LIBGCRYPT_INCLUDE_DIR STREQUAL "GRYPT_INCLUDE_DIR-NOTFOUND")
+ find_path(LIBGCRYPT_INCLUDE_DIR gcrypt.h
+ HINTS /usr/include /usr/local/include)
+ if (LIBGCRYPT_INCLUDE_DIR)
file(STRINGS ${LIBGCRYPT_INCLUDE_DIR}/gcrypt.h GCSTR
REGEX "^#define GCRYPT_VERSION ")
string(REGEX REPLACE "^#define GCRYPT_VERSION \"(.*)\".*$" "\\1"
GCVER "${GCSTR}")
- message(STATUS "Found libgcrypt: ${LIBGCRYPT_LIBRARIES} (found version \"${GCVER}\")")
+ message(STATUS "Found libgcrypt: ${LIBGCRYPT_LIBRARIES}"
+ "(found version \"${GCVER}\")")
if (NOT GCVER VERSION_LESS "1.7.0")
- set(HAVE_LIBGCRYPT "1" CACHE STRING "Have libgcrypt")
+ set (DISABLE_LIBGCRYPT FALSE CACHE BOOL "Disable libgcrypt support")
+ if (NOT DISABLE_LIBGCRYPT)
+ message(STATUS "libgcrypt support enabled")
+ set(HAVE_LIBGCRYPT TRUE)
+ else ()
+ message(STATUS "libgcrpyt support disabled by user")
+ endif()
+ else ()
+ message(STATUS "Install version > \"1.7.0\" to enable libgcrypt support")
endif()
endif ()
-else ()
+endif ()
+
+if (NOT HAVE_LIBGCRYPT)
set(LIBGCRYPT_LIBRARIES "")
set(LIBGCRYPT_INCLUDE_DIR "")
endif ()
find_package(OpenSSL)
if (OPENSSL_FOUND)
- set(HAVE_OPENSSL "1" CACHE STRING "Have OpenSSL")
-else ()
+ set (DISABLE_OPENSSL FALSE CACHE BOOL "Disable OpenSSL support")
+ if (NOT DISABLE_OPENSSL)
+ message(STATUS "OpenSSL support enabled")
+ set(HAVE_OPENSSL TRUE)
+ else()
+ message(STATUS "OpenSSL support disabled by user")
+ endif()
+endif ()
+
+if (NOT HAVE_OPENSSL)
set (OPENSSL_INCLUDE_DIR "")
endif ()
@@ -62,9 +92,9 @@ if (APPLE OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
set(SYS_RND_HDR "")
else ()
find_path(SYS_RND_HDR sys/random.h PATH /usr/include/ /usr/local/include/)
- if (NOT SYS_RND_HDR STREQUAL "SYS_RND_HDR-NOTFOUND")
+ if (SYS_RND_HDR)
message(STATUS "Found sys/random.h in ${SYS_RND_HDR}")
- set(HAVE_SYS_RANDOM "1" CACHE STRING "Have random header")
+ set(HAVE_SYS_RANDOM TRUE)
else ()
set(SYS_RND_HDR "")
endif ()
@@ -73,10 +103,52 @@ endif()
if (NOT ((CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") OR APPLE OR
HAVE_SYS_RANDOM OR HAVE_OPENSSL OR HAVE_LIBGCRYPT))
message(FATAL_ERROR "No secure random generator found, "
- "please install libgcrypt (> 1.7.0) or OpenSSL"
- )
+ "please install libgcrypt (> 1.7.0) or OpenSSL")
endif ()
+mark_as_advanced(LIBRT_LIBRARIES LIBPTHREAD_LIBRARIES
+ LIBGCRYPT_LIBRARIES OPENSSL_LIBRARIES SYS_RND_INCLUDE_DIR
+ LIBGCRYPT_INCLUDE_DIR SYS_RND_HDR)
+
+math(EXPR SHM_BUFFER_EXPR "1 << 20")
+set(SHM_BUFFER_SIZE ${SHM_BUFFER_EXPR} CACHE STRING
+ "Number of blocks in SDU buffer, must be a power of 2")
+set(SYS_MAX_FLOWS 4096 CACHE STRING
+ "Maximum number of total flows for this system")
+set(AP_MAX_FLOWS 1024 CACHE STRING
+ "Maximum number of flows in an application")
+set(AP_RES_FDS 64 CACHE STRING
+ "Number of reserved flow descriptors per application")
+set(AP_MAX_FQUEUES 32 CACHE STRING
+ "Maximum number of flow sets per application")
+set(DU_BUFF_HEADSPACE 128 CACHE STRING
+ "Bytes of headspace to reserve for future headers")
+set(DU_BUFF_TAILSPACE 0 CACHE STRING
+ "Bytes of tailspace to reserve for future tails")
+if (NOT APPLE)
+ set(PTHREAD_COND_CLOCK "CLOCK_MONOTONIC" CACHE STRING
+ "Clock to use for condition variable timing")
+else ()
+ set (PTHREAD_COND_CLOCK "CLOCK_REALTIME" CACHE INTERNAL
+ "Clock to use for condition variable timing")
+endif ()
+set(SOCKET_TIMEOUT 1000 CACHE STRING
+ "Default timeout for responses from IPCPs (ms)")
+set(CDAP_REPLY_TIMEOUT 6000 CACHE STRING
+ "Timeout for CDAP to wait for reply")
+set(SHM_PREFIX "ouroboros" CACHE STRING
+ "String to prepend to POSIX shared memory filenames")
+set(SHM_RBUFF_PREFIX "/${SHM_PREFIX}.rbuff." CACHE INTERNAL
+ "Prefix for rbuff POSIX shared memory filenames")
+set(SHM_LOCKFILE_NAME "/${SHM_PREFIX}.lockfile" CACHE INTERNAL
+ "Filename for the POSIX shared memory lockfile")
+set(SHM_FLOW_SET_PREFIX "/${SHM_PREFIX}.set." CACHE INTERNAL
+ "Prefix for the POSIX shared memory flow set")
+set(SHM_RDRB_NAME "/${SHM_PREFIX}.rdrb" CACHE INTERNAL
+ "Name for the main POSIX shared memory buffer")
+set(SHM_RDRB_BLOCK_SIZE "sysconf(_SC_PAGESIZE)" CACHE STRING
+ "SDU buffer block size, multiple of pagesize for performance")
+
set(SOURCE_FILES
# Add source files here
bitmap.c
@@ -94,7 +166,6 @@ set(SOURCE_FILES
lockfile.c
logs.c
md5.c
- nsm.c
qos.c
qoscube.c
random.c
@@ -110,6 +181,9 @@ set(SOURCE_FILES
utils.c
)
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/config.h" @ONLY)
+
add_library(ouroboros SHARED ${SOURCE_FILES} ${IRM_PROTO_SRCS}
${IPCP_PROTO_SRCS} ${DIF_CONFIG_PROTO_SRCS} ${CDAP_PROTO_SRCS}
${CACEP_PROTO_SRCS} ${RO_PROTO_SRCS})