Remove apple related flags
[profile/ivi/smartdevicelink.git] / CMakeLists.txt
index befbf48..76f3f91 100644 (file)
 cmake_minimum_required(VERSION 2.8.0)
 
 set (PROJECT smartDeviceLinkCore)
-project (${PROJECT})
 
+#Jenkins integration section
+#dont modify this section if you dont know details about integration with Jenkins!!!
+set (HMI "web" CACHE STRING "HMI type")
 option(HMI2 "Use Qt HMI" OFF)
-
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
-
-# Please do not change compiler/linker flags if You do not know how particular
-# flag is handled by CMake
-set(CMAKE_INSTALL_PREFIX .)
-set(ARCHIVE_OUTPUT_DIRECTORY ./bin)
-
 option(EXTENDED_MEDIA_MODE "Turn on and off extended Madia Manager features relates to PulseAudio A2DP and GStreamer" OFF)
 option(BUILD_SHARED_LIBS "Build all libraries as shared (if ON) or static (if OFF)" OFF)
-option(BUILD_BT_SUPPORT "Bluetooth support" OFF)
-option(BUILD_USB_SUPPORT "libusb support" OFF)
-option(BUILD_AVAHI_SUPPORT "libavahi support" OFF)
+option(BUILD_BT_SUPPORT "Bluetooth support" ON)
+option(BUILD_USB_SUPPORT "libusb support" ON)
+option(BUILD_AVAHI_SUPPORT "libavahi support" ON)
 option(BUILD_RWLOCK_SUPPORT "rwlocks support" OFF)
 option(BUILD_BACKTRACE_SUPPORT "backtrace support" ON)
+option(BUILD_TESTS "Possibility to build and run tests" OFF)
+option(TIME_TESTER "Enable profiling time test util" ON)
+option(BUILD_TESTS_WITH_HMI "Possibility to build and run HMI tests" OFF)
+option(ENABLE_LOG "Logging feature" ON)
+option(ENABLE_GCOV "gcov code coverage feature" OFF)
+option(EXTENDED_POLICY_FLAG "Build with specific features and extended functionality" OFF)
+
+set(OS_TYPE_OPTION     "$ENV{OS_TYPE}")
+set(DEBUG_OPTION       "$ENV{DEBUG}")
+set(HMI_TYPE_OPTION    "$ENV{HMI_TYPE}")
+set(TARGET_OPTION      "$ENV{TARGET}")
+set(MEDIA_MODE_OPTION  "$ENV{MEDIA_MODE}")
+set(HMI_ADAPTER_OPTION         "$ENV{HMI_ADAPTER}")
+set(ENABLE_LOG_OPTION  "$ENV{ENABLE_LOG}")
+
+if (OS_TYPE_OPTION)
+  if (${OS_TYPE_OPTION} STREQUAL "QNX")
+    message(STATUS "Jenkins integration: set build process for QNX")
+    #do not use include after project() command.
+    #Such usecase results in infinite cycle of reinitialization of compiler and other variables
+    INCLUDE("./qnx_6.5.0_linux_x86.cmake")
+    #tests are not supported yet for QNX build
+    set (BUILD_TESTS OFF)
+  endif()
+endif()
 
+if (HMI_TYPE_OPTION)
+  if (${HMI_TYPE_OPTION} STREQUAL "HTML5")
+    message(STATUS "Jenkins integration: select HTML5 HMI")
+    set (HMI "web")
+  elseif (${HMI_TYPE_OPTION} STREQUAL "NONE")
+    message(STATUS "Jenkins integration: select HMI none")
+    set (HMI "no")
+  else ()
+    message(STATUS "Jenkins integration: select QML HMI none")
+    set (HMI "qt")
+  endif()
+endif()
 
-if (UNIX)
-  add_definitions(-DOS_POSIX)
-
-  set(CMAKE_CXX_FLAGS "-g3 -ggdb3 -std=gnu++0x -Werror=return-type -Wuninitialized")
-  set(CMAKE_CXX_FLAGS_RELEASE "-s -O2") #It will be appended to CMAKE_CXX_FLAGS in release
-
-  if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
-    add_definitions(-DOS_LINUX)
-  elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX")
-    add_definitions(-DOS_QNX)
-    SET(BUILD_BT_SUPPORT OFF)
-    SET(BUILD_AVAHI_SUPPORT OFF)
-    SET(BUILD_BACKTRACE_SUPPORT OFF)
-    SET(EXTENDED_MEDIA_MODE OFF)
-  elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
-    add_definitions(-DOS_MACOSX)
-    #compile 32-bit 64-bit is having an issue
-    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch i386")
+if (MEDIA_MODE_OPTION)
+  if (${MEDIA_MODE_OPTION} STREQUAL "EXTENDED_MEDIA")
+    message(STATUS "Jenkins integration: select extended media mode")
+    set (EXTENDED_MEDIA_MODE ON)
   endif()
