An Overlay-based
Virtual Network Substrate
SpoVNet

source: source/ariba/CMakeLists.txt @ 12438

Last change on this file since 12438 was 12060, checked in by hock@…, 9 years ago

Reintegrate branch: 20130111-hock-message_classes

improvements:

  • new message classes (reboost, zero-copy)
  • "fast path" for direct links (skip overlay layer)
  • link-properties accessible from the application
  • SystemQueue? can call boost::bind functions
  • protlib compatibility removed (32bit overhead saved in every message)
  • addressing2
  • AddressDiscovery? discoveres only addresses on which we're actually listening
  • ariba serialization usage reduced (sill used in OverlayMsg?)
  • Node::connect, easier and cleaner interface to start-up ariba from the application
  • ariba configs via JSON, XML, etc (boost::property_tree)
  • keep-alive overhead greatly reduced
  • (relayed) overlay links can actually be closed now
  • lost messages are detected in most cases
  • notification to the application when link is transformed into direct-link
  • overlay routing: send message to second best hop if it would be dropped otherwise
  • SequenceNumbers? (only mechanisms, so for: upward compatibility)
  • various small fixes


regressions:

  • bluetooth is not yet working again
  • bootstrap modules deactivated
  • liblog4xx is not working (use cout-logging)

This patch brings great performance and stability improvements at cost of backward compatibility.
Also bluetooth and the bootstrap modules have not been ported to the new interfaces, yet.

