* Support for automatically generation of common-api sources. Cmake macros adopted...
[profile/ivi/genivi/genivi-audio-manager.git] / AudioManagerDaemon / CMakeLists.txt
1 # Copyright (C) 2012, BMW AG
2 #
3 # This file is part of GENIVI Project AudioManager.
4
5 # Contributions are licensed to the GENIVI Alliance under one or more
6 # Contribution License Agreements.
7
8 # copyright
9 # This Source Code Form is subject to the terms of the
10 # Mozilla Public License, v. 2.0. If a  copy of the MPL was not distributed with
11 # this file, You can obtain one at http://mozilla.org/MPL/2.0/.
12
13 # author Christian Mueller, christian.ei.mueller@bmw.de BMW 2011,2012
14 #
15 # For further information see http://www.genivi.org/.
16 #
17
18 cmake_minimum_required(VERSION 2.6)
19
20 PROJECT(AudioManagerDeamon)
21
22 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -rdynamic")
23 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
24
25 set(DOC_OUTPUT_PATH ${DOC_OUTPUT_PATH}/AudioManager)
26 set(INCLUDE_FOLDER "include")
27
28 IF (WITH_DATABASE_STORAGE)
29     pkg_check_modules(SQLITE REQUIRED sqlite3)
30 ENDIF (WITH_DATABASE_STORAGE)
31
32 IF (WITH_SYSTEMD_WATCHDOG)
33         pkg_check_modules(SYSTEMD libsystemd-daemon>=44)
34         IF (SYSTEMD_FOUND)
35                 message(STATUS "Found libsystemd-daemon, version: ${SYSTEMD_VERSION}")
36         ELSE (SYSTEMD_FOUND)
37                 message(STATUS "Did not find libsystemd-daemon, using own lib")
38         ENDIF(SYSTEMD_FOUND)
39 ENDIF (WITH_SYSTEMD_WATCHDOG)
40
41 IF(WITH_DBUS_WRAPPER)
42     FIND_PACKAGE(DBUS REQUIRED)
43 ENDIF(WITH_DBUS_WRAPPER)
44
45 FIND_PACKAGE(NSM REQUIRED)
46
47 IF(WITH_CAPI_WRAPPER)
48     FIND_PACKAGE(CommonAPI REQUIRED)
49 ENDIF(WITH_CAPI_WRAPPER)
50
51 SET(AUDIOMAN_SRCS_CXX
52     src/main.cpp
53     src/CAmCommandReceiver.cpp
54     src/CAmCommandSender.cpp
55     src/CAmControlReceiver.cpp
56     src/CAmControlSender.cpp
57     src/CAmDatabaseObserver.cpp
58     src/CAmRoutingReceiver.cpp
59     src/CAmRoutingSender.cpp
60     src/CAmRouter.cpp
61     src/CAmSocketHandler.cpp
62     src/CAmDltWrapper.cpp
63     src/CAmLog.cpp
64 )
65
66 # Preallocation variable for the map.
67 IF(NOT WITH_DATABASE_STORAGE )
68
69     IF(NOT DEFINED AM_MAP_CAPACITY)
70         set (AM_MAP_CAPACITY 10)
71     ENDIF(NOT DEFINED AM_MAP_CAPACITY)
72     add_definitions( -DAM_MAP_CAPACITY=${AM_MAP_CAPACITY} )
73
74     IF(NOT DEFINED AM_MAX_CONNECTIONS)
75         set (AM_MAX_CONNECTIONS 0x1000)
76     ENDIF(NOT DEFINED AM_MAX_CONNECTIONS)
77     add_definitions( -DAM_MAX_CONNECTIONS=${AM_MAX_CONNECTIONS} )
78     
79     IF(NOT DEFINED AM_MAX_MAIN_CONNECTIONS)
80         set (AM_MAX_MAIN_CONNECTIONS SHRT_MAX)
81     ENDIF(NOT DEFINED AM_MAX_MAIN_CONNECTIONS)
82     add_definitions( -DAM_MAX_MAIN_CONNECTIONS=${AM_MAX_MAIN_CONNECTIONS} )
83
84 ENDIF(NOT WITH_DATABASE_STORAGE)
85
86 IF(WITH_TELNET)
87         SET (AUDIOMAN_SRCS_CXX
88                 ${AUDIOMAN_SRCS_CXX}
89                 src/CAmTelnetServer.cpp
90                 src/CAmTelnetMenuHelper.cpp
91      )          
92 ENDIF(WITH_TELNET)              
93
94 IF(WITH_SYSTEMD_WATCHDOG)
95         SET (AUDIOMAN_SRCS_CXX
96                 ${AUDIOMAN_SRCS_CXX}
97                 src/CAmWatchdog.cpp
98      )          
99 ENDIF(WITH_SYSTEMD_WATCHDOG)
100
101 IF (NOT SYSTEMD_FOUND)
102         SET (AUDIOMAN_SRCS_CXX
103                 ${AUDIOMAN_SRCS_CXX}
104                 src/sd-daemon.c
105         )
106 ENDIF (NOT SYSTEMD_FOUND)
107
108 IF(WITH_DBUS_WRAPPER)
109     SET (AUDIOMAN_SRCS_CXX
110         ${AUDIOMAN_SRCS_CXX}
111         src/CAmDbusWrapper.cpp
112     )
113 ENDIF(WITH_DBUS_WRAPPER)
114
115 IF(WITH_CAPI_WRAPPER)
116     SET (AUDIOMAN_SRCS_CXX
117         ${AUDIOMAN_SRCS_CXX}
118         src/CAmCommonAPIWrapper.cpp
119     )
120 ENDIF(WITH_CAPI_WRAPPER)
121
122 IF(WITH_NSM)
123     IF(WITH_DBUS_WRAPPER)
124         SET (AUDIOMAN_SRCS_CXX
125             ${AUDIOMAN_SRCS_CXX}
126             src/CAmNodeStateCommunicatorDBus.cpp
127         )
128     ELSE(WITH_DBUS_WRAPPER)
129             SET (AUDIOMAN_SRCS_CXX
130             ${AUDIOMAN_SRCS_CXX}
131             src/CAmNodeStateCommunicatorCAPI.cpp
132         )
133     ENDIF(WITH_DBUS_WRAPPER)
134 ENDIF(WITH_NSM)
135
136 IF(WITH_DATABASE_STORAGE)
137     SET (AUDIOMAN_SRCS_CXX
138         ${AUDIOMAN_SRCS_CXX}
139         src/CAmDatabaseHandlerSQLite.cpp
140     )
141 ELSE(WITH_DATABASE_STORAGE)
142     SET (AUDIOMAN_SRCS_CXX
143         ${AUDIOMAN_SRCS_CXX}
144         src/CAmDatabaseHandlerMap.cpp
145     )
146 ENDIF(WITH_DATABASE_STORAGE)
147
148 INCLUDE_DIRECTORIES(    
149         ${CMAKE_SOURCE_DIR} 
150         ${CMAKE_CURRENT_BINARY_DIR}     
151         ${AUDIO_INCLUDE_FOLDER}
152         ${PROJECT_INCLUDE_FOLDER}
153         ${INCLUDE_FOLDER}
154         ${NSM_INCLUDE_DIR}
155 )
156
157 IF(WITH_CAPI_WRAPPER)
158
159 # Find the common-api sources. 
160 # The sources can be placed in the build directory (DESTINATION) or in the source tree (ALT_DESTINATION). 
161 # The ALT_DESTINATION is used as fall back if the DESTINATION directory dosen't contain the sources or you just don't want to use the generator.
162 INCLUDE(CommonAPIGenerator)
163 COMMON_API_GENERATE_SOUCRES(TARGET COMMON_API 
164                             FIDLS fidls/NodeStateManager.fdepl # a list with fidls
165                             DESTINATION src-gen  # a relative path to the build directory or an absolute path
166                             ALT_DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/src-gen # an alternative relative/absolute path with common-api sources, usually in the source tree
167                             DBUS)
168
169 INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES}
170     ${COMMON_API_INCLUDE_DIRS}
171         ${COMMON_API_DBUS_INCLUDE_DIRS}
172         ${COMMON_API_GEN_INCLUDE_DIR}
173 )
174 ENDIF(WITH_CAPI_WRAPPER)
175
176 IF(WITH_DLT)
177 INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES}
178     ${DLT_INCLUDE_DIRS}
179 )
180 ENDIF(WITH_DLT)
181
182 IF(WITH_DBUS_WRAPPER)
183 INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES}
184     ${DBUS_ARCH_INCLUDE_DIR}
185     ${DBUS_INCLUDE_DIR}
186 )
187 ENDIF(WITH_DBUS_WRAPPER)
188
189 file(GLOB ${AUDIOMAN_SRCS_CXX} ${COMMON_API_GEN_SOURCES})
190
191 ADD_EXECUTABLE(AudioManager ${AUDIOMAN_SRCS_CXX} ${COMMON_API_GEN_SOURCES})
192
193 TARGET_LINK_LIBRARIES(AudioManager 
194         ${SQLITE_LIBRARIES}
195         ${CMAKE_DL_LIBS}
196  )
197  
198  IF(WITH_DBUS_WRAPPER)
199     TARGET_LINK_LIBRARIES(AudioManager 
200         ${DBUS_LIBRARY}
201         rt
202     )
203 ELSEIF(WITH_CAPI_WRAPPER)
204     TARGET_LINK_LIBRARIES(AudioManager 
205         ${COMMON_API_LIBRARIES}
206         ${COMMON_API_DBUS_LIBRARIES}
207         rt
208     )
209 ENDIF()
210
211 IF(WITH_DLT)
212     TARGET_LINK_LIBRARIES(AudioManager
213         ${DLT_LIBRARIES} 
214     )
215 ENDIF(WITH_DLT) 
216
217 IF (SYSTEMD_FOUND)
218         TARGET_LINK_LIBRARIES(AudioManager
219         ${SYSTEMD_LIBRARIES} 
220         )
221 ENDIF (SYSTEMD_FOUND)
222
223 IF(WITH_CAPI_WRAPPER)
224     IF(WITH_NSM)
225         INSERT_DBUS_CONF_IF_NEEDED("@NSM_DBUS_CONF@" 
226                                   "${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/NodeStateManager_dbus.conf" 
227                                   NSM_DBUS_CONF)
228     ENDIF(WITH_NSM)
229 # Generates the dbus configuration file. Every component is responsible to append it dbus configuration part.
230 CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/AudioManager_dbus.conf.in ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/AudioManager_dbus.conf)
231 CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/AudioManager_dbus.conf.in ${CMAKE_BINARY_DIR}/AudioManager_dbus.conf)
232
233 ENDIF(WITH_CAPI_WRAPPER)
234
235
236 INSTALL(TARGETS AudioManager 
237         RUNTIME 
238         DESTINATION bin
239         PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ
240         COMPONENT bin
241 )
242
243 INSTALL(DIRECTORY "${AUDIO_INCLUDE_FOLDER}/" 
244         DESTINATION include
245         COMPONENT dev
246 )
247
248 IF(WITH_NSM)
249     IF(USE_BUILD_LIBS) 
250         SET(NSM_INTROSPECTION_FILE ${EXECUTABLE_OUTPUT_PATH}/LifeCycleConsumer.xml)
251             execute_process(
252             COMMAND mkdir -p "${CMAKE_SOURCE_DIR}/bin"
253             COMMAND cp "${CMAKE_SOURCE_DIR}/cmake/LifecycleConsumer.xml" ${NSM_INTROSPECTION_FILE}
254             COMMAND cp "${CMAKE_BINARY_DIR}/AudioManager_dbus.conf" ${EXECUTABLE_OUTPUT_PATH})
255     ELSE(USE_BUILD_LIBS) 
256         SET(NSM_INTROSPECTION_FILE ${CMAKE_INSTALL_PREFIX}/share/audiomanager/LifecycleConsumer.xml)
257         INSTALL(
258             FILES ${CMAKE_SOURCE_DIR}/cmake/LifecycleConsumer.xml #${CMAKE_BINARY_DIR}/AudioManager_dbus.conf
259             DESTINATION "${NSM_INTROSPECTION_FILE}"
260             COMPONENT bin)
261     ENDIF(USE_BUILD_LIBS)
262 ENDIF(WITH_NSM)
263
264 CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/cmake/config.cmake ${CMAKE_SOURCE_DIR}/include/config.h )
265
266 IF(WITH_TESTS)
267         add_subdirectory (test)
268 ENDIF(WITH_TESTS)
269
270 # General packet dependency
271 IF(WITH_DATABASE_STORAGE)
272     SET(ADD_DEPEND_BIN_PROP "sqlite3(>=3.6.22)")
273 ENDIF(WITH_DATABASE_STORAGE)
274
275 # Optional packet dependency
276 IF(WITH_DLT)
277     SET(ADD_DEPEND_BIN_PROP ${ADD_DEPEND_BIN_PROP} "dlt")
278 ENDIF(WITH_DLT)
279
280 IF(WITH_DBUS_WRAPPER)
281     SET(ADD_DEPEND_BIN_PROP ${ADD_DEPEND_BIN_PROP} "libdbus-1-3(>=1.2.16)")
282 ENDIF(WITH_DBUS_WRAPPER)
283
284 # Additional Dev packet dependency
285 SET(ADD_DEPEND_DEV_PROP "audiomanager-bin" ${ADD_DEPEND_BIN_PROP})
286
287 set(CMAKE_CXX_FLAGS_RELEASE "-O2 -fno-common -fno-strict-aliasing -DNDEBUG")
288
289 MESSAGE(STATUS "bin packet dependency: ${ADD_DEPEND_BIN_PROP}")
290 MESSAGE(STATUS "dev dependency: ${ADD_DEPEND_DEV_PROP}")
291
292 set_property(GLOBAL APPEND PROPERTY bin_prop "${ADD_DEPEND_BIN_PROP}")
293 set_property(GLOBAL APPEND PROPERTY dev_prop "${ADD_DEPEND_DEV_PROP}")
294
295
296