584 lines
19 KiB
CMake
584 lines
19 KiB
CMake
#
|
|
# VERMONT build scripts for CMake
|
|
# Copyright (C) 2007 Christoph Sommer <christoph.sommer@informatik.uni-erlangen.de>
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
#
|
|
|
|
PROJECT(VERMONT)
|
|
|
|
|
|
### CMake configuration
|
|
|
|
# allow building with old CMake. Use some bundled modules as a fallback
|
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.4)
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
|
|
|
|
# TODO: Bonus: Remove -Wno-unused-parameter and fix all code as this one gernerates hundreds of warnings
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11 -Werror -Wall -pedantic -Wextra -Wno-unused-parameter"
|
|
CACHE STRING
|
|
"Recommended C Flags"
|
|
FORCE)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Werror -Wall -pedantic -Wextra -Wno-unused-parameter"
|
|
CACHE STRING
|
|
"Recommended C++ Flags"
|
|
FORCE)
|
|
|
|
# Add our own specifc debug flag to the defaults
|
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -DDEBUG" CACHE STRING "Recommended C Debug Flags" FORCE)
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -DDEBUG" CACHE STRING "Recommended C++ Debug Flags" FORCE)
|
|
|
|
IF(NOT CMAKE_BUILD_TYPE)
|
|
SET(CMAKE_BUILD_TYPE Release CACHE STRING
|
|
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
|
|
FORCE)
|
|
ENDIF(NOT CMAKE_BUILD_TYPE)
|
|
message("* Current build type is : ${CMAKE_BUILD_TYPE}")
|
|
|
|
# move some config clutter to the advanced section
|
|
MARK_AS_ADVANCED(
|
|
CMAKE_BACKWARDS_COMPATIBILITY
|
|
CMAKE_INSTALL_PREFIX
|
|
EXECUTABLE_OUTPUT_PATH
|
|
LIBRARY_OUTPUT_PATH
|
|
)
|
|
|
|
include(CppcheckTargets)
|
|
include(CheckSymbolExists)
|
|
include(CheckIncludeFile)
|
|
|
|
### basic modules
|
|
|
|
ENABLE_TESTING()
|
|
|
|
SUBDIRS(
|
|
src
|
|
)
|
|
|
|
ADD_EXECUTABLE(vermont
|
|
src/vermont.cc
|
|
)
|
|
|
|
INCLUDE_DIRECTORIES(${VERMONT_SOURCE_DIR}/src)
|
|
|
|
TARGET_LINK_LIBRARIES(vermont
|
|
modules
|
|
core
|
|
anon
|
|
ipfixlolib
|
|
common
|
|
osdep
|
|
)
|
|
|
|
INSTALL(TARGETS vermont
|
|
RUNTIME DESTINATION bin
|
|
)
|
|
|
|
INSTALL(FILES README.md LICENSE
|
|
DESTINATION share/doc/vermont
|
|
)
|
|
|
|
INSTALL(DIRECTORY configs/
|
|
DESTINATION share/vermont/configs
|
|
)
|
|
|
|
add_cppcheck(vermont STYLE POSSIBLE_ERROR)
|
|
|
|
SET(PKG_CONFIG_USE_CMAKE_PREFIX_PATH 1)
|
|
|
|
### doxygen
|
|
|
|
#FIND_PACKAGE(Doxygen REQUIRED)
|
|
|
|
|
|
### threads
|
|
|
|
FIND_PACKAGE(Threads REQUIRED)
|
|
TARGET_LINK_LIBRARIES(vermont
|
|
${CMAKE_THREAD_LIBS_INIT}
|
|
)
|
|
|
|
### journald
|
|
|
|
OPTION(SUPPORT_JOURNALD "Enable systemd journald support" OFF)
|
|
IF (SUPPORT_JOURNALD)
|
|
SET(PKG_CONFIG_USE_CMAKE_PREFIX_PATH 1)
|
|
FIND_PACKAGE(PkgConfig REQUIRED)
|
|
PKG_CHECK_MODULES(JOURNALD libsystemd)
|
|
IF (NOT JOURNALD_FOUND)
|
|
PKG_CHECK_MODULES(JOURNALD libsystemd-journal)
|
|
IF (NOT JOURNALD_FOUND)
|
|
MESSAGE(FATAL_ERROR "Could not find journald libraries.")
|
|
ENDIF (NOT JOURNALD_FOUND)
|
|
ENDIF (NOT JOURNALD_FOUND)
|
|
ENDIF (SUPPORT_JOURNALD)
|
|
IF (JOURNALD_FOUND)
|
|
ADD_DEFINITIONS(-DJOURNALD_SUPPORT_ENABLED)
|
|
LINK_DIRECTORIES(${JOURNALD_LIBRARY_DIRS})
|
|
INCLUDE_DIRECTORIES(${JOURNALD_INCLUDE_DIRS})
|
|
TARGET_LINK_LIBRARIES(vermont
|
|
${JOURNALD_LIBRARIES}
|
|
)
|
|
ELSE (JOURNALD_FOUND)
|
|
REMOVE_DEFINITIONS(-DJOURNALD_SUPPORT_ENABLED)
|
|
ENDIF (JOURNALD_FOUND)
|
|
|
|
### ZMQ receiver
|
|
|
|
OPTION(SUPPORT_ZMQ "Enable ZMQ support" OFF)
|
|
IF (SUPPORT_ZMQ)
|
|
FIND_PACKAGE(PkgConfig REQUIRED)
|
|
PKG_CHECK_MODULES(CZMQ libczmq)
|
|
IF (NOT CZMQ_FOUND)
|
|
MESSAGE(FATAL_ERROR "Could not find libczmq libraries.")
|
|
ELSE (NOT CZMQ_FOUND)
|
|
MESSAGE(STATUS "Found libczmq libraries")
|
|
ENDIF (NOT CZMQ_FOUND)
|
|
ENDIF (SUPPORT_ZMQ)
|
|
IF (CZMQ_FOUND)
|
|
ADD_DEFINITIONS(-DZMQ_SUPPORT_ENABLED)
|
|
LINK_DIRECTORIES(${CZMQ_LIBRARY_DIRS})
|
|
INCLUDE_DIRECTORIES(${CZMQ_INCLUDE_DIRS})
|
|
TARGET_LINK_LIBRARIES(vermont
|
|
${CZMQ_LIBRARIES}
|
|
)
|
|
ELSE (CZMQ_FOUND)
|
|
REMOVE_DEFINITIONS(-DZMQ_SUPPORT_ENABLED)
|
|
ENDIF (CZMQ_FOUND)
|
|
|
|
OPTION(DISABLE_UDP_CONNECT "Do not run connect on UDP socket" OFF)
|
|
IF (DISABLE_UDP_CONNECT)
|
|
ADD_DEFINITIONS(-DDISABLE_UDP_CONNECT)
|
|
ENDIF (DISABLE_UDP_CONNECT)
|
|
|
|
### SO_BINDTODEVICE (VRF) support
|
|
|
|
OPTION(ENABLE_VRF "Enable support for binding sockets via SO_BINDTODEVICE (VRF). Warning: requires support in runtime kernel for SO_BINDTODEVICE and VRF !" OFF)
|
|
IF (ENABLE_VRF)
|
|
CHECK_SYMBOL_EXISTS("SO_BINDTODEVICE" "sys/socket.h" SO_BINDTODEVICE_FOUND)
|
|
IF (SO_BINDTODEVICE_FOUND)
|
|
ADD_DEFINITIONS(-DENABLE_VRF)
|
|
ELSE (SO_BINDTODEVICE_FOUND)
|
|
MESSAGE(WARNING "SO_BINDTODEVICE not found in sys/socket.h, will not build with ENABLE_VRF. Check Linux Kernel's userspace headers (eg: linux-libc-dev)")
|
|
ENDIF (SO_BINDTODEVICE_FOUND)
|
|
ENDIF (ENABLE_VRF)
|
|
CHECK_INCLUDE_FILE("linux/if.h" LINUX_IF_H_FOUND "-include sys/socket.h")
|
|
|
|
### MongoDB
|
|
|
|
OPTION(SUPPORT_MONGO "Enable MongoDB support" OFF)
|
|
IF (SUPPORT_MONGO)
|
|
FIND_PACKAGE(MONGO REQUIRED)
|
|
IF (NOT MONGO_FOUND)
|
|
MESSAGE(FATAL_ERROR "Could not find MongoDB libraries.")
|
|
ENDIF (NOT MONGO_FOUND)
|
|
ENDIF (SUPPORT_MONGO)
|
|
IF (MONGO_FOUND)
|
|
ADD_DEFINITIONS(-DMONGO_SUPPORT_ENABLED)
|
|
### Mongo is currently forcing BOOST_FILE_SYSTEM v2 when its
|
|
### headers are included. If we use version v3 in the rest of
|
|
### vermont, we will get compile time errors because of
|
|
### redefinitions of certain boost internals. If we support
|
|
### mongo, we therefore force v2 on the complete vermont
|
|
### compile process. Remove this if v2 is dropped by the boost
|
|
### people and mongo switched to v3
|
|
ADD_DEFINITIONS(-DBOOST_FILESYSTEM_VERSION=2)
|
|
|
|
IF (MONGO_VERSION_2)
|
|
ADD_DEFINITIONS(-DMONGO_VERSION_2)
|
|
MESSAGE(STATUS "Found MongoDB libraries (version 2)")
|
|
ELSE (MONGO_VERSION_2)
|
|
MESSAGE(STATUS "Found MongoDB libraries")
|
|
ENDIF (MONGO_VERSION_2)
|
|
|
|
INCLUDE_DIRECTORIES(${MONGO_INCLUDE_DIR})
|
|
TARGET_LINK_LIBRARIES(vermont
|
|
${MONGO_LIBRARIES}
|
|
)
|
|
ELSE (MONGO_FOUND)
|
|
REMOVE_DEFINITIONS(-DMONGO_SUPPORT_ENABLED)
|
|
REMOVE_DEFINITIONS(-DMONGO_VERSION_2)
|
|
REMOVE_DEFINITIONS(-DBOOST_FILESYSTEM_VERSION)
|
|
ENDIF (MONGO_FOUND)
|
|
|
|
### Redis
|
|
|
|
OPTION(SUPPORT_REDIS "Enable Redis support (for flow-inspector integration)" OFF)
|
|
IF (SUPPORT_REDIS)
|
|
FIND_PACKAGE(Redis REQUIRED)
|
|
IF (NOT HIREDIS_FOUND)
|
|
MESSAGE(FATAL_ERROR "Could not find hiredis client libraries.")
|
|
ENDIF (NOT HIREDIS_FOUND)
|
|
ENDIF (SUPPORT_REDIS)
|
|
IF (HIREDIS_FOUND)
|
|
ADD_DEFINITIONS(-DREDIS_SUPPORT_ENABLED)
|
|
INCLUDE_DIRECTORIES(${HIREDIS_INCLUDE_DIR})
|
|
TARGET_LINK_LIBRARIES(vermont
|
|
${HIREDIS_LIBRARIES}
|
|
)
|
|
ELSE (HIREDIS_FOUND)
|
|
REMOVE_DEFINITIONS(-DREDIS_SUPPORT_ENABLED)
|
|
ENDIF (HIREDIS_FOUND)
|
|
|
|
### boost
|
|
|
|
FIND_PACKAGE(Boost REQUIRED COMPONENTS
|
|
regex
|
|
thread
|
|
filesystem
|
|
unit_test_framework
|
|
system)
|
|
|
|
IF (Boost_FOUND)
|
|
MESSAGE(STATUS "Found boost libraries")
|
|
ADD_DEFINITIONS(-DHAVE_BOOST_FILESYSTEM)
|
|
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
|
|
TARGET_LINK_LIBRARIES(vermont
|
|
Boost::regex
|
|
Boost::filesystem
|
|
Boost::system
|
|
)
|
|
IF (SUPPORT_MONGO)
|
|
TARGET_LINK_LIBRARIES(vermont Boost::thread
|
|
)
|
|
ENDIF (SUPPORT_MONGO)
|
|
|
|
ELSE (Boost_FOUND)
|
|
MESSAGE(FATAL_ERROR "Could not find boost libraries")
|
|
REMOVE_DEFINITIONS(-DHAVE_BOOST_FILESYSTEM)
|
|
ENDIF (Boost_FOUND)
|
|
|
|
|
|
### libxml2
|
|
|
|
FIND_PACKAGE(LibXml2 REQUIRED)
|
|
MARK_AS_ADVANCED(
|
|
LIBXML2_INCLUDE_DIR
|
|
LIBXML2_LIBRARIES
|
|
)
|
|
IF (LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES)
|
|
MESSAGE(STATUS "Found libxml2 libraries")
|
|
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR})
|
|
TARGET_LINK_LIBRARIES(vermont
|
|
${LIBXML2_LIBRARIES}
|
|
)
|
|
ELSE (LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES)
|
|
MESSAGE(FATAL_ERROR "Could not find libxml2 libraries")
|
|
ENDIF (LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES)
|
|
|
|
### export time sanity checks
|
|
OPTION(EXPORT_TIME_SANITY_CHECK "Enable sanity checks on arrival of flows based on export time" OFF)
|
|
IF(EXPORT_TIME_SANITY_CHECK)
|
|
ADD_DEFINITIONS(-DEXPORT_TIME_SANITY_CHECK)
|
|
ENDIF(EXPORT_TIME_SANITY_CHECK)
|
|
|
|
### PCAP_MAX_CAPTURE_LENGTH
|
|
|
|
SET(PCAP_MAX_CAPTURE_LENGTH 128 CACHE STRING "Maximum PCAP packet capture length (this amount of bytes is always allocated for each packet, the smaller the better!)")
|
|
ADD_DEFINITIONS(-DPCAP_MAX_CAPTURE_LENGTH=${PCAP_MAX_CAPTURE_LENGTH})
|
|
|
|
# TODO: there is a bug in the code that occurs then the MAX_CAPTURE_LENGTH is > 65000
|
|
# that occurs in the offset calucation in PacketHashTable (the offset is a uint16_t that
|
|
# overflows when MAX_CAPTURE_LENGTH is too big.
|
|
# until we fixted the bug, we restrict ourselfs on on teh maximum capture length
|
|
IF (PCAP_MAX_CAPTURE_LENGTH GREATER 65000)
|
|
MESSAGE(FATAL_ERROR "PCAP_MAX_CAPTURE_LENGTH is too big. Make it <= 65000 or fix the bug described in CMakeLists.txt")
|
|
ENDIF(PCAP_MAX_CAPTURE_LENGTH GREATER 65000)
|
|
|
|
### PCAP_DEFAULT_CAPTURE_LENGTH
|
|
|
|
SET(PCAP_DEFAULT_CAPTURE_LENGTH 128 CACHE STRING "Default PCAP packet capture length (default value for PCAP snaplen if not defined in configuration)")
|
|
ADD_DEFINITIONS(-DPCAP_DEFAULT_CAPTURE_LENGTH=${PCAP_DEFAULT_CAPTURE_LENGTH})
|
|
|
|
|
|
### SUPPORT_NETFLOWV9
|
|
|
|
OPTION(SUPPORT_NETFLOWV9 "Enable NetFlow version 9 support" ON)
|
|
IF (SUPPORT_NETFLOWV9)
|
|
ADD_DEFINITIONS(-DSUPPORT_NETFLOWV9)
|
|
ELSE (SUPPORT_NETFLOWV9)
|
|
REMOVE_DEFINITIONS(-DSUPPORT_NETFLOWV9)
|
|
ENDIF (SUPPORT_NETFLOWV9)
|
|
|
|
|
|
### MySQL
|
|
|
|
OPTION(SUPPORT_MYSQL "Enable dbwriter/dbreader support" OFF)
|
|
IF (SUPPORT_MYSQL)
|
|
FIND_PACKAGE(MySQL REQUIRED)
|
|
MARK_AS_ADVANCED(
|
|
MYSQL_ADD_INCLUDE_DIR
|
|
MYSQL_ADD_LIBRARY
|
|
MYSQL_CONFIG
|
|
MYSQL_CONFIG_PREFER_PATH
|
|
)
|
|
IF (NOT MYSQL_FOUND)
|
|
MESSAGE(FATAL_ERROR "Could not find MySQL libraries.")
|
|
ENDIF (NOT MYSQL_FOUND)
|
|
ENDIF (SUPPORT_MYSQL)
|
|
IF (MYSQL_FOUND AND SUPPORT_MYSQL)
|
|
MESSAGE(STATUS "Found MySQL libraries")
|
|
ADD_DEFINITIONS(-DDB_SUPPORT_ENABLED)
|
|
INCLUDE_DIRECTORIES(${MYSQL_INCLUDE_DIR})
|
|
TARGET_LINK_LIBRARIES(vermont
|
|
${MYSQL_LIBRARIES}
|
|
)
|
|
ELSE (MYSQL_FOUND AND SUPPORT_MYSQL)
|
|
REMOVE_DEFINITIONS(-DDB_SUPPORT_ENABLED)
|
|
ENDIF (MYSQL_FOUND AND SUPPORT_MYSQL)
|
|
|
|
### PostgreSQL
|
|
# Bug in Ubuntu 14.04 does not find PSQL Libs
|
|
# https://bugs.launchpad.net/ubuntu/+source/cmake/+bug/1317135
|
|
set(PostgreSQL_ADDITIONAL_SEARCH_PATHS "/usr/include/postgresql/9.3/server")
|
|
|
|
OPTION(SUPPORT_POSTGRESQL "Enable PostgreSQL support" OFF)
|
|
IF (SUPPORT_POSTGRESQL)
|
|
FIND_PACKAGE(PostgreSQL REQUIRED)
|
|
IF (NOT PostgreSQL_FOUND)
|
|
MESSAGE(FATAL_ERROR "Could not find PostgreSQL libraries.")
|
|
ENDIF (NOT PostgreSQL_FOUND)
|
|
ENDIF (SUPPORT_POSTGRESQL)
|
|
IF (PostgreSQL_FOUND)
|
|
MESSAGE(STATUS "Found PostgreSQL libraries")
|
|
ADD_DEFINITIONS(-DPG_SUPPORT_ENABLED)
|
|
INCLUDE_DIRECTORIES(${PostgreSQL_INCLUDE_DIRS})
|
|
TARGET_LINK_LIBRARIES(vermont
|
|
${PostgreSQL_LIBRARIES}
|
|
)
|
|
ELSE (PostgreSQL_FOUND)
|
|
REMOVE_DEFINITIONS(-DPG_SUPPORT_ENABLED)
|
|
ENDIF (PostgreSQL_FOUND)
|
|
|
|
### Oracle
|
|
|
|
OPTION(SUPPORT_ORACLE "Enable Oracle support" OFF)
|
|
IF (SUPPORT_ORACLE)
|
|
FIND_PACKAGE(Oracle REQUIRED)
|
|
IF (NOT ORACLE_FOUND)
|
|
MESSAGE(FATAL_ERROR "Could not find Oracle libraries.")
|
|
ENDIF (NOT ORACLE_FOUND)
|
|
ENDIF (SUPPORT_ORACLE)
|
|
IF (ORACLE_FOUND)
|
|
MESSAGE(STATUS "Found Oracle libraries")
|
|
ADD_DEFINITIONS(-DORACLE_SUPPORT_ENABLED)
|
|
INCLUDE_DIRECTORIES(${ORACLE_INCLUDE_DIR})
|
|
TARGET_LINK_LIBRARIES(vermont
|
|
${ORACLE_CONNECTION_LIBRARIES}
|
|
)
|
|
TARGET_LINK_LIBRARIES(vermont
|
|
${ORACLE_CLIENT_LIBRARIES}
|
|
)
|
|
ELSE (ORACLE_FOUND)
|
|
REMOVE_DEFINITIONS(-DORACLE_SUPPORT_ENABLED)
|
|
ENDIF (ORACLE_FOUND)
|
|
|
|
### libpcap-mmap
|
|
|
|
OPTION(USE_PCAPMMAP "Use libpcap-mmap." OFF)
|
|
MARK_AS_ADVANCED(
|
|
PCAP_LIBRARY_REGULAR
|
|
PCAP_LIBRARY_MMAP
|
|
PCAP_INCLUDE_PATH
|
|
)
|
|
|
|
OPTION(USE_PFRING "Use pf_ring optimized libpcap." OFF)
|
|
MARK_AS_ADVANCED(
|
|
PCAP_LIBRARY_PFRING
|
|
PFRING_LIBRARY
|
|
)
|
|
|
|
IF (USE_PCAPMMAP)
|
|
|
|
IF (USE_PFRING)
|
|
MESSAGE(FATAL_ERROR "Both USE_PCAPMMAP and USE_PFRING have been selected. At most one of these options may be selected!")
|
|
ENDIF (USE_PFRING)
|
|
|
|
FIND_LIBRARY(PCAP_LIBRARY_MMAP NAMES pcap pcap-mmap PATHS ${VERMONT_SOURCE_DIR} ${VERMONT_SOURCE_DIR}/libpcap-mmap ${VERMONT_SOURCE_DIR}/../libpcap-mmap ${VERMONT_SOURCE_DIR}/../../../trunk/libpcap-mmap NO_DEFAULT_PATH)
|
|
FIND_PATH(PCAP_INCLUDE_PATH NAMES pcap.h PATHS ${VERMONT_SOURCE_DIR} ${VERMONT_SOURCE_DIR}/libpcap-mmap ${VERMONT_SOURCE_DIR}/../libpcap-mmap ${VERMONT_SOURCE_DIR}/../../../trunk/libpcap-mmap NO_DEFAULT_PATH)
|
|
SET(PCAP_LIBRARY "${PCAP_LIBRARY_MMAP}")
|
|
IF (PCAP_LIBRARY_MMAP)
|
|
SET(PCAP_LIBRARY "${PCAP_LIBRARY_MMAP}")
|
|
INCLUDE_DIRECTORIES(${PCAP_INCLUDE_PATH})
|
|
ELSE (PCAP_LIBRARY_MMAP)
|
|
MESSAGE(FATAL_ERROR "Could not find libpcap-mmap. This script also looks in directory ./libpcap-mmap, so maybe you want to create a symlink to the directory of the library.")
|
|
ENDIF (PCAP_LIBRARY_MMAP)
|
|
TARGET_LINK_LIBRARIES(vermont ${PCAP_LIBRARY})
|
|
|
|
ELSEIF (USE_PFRING)
|
|
|
|
FIND_LIBRARY(PCAP_LIBRARY_PFRING NAMES pcap PATHS ${VERMONT_SOURCE_DIR} ${VERMONT_SOURCE_DIR}/PF_RING/userland/libpcap-1.0.0-ring ${VERMONT_SOURCE_DIR}/../PF_RING/userland/libpcap-1.0.0-ring NO_DEFAULT_PATH)
|
|
IF (NOT PCAP_LIBRARY_PFRING)
|
|
MESSAGE(FATAL_ERROR "Could not find libpcap-ring. This script looks in directories ${VERMONT_SOURCE_DIR}/PF_RING/userland/libpcap-1.0.0-ring and ${VERMONT_SOURCE_DIR}/../PF_RING/userland/libpcap-1.0.0-ring, so maybe you want to create a symlink to the directory of the library.")
|
|
ENDIF (NOT PCAP_LIBRARY_PFRING)
|
|
FIND_LIBRARY(PFRING_LIBRARY NAMES pfring PATHS ${VERMONT_SOURCE_DIR} ${VERMONT_SOURCE_DIR}/PF_RING/userland/lib ${VERMONT_SOURCE_DIR}/../PF_RING/userland/lib NO_DEFAULT_PATH)
|
|
IF (NOT PFRING_LIBRARY)
|
|
MESSAGE(FATAL_ERROR "Could not find libpfring. This script looks in directories ${VERMONT_SOURCE_DIR}/PF_RING/userland/lib and ${VERMONT_SOURCE_DIR}/../PF_RING/userland/lib, so maybe you want to create a symlink to the directory of the library.")
|
|
ENDIF (NOT PFRING_LIBRARY)
|
|
FIND_PATH(PCAP_INCLUDE_PATH NAMES pcap.h PATHS ${VERMONT_SOURCE_DIR} ${VERMONT_SOURCE_DIR}/PF_RING/userland/libpcap-1.0.0-ring ${VERMONT_SOURCE_DIR}/../PF_RING/userland/libpcap-1.0.0-ring NO_DEFAULT_PATH)
|
|
TARGET_LINK_LIBRARIES(vermont ${PCAP_LIBRARY_PFRING})
|
|
TARGET_LINK_LIBRARIES(vermont ${PFRING_LIBRARY})
|
|
INCLUDE_DIRECTORIES(${PCAP_INCLUDE_PATH})
|
|
|
|
ELSE (USE_PCAPMMAP)
|
|
|
|
FIND_LIBRARY(PCAP_LIBRARY_REGULAR NAMES pcap)
|
|
IF (PCAP_LIBRARY_REGULAR)
|
|
SET(PCAP_LIBRARY "${PCAP_LIBRARY_REGULAR}")
|
|
ELSE (PCAP_LIBRARY_REGULAR)
|
|
MESSAGE(FATAL_ERROR "Could not find libpcap")
|
|
ENDIF (PCAP_LIBRARY_REGULAR)
|
|
TARGET_LINK_LIBRARIES(vermont ${PCAP_LIBRARY})
|
|
|
|
ENDIF (USE_PCAPMMAP)
|
|
|
|
|
|
|
|
IF (USE_PFRING)
|
|
ELSE (USE_PFRING)
|
|
FIND_LIBRARY(PCAP_LIBRARY_REGULAR NAMES pcap)
|
|
IF (PCAP_LIBRARY_REGULAR)
|
|
TARGET_LINK_LIBRARIES(vermont ${PCAP_LIBRARY_REGULAR})
|
|
ELSE (PCAP_LIBRARY_REGULAR)
|
|
MESSAGE(FATAL_ERROR "Could not find libpcap.")
|
|
ENDIF (PCAP_LIBRARY_REGULAR)
|
|
ENDIF (USE_PFRING)
|
|
|
|
### sctp
|
|
OPTION(SUPPORT_SCTP "Support SCTP transport protocol" ON)
|
|
IF (SUPPORT_SCTP)
|
|
FIND_PACKAGE(Sctp REQUIRED)
|
|
MARK_AS_ADVANCED(
|
|
SCTP_LIBRARIES
|
|
SCTP_INCLUDE_DIR
|
|
)
|
|
ADD_DEFINITIONS(-DSUPPORT_SCTP)
|
|
ELSE (SUPPORT_SCTP)
|
|
REMOVE_DEFINITIONS(-DSUPPORT_SCTP)
|
|
ENDIF (SUPPORT_SCTP)
|
|
|
|
### connection filter
|
|
|
|
OPTION(CONNECTION_FILTER "Enables/disables the connection filter." OFF)
|
|
OPTION(USE_GSL "Enables/disables GSL in connectionflter." ON)
|
|
|
|
IF (CONNECTION_FILTER AND NOT USE_GSL)
|
|
MESSAGE(FATAL_ERROR "GSL is needed for Connectionfilter at the moment.
|
|
You cannot have -DCONNECTION_FILTER=ON and -DUSE_GSL=OFF")
|
|
ENDIF (CONNECTION_FILTER AND NOT USE_GSL)
|
|
|
|
IF (CONNECTION_FILTER)
|
|
### gsl
|
|
IF (USE_GSL)
|
|
FIND_PACKAGE(GSL)
|
|
MARK_AS_ADVANCED(
|
|
GSL_INCLUDE_DIR
|
|
GSL_LIBRARIES
|
|
GSL_LIBRARY
|
|
BLAS_LIBRARY
|
|
)
|
|
IF (GSL_FOUND)
|
|
MESSAGE(STATUS "GNU scientific library found")
|
|
ELSE (GSL_FOUND)
|
|
MESSAGE(FATAL_ERROR "GNU scientific library not found. Please
|
|
install the library or use -DCONNECTION_FILTER=OFF and -DUSE_GSL=OFF")
|
|
ENDIF (GSL_FOUND)
|
|
ADD_DEFINITIONS(-DHAVE_GSL)
|
|
TARGET_LINK_LIBRARIES(vermont ${GSL_LIBRARIES})
|
|
ENDIF (USE_GSL)
|
|
ADD_DEFINITIONS(-DHAVE_CONNECTION_FILTER)
|
|
ENDIF(CONNECTION_FILTER)
|
|
|
|
### openssl
|
|
|
|
OPTION(SUPPORT_DTLS "Enables/Disables encryption support for IPFIX messages." OFF)
|
|
IF (SUPPORT_DTLS)
|
|
FIND_PACKAGE(OpenSSL)
|
|
IF (NOT OPENSSL_FOUND)
|
|
MESSAGE(FATAL_ERROR "Could not find openssl. Please install the library or turn off SUPPORT_DTLS")
|
|
ENDIF (NOT OPENSSL_FOUND)
|
|
IF (NOT (${OPENSSL_VERSION} VERSION_GREATER_EQUAL 1.1.0))
|
|
MESSAGE(FATAL_ERROR "openssl version must be 1.1.0 or higher")
|
|
ENDIF (NOT (${OPENSSL_VERSION} VERSION_GREATER_EQUAL 1.1.0))
|
|
IF (${OPENSSL_VERSION} VERSION_GREATER_EQUAL 1.1.1)
|
|
ADD_DEFINITIONS(-DHAVE_DTLS_get_data_mtu)
|
|
ENDIF (${OPENSSL_VERSION} VERSION_GREATER_EQUAL 1.1.1)
|
|
INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
|
|
TARGET_LINK_LIBRARIES(vermont ${OPENSSL_LIBRARIES})
|
|
ADD_DEFINITIONS(-DSUPPORT_DTLS)
|
|
|
|
## check wether there is a libcrypto
|
|
# FIND_PACKAGE(Crypto)
|
|
# IF (CRYPTO_FOUND)
|
|
# TARGET_LINK_LIBRARIES(vermont ${CRYPTO_LIBRARIES})
|
|
# ENDIF (CRYPTO_FOUND)
|
|
ELSE(SUPPORT_DTLS)
|
|
REMOVE_DEFINITIONS(-DSUPPORT_DLTS)
|
|
ENDIF(SUPPORT_DTLS)
|
|
|
|
OPTION(SUPPORT_DTLS_OVER_SCTP "Enables/Disables DTLS on SCTP streams." OFF)
|
|
IF (SUPPORT_DTLS_OVER_SCTP)
|
|
IF (SUPPORT_SCTP AND SUPPORT_DTLS)
|
|
# Make sure OpenSSL was compiled with SCTP support enabled
|
|
INCLUDE(CheckSymbolExists)
|
|
SET(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
|
|
# OpenSSL #defines OPENSSL_SCTP if it supports SCTP
|
|
CHECK_SYMBOL_EXISTS(OPENSSL_SCTP "openssl/ssl.h" OPENSSL_SUPPORTS_SCTP)
|
|
SET(CMAKE_REQUIRED_INCLUDES)
|
|
IF (NOT OPENSSL_SUPPORTS_SCTP)
|
|
MESSAGE(FATAL_ERROR "OpenSSL built without SCTP support. Rebuild OpenSSL with SCTP support or turn off SUPPORT_DTLS_OVER_SCTP")
|
|
ENDIF (NOT OPENSSL_SUPPORTS_SCTP)
|
|
ADD_DEFINITIONS(-DSUPPORT_DTLS_OVER_SCTP)
|
|
ELSE (SUPPORT_SCTP AND SUPPORT_DTLS)
|
|
MESSAGE(FATAL_ERROR "SUPPORT_DTLS_OVER_SCTP can only be enabled together with SUPPORT_SCTP and SUPPORT_DTLS")
|
|
REMOVE_DEFINITIONS(-DSUPPORT_DTLS_OVER_SCTP)
|
|
ENDIF(SUPPORT_SCTP AND SUPPORT_DTLS)
|
|
ELSE (SUPPORT_DTLS_OVER_SCTP)
|
|
REMOVE_DEFINITIONS(-DSUPPORT_DTLS_OVER_SCTP)
|
|
ENDIF (SUPPORT_DTLS_OVER_SCTP)
|
|
|
|
### tools
|
|
|
|
OPTION(WITH_TOOLS "Build misc tools." ON)
|
|
IF (WITH_TOOLS)
|
|
ADD_SUBDIRECTORY(tools)
|
|
ELSE (WITH_TOOLS)
|
|
ENDIF (WITH_TOOLS)
|
|
|
|
OPTION(DISABLE_MEMMANAGER "Disable custom memory manager (good for finding leaks with valgrind." OFF)
|
|
IF (DISABLE_MEMMANAGER)
|
|
if (NOT DEBUG)
|
|
MESSAGE(FATAL_ERROR "Flag DISABLE_MEMMANAGER may only be set if flag DEBUG is set")
|
|
ENDIF (NOT DEBUG)
|
|
ADD_DEFINITIONS(-DIM_DISABLE)
|
|
ENDIF (DISABLE_MEMMANAGER)
|
|
|
|
OPTION(EXIT_ON_EXCEPTION "Thrown exceptions in VERMONT result in a graceful shutdown. Useful for fuzz testing only." OFF)
|
|
MARK_AS_ADVANCED(EXIT_ON_EXCEPTION)
|
|
IF (EXIT_ON_EXCEPTION)
|
|
ADD_DEFINITIONS(-DEXIT_ON_EXCEPTION)
|
|
ENDIF(EXIT_ON_EXCEPTION)
|
|
|
|
|
|
### IPFIXLOLIB_RAWDIR_SUPPORT
|
|
|
|
OPTION(IPFIXLOLIB_RAWDIR_SUPPORT "Enable ipfix rawdir support" OFF)
|
|
IF (IPFIXLOLIB_RAWDIR_SUPPORT)
|
|
ADD_DEFINITIONS(-DIPFIXLOLIB_RAWDIR_SUPPORT)
|
|
ELSE (IPFIXLOLIB_RAWDIR_SUPPORT)
|
|
REMOVE_DEFINITIONS(-DIPFIXLOLIB_RAWDIR_SUPPORT)
|
|
ENDIF (IPFIXLOLIB_RAWDIR_SUPPORT)
|
|
|