Compare commits

...

3 Commits

Author SHA1 Message Date
Dennis Klein
bafed1b224 Update 2018-04-15 18:36:16 +02:00
Dennis Klein
5e39011a5b Fix build 2018-04-15 18:04:52 +02:00
Dennis Klein
2327fd2115 Move test directory one up 2018-04-12 17:46:18 +02:00
63 changed files with 615 additions and 181 deletions

View File

@@ -17,14 +17,18 @@ set_fairmq_cmake_policies()
get_git_version(OUTVAR_PREFIX FairMQ)
project(FairMQ VERSION ${FairMQ_VERSION} LANGUAGES CXX)
message("${BWhite}${PROJECT_NAME}${CR} ${FairMQ_GIT_VERSION} from ${FairMQ_DATE}")
message(STATUS "${BWhite}${PROJECT_NAME}${CR} ${FairMQ_GIT_VERSION} from ${FairMQ_DATE}")
set_fairmq_defaults()
include(CTest)
################################################################################
# Build options ################################################################
option(BUILD_OFI_TRANSPORT "Build OFI transport." OFF)
option(BUILD_NANOMSG_TRANSPORT "Build nanomsg transport." OFF)
option(BUILD_OFI_TRANSPORT "Build experimental OFI transport." OFF)
option(BUILD_DDS_PLUGIN "Build DDS plugin." OFF)
################################################################################
@@ -32,11 +36,32 @@ option(BUILD_OFI_TRANSPORT "Build OFI transport." OFF)
if(Boost_INCLUDE_DIR) # Silence output, if Boost was found already
set(SILENCE_BOOST QUIET)
endif()
find_package(Boost 1.64 ${SILENCE_BOOST} REQUIRED COMPONENTS system)
find_package(Boost 1.64 ${SILENCE_BOOST} REQUIRED
COMPONENTS program_options thread system filesystem regex date_time signals
)
set(CMAKE_PREFIX_PATH ${FAIRLOGGER_ROOT} $ENV{FAIRLOGGER_ROOT} ${CMAKE_PREFIX_PATH})
find_package(FairLogger 1.0.1 REQUIRED)
find_package(ZeroMQ 4.2.2 REQUIRED)
if(BUILD_NANOMSG_TRANSPORT)
find_package(nanomsg REQUIRED)
set(CMAKE_PREFIX_PATH ${MSGPACK_ROOT} $ENV{MSGPACK_ROOT} ${CMAKE_PREFIX_PATH})
find_package(msgpack 2.1.5 REQUIRED)
endif()
if(BUILD_OFI_TRANSPORT)
find_package(OFI 1.6.0 REQUIRED COMPONENTS fi_sockets)
endif()
if(BUILD_DDS_PLUGIN)
find_package(DDS 2.0 REQUIRED)
endif()
if(BUILD_TESTING)
find_package(GTest REQUIRED)
endif()
################################################################################
@@ -48,6 +73,10 @@ configure_file(${PROJECT_NAME_LOWER}/Version.h.in
)
add_subdirectory(fairmq)
if(BUILD_TESTING)
add_subdirectory(test)
endif()
################################################################################
@@ -57,14 +86,32 @@ install_fairmq_cmake_package()
# Summary ######################################################################
message(" ")
message(" ${Cyan}COMPONENT BUILT? INFO${CR}")
message(" ${BWhite}library${CR} ${BGreen}YES${CR} (default, always built)")
message(STATUS " ")
message(STATUS " ${Cyan}COMPONENT BUILT? INFO${CR}")
message(STATUS " ${BWhite}library${CR} ${BGreen}YES${CR} (default, always built)")
if(BUILD_TESTING)
set(tests_summary "${BGreen}YES${CR} (default, disable with ${BMagenta}-DBUILD_TESTING=OFF${CR})")
else()
set(tests_summary "${BRed} NO${CR} (enable with ${BMagenta}-DBUILD_TESTING=ON${CR})")
endif()
message(STATUS " ${BWhite}tests${CR} ${tests_summary}")
if(BUILD_OFI_TRANSPORT)
set(ofi_summary "${BGreen}YES${CR} (disable with ${BMagenta}-DBUILD_OFI_TRANSPORT=OFF${CR})")
else()
set(ofi_summary "${BRed} NO${CR} (default, enable with ${BMagenta}-DBUILD_OFI_TRANSPORT=ON${CR})")
endif()
message(" ${BWhite}OFI transport${CR} ${ofi_summary}")
message(" ")
message(STATUS " ${BWhite}OFI transport${CR} ${ofi_summary} Experimental")
if(BUILD_NANOMSG_TRANSPORT)
set(nn_summary "${BGreen}YES${CR} (disable with ${BMagenta}-DBUILD_NANOMSG_TRANSPORT=OFF${CR})")
else()
set(nn_summary "${BRed} NO${CR} (default, enable with ${BMagenta}-DBUILD_NANOMSG_TRANSPORT=ON${CR})")
endif()
message(STATUS " ${BWhite}nanomsg transport${CR} ${nn_summary}")
if(BUILD_DDS_PLUGIN)
set(dds_summary "${BGreen}YES${CR} (disable with ${BMagenta}-DBUILD_DDS_PLUGIN=OFF${CR})")
else()
set(dds_summary "${BRed} NO${CR} (default, enable with ${BMagenta}-DBUILD_DDS_PLUGIN=ON${CR})")
endif()
message(STATUS " ${BWhite}DDS plugin${CR} ${dds_summary}")
message(STATUS " ")
################################################################################

View File

