update changelog
[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
67 # Preallocation variable for the map.
68 IF(NOT WITH_DATABASE_STORAGE )
69
70     IF(NOT DEFINED AM_MAP_CAPACITY)
71         set (AM_MAP_CAPACITY 10)
72     ENDIF(NOT DEFINED AM_MAP_CAPACITY)
73     add_definitions( -DAM_MAP_CAPACITY=${AM_MAP_CAPACITY} )
74
75     IF(NOT DEFINED AM_MAX_CONNECTIONS)
76         set (AM_MAX_CONNECTIONS 0x1000)
77     ENDIF(NOT DEFINED AM_MAX_CONNECTIONS)
78     add_definitions( -DAM_MAX_CONNECTIONS=${AM_MAX_CONNECTIONS} )
79     
80     IF(NOT DEFINED AM_MAX_MAIN_CONNECTIONS)
81         set (AM_MAX_MAIN_CONNECTIONS SHRT_MAX)
82     ENDIF(NOT DEFINED AM_MAX_MAIN_CONNECTIONS)
83     add_definitions( -DAM_MAX_MAIN_CONNECTIONS=${AM_MAX_MAIN_CONNECTIONS} )
84
85 ENDIF(NOT WITH_DATABASE_STORAGE)
86
87 IF(WITH_TELNET)
88         SET (AUDIOMAN_SRCS_CXX
89                 ${AUDIOMAN_SRCS_CXX}
90                 src/CAmTelnetServer.cpp
91                 src/CAmTelnetMenuHelper.cpp
92      )          
93 ENDIF(WITH_TELNET)              
94
95 IF(WITH_SYSTEMD_WATCHDOG)
96         SET (AUDIOMAN_SRCS_CXX
97                 ${AUDIOMAN_SRCS_CXX}
98                 src/CAmWatchdog.cpp
99      )          
100 ENDIF(WITH_SYSTEMD_WATCHDOG)
101
102 IF (NOT SYSTEMD_FOUND)
103         SET (AUDIOMAN_SRCS_CXX
104                 ${AUDIOMAN_SRCS_CXX}
105                 src/sd-daemon.c
106         )
107 ENDIF (NOT SYSTEMD_FOUND)
108
109 IF(WITH_DBUS_WRAPPER)
110     SET (AUDIOMAN_SRCS_CXX
111         ${AUDIOMAN_SRCS_CXX}
112         src/CAmDbusWrapper.cpp
113     )
114 ENDIF(WITH_DBUS_WRAPPER)
115
116 IF(WITH_CAPI_WRAPPER)
117     SET (AUDIOMAN_SRCS_CXX
118         ${AUDIOMAN_SRCS_CXX}
119         src/CAmCommonAPIWrapper.cpp
120     )
121 ENDIF(WITH_CAPI_WRAPPER)
122
123 IF(WITH_NSM)
124     IF(WITH_DBUS_WRAPPER)
125         SET (AUDIOMAN_SRCS_CXX
126             ${AUDIOMAN_SRCS_CXX}
127             src/CAmNodeStateCommunicatorDBus.cpp
128         )
129     ELSE(WITH_DBUS_WRAPPER)
130             SET (AUDIOMAN_SRCS_CXX
131             ${AUDIOMAN_SRCS_CXX}
132             src/CAmNodeStateCommunicatorCAPI.cpp
133         )
134     ENDIF(WITH_DBUS_WRAPPER)
135 ENDIF(WITH_NSM)
136
137 IF(WITH_DATABASE_STORAGE)
138     SET (AUDIOMAN_SRCS_CXX
139         ${AUDIOMAN_SRCS_CXX}
140         src/CAmDatabaseHandlerSQLite.cpp
141     )
142 ELSE(WITH_DATABASE_STORAGE)
143     SET (AUDIOMAN_SRCS_CXX
144         ${AUDIOMAN_SRCS_CXX}
145         src/CAmDatabaseHandlerMap.cpp
146     )
147 ENDIF(WITH_DATABASE_STORAGE)
148
149 INCLUDE_DIRECTORIES(    
150         ${CMAKE_SOURCE_DIR} 
151         ${CMAKE_CURRENT_BINARY_DIR}     
152         ${AUDIO_INCLUDE_FOLDER}
153         ${PROJECT_INCLUDE_FOLDER}
154         ${INCLUDE_FOLDER}
155         ${NSM_INCLUDE_DIR}
156 )
157
158 IF(WITH_CAPI_WRAPPER)
159
160 # Find the common-api sources. 
161 # The sources can be placed in the build directory (DESTINATION) or in the source tree (ALT_DESTINATION). 
162 # 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.
163 INCLUDE(CommonAPIGenerator)
164 COMMON_API_GENERATE_SOUCRES(TARGET COMMON_API 
165                             FIDLS fidls/NodeStateManager.fdepl # a list with fidls
166                             DESTINATION src-gen  # a relative path to the build directory or an absolute path
167                             ALT_DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/src-gen # an alternative relative/absolute path with common-api sources, usually in the source tree
168                             DBUS)
169
170 INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES}
171     ${COMMON_API_INCLUDE_DIRS}
172         ${COMMON_API_DBUS_INCLUDE_DIRS}
173         ${COMMON_API_GEN_INCLUDE_DIR}
174 )
175 ENDIF(WITH_CAPI_WRAPPER)
176
177 IF(WITH_DLT)
178 INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES}
179     ${DLT_INCLUDE_DIRS}
180 )
181 ENDIF(WITH_DLT)
182
183 IF(WITH_DBUS_WRAPPER)
184 INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES}
185     ${DBUS_ARCH_INCLUDE_DIR}
186     ${DBUS_INCLUDE_DIR}
187 )
188 ENDIF(WITH_DBUS_WRAPPER)
189
190 file(GLOB ${AUDIOMAN_SRCS_CXX} ${COMMON_API_GEN_SOURCES})
191
192 ADD_EXECUTABLE(AudioManager ${AUDIOMAN_SRCS_CXX} ${COMMON_API_GEN_SOURCES})
193
194 TARGET_LINK_LIBRARIES(AudioManager 
195         ${SQLITE_LIBRARIES}
196         ${CMAKE_DL_LIBS}
197  )
198  
199  IF(WITH_DBUS_WRAPPER)
200     TARGET_LINK_LIBRARIES(AudioManager 
201         ${DBUS_LIBRARY}
202         rt
203     )
204 ELSEIF(WITH_CAPI_WRAPPER)
205     TARGET_LINK_LIBRARIES(AudioManager 
206         ${COMMON_API_LIBRARIES}
207         ${COMMON_API_DBUS_LIBRARIES}
208         rt
209     )
210 ENDIF()
211
212 IF(WITH_DLT)
213     TARGET_LINK_LIBRARIES(AudioManager
214         ${DLT_LIBRARIES} 
215     )
216 ENDIF(WITH_DLT) 
217
218 IF (SYSTEMD_FOUND)
219         TARGET_LINK_LIBRARIES(AudioManager
220         ${SYSTEMD_LIBRARIES} 
221         )
222 ENDIF (SYSTEMD_FOUND)
223
224 IF(WITH_CAPI_WRAPPER)
225     IF(WITH_NSM)
226         INSERT_DBUS_CONF_IF_NEEDED("@NSM_DBUS_CONF@" 
227                                   "${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/NodeStateManager_dbus.conf" 
228                                   NSM_DBUS_CONF)
229     ENDIF(WITH_NSM)
230 # Generates the dbus configuration file. Every component is responsible to append it dbus configuration part.
231 CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/AudioManager_dbus.conf.in ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/AudioManager_dbus.conf)
232 CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/AudioManager_dbus.conf.in ${CMAKE_BINARY_DIR}/AudioManager_dbus.conf)
233
234 ENDIF(WITH_CAPI_WRAPPER)
235
236
237 INSTALL(TARGETS AudioManager 
238         RUNTIME 
239         DESTINATION bin
240         PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ
241         COMPONENT bin
242 )
243
244 INSTALL(DIRECTORY "${AUDIO_INCLUDE_FOLDER}/" 
245         DESTINATION include
246         COMPONENT dev
247 )
248
249 IF(WITH_NSM)
250     IF(USE_BUILD_LIBS) 
251         SET(NSM_INTROSPECTION_FILE ${EXECUTABLE_OUTPUT_PATH}/LifeCycleConsumer.xml)
252             execute_process(
253             COMMAND mkdir -p "${CMAKE_SOURCE_DIR}/bin"
254             COMMAND cp "${CMAKE_SOURCE_DIR}/cmake/LifecycleConsumer.xml" ${NSM_INTROSPECTION_FILE}
255             COMMAND cp "${CMAKE_BINARY_DIR}/AudioManager_dbus.conf" ${EXECUTABLE_OUTPUT_PATH})
256     ELSE(USE_BUILD_LIBS) 
257         SET(NSM_INTROSPECTION_FILE ${CMAKE_INSTALL_PREFIX}/share/audiomanager/LifecycleConsumer.xml)
258         INSTALL(
259             FILES ${CMAKE_SOURCE_DIR}/cmake/LifecycleConsumer.xml #${CMAKE_BINARY_DIR}/AudioManager_dbus.conf
260             DESTINATION "${NSM_INTROSPECTION_FILE}"
261             COMPONENT bin)
262     ENDIF(USE_BUILD_LIBS)
263 ENDIF(WITH_NSM)
264
265 CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/cmake/config.cmake ${CMAKE_SOURCE_DIR}/include/config.h )
266
267 IF(WITH_TESTS)
268         add_subdirectory (test)
269 ENDIF(WITH_TESTS)
270
271 # General packet dependency
272 IF(WITH_DATABASE_STORAGE)
273     SET(ADD_DEPEND_BIN_PROP "sqlite3(>=3.6.22)")
274 ENDIF(WITH_DATABASE_STORAGE)
275
276 # Optional packet dependency
277 IF(WITH_DLT)
278     SET(ADD_DEPEND_BIN_PROP ${ADD_DEPEND_BIN_PROP} "dlt")
279 ENDIF(WITH_DLT)
280
281 IF(WITH_DBUS_WRAPPER)
282     SET(ADD_DEPEND_BIN_PROP ${ADD_DEPEND_BIN_PROP} "libdbus-1-3(>=1.2.16)")
283 ENDIF(WITH_DBUS_WRAPPER)
284
285 # Additional Dev packet dependency
286 SET(ADD_DEPEND_DEV_PROP "audiomanager-bin" ${ADD_DEPEND_BIN_PROP})
287
288 set(CMAKE_CXX_FLAGS_RELEASE "-O2 -fno-common -fno-strict-aliasing -DNDEBUG")
289
290 MESSAGE(STATUS "bin packet dependency: ${ADD_DEPEND_BIN_PROP}")
291 MESSAGE(STATUS "dev dependency: ${ADD_DEPEND_DEV_PROP}")
292
293 set_property(GLOBAL APPEND PROPERTY bin_prop "${ADD_DEPEND_BIN_PROP}")
294 set_property(GLOBAL APPEND PROPERTY dev_prop "${ADD_DEPEND_DEV_PROP}")
295
296
297