summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: 86406d274b97e03b8bb4a5915d63922eb28de23e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#######################################################################################################################
#
# Copyright (C) 2020 Mentor Graphics (Deutschland) GmbH
#
# Author: Vignesh_Rajendran@mentor.com
#
# CMake file of NSM
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
#######################################################################################################################


cmake_minimum_required(VERSION 3.7.2 FATAL_ERROR)

project(nsm LANGUAGES C CXX)

# set version
set(NSM_VERSION_MAJOR   3)
set(NSM_VERSION_MINOR   0)
set(NSM_VERSION_BUGFIX  0)

include(CMakeDependentOption)
include(GNUInstallDirs)

# set default build type, if not defined by user
if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release CACHE STRING
                         "Choose build type: Debug, Release"
                         FORCE)
    message(STATUS "Build type not defined. Using default build type 'Release'.")
endif()


option(WITH_TESTS "Build together with unitTest" OFF)
message(STATUS "WITH_TESTS is set to value: ${WITH_TESTS}")

option(CODE_COVERAGE "Enable coverage reporting" OFF)
message(STATUS "CODE_COVERAGE is set to value: ${CODE_COVERAGE}")

if(CMAKE_BUILD_TYPE STREQUAL "coverage" OR CODE_COVERAGE)
    if("${CMAKE_C_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang" OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
        message("Building with llvm Code Coverage Tools")

        # Warning/Error messages
        if(NOT LLVM_COV_PATH)
            message(FATAL_ERROR "llvm-cov not found! Aborting.")
        endif()

        # set Flags
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping")

    elseif(CMAKE_COMPILER_IS_GNUCXX)
        message("Building with lcov Code Coverage Tools")

        # Warning/Error messages
        if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug"))
            message(FATAL_ERROR "Code coverage results with an optimized (non-Debug) build may be misleading")
        endif()

        if(NOT WITH_TESTS)
            message(FATAL_ERROR "test is not enabled! Aborting.")
        endif()

        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 --coverage -fprofile-arcs -ftest-coverage")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 --coverage -fprofile-arcs -ftest-coverage")
    else()
        message(FATAL_ERROR "Code coverage requires Clang or GCC. Aborting.")
    endif()
endif()


OPTION(USE_INSTALLED_COMMONAPI "Set to OFF to use the local (build tree) version of CommonAPI" ON)
message(STATUS "USE_INSTALLED_COMMONAPI is set to value: ${USE_INSTALLED_COMMONAPI}")

OPTION(WITH_SYSTEMD_SERVICE "Install systemd service file" OFF)
message(STATUS "WITH_SYSTEMD_SERVICE is set to value: ${WITH_SYSTEMD_SERVICE}")

find_package(PkgConfig REQUIRED)

pkg_check_modules(DLT      REQUIRED   automotive-dlt>=2.2.0)
pkg_check_modules(GIO      REQUIRED   gio-2.0>=2.30.0)
pkg_check_modules(GIO_UNIX REQUIRED   gio-unix-2.0>=2.30.0)
pkg_check_modules(GLIB     REQUIRED   glib-2.0>=2.30.0)
pkg_check_modules(GOBJECT  REQUIRED   gobject-2.0>=2.30.0)
pkg_check_modules(SYSTEMD  REQUIRED   libsystemd>=209)

find_package(CommonAPI 3.1.12 REQUIRED CONFIG NO_CMAKE_PACKAGE_REGISTRY)

find_package(org.genivi.nodestatemanager.commonapi.core.stub  REQUIRED)
find_package(org.genivi.nodestatemanager.commonapi.someip.stub REQUIRED)
find_package(org.genivi.nodestatemanager.commonapi.someip.proxy  REQUIRED)
find_package(vsomeip3 REQUIRED)

if(WITH_TESTS)
    find_package(GTest REQUIRED)
    include(CTest)
    add_definitions(-DENABLE_TESTS)
endif(WITH_TESTS)

# cflags
set(NSM_CMAKE_C_FLAGS "-Wall -Wextra -Werror -fstack-protector-strong -D_GLIBCXX_USE_NANOSLEEP -pthread -Wformat -Wformat-security -fexceptions -fstrict-aliasing -fasynchronous-unwind-tables -fno-omit-frame-pointer -Wconversion -Wno-sign-conversion -Wno-unused-parameter")
set(NSM_CMAKE_CXX_FLAGS "-Wall -Wextra -Werror -fstack-protector-strong -D_GLIBCXX_USE_NANOSLEEP -pthread -Wformat -Wformat-security -fexceptions -fstrict-aliasing -fasynchronous-unwind-tables -fno-omit-frame-pointer -Wconversion -Wno-sign-conversion")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NSM_CMAKE_CXX_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NSM_CMAKE_CXX_FLAGS}")

# ldflags
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-as-needed")

include_directories(
    ${COMMONAPI_INCLUDE_DIRS}
    ${COMMONAPI_SOMEIP_INCLUDE_DIRS}
    ${GIO_INCLUDE_DIRS}
    ${GLIB2_INCLUDE_DIRS}
    ${VSOMEIP_INCLUDE_DIRS}
    ${DLT_INCLUDE_DIRS}
    ${CMAKE_SOURCE_DIR}/NodeStateManager
    ${VSOMEIP3_INCLUDE_DIRS}
)

add_subdirectory(NodeStateMachineStub)
add_subdirectory(NodeStateAccess)
add_subdirectory(NodeStateManager)

if(WITH_TESTS)
    add_subdirectory(NodeStateMachineTest)
endif(WITH_TESTS)