@@ -4,7 +4,19 @@ C++ Message Queuing Library
## Dependencies
TODO
* CMake
* GTest
* Boost
* FairLogger
* dl
* pthread
* rt (Linux)
* ZeroMQ
* Msgpack (optional, nanomsg transport)
* nanomsg (optional, nanomsg transport)
* OFI (optional, OFI transport)
* Protobuf (optional, OFI transport)
* DDS (optional, DDS plugin)
## Installation
@@ -15,6 +27,14 @@ cmake -DCMAKE_INSTALL_PREFIX=./fairmq_install ../fairmq
cmake --build . --target install
```
If dependencies are not installed in standard system
directories, you can hint the installation location
via `-DCMAKE_PREFIX_PATH=...` or per dependency via
`-D{DEPENDENCY}_ROOT=...`. `{DEPENDENCY}` can be `GTEST`,
`BOOST`, `FAIRLOGGER`, `ZEROMQ`, `MSGPACK`, `NANOMSG`,
`OFI`, `PROTOBUF`, or `DDS` (`*_ROOT` variables can also
be environment variables).
## Usage
In your `CMakeLists.txt`:
@@ -47,21 +67,23 @@ The above is useful, if you need to customize the `find_package` calls of FairMQ
## CMake options
TODO complete list
On command line:
* `-DDISABLE_COLOR=ON` disables coloured console output.
* `-DBUILD_TESTING=OFF` disables building of tests.
* `-DBUILD_NANOMSG_TRANSPORT=ON` enables building of nanomsg transport.
* `-DBUILD_OFI_TRANSPORT=ON` enables building of the experimental OFI transport.
* `-DBUILD_DDS_PLUGIN=ON` enables building of the DDS plugin.
In front of the `find_package(FairMQ)` call:
* `set(BUILD_OFI_TRANSPORT ON)` enables building of the experimental OFI transport.
* `set(FairMQ_PACKAGE_DEPENDENCIES_DISABLED ON)` disables implicit discovery of all transitive package dependencies.
* ... TODO
After the `find_package(FairMQ)` the following CMake variables are defined:
* `${FairMQ_BOOST_COMPONENTS}` contains the list of Boost components FairMQ depends on.
* ... TODO
## Documentation

74
cmake/FindDDS.cmake Normal file
View File

@@ -0,0 +1,74 @@
################################################################################
# Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
# #
# This software is distributed under the terms of the #
# GNU Lesser General Public Licence (LGPL) version 3, #
# copied verbatim in the file "LICENSE" #
################################################################################
find_path(DDS_INCLUDE_DIR
NAMES dds_intercom.h
HINTS ${DDS_ROOT} $ENV{DDS_ROOT}
PATH_SUFFIXES include
)
find_path(DDS_LIBRARY_DIR
NAMES libdds_intercom_lib.dylib libdds_intercom_lib.so
HINTS ${DDS_ROOT} $ENV{DDS_ROOT}
PATH_SUFFIXES lib
)
find_library(DDS_INTERCOM_LIBRARY_SHARED
NAMES libdds_intercom_lib.dylib libdds_intercom_lib.so
HINTS ${DDS_ROOT} $ENV{DDS_ROOT}
PATH_SUFFIXES lib
DOC "Path to libdds_intercom_lib.dylib libdds_intercom_lib.so."
)
find_library(DDS_PROTOCOL_LIBRARY_SHARED
NAMES libdds_protocol_lib.dylib libdds_protocol_lib.so
HINTS ${DDS_ROOT} $ENV{DDS_ROOT}
PATH_SUFFIXES lib
DOC "Path to libdds_protocol_lib.dylib libdds_protocol_lib.so."
)
find_library(DDS_USER_DEFAULTS_LIBRARY_SHARED
NAMES libdds-user-defaults.dylib libdds-user-defaults.so
HINTS ${DDS_ROOT} $ENV{DDS_ROOT}
PATH_SUFFIXES lib
DOC "Path to libdds-user-defaults.dylib libdds-user-defaults.so."
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(DDS
REQUIRED_VARS
DDS_INCLUDE_DIR
DDS_LIBRARY_DIR
DDS_INTERCOM_LIBRARY_SHARED
DDS_PROTOCOL_LIBRARY_SHARED
DDS_USER_DEFAULTS_LIBRARY_SHARED
)
if(NOT TARGET DDS::dds_intercom_lib AND DDS_FOUND)
add_library(DDS::dds_intercom_lib SHARED IMPORTED)
set_target_properties(DDS::dds_intercom_lib PROPERTIES
IMPORTED_LOCATION ${DDS_INTERCOM_LIBRARY_SHARED}
INTERFACE_INCLUDE_DIRECTORIES ${DDS_INCLUDE_DIR}
)
endif()
if(NOT TARGET DDS::dds_protocol_lib AND DDS_FOUND)
add_library(DDS::dds_protocol_lib SHARED IMPORTED)
set_target_properties(DDS::dds_protocol_lib PROPERTIES
IMPORTED_LOCATION ${DDS_PROTOCOL_LIBRARY_SHARED}
INTERFACE_INCLUDE_DIRECTORIES ${DDS_INCLUDE_DIR}
)
endif()
if(NOT TARGET DDS::dds-user-defaults AND DDS_FOUND)
add_library(DDS::dds-user-defaults SHARED IMPORTED)
set_target_properties(DDS::dds-user-defaults PROPERTIES
IMPORTED_LOCATION ${DDS_USER_DEFAULTS_LIBRARY_SHARED}
INTERFACE_INCLUDE_DIRECTORIES ${DDS_INCLUDE_DIR}
)
endif()

View File

@@ -0,0 +1,67 @@
################################################################################
# Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
# #
# This software is distributed under the terms of the #
# GNU Lesser General Public Licence (LGPL) version 3, #
# copied verbatim in the file "LICENSE" #
################################################################################
find_path(FLATBUFFERS_INCLUDE_DIR
NAMES flatbuffers/flatbuffers.h
HINTS ${FLATBUFFERS_ROOT} $ENV{FLATBUFFERS_ROOT}
PATH_SUFFIXES include
)
find_path(FLATBUFFERS_LIBRARY_DIR
NAMES libflatbuffers.a
HINTS ${FLATBUFFERS_ROOT} $ENV{FLATBUFFERS_ROOT}
PATH_SUFFIXES lib
)
find_library(FLATBUFFERS_STATIC_LIBRARY
NAMES libflatbuffers.a
HINTS ${FLATBUFFERS_ROOT} $ENV{FLATBUFFERS_ROOT}
PATH_SUFFIXES lib
)
find_path(FLATBUFFERS_BINARY_DIR
NAMES flatc
HINTS ${FLATBUFFERS_ROOT} $ENV{FLATBUFFERS_ROOT}
PATH_SUFFIXES bin
)
find_program(FLATBUFFERS_BINARY_FLATC
NAMES flatc
HINTS ${FLATBUFFERS_ROOT} $ENV{FLATBUFFERS_ROOT}
PATH_SUFFIXES bin
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(FlatBuffers
REQUIRED_VARS
FLATBUFFERS_INCLUDE_DIR
FLATBUFFERS_LIBRARY_DIR
FLATBUFFERS_BINARY_DIR
)
# idempotently import targets
if(NOT TARGET FlatBuffers)
if(FLATBUFFERS_FOUND)
# import target
add_library(FlatBuffers STATIC IMPORTED)
set_target_properties(FlatBuffers PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${FLATBUFFERS_INCLUDE_DIR}
IMPORTED_LOCATION ${FLATBUFFERS_STATIC_LIBRARY}
)
endif()
endif()
if(NOT TARGET FlatBuffers::flatc)
if(FLATBUFFERS_FOUND)
# import target
add_executable(FlatBuffers::flatc IMPORTED)
set_target_properties(FlatBuffers::flatc PROPERTIES
IMPORTED_LOCATION ${FLATBUFFERS_BINARY_FLATC}
)
endif()
endif()

39
cmake/FindMsgpack.cmake Normal file
View File

@@ -0,0 +1,39 @@
################################################################################
# Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
# #
# This software is distributed under the terms of the #
# GNU Lesser General Public Licence (LGPL) version 3, #
# copied verbatim in the file "LICENSE" #
################################################################################
find_path(MSGPACK_INCLUDE_DIR
NAMES msgpack.hpp
HINTS ${MSGPACK_ROOT} $ENV{MSGPACK_ROOT}
PATH_SUFFIXES include
)
find_path(MSGPACK_LIBRARY_DIR
NAMES libmsgpackc.dylib libmsgpackc.so
HINTS ${MSGPACK_ROOT} $ENV{MSGPACK_ROOT}
PATH_SUFFIXES lib
)
find_library(MSGPACK_LIBRARY_SHARED
NAMES libmsgpackc.dylib libmsgpackc.so
HINTS ${MSGPACK_ROOT} $ENV{MSGPACK_ROOT}
PATH_SUFFIXES lib
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Msgpack
REQUIRED_VARS MSGPACK_INCLUDE_DIR MSGPACK_LIBRARY_DIR MSGPACK_LIBRARY_SHARED
)
# idempotently import targets
if(NOT TARGET Msgpack AND Msgpack_FOUND)
add_library(Msgpack SHARED IMPORTED)
set_target_properties(Msgpack PROPERTIES
IMPORTED_LOCATION ${MSGPACK_LIBRARY_SHARED}
INTERFACE_INCLUDE_DIRECTORIES ${MSGPACK_INCLUDE_DIR}
)
endif()

View File

@@ -79,7 +79,7 @@ if(PKG_CONFIG_FOUND)
)
endif()
if(OFI_FOUND)
if(NOT TARGET OFI::libfabric AND OFI_FOUND)
# Define an imported target
add_library(OFI::libfabric SHARED IMPORTED GLOBAL)
set_target_properties(OFI::libfabric PROPERTIES

112
cmake/FindZeroMQ.cmake Normal file
View File

@@ -0,0 +1,112 @@
################################################################################
# Copyright (C) 2012-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
# #
# This software is distributed under the terms of the #
# GNU Lesser General Public Licence (LGPL) version 3, #
# copied verbatim in the file "LICENSE" #
################################################################################
#
# Authors:
#
# Mohammad Al-Turany
# Dario Berzano
# Dennis Klein
# Matthias Richter
# Alexey Rybalchenko
# Florian Uhlig
#
#
# #############################
# # Locate the ZeroMQ library #
# #############################
#
#
# Usage:
#
# find_package(ZeroMQ [version] [QUIET] [REQUIRED])
#
#
# Defines the following variables:
#
# ZeroMQ_FOUND - Found the ZeroMQ library
# ZeroMQ_INCLUDE_DIR (CMake cache) - Include directory
# ZeroMQ_LIBRARY_SHARED (CMake cache) - Path to shared libzmq
# ZeroMQ_LIBRARY_STATIC (CMake cache) - Path to static libzmq
# ZeroMQ_VERSION - full version string
# ZeroMQ_VERSION_MAJOR - major version component
# ZeroMQ_VERSION_MINOR - minor version component
# ZeroMQ_VERSION_PATCH - patch version component
#
#
# Accepts the following variables as hints for installation directories:
#
# ZEROMQ_ROOT (CMake var, ENV var)
#
#
# If the above variables are not defined, or if ZeroMQ could not be found there,
# it will look for it in the system directories. Custom ZeroMQ installations
# will always have priority over system ones.
#
if(NOT ZEROMQ_ROOT)
set(ZEROMQ_ROOT $ENV{ZEROMQ_ROOT})
endif()
find_path(ZeroMQ_INCLUDE_DIR
NAMES zmq.h zmq_utils.h
HINTS ${ZEROMQ_ROOT} $ENV{ZEROMQ_ROOT}
PATH_SUFFIXES include
DOC "ZeroMQ include directories"
)
find_library(ZeroMQ_LIBRARY_SHARED
NAMES libzmq.dylib libzmq.so
HINTS ${ZEROMQ_ROOT} $ENV{ZEROMQ_ROOT}
PATH_SUFFIXES lib
DOC "Path to libzmq.dylib or libzmq.so"
)
find_library(ZeroMQ_LIBRARY_STATIC NAMES libzmq.a
HINTS ${ZEROMQ_ROOT} $ENV{ZEROMQ_ROOT}
PATH_SUFFIXES lib
DOC "Path to libzmq.a"
)
find_file(ZeroMQ_HEADER_FILE "zmq.h"
${ZeroMQ_INCLUDE_DIR}
NO_DEFAULT_PATH
)
if(DEFINED ZeroMQ_HEADER_FILE)
file(READ "${ZeroMQ_HEADER_FILE}" _ZeroMQ_HEADER_FILE_CONTENT)
string(REGEX MATCH "#define ZMQ_VERSION_MAJOR ([0-9])" _MATCH "${_ZeroMQ_HEADER_FILE_CONTENT}")
set(ZeroMQ_VERSION_MAJOR ${CMAKE_MATCH_1})
string(REGEX MATCH "#define ZMQ_VERSION_MINOR ([0-9])" _MATCH "${_ZeroMQ_HEADER_FILE_CONTENT}")
set(ZeroMQ_VERSION_MINOR ${CMAKE_MATCH_1})
string(REGEX MATCH "#define ZMQ_VERSION_PATCH ([0-9])" _MATCH "${_ZeroMQ_HEADER_FILE_CONTENT}")
set(ZeroMQ_VERSION_PATCH ${CMAKE_MATCH_1})
set(ZeroMQ_VERSION "${ZeroMQ_VERSION_MAJOR}.${ZeroMQ_VERSION_MINOR}.${ZeroMQ_VERSION_PATCH}")
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(ZeroMQ
REQUIRED_VARS ZeroMQ_LIBRARY_SHARED ZeroMQ_INCLUDE_DIR ZeroMQ_LIBRARY_STATIC
VERSION_VAR ZeroMQ_VERSION
)
if(ZeroMQ_FOUND AND NOT TARGET ZeroMQ)
add_library(ZeroMQ SHARED IMPORTED)
set_target_properties(ZeroMQ PROPERTIES
IMPORTED_LOCATION ${ZeroMQ_LIBRARY_SHARED}
INTERFACE_INCLUDE_DIRECTORIES ${ZeroMQ_INCLUDE_DIR}
)
endif()
mark_as_advanced(
ZeroMQ_LIBRARIES
ZeroMQ_LIBRARY_SHARED
ZeroMQ_LIBRARY_STATIC
ZeroMQ_HEADER_FILE
ZeroMQ_VERSION_MAJOR
ZeroMQ_VERSION_MINOR
ZeroMQ_VERSION_PATCH
)

34
cmake/Findnanomsg.cmake Normal file
View File

@@ -0,0 +1,34 @@
################################################################################
# Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
# #
# This software is distributed under the terms of the #
# GNU Lesser General Public Licence (LGPL) version 3, #
# copied verbatim in the file "LICENSE" #
################################################################################
find_path(NANOMSG_INCLUDE_DIR
NAMES nanomsg/nn.h
HINTS ${NANOMSG_ROOT} $ENV{NANOMSG_ROOT}
PATH_SUFFIXES include
DOC "Path to nanomsg include header files."
)
find_library(NANOMSG_LIBRARY_SHARED
NAMES libnanomsg.dylib libnanomsg.so
HINTS ${NANOMSG_ROOT} $ENV{NANOMSG_ROOT}
PATH_SUFFIXES lib
DOC "Path to libnanomsg.dylib libnanomsg.so."
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(nanomsg
REQUIRED_VARS NANOMSG_LIBRARY_SHARED NANOMSG_INCLUDE_DIR
)
if(NOT TARGET nanomsg AND nanomsg_FOUND)
add_library(nanomsg SHARED IMPORTED)
set_target_properties(nanomsg PROPERTIES
IMPORTED_LOCATION ${NANOMSG_LIBRARY_SHARED}
INTERFACE_INCLUDE_DIRECTORIES ${NANOMSG_INCLUDE_DIR}
)
endif()

139
cmake/GTestHelper.cmake Normal file
View File

@@ -0,0 +1,139 @@
################################################################################
# Copyright (C) 2017-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
# #
# This software is distributed under the terms of the #
# GNU Lesser General Public Licence (LGPL) version 3, #
# copied verbatim in the file "LICENSE" #
################################################################################
# ##########################
# # GTest helper functions #
# ##########################
#
# The helper functions allow concise cmake files for GTest based test submodules.
# Testsuites register themselves automatically as CTest test.
#
#
# Usage:
#
# add_testsuite(<name> SOURCES source1 [source2 ...]
# [DEPENDS dep1 [dep2 ...]]
# [LINKS linklib1 [linklib2 ...]
# [INCLUDES dir1 [dir2 ...]
# [TIMEOUT seconds]
# [RUN_SERIAL ON/OFF])
#
# -> created target: testsuite_<name>
#
# add_testhelper(<name> SOURCES source1 [source2 ...]
# [DEPENDS dep1 [dep2 ...]]
# [LINKS linklib1 [linklib2 ...]
# [INCLUDES dir1 [dir2 ...])
#
# -> created target: testhelper_<name>
#
# add_testlib(<name> SOURCES source1 [source2 ...]
# [DEPENDS dep1 [dep2 ...]]
# [LINKS linklib1 [linklib2 ...]
# [INCLUDES dir1 [dir2 ...])
#
# -> created target: <name>
#
# The above add_* functions add all created targets to the cmake
# variable ALL_TEST_TARGETS which can be used to create an aggregate
# target, e.g.:
#
# add_custom_target(AllTests DEPENDS ${ALL_TEST_TARGETS})
#
#
function(add_testsuite suitename)
cmake_parse_arguments(testsuite
""
"TIMEOUT;RUN_SERIAL"
"SOURCES;LINKS;DEPENDS;INCLUDES"
${ARGN}
)
list(INSERT testsuite_LINKS 0 GTest::Main GTest::GTest)
set(target "testsuite_${suitename}")
add_executable(${target} ${testsuite_SOURCES})
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
set_target_properties("${target}" PROPERTIES LINK_FLAGS "-Wl,--no-as-needed")
endif()
target_link_libraries(${target} ${testsuite_LINKS})
if(testsuite_DEPENDS)
add_dependencies(${target} ${testsuite_DEPENDS})
endif()
if(testsuite_INCLUDES)
target_include_directories(${target} PUBLIC ${testsuite_INCLUDES})
endif()
add_test(NAME "${suitename}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND ${target})
if(testsuite_TIMEOUT)
set_tests_properties("${suitename}" PROPERTIES TIMEOUT ${testsuite_TIMEOUT})
endif()
if(testsuite_RUN_SERIAL)
set_tests_properties("${suitename}" PROPERTIES RUN_SERIAL ${testsuite_RUN_SERIAL})
endif()
list(APPEND ALL_TEST_TARGETS ${target})
set(ALL_TEST_TARGETS ${ALL_TEST_TARGETS} PARENT_SCOPE)
endfunction()
function(add_testhelper helpername)
cmake_parse_arguments(testhelper
""
""
"SOURCES;LINKS;DEPENDS;INCLUDES"
${ARGN}
)
set(target "testhelper_${helpername}")
add_executable(${target} ${testhelper_SOURCES})
if(testhelper_LINKS)
target_link_libraries(${target} ${testhelper_LINKS})
endif()
if(testhelper_DEPENDS)
add_dependencies(${target} ${testhelper_DEPENDS})
endif()
if(testhelper_INCLUDES)
target_include_directories(${target} PUBLIC ${testhelper_INCLUDES})
endif()
list(APPEND ALL_TEST_TARGETS ${target})
set(ALL_TEST_TARGETS ${ALL_TEST_TARGETS} PARENT_SCOPE)
endfunction()
function(add_testlib libname)
cmake_parse_arguments(testlib
"HIDDEN"
"VERSION"
"SOURCES;LINKS;DEPENDS;INCLUDES"
${ARGN}
)
set(target "${libname}")
add_library(${target} SHARED ${testlib_SOURCES})
if(testlib_LINKS)
target_link_libraries(${target} ${testlib_LINKS})
endif()
if(testlib_DEPENDS)
add_dependencies(${target} ${testlib_DEPENDS})
endif()
if(testlib_INCLUDES)
target_include_directories(${target} PUBLIC ${testlib_INCLUDES})
endif()
if(testlib_HIDDEN)
set_target_properties(${target} PROPERTIES CXX_VISIBILITY_PRESET hidden)
endif()
if(testlib_VERSION)
set_target_properties(${target} PROPERTIES VERSION ${testlib_VERSION})
endif()
list(APPEND ALL_TEST_TARGETS ${target})
set(ALL_TEST_TARGETS ${ALL_TEST_TARGETS} PARENT_SCOPE)
endfunction()

View File

@@ -1,63 +1,35 @@
################################################################################
# Copyright (C) 2012-2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
# Copyright (C) 2012-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
# #
# This software is distributed under the terms of the #
# GNU Lesser General Public Licence (LGPL) version 3, #
# copied verbatim in the file "LICENSE" #
################################################################################
#
# This is the top-level cmake file for the FairMQ submodule.
#
# Testing:
# Enable the building of tests by enabling the cmake option BUILD_TESTING.
#
# Linking:
# Depend on FairMQ target, if you want to link against libFairMQ.
#
# Convenience targets defined:
# * FairMQFull - build everything in the submodule except tests
# * FairMQAll - build everything including tests, if enabled
# * FairMQInstall - install everything from the FairMQ submodule
# * FairMQTests - build all tests in the submodule
#
# Installation:
# * Header files are installed hierarchically
# into ${CMAKE_INSTALL_PREFIX}/include/fairmq
# * All targets in FairMQFull are exported to
# ${CMAKE_INSTALL_PREFIX}/include/cmake/FairMQ.cmake
# with namespace prefix "FairRoot::"
#
#
####################
# external plugins #
####################
if (DDS_FOUND)
add_subdirectory(plugins/DDS)
if(BUILD_DDS_PLUGIN)
add_subdirectory(plugins/DDS)
endif()
############################
# preprocessor definitions #
############################
if(NANOMSG_FOUND)
add_definitions(-DNANOMSG_FOUND)
if(MSGPACK_FOUND)
add_definitions(-DMSGPACK_FOUND)
endif()
if(BUILD_NANOMSG_TRANSPORT)
add_definitions(-DBUILD_NANOMSG_TRANSPORT)
endif()
if(BUILD_OFI_TRANSPORT)
add_definitions(-DBUILD_OFI_TRANSPORT)
add_definitions(-DBUILD_OFI_TRANSPORT)
endif()
##################
# subdirectories #
##################
if(BUILD_TESTING)
add_subdirectory(test)
endif()
add_subdirectory(shmem/prototype)
# add_subdirectory(shmem/prototype)
##########################
# libFairMQ header files #
@@ -120,7 +92,7 @@ set(FAIRMQ_HEADER_FILES
zeromq/FairMQTransportFactoryZMQ.h
)
if(NANOMSG_FOUND)
if(BUILD_NANOMSG_TRANSPORT)
set(FAIRMQ_HEADER_FILES ${FAIRMQ_HEADER_FILES}
nanomsg/FairMQMessageNN.h
nanomsg/FairMQPollerNN.h
@@ -183,7 +155,7 @@ set(FAIRMQ_SOURCE_FILES
zeromq/FairMQTransportFactoryZMQ.cxx
)
if(NANOMSG_FOUND)
if(BUILD_NANOMSG_TRANSPORT)
set(FAIRMQ_SOURCE_FILES ${FAIRMQ_SOURCE_FILES}
nanomsg/FairMQMessageNN.cxx
nanomsg/FairMQPollerNN.cxx
@@ -253,7 +225,6 @@ endif()
#######################
target_include_directories(FairMQ
PUBLIC # consumers inherit public include directories
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/logger>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
@@ -264,6 +235,9 @@ target_include_directories(FairMQ
##################
# link libraries #
##################
if(BUILD_NANOMSG_TRANSPORT)
set(NANOMSG_DEPS nanomsg msgpackc)
endif()
if(BUILD_OFI_TRANSPORT)
set(OFI_DEPS OFI::libfabric protobuf::libprotobuf)
endif()
@@ -281,13 +255,12 @@ target_link_libraries(FairMQ
Boost::regex
Boost::date_time
Boost::signals
Logger
FairLogger::FairLogger
$<$<PLATFORM_ID:Linux>:rt>
PRIVATE # only libFairMQ links against private dependencies
ZeroMQ
$<$<BOOL:${NANOMSG_FOUND}>:nanomsg>
$<$<AND:$<BOOL:${NANOMSG_FOUND}>,$<BOOL:${MSGPACK_FOUND}>>:Msgpack>
${NANOMSG_DEPS}
${OFI_DEPS}
)
@@ -323,11 +296,11 @@ target_link_libraries(shmmonitor FairMQ)
add_executable(uuidGen run/runUuidGenerator.cxx)
target_link_libraries(uuidGen FairMQ)
####################
# aggregate target #
####################
# all targets except tests
set(FAIRMQ_FULL_TARGETS
###########
# install #
###########
install(
TARGETS # FairMQFull, tests are not installed
FairMQ
bsampler
merger
@@ -336,43 +309,10 @@ set(FAIRMQ_FULL_TARGETS
sink
splitter
shmmonitor
)
add_custom_target(FairMQFull DEPENDS ${FAIRMQ_FULL_TARGETS})
# all targets including tests, if enabled
if(BUILD_TESTING)
set(FAIRMQ_TEST_TARGET FairMQTests)
endif()
add_custom_target(FairMQAll
DEPENDS
FairMQFull
${FAIRMQ_TEST_TARGET}
)
###########################
# generate cotire targets #
###########################
#cotire(${FAIRMQ_FULL_TARGETS})
# disabled by default for now, because it messes up target properties
# still useful for development
###########
# install #
###########
install(
TARGETS # FairMQFull, tests are not installed
${FAIRMQ_FULL_TARGETS}
EXPORT FairMQ
LIBRARY
DESTINATION lib
COMPONENT fairmq
RUNTIME
DESTINATION bin
COMPONENT fairmq
EXPORT ${FairMQ_EXPORT_SET}
LIBRARY DESTINATION ${FairMQ_INSTALL_LIBDIR}
RUNTIME DESTINATION ${FairMQ_INSTALL_BINDIR}
)
# preserve relative path and prepend fairmq
@@ -381,23 +321,5 @@ foreach(HEADER ${FAIRMQ_HEADER_FILES})
file(TO_CMAKE_PATH include/fairmq/${_path} _destination)
install(FILES ${HEADER}
DESTINATION ${_destination}
COMPONENT fairmq
)
endforeach()
# export FairMQ targets
install(
EXPORT FairMQ
DESTINATION include/cmake
NAMESPACE FairRoot::
EXPORT_LINK_INTERFACE_LIBRARIES
COMPONENT fairmq
)
# use the following target to only install the fairmq component
add_custom_target(FairMQInstall
DEPENDS FairMQFull
COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_COMPONENT=fairmq -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
)

View File

@@ -1,20 +1,14 @@
/********************************************************************************
* Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
* Copyright (C) 2017-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
* *
* This software is distributed under the terms of the *
* GNU Lesser General Public Licence (LGPL) version 3, *
* copied verbatim in the file "LICENSE" *
********************************************************************************/
/**
* FairMQLogger.h
*
* @since 2012-12-04
* @author D. Klein, A. Rybalchenko
*/
#ifndef FAIRMQLOGGER_H_
#define FAIRMQLOGGER_H_
#include <Logger.h>
#include <fairlogger/Logger.h>
#endif /* FAIRMQLOGGER_H_ */

View File

@@ -9,9 +9,9 @@
#include <FairMQTransportFactory.h>
#include <zeromq/FairMQTransportFactoryZMQ.h>
#include <shmem/FairMQTransportFactorySHM.h>
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
#include <nanomsg/FairMQTransportFactoryNN.h>
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
#ifdef BUILD_OFI_TRANSPORT
#include <fairmq/ofi/TransportFactory.h>
#endif
@@ -47,12 +47,12 @@ auto FairMQTransportFactory::CreateTransportFactory(const std::string& type, con
{
return make_shared<FairMQTransportFactorySHM>(finalId, config);
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
else if (type == "nanomsg")
{
return make_shared<FairMQTransportFactoryNN>(finalId, config);
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
#ifdef BUILD_OFI_TRANSPORT
else if (type == "ofi")
{
@@ -64,9 +64,9 @@ auto FairMQTransportFactory::CreateTransportFactory(const std::string& type, con
LOG(error) << "Unavailable transport requested: " << "\"" << type << "\"" << ". Available are: "
<< "\"zeromq\""
<< "\"shmem\""
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
<< ", \"nanomsg\""
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
#ifdef BUILD_OFI_TRANSPORT
<< ", and \"ofi\""
#endif /* BUILD_OFI_TRANSPORT */

View File

@@ -10,7 +10,6 @@
#define FAIRMQ_VERSION "@PROJECT_VERSION@"
#define FAIRMQ_VERSION_DEC (@PROJECT_VERSION_MAJOR@ * 10000) + (@PROJECT_VERSION_MINOR@ * 100) + @PROJECT_VERSION_PATCH@
#define FAIRMQ_VERSION_HEX (@PROJECT_VERSION_MAJOR@ << 16) + (@PROJECT_VERSION_MINOR@ << 8) + @PROJECT_VERSION_PATCH@
#define FAIRMQ_VERSION_MAJOR @PROJECT_VERSION_MAJOR@
#define FAIRMQ_VERSION_MINOR @PROJECT_VERSION_MINOR@
#define FAIRMQ_VERSION_PATCH @PROJECT_VERSION_PATCH@

View File

@@ -7,24 +7,18 @@
################################################################################
set(plugin FairMQPlugin_dds)
add_library(${plugin} SHARED ${CMAKE_CURRENT_SOURCE_DIR}/DDS.cxx ${CMAKE_CURRENT_SOURCE_DIR}/DDS.h)
target_link_libraries(${plugin} FairMQ ${DDS_INTERCOM_LIBRARY_SHARED} ${DDS_PROTOCOL_LIBRARY_SHARED} ${DDS_USER_DEFAULTS_LIBRARY_SHARED})
target_include_directories(${plugin} PRIVATE ${CMAKE_CURRENT_BINARY_DIR} PUBLIC ${DDS_INCLUDE_DIR})
target_link_libraries(${plugin} FairMQ DDS::dds_intercom_lib DDS::dds_protocol_lib DDS::dds-user-defaults)
target_include_directories(${plugin} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
set_target_properties(${plugin} PROPERTIES CXX_VISIBILITY_PRESET hidden)
add_executable(fairmq-dds-command-ui ${CMAKE_CURRENT_SOURCE_DIR}/runDDSCommandUI.cxx)
target_link_libraries(fairmq-dds-command-ui FairMQ ${DDS_INTERCOM_LIBRARY_SHARED} ${DDS_PROTOCOL_LIBRARY_SHARED} ${DDS_USER_DEFAULTS_LIBRARY_SHARED})
target_include_directories(fairmq-dds-command-ui PRIVATE ${CMAKE_CURRENT_BINARY_DIR} PUBLIC ${DDS_INCLUDE_DIR})
set(exe fairmq-dds-command-ui)
add_executable(${exe} ${CMAKE_CURRENT_SOURCE_DIR}/runDDSCommandUI.cxx)
target_link_libraries(${exe} FairMQ DDS::dds_intercom_lib DDS::dds_protocol_lib DDS::dds-user-defaults)
target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
install(TARGETS ${plugin} fairmq-dds-command-ui
EXPORT FairMQ
LIBRARY
DESTINATION lib
COMPONENT fairmq
RUNTIME
DESTINATION bin
COMPONENT fairmq
install(TARGETS ${plugin} ${exe}
EXPORT ${FairMQ_EXPORT_SET}
LIBRARY DESTINATION ${FairMQ_INSTALL_LIBDIR}
RUNTIME DESTINATION ${FairMQ_INSTALL_BINDIR}
)

View File

@@ -6,7 +6,6 @@
# copied verbatim in the file "LICENSE" #
################################################################################
find_package(GTest REQUIRED)
include(GTestHelper)
#############################
@@ -32,8 +31,8 @@ add_testhelper(runTestDevice
)
set(MQ_CONFIG "${CMAKE_BINARY_DIR}/bin/testsuite_FairMQ.IOPatterns_config.json")
set(RUN_TEST_DEVICE "${CMAKE_BINARY_DIR}/bin/testhelper_runTestDevice")
set(MQ_CONFIG "${CMAKE_BINARY_DIR}/test/testsuite_FairMQ.IOPatterns_config.json")
set(RUN_TEST_DEVICE "${CMAKE_BINARY_DIR}/test/testhelper_runTestDevice")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/protocols/config.json.in ${MQ_CONFIG})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/protocols/runner.cxx.in ${CMAKE_CURRENT_BINARY_DIR}/protocols/runner.cxx)
@@ -170,11 +169,3 @@ add_testsuite(FairMQ.StateMachine
LINKS FairMQ
TIMEOUT 10
)
##############################
# Aggregate all test targets #
##############################
add_custom_target(FairMQTests
DEPENDS
${ALL_TEST_TARGETS}
)

View File

@@ -63,11 +63,11 @@ TEST(MessageResize, shmem)
RunPushPullWithMsgResize("shmem", "ipc://test_message_resize");
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
TEST(MessageResize, nanomsg)
{
RunPushPullWithMsgResize("nanomsg", "ipc://test_message_resize");
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
} // namespace

View File

@@ -44,7 +44,7 @@ TEST(PluginManager, LoadPluginDynamic)
auto device = make_shared<FairMQDevice>();
mgr.EmplacePluginServices(&config, device);
mgr.PrependSearchPath("./lib");
mgr.PrependSearchPath("./test");
ASSERT_NO_THROW(mgr.LoadPlugin("test_dummy"));
ASSERT_NO_THROW(mgr.LoadPlugin("test_dummy2"));

View File

@@ -56,12 +56,12 @@ TEST(Pair, MP_ShMem___tcp____SingleMsg)
EXPECT_EXIT(RunPair("shmem"), ::testing::ExitedWithCode(0), "PAIR test successfull");
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
TEST(Pair, MP_Nanomsg_tcp____SingleMsg)
{
EXPECT_EXIT(RunPair("nanomsg"), ::testing::ExitedWithCode(0), "PAIR test successfull");
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
#ifdef BUILD_OFI_TRANSPORT
TEST(Pair, MP_Ofi_____tcp____SingleMsg)

View File

@@ -55,12 +55,12 @@ TEST(Poller, ZeroMQ_subchannel)
EXPECT_EXIT(RunPoller("zeromq", 0), ::testing::ExitedWithCode(0), "POLL test successfull");
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
TEST(Poller, Nanomsg_subchannel)
{
EXPECT_EXIT(RunPoller("nanomsg", 0), ::testing::ExitedWithCode(0), "POLL test successfull");
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
TEST(Poller, ShMem_subchannel)
{
@@ -72,12 +72,12 @@ TEST(Poller, ZeroMQ_channel)
EXPECT_EXIT(RunPoller("zeromq", 1), ::testing::ExitedWithCode(0), "POLL test successfull");
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
TEST(Poller, Nanomsg_channel)
{
EXPECT_EXIT(RunPoller("nanomsg", 1), ::testing::ExitedWithCode(0), "POLL test successfull");
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
TEST(Poller, ShMem_channel)
{

View File

@@ -60,11 +60,11 @@ TEST(PubSub, ZeroMQ)
EXPECT_EXIT(RunPubSub("zeromq"), ::testing::ExitedWithCode(0), "PUB-SUB test successfull");
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
TEST(PubSub, Nanomsg)
{
EXPECT_EXIT(RunPubSub("nanomsg"), ::testing::ExitedWithCode(0), "PUB-SUB test successfull");
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
} // namespace

View File

@@ -56,11 +56,11 @@ TEST(PushPull, MP_ShMem___tcp____SingleMsg)
EXPECT_EXIT(RunPushPull("shmem"), ::testing::ExitedWithCode(0), "PUSH-PULL test successfull");
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
TEST(PushPull, MP_Nanomsg_tcp____SingleMsg)
{
EXPECT_EXIT(RunPushPull("nanomsg"), ::testing::ExitedWithCode(0), "PUSH-PULL test successfull");
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
} // namespace

View File

@@ -113,12 +113,12 @@ TEST(PushPull, ST_Shmem___inproc_Multipart)
RunSingleThreadedMultipart("shmem", "inproc://test");
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
TEST(PushPull, ST_Nanomsg_inproc_Multipart)
{
RunSingleThreadedMultipart("nanomsg", "inproc://test");
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
TEST(PushPull, ST_ZeroMQ__ipc____Multipart)
{
@@ -130,12 +130,12 @@ TEST(PushPull, ST_Shmen___ipc____Multipart)
RunSingleThreadedMultipart("shmem", "ipc://test_ST_Shmen___ipc____Multipart");
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
TEST(PushPull, ST_Nanomsg_ipc____Multipart)
{
RunSingleThreadedMultipart("nanomsg", "ipc://test_ST_Nanomsg_ipc____Multipart");
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
TEST(PushPull, MT_ZeroMQ__inproc_Multipart)
{
@@ -147,12 +147,12 @@ TEST(PushPull, MT_Shmem___inproc_Multipart)
RunMultiThreadedMultipart("shmem", "inproc://test");
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
TEST(PushPull, MT_Nanomsg_inproc_Multipart)
{
RunMultiThreadedMultipart("nanomsg", "inproc://test");
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
TEST(PushPull, MT_ZeroMQ__ipc____Multipart)
{
@@ -164,11 +164,11 @@ TEST(PushPull, MT_Shmem___ipc____Multipart)
RunMultiThreadedMultipart("shmem", "ipc://test_MT_Shmem___ipc____Multipart");
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
TEST(PushPull, MT_Nanomsg_ipc____Multipart)
{
RunMultiThreadedMultipart("nanomsg", "ipc://test_MT_Nanomsg_ipc____Multipart");
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
} // namespace

View File

@@ -65,11 +65,11 @@ TEST(ReqRep, ShMem)
EXPECT_EXIT(RunReqRep("shmem"), ::testing::ExitedWithCode(0), "REQ-REP test successfull");
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
TEST(ReqRep, Nanomsg)
{
EXPECT_EXIT(RunReqRep("nanomsg"), ::testing::ExitedWithCode(0), "REQ-REP test successfull");
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
} // namespace

View File

@@ -41,11 +41,11 @@ TEST(TransferTimeout, ShMem)
EXPECT_EXIT(RunTransferTimeout("shmem"), ::testing::ExitedWithCode(0), "Transfer timeout test successfull");
}
#ifdef NANOMSG_FOUND
#ifdef BUILD_NANOMSG_TRANSPORT
TEST(TransferTimeout, Nanomsg)
{
EXPECT_EXIT(RunTransferTimeout("nanomsg"), ::testing::ExitedWithCode(0), "Transfer timeout test successfull");
}
#endif /* NANOMSG_FOUND */
#endif /* BUILD_NANOMSG_TRANSPORT */
} // namespace