1 # Copyright (c) 2013, Ford Motor Company
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are met:
7 # Redistributions of source code must retain the above copyright notice, this
8 # list of conditions and the following disclaimer.
10 # Redistributions in binary form must reproduce the above copyright notice,
11 # this list of conditions and the following
12 # disclaimer in the documentation and/or other materials provided with the
15 # Neither the name of the Ford Motor Company nor the names of its contributors
16 # may be used to endorse or promote products derived from this software
17 # without specific prior written permission.
19 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 # POSSIBILITY OF SUCH DAMAGE.
31 cmake_minimum_required(VERSION 2.8.0)
33 set (PROJECT smartDeviceLinkCore)
36 option(HMI2 "Use Qt HMI" OFF)
38 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
40 # --- Check libavahi-common, libavahi-client availability
41 find_package(Libavahi)
43 # Please do not change compiler/linker flags if You do not know how particular
44 # flag is handled by CMake
45 set(CMAKE_INSTALL_PREFIX .)
46 set(ARCHIVE_OUTPUT_DIRECTORY ./bin)
47 set(CMAKE_CXX_FLAGS "-g3 -ggdb3 -std=gnu++0x -Werror=return-type -Wuninitialized --coverage")
48 set(CMAKE_CXX_FLAGS_RELEASE "-s -O2") #It will be appended to CMAKE_CXX_FLAGS in release
50 option(EXTENDED_MEDIA_MODE "Turn on and off extended Madia Manager features relates to PulseAudio A2DP and GSteamer" OFF)
51 option(BUILD_SHARED_LIBS "Build all libraries as shared (if ON) or static (if OFF)" OFF)
52 option(BUILD_BT_SUPPORT "Bluetooth support" OFF)
53 option(BUILD_USB_SUPPORT "libusb support" OFF)
54 option(BUILD_AVAHI_SUPPORT "libavahi support" OFF)
55 option(BUILD_RWLOCK_SUPPORT "rwlocks support" OFF)
56 option(BUILD_BACKTRACE_SUPPORT "backtrace support" ON)
60 add_definitions(-DOS_POSIX)
62 if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
63 add_definitions(-DOS_LINUX)
64 elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX")
65 add_definitions(-DOS_QNX)
66 SET(BUILD_BT_SUPPORT OFF)
67 SET(BUILD_AVAHI_SUPPORT OFF)
68 SET(BUILD_BACKTRACE_SUPPORT OFF)
69 SET(EXTENDED_MEDIA_MODE OFF)
70 elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
71 add_definitions(-DOS_MACOSX)
72 #compile 32-bit 64-bit is having an issue
73 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch i386")
76 if (BUILD_USB_SUPPORT)
77 add_definitions(-DUSB_SUPPORT)
81 add_definitions(-DBLUETOOTH_SUPPORT)
84 if (BUILD_AVAHI_SUPPORT)
85 add_definitions(-DAVAHI_SUPPORT)
88 if (BUILD_RWLOCK_SUPPORT)
89 add_definitions(-DRWLOCK_SUPPORT)
92 if (BUILD_BACKTRACE_SUPPORT)
93 add_definitions(-DBACKTRACE_SUPPORT)
96 # TODO(AK): check current OS here
97 add_definitions(-DOS_POSIX)
99 IF(CMAKE_C_FLAGS_DEBUG)
100 SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG" )
101 add_definitions(-DDEBUG)
102 ELSE (CMAKE_C_FLAGS_DEBUG)
103 SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRELEASE" )
104 add_definitions(-DRELEASE)
105 ENDIF(CMAKE_C_FLAGS_DEBUG)
108 if (EXTENDED_MEDIA_MODE)
109 add_definitions(-DEXTENDED_MEDIA)
110 # required to find 'glibconfig.h'
111 find_package(PkgConfig)
112 pkg_check_modules(GLIB2 REQUIRED glib-2.0)
113 add_definitions(${GLIB2_CFLAGS})
118 find_package(PkgConfig)
119 pkg_check_modules(LOG4CXX REQUIRED liblog4cxx)
120 include_directories(${LOG4CXX_INCLUDE_DIRS})
121 link_directories(${LOG4CXX_LIBRARY_DIRS})
123 # Add finding log4cxx here
127 # --- Interface generator
129 find_package(PythonInterp)
130 if(NOT PYTHONINTERP_FOUND)
131 message(ERROR "Python interpreter is not found")
132 message(ERROR "To install it type in the command line:")
133 message(ERROR "sudo apt-get install python")
134 endif(NOT PYTHONINTERP_FOUND)
137 cmake_minimum_required(VERSION 2.8.11)
138 if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
139 set(qt_version "4.8.5")
141 set(qt_version "5.1.0")
145 COMMAND ${CMAKE_SOURCE_DIR}/FindQt.sh -v ${qt_version}
146 OUTPUT_VARIABLE qt_bin_dir
148 message(STATUS "Binary directory Qt ${qt_version} is ${qt_bin_dir}")
149 set(ENV{PATH} ${qt_bin_dir}:$ENV{PATH})
151 if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
152 find_package(Qt4 ${qt_version} REQUIRED QtCore QtGui QtDBus QtDeclarative)
154 find_package(Qt5Core REQUIRED)
155 find_package(Qt5DBus REQUIRED)
156 find_package(Qt5Qml REQUIRED)
157 find_package(Qt5Quick REQUIRED)
158 set(qmlplugindump_binary ${qt_bin_dir}/qmlplugindump)
162 set(INTEFRACE_GENERATOR "${PROJECT_SOURCE_DIR}/tools/InterfaceGenerator/Generator.py")
163 set(INTEFRACE_GENERATOR_CMD ${PYTHON_EXECUTABLE} -B ${INTEFRACE_GENERATOR})
164 file(GLOB_RECURSE INTERFACE_GENERATOR_DEPENDENCIES "${PROJECT_SOURCE_DIR}/tools/InterfaceGenerator/*.*")
166 macro (GenerateInterface arg_xml_name arg_namespace parser_type)
167 string(REGEX MATCH "^[a-zA-Z_0-9]*[^.]" file_name ${arg_xml_name}) # TODO: make expression more robust
170 "${CMAKE_CURRENT_BINARY_DIR}/${file_name}.h"
171 "${CMAKE_CURRENT_BINARY_DIR}/${file_name}_schema.h"
174 set(cpp_file "${CMAKE_CURRENT_BINARY_DIR}/${file_name}_schema.cc")
175 set(full_xml_name "${CMAKE_CURRENT_SOURCE_DIR}/${arg_xml_name}")
177 add_custom_command( OUTPUT ${hpp_file} ${cpp_file}
178 COMMAND ${INTEFRACE_GENERATOR_CMD} ${full_xml_name} ${arg_namespace} ${CMAKE_CURRENT_BINARY_DIR} "--parser-type" "${parser_type}"
179 DEPENDS ${INTERFACE_GENERATOR_DEPENDENCIES} ${full_xml_name}
180 COMMENT "Generating files:\n ${hpp_file}\n ${cpp_file}\nfrom:\n ${arg_xml_name} ..."
184 include_directories (
185 ../../../src/components/smart_objects/include
186 ../../../src/components/formatters/include/
187 ${CMAKE_SOURCE_DIR}/src/components/formatters/include/
191 add_library("${file_name}" ${cpp_file})
192 endmacro(GenerateInterface)
195 macro(create_test NAME SOURCES LIBS)
196 add_executable("${NAME}" ${SOURCES})
197 target_link_libraries("${NAME}" ${LIBS})
198 add_test(${NAME} ${NAME})
199 endmacro(create_test)
201 # Building application
206 add_definitions(-DQT_HMI)
209 add_definitions(-DWEB_HMI)
213 add_subdirectory(./src/thirdPartyLibs)
216 add_subdirectory(./tools)
219 add_subdirectory(./src/components)
221 # --- Main application
222 add_subdirectory(./src/appMain)
225 option(BUILD_TESTS "Possibility to build and run tests" OFF)
229 # Framework GoogleTest is also integrated together gmock
230 # and must not be added separately
231 add_subdirectory(./src/thirdPartyLibs/gmock-1.6.0)
232 add_subdirectory(./test)
235 # Building documentation
237 # At first creating directory for generated documentation. Unfortunately doxygen
238 # cannot generate it byself
239 FIND_PACKAGE(Doxygen)
241 option(DOXYGEN_ENABLE_DIAGRAMS "Enable graphical diagram generation" ON)
243 if(DOXYGEN_ENABLE_DIAGRAMS)
244 set(DOXYGEN_ENABLE_DIAGRAMS_PARAM "YES")
245 else(DOXYGEN_ENABLE_DIAGRAMS)
246 set(DOXYGEN_ENABLE_DIAGRAMS_PARAM "NO")
248 configure_file("${PROJECT_SOURCE_DIR}/Doxyfile" "${PROJECT_BINARY_DIR}/Doxyfile")
249 file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/doc/doxygen")
250 ADD_CUSTOM_TARGET(doxygen COMMAND ${DOXYGEN_EXECUTABLE} "${PROJECT_BINARY_DIR}/Doxyfile")
252 MESSAGE(STATUS "Doxygen not found. Documentation will not be generated")
253 MESSAGE(STATUS "To enable documentation generation please install doxygen and graphviz packages")
254 MESSAGE(STATUS "sudo apt-get install doxygen graphviz")
255 MESSAGE(STATUS "To enable processing of MscGen comments please install mscgen")
256 MESSAGE(STATUS "sudo apt-get install mscgen")