-endif(UNIX)
+endif()
+
+if (DEBUG_OPTION)
+  if (${DEBUG_OPTION} STREQUAL "DBG_OFF")
+    message(STATUS "Jenkins integration: build release version")
+    set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
+  endif()
+endif()
+
+if (HMI_ADAPTER_OPTION)
+  if (${HMI_ADAPTER_OPTION} STREQUAL "MESSAGEBROKER")
+    message(STATUS "Jenkins integration: selected HMI adapter MESSAGEBROKER")
+    set (HMIADAPTER "messagebroker")
+  elseif (${HMI_ADAPTER_OPTION} STREQUAL "DBUS")
+    message(STATUS "Jenkins integration: selected HMI adapter DBUS")
+    set (HMIADAPTER "dbus")
+  elseif (${HMI_ADAPTER_OPTION} STREQUAL "MQUEUE")
+    message(STATUS "Jenkins integration: selected HMI adapter MQUEUE")
+    set (HMIADAPTER "mqueue")
+  endif()
+endif()
+
+if (ENABLE_LOG_OPTION)
+  if (${ENABLE_LOG_OPTION} STREQUAL "LOG_OFF")
+    message(STATUS "Jenkins integration: Log is turned off")
+    set (ENABLE_LOG OFF)
+  endif()
+endif()
+
+#Jenkins integration section end
+
+project (${PROJECT})
+
+#ADD_DEPENDENCIES(${PROJECT} Policy)
+
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
+
+# Please do not change compiler/linker flags if You do not know how particular
+# flag is handled by CMake
+set(CMAKE_INSTALL_PREFIX .)
+set(ARCHIVE_OUTPUT_DIRECTORY ./bin)
+set(CMAKE_CXX_FLAGS "-fPIC -g3 -ggdb3 -std=gnu++0x -Werror=return-type -Wuninitialized")
+if (ENABLE_GCOV)
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
+  add_definitions(-DGCOV_ENABLED)
+endif()
+set(CMAKE_CXX_FLAGS_RELEASE "-fPIC -s -O2") #It will be appended to CMAKE_CXX_FLAGS in release
+
+if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+  add_definitions(-DOS_LINUX)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX")
+  add_definitions(-DOS_QNX)
+  SET(BUILD_BT_SUPPORT OFF)
+  SET(BUILD_AVAHI_SUPPORT OFF)
+  SET(BUILD_BACKTRACE_SUPPORT OFF)
+  SET(EXTENDED_MEDIA_MODE OFF)
+endif()
 
 if (BUILD_USB_SUPPORT)
   add_definitions(-DUSB_SUPPORT)
@@ -80,11 +153,17 @@ if (BUILD_BT_SUPPORT)
   add_definitions(-DBLUETOOTH_SUPPORT)
 endif()
 
-if (BUILD_AVAHI_SUPPORT)
-  # --- Check libavahi-common, libavahi-client availability
-  find_package(Libavahi)
+if (BUILD_MME_SUPPORT)
+  add_definitions(-DMME_SUPPORT)
+  if (MME_MQ)
+    add_definitions(-DMME_MQ)
+  endif(MME_MQ)
+endif(BUILD_MME_SUPPORT)
 
+if (BUILD_AVAHI_SUPPORT)
   add_definitions(-DAVAHI_SUPPORT)
+# --- Check libavahi-common, libavahi-client availability
+  find_package(Libavahi)
 endif()
 
 if (BUILD_RWLOCK_SUPPORT)
@@ -95,16 +174,21 @@ if (BUILD_BACKTRACE_SUPPORT)
   add_definitions(-DBACKTRACE_SUPPORT)
 endif()
 
+if(ENABLE_LOG)
+  add_definitions(-DENABLE_LOG)
+endif()
+
+if (TIME_TESTER)
+    add_definitions(-DTIME_TESTER)
+endif()
+
 # TODO(AK): check current OS here
 add_definitions(-DOS_POSIX)
 
+# FIXME(DC): weird logic
 IF(CMAKE_C_FLAGS_DEBUG)
     SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG" )
     add_definitions(-DDEBUG)
-
-    # Enable debug mode in the GNU C++ library, to catch incorrect/undefined behavior
-    add_definitions(-D_GLIBCXX_DEBUG)
-    add_definitions(-D_GLIBCXX_DEBUG_PEDANTIC)
 ELSE (CMAKE_C_FLAGS_DEBUG)
     SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRELEASE" )
     add_definitions(-DRELEASE)
