summaryrefslogtreecommitdiff
path: root/cmake/dependencies
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/dependencies')
-rw-r--r--cmake/dependencies/bpf.cmake20
-rw-r--r--cmake/dependencies/fuse.cmake23
-rw-r--r--cmake/dependencies/libgcrypt.cmake31
-rw-r--r--cmake/dependencies/libtoml.cmake5
-rw-r--r--cmake/dependencies/netmap.cmake18
-rw-r--r--cmake/dependencies/openssl.cmake26
-rw-r--r--cmake/dependencies/protobufc.cmake11
-rw-r--r--cmake/dependencies/rawsockets.cmake12
-rw-r--r--cmake/dependencies/robustmutex.cmake18
-rw-r--r--cmake/dependencies/sysrandom.cmake21
-rw-r--r--cmake/dependencies/systemlibraries.cmake20
11 files changed, 205 insertions, 0 deletions
diff --git a/cmake/dependencies/bpf.cmake b/cmake/dependencies/bpf.cmake
new file mode 100644
index 00000000..8c04937f
--- /dev/null
+++ b/cmake/dependencies/bpf.cmake
@@ -0,0 +1,20 @@
+# Berkeley Packet Filter support (BSD/macOS only)
+if (NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ find_path(BPF_C_INCLUDE_DIR
+ net/bpf.h
+ HINTS /usr/include /usr/local/include)
+
+ mark_as_advanced(BPF_C_INCLUDE_DIR)
+
+ if (BPF_C_INCLUDE_DIR)
+ set(DISABLE_BPF FALSE CACHE BOOL
+ "Disable Berkeley Packet Filter support for Ethernet IPCPs")
+ if (NOT DISABLE_BPF)
+ message(STATUS "Berkeley Packet Filter support for Ethernet IPCPs enabled")
+ set(HAVE_BPF TRUE)
+ else ()
+ message(STATUS "Berkeley Packet Filter support for Ethernet IPCPs disabled by user")
+ unset(HAVE_BPF)
+ endif ()
+ endif ()
+endif ()
diff --git a/cmake/dependencies/fuse.cmake b/cmake/dependencies/fuse.cmake
new file mode 100644
index 00000000..8ef60292
--- /dev/null
+++ b/cmake/dependencies/fuse.cmake
@@ -0,0 +1,23 @@
+find_library(FUSE_LIBRARIES fuse QUIET)
+if (FUSE_LIBRARIES)
+ #FIXME: Check for version >= 2.6
+ set(DISABLE_FUSE FALSE CACHE BOOL "Disable FUSE support")
+ if (NOT DISABLE_FUSE)
+ message(STATUS "FUSE support enabled")
+ set(FUSE_PREFIX "/tmp/ouroboros" CACHE STRING
+ "Mountpoint for RIB filesystem")
+ set(HAVE_FUSE TRUE CACHE INTERNAL "")
+ else ()
+ message(STATUS "FUSE support disabled by user")
+ unset(HAVE_FUSE CACHE)
+ endif ()
+else ()
+ message(STATUS "Install FUSE version > 2.6 to enable RIB access")
+endif ()
+
+if (NOT HAVE_FUSE)
+ set(FUSE_LIBRARIES "")
+ set(FUSE_INCLUDE_DIR "")
+endif ()
+
+mark_as_advanced(FUSE_LIBRARIES)
diff --git a/cmake/dependencies/libgcrypt.cmake b/cmake/dependencies/libgcrypt.cmake
new file mode 100644
index 00000000..90a25f36
--- /dev/null
+++ b/cmake/dependencies/libgcrypt.cmake
@@ -0,0 +1,31 @@
+find_library(LIBGCRYPT_LIBRARIES gcrypt QUIET)
+if (LIBGCRYPT_LIBRARIES)
+ 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}")
+ if (NOT GCVER VERSION_LESS "1.7.0")
+ set(DISABLE_LIBGCRYPT FALSE CACHE BOOL "Disable libgcrypt support")
+ if (NOT DISABLE_LIBGCRYPT)
+ message(STATUS "libgcrypt support enabled")
+ set(HAVE_LIBGCRYPT TRUE CACHE INTERNAL "")
+ else ()
+ message(STATUS "libgcrypt support disabled by user")
+ unset(HAVE_LIBGCRYPT CACHE)
+ endif()
+ else ()
+ message(STATUS "Install version >= \"1.7.0\" to enable libgcrypt support "
+ "(found version \"${GCVER}\")")
+ endif()
+ endif ()
+endif ()
+
+if (NOT HAVE_LIBGCRYPT)
+ set(LIBGCRYPT_LIBRARIES "")
+ set(LIBGCRYPT_INCLUDE_DIR "")
+endif ()
+
+mark_as_advanced(LIBGCRYPT_LIBRARIES LIBGCRYPT_INCLUDE_DIR)
diff --git a/cmake/dependencies/libtoml.cmake b/cmake/dependencies/libtoml.cmake
new file mode 100644
index 00000000..3974a1dd
--- /dev/null
+++ b/cmake/dependencies/libtoml.cmake
@@ -0,0 +1,5 @@
+find_library(LIBTOML_LIBRARIES toml QUIET)
+if (LIBTOML_LIBRARIES)
+ find_path(LIBTOML_INCLUDE toml.h)
+ mark_as_advanced(LIBTOML_LIBRARIES LIBTOML_INCLUDE)
+endif ()
diff --git a/cmake/dependencies/netmap.cmake b/cmake/dependencies/netmap.cmake
new file mode 100644
index 00000000..d8d3781b
--- /dev/null
+++ b/cmake/dependencies/netmap.cmake
@@ -0,0 +1,18 @@
+# netmap support (optional acceleration)
+find_path(NETMAP_C_INCLUDE_DIR
+ net/netmap_user.h
+ HINTS /usr/include /usr/local/include)
+
+mark_as_advanced(NETMAP_C_INCLUDE_DIR)
+
+if (NOT HAVE_RAW_SOCKETS AND NOT HAVE_BPF AND NETMAP_C_INCLUDE_DIR)
+ set(DISABLE_NETMAP FALSE CACHE BOOL
+ "Disable netmap support for ETH IPCPs")
+ if (NOT DISABLE_NETMAP)
+ message(STATUS "Netmap support for Ethernet IPCPs enabled")
+ set(HAVE_NETMAP TRUE)
+ else ()
+ message(STATUS "Netmap support for Ethernet IPCPs disabled by user")
+ unset(HAVE_NETMAP)
+ endif ()
+endif ()
diff --git a/cmake/dependencies/openssl.cmake b/cmake/dependencies/openssl.cmake
new file mode 100644
index 00000000..604d5d99
--- /dev/null
+++ b/cmake/dependencies/openssl.cmake
@@ -0,0 +1,26 @@
+find_package(OpenSSL QUIET)
+if (OPENSSL_FOUND)
+ set(HAVE_OPENSSL_RNG TRUE)
+ if (OPENSSL_VERSION VERSION_LESS "1.1.0")
+ message(STATUS "Install version >= \"1.1.0\" to enable OpenSSL support "
+ "(found version \"${OPENSSL_VERSION}\")")
+ else ()
+ set(DISABLE_OPENSSL FALSE CACHE BOOL "Disable OpenSSL support")
+ if (NOT DISABLE_OPENSSL)
+ message(STATUS "OpenSSL support enabled")
+ set(HAVE_OPENSSL TRUE CACHE INTERNAL "")
+ else()
+ message(STATUS "OpenSSL support disabled")
+ unset(HAVE_OPENSSL CACHE)
+ endif()
+ endif ()
+else()
+ message(STATUS "Install openSSL version >= \"1.1.0\" to enable OpenSSL support")
+ unset(HAVE_OPENSSL_RNG)
+ unset(HAVE_OPENSSL CACHE)
+ set(OPENSSL_INCLUDE_DIR "")
+ set(OPENSSL_LIBRARIES "")
+ set(OPENSSL_CRYPTO_LIBRARY "")
+endif ()
+
+mark_as_advanced(OPENSSL_LIBRARIES OPENSSL_CRYPTO_LIBRARY)
diff --git a/cmake/dependencies/protobufc.cmake b/cmake/dependencies/protobufc.cmake
new file mode 100644
index 00000000..f1fab59d
--- /dev/null
+++ b/cmake/dependencies/protobufc.cmake
@@ -0,0 +1,11 @@
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/utils")
+
+find_package(ProtobufC QUIET)
+if (NOT (PROTOBUF_C_INCLUDE_DIRS AND PROTOBUF_C_LIBRARY
+ AND PROTOBUF_PROTOC_C_EXECUTABLE))
+ message(FATAL_ERROR "Protobuf C compiler required but not found. "
+ "Please install Google Protocol Buffers.")
+else ()
+ message(STATUS "Found protobuf C compiler in ${PROTOBUF_PROTOC_C_EXECUTABLE}")
+endif ()
+include_directories(${PROTOBUF_C_INCLUDE_DIRS})
diff --git a/cmake/dependencies/rawsockets.cmake b/cmake/dependencies/rawsockets.cmake
new file mode 100644
index 00000000..92f7b8b7
--- /dev/null
+++ b/cmake/dependencies/rawsockets.cmake
@@ -0,0 +1,12 @@
+# Raw sockets support (Linux only)
+if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(DISABLE_RAW_SOCKETS FALSE CACHE BOOL
+ "Disable raw socket support for Ethernet IPCPs")
+ if (NOT DISABLE_RAW_SOCKETS)
+ message(STATUS "Raw socket support for Ethernet IPCPs enabled")
+ set(HAVE_RAW_SOCKETS TRUE)
+ else ()
+ message(STATUS "Raw socket support for Ethernet IPCPs disabled by user")
+ unset(HAVE_RAW_SOCKETS)
+ endif ()
+endif ()
diff --git a/cmake/dependencies/robustmutex.cmake b/cmake/dependencies/robustmutex.cmake
new file mode 100644
index 00000000..94aec8f0
--- /dev/null
+++ b/cmake/dependencies/robustmutex.cmake
@@ -0,0 +1,18 @@
+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)
+
+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")
+ unset(HAVE_ROBUST_MUTEX)
+ endif ()
+else()
+ message(STATUS "Robust mutex support not available")
+ unset(HAVE_ROBUST_MUTEX)
+endif ()
diff --git a/cmake/dependencies/sysrandom.cmake b/cmake/dependencies/sysrandom.cmake
new file mode 100644
index 00000000..972db801
--- /dev/null
+++ b/cmake/dependencies/sysrandom.cmake
@@ -0,0 +1,21 @@
+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 (SYS_RND_HDR)
+ message(STATUS "Found sys/random.h in ${SYS_RND_HDR}")
+ set(HAVE_SYS_RANDOM TRUE)
+ else ()
+ set(SYS_RND_HDR "")
+ unset(HAVE_SYS_RANDOM)
+ endif ()
+endif()
+
+# Validate that at least one secure random generator is available
+if (NOT ((CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") OR APPLE OR
+ HAVE_SYS_RANDOM OR HAVE_OPENSSL_RNG OR HAVE_LIBGCRYPT))
+ message(FATAL_ERROR "No secure random generator found, "
+ "please install libgcrypt (> 1.7.0) or OpenSSL")
+endif ()
+
+mark_as_advanced(SYS_RND_HDR)
diff --git a/cmake/dependencies/systemlibraries.cmake b/cmake/dependencies/systemlibraries.cmake
new file mode 100644
index 00000000..e00266d6
--- /dev/null
+++ b/cmake/dependencies/systemlibraries.cmake
@@ -0,0 +1,20 @@
+if (NOT APPLE)
+ find_library(LIBRT_LIBRARIES rt)
+ if (NOT LIBRT_LIBRARIES)
+ message(FATAL_ERROR "Could not find librt")
+ endif ()
+else ()
+ set(LIBRT_LIBRARIES "")
+endif ()
+
+find_library(LIBPTHREAD_LIBRARIES pthread)
+if (NOT LIBPTHREAD_LIBRARIES)
+ message(FATAL_ERROR "Could not find libpthread")
+endif ()
+
+find_library(LIBM_LIBRARIES m)
+if (NOT LIBM_LIBRARIES)
+ message(FATAL_ERROR "Could not find libm")
+endif ()
+
+mark_as_advanced(LIBRT_LIBRARIES LIBPTHREAD_LIBRARIES LIBM_LIBRARIES)