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)
21 execute_process(COMMAND git describe --tags WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
22 OUTPUT_VARIABLE DAEMONVERSION
23 OUTPUT_STRIP_TRAILING_WHITESPACE)
25 IF (NOT DAEMONVERSION)
26 #Can be changed via passing -DVERSION="XXX" to cmake
27 IF(NOT DEFINED VERSION)
28 SET( DAEMONVERSION "homebrew-${CMAKE_SOURCE_DIR}" )
29 ELSE (NOT DEFINED VERSION)
30 SET( DAEMONVERSION "${VERSION}" )
31 ENDIF(NOT DEFINED VERSION)
32 ELSE (NOT DAEMONVERSION)
33 STRING(REGEX REPLACE "(-)[^-]+$" "" DAEMONVERSION ${DAEMONVERSION})
34 STRING(REGEX REPLACE "-" "." DAEMONVERSION ${DAEMONVERSION})
35 ENDIF(NOT DAEMONVERSION)
37 message(STATUS "Build Version ${DAEMONVERSION}")
39 execute_process(COMMAND git log --pretty=short WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
40 OUTPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG)
42 PROJECT(AudioManagerDeamon)
44 FIND_PACKAGE(PkgConfig)
46 OPTION( WITH_DBUS_WRAPPER
47 "Enable Dbus Wrapper Support" ON )
50 "Enable automotive-DLT Support" ON )
53 "Build together with all available unitTest" ON )
55 OPTION( WITH_DOCUMENTATION
56 "Build together with Doxygen Documentation" OFF )
58 OPTION( WITH_PLUGIN_COMMAND
59 "Build command pluings" ON)
61 OPTION( WITH_PLUGIN_CONTROL
62 "Build control plugin" ON)
64 OPTION( WITH_PLUGIN_ROUTING
65 "Build routing pluings" ON)
68 "build with Telnetserver (can only work with SocketHandler)" ON)
70 OPTION ( WITH_SYSTEMD_WATCHDOG
71 "build with systemD support & watchdog" OFF)
73 OPTION ( USE_BUILD_LIBS
74 "build with default library path = build path" ON)
76 OPTION ( GLIB_DBUS_TYPES_TOLERANT
77 "build dbus with tolerance towards glib 16bit/32bit handling" ON)
80 "build with NSM support" ON)
82 IF (NOT WITH_DBUS_WRAPPER)
84 ENDIF (NOT WITH_DBUS_WRAPPER)
86 #Can be changed via passing -DDBUS_SERVICE_PREFIX="XXX" to cmake
87 IF(NOT DEFINED DBUS_SERVICE_PREFIX)
88 SET( DBUS_SERVICE_PREFIX "org.genivi.audiomanager\0")
89 ENDIF(NOT DEFINED DBUS_SERVICE_PREFIX)
91 #Can be changed via passing -DDBUS_SERVICE_OBJECT_PATH="XXX" to cmake
92 IF(NOT DEFINED DBUS_SERVICE_OBJECT_PATH)
93 SET( DBUS_SERVICE_OBJECT_PATH "/org/genivi/audiomanager\0" )
94 ENDIF(NOT DEFINED DBUS_SERVICE_OBJECT_PATH)
96 #Can be changed via passing -DDEFAULT_TELNETPORT="XXX" to cmake
97 IF(NOT DEFINED DEFAULT_TELNETPORT)
98 SET( DEFAULT_TELNETPORT 6080 )
99 ENDIF(NOT DEFINED DEFAULT_TELNETPORT)
101 #Can be changed via passing -DMAX_TELNETCONNECTIONS="XXX" to cmake
102 IF(NOT DEFINED MAX_TELNETCONNECTIONS)
103 SET( MAX_TELNETCONNECTIONS 3 )
104 ENDIF(NOT DEFINED MAX_TELNETCONNECTIONS)
106 #Can be changed via passing -DNSM_BUS_INTERFACE="XXX" to cmake
107 IF(NOT DEFINED NSM_BUS_INTERFACE)
108 SET( NSM_BUS_INTERFACE "org.genivi.NodeStateManager")
109 ENDIF(NOT DEFINED NSM_BUS_INTERFACE)
111 #Can be changed via passing -DNSM_PATH="XXX" to cmake
112 IF(NOT DEFINED NSM_PATH)
113 SET( NSM_PATH "/org/genivi/NodeStateManager")
114 ENDIF(NOT DEFINED NSM_PATH)
116 #Can be changed via passing -DNSM_INTERFACE="XXX" to cmake
117 IF(NOT DEFINED NSM_INTERFACE)
118 SET( NSM_INTERFACE "org.genivi.NodeStateManager.Consumer")
119 ENDIF(NOT DEFINED NSM_INTERFACE)
121 SET(PLUGINS_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/plugins)
122 SET(LIB_INSTALL_SUFFIX "audioManager")
125 IF(NOT DEFINED DEFAULT_PLUGIN_COMMAND_DIR)
126 SET(DEFAULT_PLUGIN_COMMAND_DIR "${PLUGINS_OUTPUT_PATH}/command")
127 ENDIF(NOT DEFINED DEFAULT_PLUGIN_COMMAND_DIR)
128 IF(NOT DEFINED DEFAULT_PLUGIN_ROUTING_DIR)
129 SET(DEFAULT_PLUGIN_ROUTING_DIR "${PLUGINS_OUTPUT_PATH}/routing")
130 ENDIF(NOT DEFINED DEFAULT_PLUGIN_ROUTING_DIR)
131 IF(NOT DEFINED CONTROLLER_PLUGIN)
132 SET(CONTROLLER_PLUGIN "${PLUGINS_OUTPUT_PATH}/control/libPluginControlInterface.so")
133 ENDIF(NOT DEFINED CONTROLLER_PLUGIN)
135 IF(NOT DEFINED DEFAULT_PLUGIN_COMMAND_DIR)
136 SET(DEFAULT_PLUGIN_COMMAND_DIR "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/command")
137 ENDIF(NOT DEFINED DEFAULT_PLUGIN_COMMAND_DIR)
138 IF(NOT DEFINED DEFAULT_PLUGIN_ROUTING_DIR)
139 SET(DEFAULT_PLUGIN_ROUTING_DIR "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/routing")
140 ENDIF(NOT DEFINED DEFAULT_PLUGIN_ROUTING_DIR)
141 IF(NOT DEFINED CONTROLLER_PLUGIN)
142 SET(CONTROLLER_PLUGIN "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/control/libPluginControlInterface.so")
143 ENDIF(NOT DEFINED CONTROLLER_PLUGIN)
144 endif(USE_BUILD_LIBS)
146 IF(EXISTS "ProjectSpecific/")
147 SET(PROJECT_INCLUDE_FOLDER ${CMAKE_SOURCE_DIR}/ProjectSpecific/include)
148 endif(EXISTS "ProjectSpecific/")
150 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
151 SET(AUDIO_INCLUDE_FOLDER ${CMAKE_SOURCE_DIR}/include)
152 SET(DOC_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/doc)
153 SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
154 SET(TEST_EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/test)
155 SET(DOXY_PROTOTYPE ${CMAKE_SOURCE_DIR}/cmake/DoxyFile.in)
156 SET(DOXY_FILE ${CMAKE_CURRENT_BINARY_DIR}/DoxyFile)
158 CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/docx/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/DoxyFile )
161 pkg_check_modules(DLT REQUIRED automotive-dlt>=2.2.0)
165 add_subdirectory(googleMock)
166 set(GMOCK_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/googleMock/include")
167 set(GOOGLE_TEST_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/googleMock/gtest/include")
170 IF(WITH_DOCUMENTATION)
171 find_package(Doxygen)
172 configure_file(${DOXY_FILE} ${DOC_OUTPUT_PATH}/Doxyfile @ONLY IMMEDIATE)
173 add_custom_target (AudioManangerDoku ALL
174 COMMAND ${DOXYGEN_EXECUTABLE} ${DOC_OUTPUT_PATH}/Doxyfile WORKING_DIRECTORY ${DOC_OUTPUT_PATH}
175 SOURCES ${CMAKE_SOURCE_DIR} ${DOC_OUTPUT_PATH}/Doxyfile
177 ENDIF(WITH_DOCUMENTATION)
179 ##global build flags set(CPACK_RPM_COMPONENT_INSTALL ON)
180 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra -std=gnu++0x -D_GNU_SOURCE -pedantic -Wno-variadic-macros -Wno-long-long")
181 #set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra -std=c++98 -D_GNU_SOURCE")
183 if(WITH_PLUGIN_COMMAND)
184 add_subdirectory (PluginCommandInterfaceDbus)
185 endif(WITH_PLUGIN_COMMAND)
187 if(WITH_PLUGIN_ROUTING)
188 add_subdirectory (PluginRoutingInterfaceDbus)
189 add_subdirectory (PluginRoutingInterfaceAsync)
190 endif(WITH_PLUGIN_ROUTING)
192 if(WITH_PLUGIN_CONTROL)
193 add_subdirectory (PluginControlInterface)
194 endif(WITH_PLUGIN_CONTROL)
196 add_subdirectory (AudioManagerDaemon)
198 IF(EXISTS "${CMAKE_SOURCE_DIR}/ProjectSpecific/")
199 add_subdirectory (ProjectSpecific)
200 endif(EXISTS "${CMAKE_SOURCE_DIR}/ProjectSpecific/")
204 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
205 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
208 add_custom_target(uninstall
209 COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
211 # Here starts package creation
212 SET(CPACK_SET_DESTDIR ON)
213 SET(CPACK_OUTPUT_FILE_PREFIX ${CMAKE_SOURCE_DIR}/packages)
214 SET(CPACK_GENERATOR "DEB")
215 SET(CPACK_PACKAGE_NAME "AudioManager")
216 SET(CPACK_PACKAGE_VENDOR "GENIVI")
217 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "AudioManager: This component manages audio in the GENIVI context")
218 SET(CPACK_PACKAGE_VERSION "${DAEMONVERSION}")
219 SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENCE)
220 SET(CPACK_RESOURCE_FILE_README ${CMAKE_SOURCE_DIR}/README)
221 SET(CPACK_PACKAGE_CONTACT "Christian Linke(BMW) christian.linke@bmw.de")
222 SET(CPACK_PACKAGE_INSTALL_DIRECTORY "genivi")
223 SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
224 SET(CPACK_DEBIAN_PACKAGE_DEPENDS "*")
225 SET(CPACK_STRIP_FILES TRUE)
226 SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README)
227 SET(CPACK_SOURCE_GENERATOR "TGZ")
228 SET(CPACK_SOURCE_IGNORE_FILES ".settings*" ".cproject" "/\\\\.metadata" "\\\\.#" "/#" ".*~" "/\\\\.git" "${CMAKE_CURRENT_BINARY_DIR}" "bin/" "packages/" "config.h")
231 get_property(ADD_DEPEND GLOBAL PROPERTY tests_prop)
232 list(REMOVE_DUPLICATES ADD_DEPEND)
233 list(APPEND ALL_DEPEND ${ADD_DEPEND})
234 FOREACH (dep ${ADD_DEPEND})
235 SET(tests_DEPENDENCIES "${dep} ,${tests_DEPENDENCIES}")
237 STRING(REGEX REPLACE ".$" "" tests_DEPENDENCIES ${tests_DEPENDENCIES})
240 #evaluate the properties
242 get_property(ADD_DEPEND GLOBAL PROPERTY bin_prop)
243 list(REMOVE_DUPLICATES ADD_DEPEND)
244 set(ALL_DEPEND ${ADD_DEPEND})
245 FOREACH (dep ${ADD_DEPEND})
246 SET(bin_DEPENDENCIES "${dep} ,${bin_DEPENDENCIES}")
248 STRING(REGEX REPLACE ".$" "" bin_DEPENDENCIES ${bin_DEPENDENCIES})
251 if(WITH_PLUGIN_COMMAND OR WITH_PLUGIN_CONTROL OR WITH_PLUGIN_ROUTING)
252 get_property(ADD_DEPEND GLOBAL PROPERTY sampleplugins_prop)
253 list(REMOVE_DUPLICATES ADD_DEPEND)
254 list(APPEND ALL_DEPEND ${ADD_DEPEND})
255 FOREACH (dep ${ADD_DEPEND})
256 SET(sampleplugins_DEPENDENCIES "${dep} ,${sampleplugins_DEPENDENCIES}")
258 STRING(REGEX REPLACE ".$" "" sampleplugins_DEPENDENCIES ${sampleplugins_DEPENDENCIES})
259 endif(WITH_PLUGIN_COMMAND OR WITH_PLUGIN_CONTROL OR WITH_PLUGIN_ROUTING)
261 get_property(ADD_DEPEND GLOBAL PROPERTY dev_prop)
262 list(REMOVE_DUPLICATES ADD_DEPEND)
263 list(APPEND ALL_DEPEND ${ADD_DEPEND})
264 FOREACH (dep ${ADD_DEPEND})
265 SET(dev_DEPENDENCIES "${dep} ,${dev_DEPENDENCIES}")
267 STRING(REGEX REPLACE ".$" "" dev_DEPENDENCIES ${dev_DEPENDENCIES})
269 list(REMOVE_DUPLICATES ALL_DEPEND)
270 list(REMOVE_ITEM ALL_DEPEND "audiomanager-bin")
271 FOREACH (dep ${ALL_DEPEND})
272 SET(all_DEPENDENCIES "${dep} ,${all_DEPENDENCIES}")
274 STRING(REGEX REPLACE ".$" "" all_DEPENDENCIES ${all_DEPENDENCIES})
275 execute_process(COMMAND cp ${CMAKE_MODULE_PATH}/add_package_dependencies.sh ${CMAKE_CURRENT_BINARY_DIR})
277 #component based dep package generation is only supported above 2.8.5
278 IF (${CMAKE_VERSION} VERSION_GREATER 2.8.5)
280 SET(CPACK_COMPONENTS_ALL bin sampleplugins tests dev)
281 SET(CPACK_COMPONENTS_IGNORE_GROUPS 1)
282 SET(CPACK_DEB_COMPONENT_INSTALL ON)
283 ADD_CUSTOM_TARGET(genivi_package
284 COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=OFF
286 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-bin.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${bin_DEPENDENCIES}\"
287 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-sampleplugins.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${sampleplugins_DEPENDENCIES}\"
288 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-tests.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${tests_DEPENDENCIES}\"
289 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-dev.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${dev_DEPENDENCIES}\"
291 ELSE (${CMAKE_VERSION} VERSION_GREATER 2.8.5)
292 IF(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
293 ADD_CUSTOM_TARGET(genivi_package
294 COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=OFF
296 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}\"
298 ELSE(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
299 ADD_CUSTOM_TARGET(genivi_package
300 COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=OFF
302 COMMAND mkdir -p ../${CPACK_OUTPUT_FILE_PREFIX}
303 COMMAND mv ${CMAKE_CURRENT_BINARY_DIR}/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX}
304 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${all_DEPENDENCIES}\"
306 ENDIF(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
307 ENDIF (${CMAKE_VERSION} VERSION_GREATER 2.8.5)