Launch SDL HMIs via xwalk-launcher.
[profile/ivi/smartdevicelink.git] / SDL_Core / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.8)
2
3 set (PROJECT smartDeviceLinkCore)
4 project (${PROJECT})
5
6 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
7
8 # --- Check libavahi-common, libavahi-client availability
9 find_package(Libavahi)
10
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
17
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="")
21
22 option( BUILD_SHARED_LIBS "Build all libraries as shared (if ON) or static (if OFF)" OFF)
23
24 # TODO(AK): check current OS here
25 add_definitions(-DOS_POSIX)
26 add_definitions(-DOS_LINUX)
27
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)
35
36 # --- Interface generator
37
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)
44
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/*.*")
48
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
51
52     set(hpp_file
53       "${CMAKE_CURRENT_BINARY_DIR}/${file_name}.h"
54       "${CMAKE_CURRENT_BINARY_DIR}/${file_name}_schema.h"
55     )
56
57     set(cpp_file "${CMAKE_CURRENT_BINARY_DIR}/${file_name}_schema.cc")
58     set(full_xml_name "${CMAKE_CURRENT_SOURCE_DIR}/${arg_xml_name}")
59
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} ..."
64                         VERBATIM
65                        )
66
67     include_directories (
68         ../../../src/components/smart_objects/include
69         ../../../src/components/formatters/include/
70         ${CMAKE_SOURCE_DIR}/src/components/formatters/include/
71         ${CMAKE_BINARY_DIR}
72     )
73
74     add_library("${file_name}" ${cpp_file})
75 endmacro(GenerateInterface)
76
77 # --- Useful macro
78 macro(create_test NAME SOURCES LIBS)
79     add_executable("${NAME}" ${SOURCES})
80     target_link_libraries("${NAME}" ${LIBS})
81     add_test(${NAME} ${NAME})
82 endmacro(create_test)
83
84 # Building application
85
86 # --- ThirdPartyLibs
87 add_subdirectory(./src/thirdPartyLibs)
88
89 # --- Components
90 add_subdirectory(./src/components)
91
92 # --- Main application
93 add_subdirectory(./src/appMain)
94
95 # Building tests
96 option(BUILD_TESTS "Possibility to build and run tests" OFF)
97 if(BUILD_TESTS)
98     enable_testing()
99     include(Dart)
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)
104 endif()
105
106 # Building documentation
107
108 # At first creating directory for generated documentation. Unfortunately doxygen
109 # cannot generate it byself
110 FIND_PACKAGE(Doxygen)
111   IF(DOXYGEN_FOUND)
112     option(DOXYGEN_ENABLE_DIAGRAMS "Enable graphical diagram generation" ON)
113
114     if(DOXYGEN_ENABLE_DIAGRAMS)
115       set(DOXYGEN_ENABLE_DIAGRAMS_PARAM "YES")
116     else(DOXYGEN_ENABLE_DIAGRAMS)
117       set(DOXYGEN_ENABLE_DIAGRAMS_PARAM "NO")
118     endif()
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")
122   ELSE(DOXYGEN_FOUND)
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")
128 ENDIF(DOXYGEN_FOUND)
129
130