@@ -112,24 +196,13 @@ ENDIF(CMAKE_C_FLAGS_DEBUG)
 
 
 if (EXTENDED_MEDIA_MODE)
-add_definitions(-DEXTENDED_MEDIA)
+add_definitions(-DEXTENDED_MEDIA_MODE)
 # required to find 'glibconfig.h'
 find_package(PkgConfig)
 pkg_check_modules(GLIB2 REQUIRED glib-2.0)
 add_definitions(${GLIB2_CFLAGS})
 endif()
 
-# Find log4cxx
-if(UNIX)
-    find_package(PkgConfig)
-    pkg_check_modules(LOG4CXX REQUIRED liblog4cxx)
-    include_directories(${LOG4CXX_INCLUDE_DIRS})
-    link_directories(${LOG4CXX_LIBRARY_DIRS})
-elseif(WIN32)
-#   Add finding log4cxx here
-endif(UNIX)
-
-
 # --- Interface generator
 
 find_package(PythonInterp)
@@ -139,7 +212,7 @@ if(NOT PYTHONINTERP_FOUND)
     message(ERROR "sudo apt-get install python")
 endif(NOT PYTHONINTERP_FOUND)
 
-if (${HMI2})
+if (HMI STREQUAL "qt")
     cmake_minimum_required(VERSION 2.8.11)
     if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
         set(qt_version "4.8.5")
@@ -201,19 +274,52 @@ endmacro(GenerateInterface)
 macro(create_test NAME SOURCES LIBS)
     add_executable("${NAME}" ${SOURCES})
     target_link_libraries("${NAME}" ${LIBS})
-    add_test(${NAME} ${NAME})
+    if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
+        add_test(${NAME} ${CMAKE_SOURCE_DIR}/qnx/remote_run_test.sh ${NAME})
+    else()
+        add_test(${NAME} ${NAME})
+    endif()
 endmacro(create_test)
 
 # Building application
 
 # --- Type HMI
-if (${HMI2})
+if (HMI STREQUAL "qt")
     set(QT_HMI ON)
     add_definitions(-DQT_HMI)
-else (${HMI2})
+elseif (HMI STREQUAL "web")
     set(WEB_HMI ON)
     add_definitions(-DWEB_HMI)
-ENDIF (${HMI2})
+else ()
+    set(HMI "no")
+    add_definitions(-DNO_HMI)
+endif ()
+
+if (HMI STREQUAL "qt" AND NOT DEFINED HMIADAPTER)
+    set(HMIADAPTER "dbus")
+endif()
+if (HMI STREQUAL "web" AND NOT DEFINED HMIADAPTER)
+    set(HMIADAPTER "messagebroker")
+endif()
+if (HMI STREQUAL "no" AND NOT DEFINED HMIADAPTER)
+    set(HMIADAPTER "mqueue")
+endif()
+
+if (HMIADAPTER STREQUAL "dbus")
+    set(HMI_DBUS_API ON)
+    add_definitions(-DDBUS_HMIADAPTER)
+    add_definitions(-DHMI_DBUS_API)
+endif()
+if (HMIADAPTER STREQUAL "messagebroker")
+    set(HMI_JSON_API ON)
+    add_definitions(-DMESSAGEBROKER_HMIADAPTER)
+    add_definitions(-DHMI_JSON_API)
+endif()
+if (HMIADAPTER STREQUAL "mqueue")
+    set(HMI_JSON_API ON)
+    add_definitions(-DMQUEUE_HMIADAPTER)
+    add_definitions(-DHMI_JSON_API)
+endif()
 
 # --- ThirdPartyLibs
 add_subdirectory(./src/thirdPartyLibs)
@@ -228,13 +334,15 @@ add_subdirectory(./src/components)
 add_subdirectory(./src/appMain)
 
 # Building tests
-option(BUILD_TESTS "Possibility to build and run tests" OFF)
 if(BUILD_TESTS)
+    if(BUILD_TESTS_WITH_HMI)
+      add_definitions(-DTESTS_WITH_HMI)
+    endif()
     enable_testing()
     include(Dart)
     # Framework GoogleTest is also integrated together gmock
     # and must not be added separately
-    add_subdirectory(./src/thirdPartyLibs/gmock-1.6.0)
+    add_subdirectory(./src/thirdPartyLibs/gmock-1.7.0)
     add_subdirectory(./test)
 endif()
 
@@ -261,5 +369,3 @@ FIND_PACKAGE(Doxygen)
     MESSAGE(STATUS "To enable processing of MscGen comments please install mscgen")
     MESSAGE(STATUS "sudo apt-get install mscgen")
 ENDIF(DOXYGEN_FOUND)
-
-