1 cmake_minimum_required(VERSION 2.8)
3 set (PROJECT smartDeviceLinkCore)
6 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
8 # --- Check libavahi-common, libavahi-client availability
11 # Please do not change compiler/linker flags if You do not know how particular
12 # flag is handled by CMake
13 set(CMAKE_INSTALL_PREFIX .)
14 set(ARCHIVE_OUTPUT_DIRECTORY ./bin)
15 set(CMAKE_CXX_FLAGS "-g3 -ggdb3 -std=gnu++0x -Werror=return-type -Wuninitialized --coverage")
16 set(CMAKE_CXX_FLAGS_RELEASE "-s") #It will be appended to CMAKE_CXX_FLAGS in release
18 add_definitions(-DSDL_LOG4CXX_PROPERTIES_FILE="/etc/smartdevicelink/log4cxx.properties")
19 add_definitions(-DSDL_HMI_LINK_FILE="/etc/smartdevicelink/hmi_link")
20 add_definitions(-DSDL_HMI_BROWSER_PATH="/usr/bin/xwalk-launcher" -DSDL_HMI_BROWSER_ARG0="xwalk-launcher" -DSDL_HMI_BROWSER_ARG1="")
22 option( BUILD_SHARED_LIBS "Build all libraries as shared (if ON) or static (if OFF)" OFF)
24 # TODO(AK): check current OS here
25 add_definitions(-DOS_POSIX)
26 add_definitions(-DOS_LINUX)
28 IF(CMAKE_C_FLAGS_DEBUG)
29 SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG" )
30 add_definitions(-DDEBUG)
31 ELSE (CMAKE_C_FLAGS_DEBUG)
32 SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRELEASE" )
33 add_definitions(-DRELEASE)
34 ENDIF(CMAKE_C_FLAGS_DEBUG)
36 # --- Interface generator
38 find_package(PythonInterp)
39 if(NOT PYTHONINTERP_FOUND)
40 message(ERROR "Python interpreter is not found")
41 message(ERROR "To install it type in the command line:")
42 message(ERROR "sudo apt-get install python")
43 endif(NOT PYTHONINTERP_FOUND)
45 set(INTEFRACE_GENERATOR "${PROJECT_SOURCE_DIR}/tools/InterfaceGenerator/Generator.py")
46 set(INTEFRACE_GENERATOR_CMD ${PYTHON_EXECUTABLE} -B ${INTEFRACE_GENERATOR})
47 file(GLOB_RECURSE INTERFACE_GENERATOR_DEPENDENCIES "${PROJECT_SOURCE_DIR}/tools/InterfaceGenerator/*.*")
49 macro (GenerateInterface arg_xml_name arg_namespace parser_type)
50 string(REGEX MATCH "^[a-zA-Z_0-9]*[^.]" file_name ${arg_xml_name}) # TODO: make expression more robust
53 "${CMAKE_CURRENT_BINARY_DIR}/${file_name}.h"
54 "${CMAKE_CURRENT_BINARY_DIR}/${file_name}_schema.h"
57 set(cpp_file "${CMAKE_CURRENT_BINARY_DIR}/${file_name}_schema.cc")
58 set(full_xml_name "${CMAKE_CURRENT_SOURCE_DIR}/${arg_xml_name}")
60 add_custom_command( OUTPUT ${hpp_file} ${cpp_file}
61 COMMAND ${INTEFRACE_GENERATOR_CMD} ${full_xml_name} ${arg_namespace} ${CMAKE_CURRENT_BINARY_DIR} "--parser-type" "${parser_type}"
62 DEPENDS ${INTERFACE_GENERATOR_DEPENDENCIES} ${full_xml_name}
63 COMMENT "Generating files:\n ${hpp_file}\n ${cpp_file}\nfrom:\n ${arg_xml_name} ..."
68 ../../../src/components/smart_objects/include
69 ../../../src/components/formatters/include/
70 ${CMAKE_SOURCE_DIR}/src/components/formatters/include/
74 add_library("${file_name}" ${cpp_file})
75 endmacro(GenerateInterface)
78 macro(create_test NAME SOURCES LIBS)
79 add_executable("${NAME}" ${SOURCES})
80 target_link_libraries("${NAME}" ${LIBS})
81 add_test(${NAME} ${NAME})
84 # Building application
87 add_subdirectory(./src/thirdPartyLibs)
90 add_subdirectory(./src/components)
92 # --- Main application
93 add_subdirectory(./src/appMain)
96 option(BUILD_TESTS "Possibility to build and run tests" OFF)
100 # Framework GoogleTest is also integrated together gmock
101 # and must not be added separately
102 add_subdirectory(./src/thirdPartyLibs/gmock-1.6.0)
103 add_subdirectory(./test)
106 # Building documentation
108 # At first creating directory for generated documentation. Unfortunately doxygen
109 # cannot generate it byself
110 FIND_PACKAGE(Doxygen)
112 option(DOXYGEN_ENABLE_DIAGRAMS "Enable graphical diagram generation" ON)
114 if(DOXYGEN_ENABLE_DIAGRAMS)
115 set(DOXYGEN_ENABLE_DIAGRAMS_PARAM "YES")
116 else(DOXYGEN_ENABLE_DIAGRAMS)
117 set(DOXYGEN_ENABLE_DIAGRAMS_PARAM "NO")
119 configure_file("${PROJECT_SOURCE_DIR}/Doxyfile" "${PROJECT_BINARY_DIR}/Doxyfile")
120 file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/doc/doxygen")
121 ADD_CUSTOM_TARGET(doxygen COMMAND ${DOXYGEN_EXECUTABLE} "${PROJECT_BINARY_DIR}/Doxyfile")
123 MESSAGE(STATUS "Doxygen not found. Documentation will not be generated")
124 MESSAGE(STATUS "To enable documentation generation please install doxygen and graphviz packages")
125 MESSAGE(STATUS "sudo apt-get install doxygen graphviz")
126 MESSAGE(STATUS "To enable processing of MscGen comments please install mscgen")
127 MESSAGE(STATUS "sudo apt-get install mscgen")