1 # Copyright (C) 2012, BMW AG
3 # This file is part of GENIVI Project AudioManager.
5 # Contributions are licensed to the GENIVI Alliance under one or more
6 # Contribution License Agreements.
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/.
13 # author Christian Mueller, christian.ei.mueller@bmw.de BMW 2011,2012
15 # For further information see http://www.genivi.org/.
19 cmake_minimum_required(VERSION 2.6)
20 include(CMakeDependentOption)
22 execute_process(COMMAND git describe --tags WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
23 OUTPUT_VARIABLE DAEMONVERSION
24 OUTPUT_STRIP_TRAILING_WHITESPACE)
26 IF (NOT DAEMONVERSION)
27 #Can be changed via passing -DVERSION="XXX" to cmake
28 IF(NOT DEFINED VERSION)
29 SET( DAEMONVERSION "homebrew-${CMAKE_SOURCE_DIR}" )
30 ELSE (NOT DEFINED VERSION)
31 SET( DAEMONVERSION "${VERSION}" )
32 ENDIF(NOT DEFINED VERSION)
33 ELSE (NOT DAEMONVERSION)
34 STRING(REGEX REPLACE "(-)[^-]+$" "" DAEMONVERSION ${DAEMONVERSION})
35 STRING(REGEX REPLACE "-" "." DAEMONVERSION ${DAEMONVERSION})
36 ENDIF(NOT DAEMONVERSION)
38 message(STATUS "Build Version ${DAEMONVERSION}")
40 execute_process(COMMAND git log --pretty=short WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
41 OUTPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG)
43 PROJECT(AudioManagerDeamon)
45 message( STATUS "CMAKE_TOOLCHAIN_FILE='${CMAKE_TOOLCHAIN_FILE}'" )
47 FIND_PACKAGE(PkgConfig)
49 SET(WITH_ENABLED_IPC "CAPI" CACHE STRING "Disable 'NONE' / Enable Common-API 'CAPI' or Dbus 'DBUS' Support")
51 SET_PROPERTY(CACHE WITH_ENABLED_IPC PROPERTY STRINGS "NONE" "CAPI" "DBUS")
54 "Enable automotive-DLT Support" ON )
57 "Build together with all available unitTest" ON )
59 OPTION( WITH_DOCUMENTATION
60 "Build together with Doxygen Documentation" OFF )
62 OPTION( WITH_PLUGIN_COMMAND
63 "Build command pluings" ON)
65 OPTION( WITH_PLUGIN_CONTROL
66 "Build control plugin" ON)
68 OPTION( WITH_PLUGIN_ROUTING
69 "Build routing pluings" ON)
72 "build with Telnetserver (can only work with SocketHandler)" ON)
74 OPTION ( WITH_SYSTEMD_WATCHDOG
75 "build with systemD support & watchdog" OFF)
77 OPTION ( USE_BUILD_LIBS
78 "build with default library path = build path" ON)
80 OPTION ( GLIB_DBUS_TYPES_TOLERANT
81 "build dbus with tolerance towards glib 16bit/32bit handling" ON)
83 IF (WITH_ENABLED_IPC STREQUAL "NONE")
89 CMAKE_DEPENDENT_OPTION(WITH_NSM "build with NSM support" ON
93 "build with NSM support" ON)
95 OPTION ( WITH_DATABASE_STORAGE
96 "build with sqlite as in memory storage" OFF)
98 SET (WITH_COMMON_API_GEN ON CACHE INTERNAL "hide this!" FORCE)
100 IF (WITH_ENABLED_IPC STREQUAL "DBUS")
101 SET (WITH_DBUS_WRAPPER ON CACHE INTERNAL "hide this!" FORCE)
102 SET (WITH_CAPI_WRAPPER OFF CACHE INTERNAL "hide this!" FORCE)
103 ELSEIF(WITH_ENABLED_IPC STREQUAL "CAPI")
104 SET (WITH_CAPI_WRAPPER ON CACHE INTERNAL "hide this!" FORCE)
105 SET (WITH_DBUS_WRAPPER OFF CACHE INTERNAL "hide this!" FORCE)
107 MACRO(INSERT_DBUS_CONF_IF_NEEDED IN_PLACEHOLDER IN_SRC_DBUS_CONF OUT_DST_DBUS_CONF)
108 # Checks the variable in the template
109 if(NOT EXISTS ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/AudioManager_dbus.conf.in )
110 FILE(WRITE ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/AudioManager_dbus.conf.in
111 "################################################ CMAKE GENERATED #################################################")
114 FILE(READ ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/AudioManager_dbus.conf.in DBUS_CONF_IN)
115 if( NOT DBUS_CONF_IN MATCHES ${IN_PLACEHOLDER} )
116 if( NOT DBUS_CONF_IN STREQUAL "" )
117 FILE(APPEND ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/AudioManager_dbus.conf.in "\r\n\r\n")
119 FILE(APPEND ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/fidls/AudioManager_dbus.conf.in ${IN_PLACEHOLDER})
121 # Reads out the common-api dbus configuration for the node state manager.
122 FILE(READ ${IN_SRC_DBUS_CONF} ${OUT_DST_DBUS_CONF})
123 ENDMACRO(INSERT_DBUS_CONF_IF_NEEDED)
125 ELSEIF(WITH_ENABLED_IPC STREQUAL "NONE")
126 SET (WITH_CAPI_WRAPPER OFF CACHE INTERNAL "hide this!" FORCE)
127 SET (WITH_DBUS_WRAPPER OFF CACHE INTERNAL "hide this!" FORCE)
130 IF (NOT WITH_DBUS_WRAPPER AND NOT WITH_CAPI_WRAPPER)
132 ENDIF (NOT WITH_DBUS_WRAPPER AND NOT WITH_CAPI_WRAPPER)
134 #Can be changed via passing -DDBUS_SERVICE_PREFIX="XXX" to cmake
135 IF(NOT DEFINED DBUS_SERVICE_PREFIX)
136 SET( DBUS_SERVICE_PREFIX "org.genivi.audiomanager\0")
137 ENDIF(NOT DEFINED DBUS_SERVICE_PREFIX)
139 #Can be changed via passing -DDBUS_SERVICE_OBJECT_PATH="XXX" to cmake
140 IF(NOT DEFINED DBUS_SERVICE_OBJECT_PATH)
141 SET( DBUS_SERVICE_OBJECT_PATH "/org/genivi/audiomanager\0" )
142 ENDIF(NOT DEFINED DBUS_SERVICE_OBJECT_PATH)
144 #Can be changed via passing -DDEFAULT_TELNETPORT="XXX" to cmake
145 IF(NOT DEFINED DEFAULT_TELNETPORT)
146 SET( DEFAULT_TELNETPORT 6080 )
147 ENDIF(NOT DEFINED DEFAULT_TELNETPORT)
149 #Can be changed via passing -DMAX_TELNETCONNECTIONS="XXX" to cmake
150 IF(NOT DEFINED MAX_TELNETCONNECTIONS)
151 SET( MAX_TELNETCONNECTIONS 3 )
152 ENDIF(NOT DEFINED MAX_TELNETCONNECTIONS)
154 #Can be changed via passing -DNSM_BUS_INTERFACE="XXX" to cmake
155 IF(NOT DEFINED NSM_BUS_INTERFACE)
156 SET( NSM_BUS_INTERFACE "org.genivi.NodeStateManager")
157 ENDIF(NOT DEFINED NSM_BUS_INTERFACE)
159 #Can be changed via passing -DNSM_PATH="XXX" to cmake
160 IF(NOT DEFINED NSM_PATH)
161 SET( NSM_PATH "/org/genivi/NodeStateManager")
162 ENDIF(NOT DEFINED NSM_PATH)
164 #Can be changed via passing -DNSM_INTERFACE="XXX" to cmake
165 IF(NOT DEFINED NSM_INTERFACE)
166 SET( NSM_INTERFACE "org.genivi.NodeStateManager.Consumer")
167 ENDIF(NOT DEFINED NSM_INTERFACE)
169 SET(PLUGINS_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/plugins)
170 SET(LIB_INSTALL_SUFFIX "audioManager")
173 IF(NOT DEFINED DEFAULT_PLUGIN_COMMAND_DIR)
174 SET(DEFAULT_PLUGIN_COMMAND_DIR "${PLUGINS_OUTPUT_PATH}/command")
175 ENDIF(NOT DEFINED DEFAULT_PLUGIN_COMMAND_DIR)
176 IF(NOT DEFINED DEFAULT_PLUGIN_ROUTING_DIR)
177 SET(DEFAULT_PLUGIN_ROUTING_DIR "${PLUGINS_OUTPUT_PATH}/routing")
178 ENDIF(NOT DEFINED DEFAULT_PLUGIN_ROUTING_DIR)
179 IF(NOT DEFINED CONTROLLER_PLUGIN)
180 SET(CONTROLLER_PLUGIN "${PLUGINS_OUTPUT_PATH}/control/libPluginControlInterface.so")
181 ENDIF(NOT DEFINED CONTROLLER_PLUGIN)
183 IF(NOT DEFINED DEFAULT_PLUGIN_COMMAND_DIR)
184 SET(DEFAULT_PLUGIN_COMMAND_DIR "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/command")
185 ENDIF(NOT DEFINED DEFAULT_PLUGIN_COMMAND_DIR)
186 IF(NOT DEFINED DEFAULT_PLUGIN_ROUTING_DIR)
187 SET(DEFAULT_PLUGIN_ROUTING_DIR "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/routing")
188 ENDIF(NOT DEFINED DEFAULT_PLUGIN_ROUTING_DIR)
189 IF(NOT DEFINED CONTROLLER_PLUGIN)
190 SET(CONTROLLER_PLUGIN "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/control/libPluginControlInterface.so")
191 ENDIF(NOT DEFINED CONTROLLER_PLUGIN)
192 endif(USE_BUILD_LIBS)
194 IF(EXISTS "ProjectSpecific/")
195 SET(PROJECT_INCLUDE_FOLDER ${CMAKE_SOURCE_DIR}/ProjectSpecific/include)
196 endif(EXISTS "ProjectSpecific/")
198 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
199 SET(AUDIO_INCLUDE_FOLDER ${CMAKE_SOURCE_DIR}/include)
200 SET(DOC_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/doc)
201 SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
202 SET(TEST_EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/test)
203 SET(DOXY_PROTOTYPE ${CMAKE_SOURCE_DIR}/cmake/DoxyFile.in)
204 SET(DOXY_FILE ${CMAKE_CURRENT_BINARY_DIR}/DoxyFile)
206 CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/docx/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/DoxyFile )
209 pkg_check_modules(DLT REQUIRED automotive-dlt>=2.2.0)
213 add_subdirectory(googleMock)
214 set(GMOCK_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/googleMock/include")
215 set(GOOGLE_TEST_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/googleMock/gtest/include")
218 IF(WITH_DOCUMENTATION)
219 find_package(Doxygen)
220 configure_file(${DOXY_FILE} ${DOC_OUTPUT_PATH}/Doxyfile @ONLY IMMEDIATE)
221 configure_file("README.html" ${DOC_OUTPUT_PATH}/html/README.html)
222 add_custom_target (AudioManangerDoku ALL
223 COMMAND ${DOXYGEN_EXECUTABLE} ${DOC_OUTPUT_PATH}/Doxyfile WORKING_DIRECTORY ${DOC_OUTPUT_PATH}
224 SOURCES ${CMAKE_SOURCE_DIR} ${DOC_OUTPUT_PATH}/Doxyfile
226 ENDIF(WITH_DOCUMENTATION)
228 ##global build flags set(CPACK_RPM_COMPONENT_INSTALL ON)
229 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra -std=gnu++0x -D_GNU_SOURCE -pedantic -Wno-variadic-macros -Wno-long-long")
230 #set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra -std=c++98 -D_GNU_SOURCE")
232 set (CMAKE_DL_LIBS "${CMAKE_DL_LIBS} -lrt")
234 if(WITH_PLUGIN_COMMAND)
235 if(WITH_DBUS_WRAPPER)
236 add_subdirectory (PluginCommandInterfaceDbus)
237 elseif(WITH_CAPI_WRAPPER)
238 add_subdirectory (PluginCommandInterfaceCAPI)
240 endif(WITH_PLUGIN_COMMAND)
242 if(WITH_PLUGIN_ROUTING)
243 add_subdirectory (PluginRoutingInterfaceAsync)
244 if(WITH_DBUS_WRAPPER)
245 add_subdirectory (PluginRoutingInterfaceDbus)
246 elseif(WITH_CAPI_WRAPPER)
247 add_subdirectory (PluginRoutingInterfaceCAPI)
249 endif(WITH_PLUGIN_ROUTING)
251 if(WITH_PLUGIN_CONTROL)
252 add_subdirectory (PluginControlInterface)
253 add_subdirectory (PluginControlInterfaceDbus)
254 endif(WITH_PLUGIN_CONTROL)
256 add_subdirectory (AudioManagerDaemon)
259 IF(EXISTS "${CMAKE_SOURCE_DIR}/ProjectSpecific/")
260 add_subdirectory (ProjectSpecific)
261 endif(EXISTS "${CMAKE_SOURCE_DIR}/ProjectSpecific/")
265 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
266 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
269 add_custom_target(uninstall
270 COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
272 # Here starts package creation
273 SET(CPACK_SET_DESTDIR ON)
274 SET(CPACK_OUTPUT_FILE_PREFIX ${CMAKE_SOURCE_DIR}/packages)
275 SET(CPACK_GENERATOR "DEB")
276 SET(CPACK_PACKAGE_NAME "AudioManager")
277 SET(CPACK_PACKAGE_VENDOR "GENIVI")
278 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "AudioManager: This component manages audio in the GENIVI context")
279 SET(CPACK_PACKAGE_VERSION "${DAEMONVERSION}")
280 SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENCE)
281 SET(CPACK_RESOURCE_FILE_README ${CMAKE_SOURCE_DIR}/README)
282 SET(CPACK_PACKAGE_CONTACT "Christian Linke(BMW) christian.linke@bmw.de")
283 SET(CPACK_PACKAGE_INSTALL_DIRECTORY "genivi")
284 SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
285 SET(CPACK_DEBIAN_PACKAGE_DEPENDS "*")
286 SET(CPACK_STRIP_FILES TRUE)
287 SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README)
288 SET(CPACK_SOURCE_GENERATOR "TGZ")
289 SET(CPACK_SOURCE_IGNORE_FILES ".settings*" ".cproject" "/\\\\.metadata" "\\\\.#" "/#" ".*~" "/\\\\.git" "${CMAKE_CURRENT_BINARY_DIR}" "bin/" "packages/" "config.h")
292 get_property(ADD_DEPEND GLOBAL PROPERTY tests_prop)
293 list(REMOVE_DUPLICATES ADD_DEPEND)
294 list(APPEND ALL_DEPEND ${ADD_DEPEND})
295 FOREACH (dep ${ADD_DEPEND})
296 SET(tests_DEPENDENCIES "${dep} ,${tests_DEPENDENCIES}")
298 STRING(REGEX REPLACE ".$" "" tests_DEPENDENCIES ${tests_DEPENDENCIES})
301 #evaluate the properties
303 get_property(ADD_DEPEND GLOBAL PROPERTY bin_prop)
304 list(REMOVE_DUPLICATES ADD_DEPEND)
305 set(ALL_DEPEND ${ADD_DEPEND})
306 FOREACH (dep ${ADD_DEPEND})
307 SET(bin_DEPENDENCIES "${dep} ,${bin_DEPENDENCIES}")
309 STRING(REGEX REPLACE ".$" "" bin_DEPENDENCIES ${bin_DEPENDENCIES})
312 if(WITH_PLUGIN_COMMAND OR WITH_PLUGIN_CONTROL OR WITH_PLUGIN_ROUTING)
313 get_property(ADD_DEPEND GLOBAL PROPERTY sampleplugins_prop)
314 list(REMOVE_DUPLICATES ADD_DEPEND)
315 list(APPEND ALL_DEPEND ${ADD_DEPEND})
316 FOREACH (dep ${ADD_DEPEND})
317 SET(sampleplugins_DEPENDENCIES "${dep} ,${sampleplugins_DEPENDENCIES}")
319 STRING(REGEX REPLACE ".$" "" sampleplugins_DEPENDENCIES ${sampleplugins_DEPENDENCIES})
320 endif(WITH_PLUGIN_COMMAND OR WITH_PLUGIN_CONTROL OR WITH_PLUGIN_ROUTING)
322 get_property(ADD_DEPEND GLOBAL PROPERTY dev_prop)
323 list(REMOVE_DUPLICATES ADD_DEPEND)
324 list(APPEND ALL_DEPEND ${ADD_DEPEND})
325 FOREACH (dep ${ADD_DEPEND})
326 SET(dev_DEPENDENCIES "${dep} ,${dev_DEPENDENCIES}")
328 STRING(REGEX REPLACE ".$" "" dev_DEPENDENCIES ${dev_DEPENDENCIES})
330 list(REMOVE_DUPLICATES ALL_DEPEND)
331 list(REMOVE_ITEM ALL_DEPEND "audiomanager-bin")
332 FOREACH (dep ${ALL_DEPEND})
333 SET(all_DEPENDENCIES "${dep} ,${all_DEPENDENCIES}")
335 STRING(REGEX REPLACE ".$" "" all_DEPENDENCIES ${all_DEPENDENCIES})
336 execute_process(COMMAND cp ${CMAKE_MODULE_PATH}/add_package_dependencies.sh ${CMAKE_CURRENT_BINARY_DIR})
338 #component based dep package generation is only supported above 2.8.5
339 IF (${CMAKE_VERSION} VERSION_GREATER 2.8.5)
341 SET(CPACK_COMPONENTS_ALL bin sampleplugins tests dev)
342 SET(CPACK_COMPONENTS_IGNORE_GROUPS 1)
343 SET(CPACK_DEB_COMPONENT_INSTALL ON)
344 ADD_CUSTOM_TARGET(genivi_package
345 COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=OFF
347 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-bin.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${bin_DEPENDENCIES}\"
348 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-sampleplugins.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${sampleplugins_DEPENDENCIES}\"
349 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-tests.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${tests_DEPENDENCIES}\"
350 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-dev.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${dev_DEPENDENCIES}\"
352 ELSE (${CMAKE_VERSION} VERSION_GREATER 2.8.5)
353 IF(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
354 ADD_CUSTOM_TARGET(genivi_package
355 COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=OFF
357 COMMAND ${CMAKE_CURRENT_BINARY_DIR}A logical block opening on t/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${all_DEPENDENCIES}\"
359 ELSE(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
360 ADD_CUSTOM_TARGET(genivi_package
361 COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=OFF
363 COMMAND mkdir -p ../${CPACK_OUTPUT_FILE_PREFIX}
364 COMMAND mv ${CMAKE_CURRENT_BINARY_DIR}/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX}
365 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${all_DEPENDENCIES}\"
367 ENDIF(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
368 ENDIF (${CMAKE_VERSION} VERSION_GREATER 2.8.5)