File size: 8.6 KB
Line 
1# [License]
2# The Ariba-Underlay Copyright
3#
4# Copyright (c) 2008-2012, Institute of Telematics, UniversitÀt Karlsruhe (TH)
5#
6# Institute of Telematics
7# UniversitÀt Karlsruhe (TH)
8# Zirkel 2, 76128 Karlsruhe
9# Germany
10#
11# Redistribution and use in source and binary forms, with or without
12# modification, are permitted provided that the following conditions are
13# met:
14#
15# 1. Redistributions of source code must retain the above copyright
16# notice, this list of conditions and the following disclaimer.
17# 2. Redistributions in binary form must reproduce the above copyright
18# notice, this list of conditions and the following disclaimer in the
19# documentation and/or other materials provided with the distribution.
20#
21# THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
22# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OF TELEMATICS OR
25# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32#
33# The views and conclusions contained in the software and documentation
34# are those of the authors and should not be interpreted as representing
35# official policies, either expressed or implied, of the Institute of
36# Telematics.
37# [License]
38
39cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
40project(libariba)
41
42list(APPEND CMAKE_MODULE_PATH "${libariba_SOURCE_DIR}/../../CMakeModules")
43
44
45######################################################
46### Increment this whenever the interface changes! ###
47######################################################
48set(ariba_SOVERSION 2)
49######################################################
50
51
52# Find Boost
53find_package(BoostAdditionalVersions QUIET)
54if(NOT DEFINED BoostAdditionalVersions_FOUND)
55    message(WARNING "Could not find FindBoostAdditionalVersions.cmake. "
56        "This might cause the Boost detection to fail")
57endif()
58find_package(Boost 1.42.0 REQUIRED COMPONENTS system thread)
59if(NOT Boost_FOUND)
60    message(FATAL_ERROR "Could not find Boost. "
61            "Please have a look at the Boost_* cache variables.")
62endif(NOT Boost_FOUND)
63
64mark_as_advanced(Boost_DIR)
65include(BoostPthreadWorkaround)
66
67include_directories(${Boost_INCLUDE_DIRS})
68list(APPEND ariba_LINK_LIBRARIES ${Boost_LIBRARIES})
69
70
71# Find gmp
72find_package(GMP REQUIRED)
73if(NOT GMP_FOUND)
74    message(FATAL_ERROR "Could not find GMP. "
75            "Please have a look at the GMP_* cache variables.")
76endif(NOT GMP_FOUND)
77include_directories(${GMP_INCLUDE_DIRS})
78list(APPEND ariba_LINK_LIBRARIES ${GMP_LIBRARIES})
79
80
81# Bluetooth support?
82find_package(LibBluetooth)
83if(NOT LIBBLUETOOTH_FOUND)
84    message(STATUS "Couldn't find libbluetooth. "
85        "Will build ariba withouth bluetooth support")
86endif()
87include(CMakeDependentOption)
88cmake_dependent_option(ENABLE_BLUETOOTH
89    "Enable bluetooth support" #doc
90    ON # default value
91    "LIBBLUETOOTH_FOUND" # only show if this evaluates to true
92    OFF # value if the condition is not met
93    )
94if(ENABLE_BLUETOOTH)
95    set(HAVE_LIBBLUETOOTH TRUE)
96    include_directories("${LIBBLUETOOTH_INCLUDE_DIR}")
97    list(APPEND ariba_LINK_LIBRARIES ${LIBBLUETOOTH_LIBRARIES})
98endif(ENABLE_BLUETOOTH)
99
100
101# Avahi support?
102find_package(Avahi COMPONENTS client common)
103if(NOT AVAHI_FOUND)
104    message(STATUS "Couldn't find Avahi. "
105        "Will build ariba withouth multicast DNS support")
106endif()
107cmake_dependent_option(ENABLE_AVAHI
108    "Enable Avahi (multicast DNS) support" #doc
109    ON # default value
110    "AVAHI_FOUND" # only show if this evaluates to true
111    OFF # value if the condition is not met
112    )
113if(ENABLE_AVAHI)
114    set(HAVE_AVAHI TRUE)
115    include_directories(${AVAHI_INCLUDE_DIRS})
116    list(APPEND ariba_LINK_LIBRARIES ${AVAHI_LIBRARIES})
117endif(ENABLE_AVAHI)
118
119
120# Log4Cxx support?
121find_package(Log4Cxx)
122if(NOT LOG4CXX_FOUND)
123    message(STATUS "Couldn't find Log4Cxx. "
124        "Will build ariba withouth extended logging support")
125endif()
126cmake_dependent_option(ENABLE_LOG4CXX
127    "Enable Log4Cxx (extended logging) support" #doc
128    ON # default value
129    "LOG4CXX_FOUND" # only show if this evaluates to true
130    OFF # value if the condition is not met
131    )
132if(ENABLE_LOG4CXX)
133    set(HAVE_LOG4CXX TRUE)
134    include_directories(${LOG4CXX_INCLUDE_DIRS})
135    list(APPEND ariba_LINK_LIBRARIES ${LOG4CXX_LIBRARIES})
136endif(ENABLE_LOG4CXX)
137
138
139
140set(add_headers_INSTALL_DIR include/ariba/)
141set(add_headers_INSTALL_COMPONENT Development)
142set(add_headers_VAR libariba_HEADERS)
143set(add_sources_VAR libariba_SOURCES)
144
145# Voodoo to collect the source files from the subdirectories
146function(add_subdir_sources_helper subdir)
147    set(CURRENT_SOURCE_DIR "${CURRENT_SOURCE_DIR}${subdir}/")
148    set(add_headers_INSTALL_DIR "${add_headers_INSTALL_DIR}${subdir}/")
149    add_subdirectory(${subdir})
150    set(${add_headers_VAR} ${${add_headers_VAR}} PARENT_SCOPE)
151    set(${add_sources_VAR} ${${add_sources_VAR}} PARENT_SCOPE)
152endfunction(add_subdir_sources_helper subdir)
153
154macro(add_subdir_sources subdirs)
155    foreach(subdir ${subdirs} ${ARGN})
156        add_subdir_sources_helper(${subdir})
157    endforeach(subdir ${subdirs} ${ARGN})
158    set(${add_headers_VAR} ${${add_headers_VAR}} PARENT_SCOPE)
159    set(${add_sources_VAR} ${${add_sources_VAR}} PARENT_SCOPE)
160endmacro(add_subdir_sources subdirs)
161
162macro(add_headers sources)
163    foreach(source ${sources} ${ARGN})
164        list(APPEND ${add_headers_VAR} "${CURRENT_SOURCE_DIR}${source}")
165    endforeach(source ${sources} ${ARGN})
166   
167    install(FILES ${sources} ${ARGN}
168        DESTINATION "${add_headers_INSTALL_DIR}"
169        COMPONENT "${add_headers_INSTALL_COMPONENT}"
170        )
171   
172    set(${add_headers_VAR} ${${add_headers_VAR}} PARENT_SCOPE)
173endmacro(add_headers sources)
174
175macro(add_sources sources)
176    foreach(source ${sources} ${ARGN})
177        list(APPEND ${add_sources_VAR} "${CURRENT_SOURCE_DIR}${source}")
178    endforeach(source ${sources} ${ARGN})
179    set(${add_sources_VAR} ${${add_sources_VAR}} PARENT_SCOPE)
180endmacro(add_sources sources)
181
182
183# Headers to be exported
184add_headers(
185    ariba.h
186#    AribaModule.h
187    CommunicationListener.h
188    DataMessage.h
189    Identifiers.h
190    LinkProperties.h
191    Message.h
192    Module.h
193    Name.h
194    Node.h
195    NodeListener.h
196    SideportListener.h
197    SpoVNetProperties.h
198    )
199
200add_sources(
201#    AribaModule.cpp
202    CommunicationListener.cpp
203    DataMessage.cpp
204    Identifiers.cpp
205    LinkProperties.cpp
206    Module.cpp
207    Name.cpp
208    Node.cpp
209    NodeListener.cpp
210    SideportListener.cpp
211    SpoVNetProperties.cpp
212    )
213
214# Can't use add_subdir_sources() here because we want it in this scope not
215# in our parent's scope
216add_subdir_sources_helper(communication)
217add_subdir_sources_helper(overlay)
218add_subdir_sources_helper(utility)
219
220
221if(CMAKE_BUILD_TYPE)
222    if(${CMAKE_BUILD_TYPE} STREQUAL Debug)
223        set(DEBUG ON)
224    endif()
225endif()
226
227option(HAVE_MAEMO
228    "Whether we compile for the maemo platform" #TODO: maybe detect automatically
229    OFF
230    )
231
232set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall")
233set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
234
235# Configure the template file
236configure_file(
237    config.h.in
238    config.h
239    )
240include_directories("${CMAKE_CURRENT_BINARY_DIR}/..")
241list(APPEND libariba_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/config.h")
242install(FILES "${CMAKE_CURRENT_BINARY_DIR}/config.h"
243    DESTINATION "${add_headers_INSTALL_DIR}"
244    COMPONENT "${add_headers_INSTALL_COMPONENT}"
245    )
246
247# Add the parent directory to the includes because we reference headers with
248# "ariba/path/to/file" all the time
249include_directories("${CMAKE_CURRENT_SOURCE_DIR}/..")
250
251
252# Compile the actual library
253
254include(BuildSharedAndStaticLib)
255
256set(ariba_SOURCES ${libariba_SOURCES} ${libariba_HEADERS})
257# ariba_LINK_LIBRARIES, ariba_VERSION and ariba_SOVERSION already defined
258
259build_shared_and_static_libs(ariba)
260
261
262# Install binaries
263install(TARGETS ariba ${ariba_STATIC_TARGET} EXPORT ariba-targets
264    LIBRARY DESTINATION lib COMPONENT Runtime
265    ARCHIVE DESTINATION lib COMPONENT Development
266    RUNTIME DESTINATION bin COMPONENT Runtime
267    )
268
269
270# Make libariba usable from build tree
271export(TARGETS ariba ${ariba_STATIC_TARGET} FILE ariba-exports.cmake)
272
273if(ariba_BINARY_DIR)
274    export(TARGETS ariba ${ariba_STATIC_TARGET}
275        FILE "${ariba_BINARY_DIR}/ariba-exports.cmake")
276endif(ariba_BINARY_DIR)
Note: See TracBrowser for help on using the repository browser.