Coloring compiler's output
[platform/core/security/vasum.git] / CMakeLists.txt
1 #Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
2 #
3 #    Licensed under the Apache License, Version 2.0 (the "License");
4 #    you may not use this file except in compliance with the License.
5 #    You may obtain a copy of the License at
6 #
7 #        http://www.apache.org/licenses/LICENSE-2.0
8 #
9 #    Unless required by applicable law or agreed to in writing, software
10 #    distributed under the License is distributed on an "AS IS" BASIS,
11 #    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 #    See the License for the specific language governing permissions and
13 #    limitations under the License.
14 #
15 #
16 # @file   CMakeLists.txt
17 # @author Jan Olszak (j.olszak@samsung.com)
18 #
19
20 CMAKE_MINIMUM_REQUIRED (VERSION 2.6.2)
21 PROJECT(vasum)
22
23
24 ## pkgconfig ###################################################################
25 INCLUDE(FindPkgConfig)
26
27
28 ## default CMAKE_INSTALL_* variables ###########################################
29 INCLUDE(GNUInstallDirs)
30
31 ## Color output if it's possible:
32 IF (( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.3))
33       OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ))
34
35     ADD_DEFINITIONS("-fdiagnostics-color=always")
36 ENDIF()
37
38 ## Compiler flags, depending on the build type #################################
39 IF(NOT CMAKE_BUILD_TYPE)
40     SET(CMAKE_BUILD_TYPE "DEBUG")
41 ENDIF(NOT CMAKE_BUILD_TYPE)
42
43 ## Print build information #####################################################
44 MESSAGE(STATUS "-------------------------------------------------")
45 MESSAGE(STATUS "Compiler:          " ${CMAKE_CXX_COMPILER_ID})
46 MESSAGE(STATUS "Compiler version:  " ${CMAKE_CXX_COMPILER_VERSION})
47 MESSAGE(STATUS "Build type:        " ${CMAKE_BUILD_TYPE})
48 MESSAGE(STATUS "-------------------------------------------------")
49
50 # special case for a GCC < 4.7, assume rest is fine
51 IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
52     SET(CXX_11_STD "c++0x")
53 else()
54     SET(CXX_11_STD "c++11")
55 endif()
56
57 SET(CMAKE_C_FLAGS_PROFILING    "-g -O0 -pg")
58 SET(CMAKE_CXX_FLAGS_PROFILING  "-g -std=${CXX_11_STD} -O0 -pg")
59 SET(CMAKE_C_FLAGS_DEBUG        "-g -O0 -ggdb")
60 SET(CMAKE_CXX_FLAGS_DEBUG      "-g -std=${CXX_11_STD} -O0 -ggdb")
61 SET(CMAKE_C_FLAGS_RELEASE      "-g -O2 -DNDEBUG")
62 SET(CMAKE_CXX_FLAGS_RELEASE    "-g -std=${CXX_11_STD} -O2 -DNDEBUG")
63 SET(CMAKE_C_FLAGS_CCOV         "-g -O2 --coverage")
64 SET(CMAKE_CXX_FLAGS_CCOV       "-g -std=${CXX_11_STD} -O2 --coverage")
65
66 IF(DEFINED SANITIZE)
67     # Enable sanitize build.
68     # It works with clang and gcc>=4.8
69     # Possible arguments: address, thread and others (see doc.)
70     # Note on thread sanitizer bugs left in out code:
71     #  - we use non thread save boost test library
72     #  - there are some mysterious problems with glib
73     SET(SANITIZE_FLAGS "-fsanitize=${SANITIZE}")
74     MESSAGE(STATUS "Sanitize flags: ${SANITIZE_FLAGS}")
75     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZE_FLAGS} -fPIE -fno-omit-frame-pointer")
76     SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZE_FLAGS} -fPIE -fno-omit-frame-pointer")
77     SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie ${SANITIZE_FLAGS}")
78 ENDIF(DEFINED SANITIZE)
79
80 ADD_DEFINITIONS("-fPIC")   # Position Independent Code
81 ADD_DEFINITIONS("-Werror") # Make all warnings into errors
82 ADD_DEFINITIONS("-Wall")   # Generate all warnings
83 ADD_DEFINITIONS("-Wextra") # Generate even more extra warnings
84 ADD_DEFINITIONS("-pedantic") # Be pedantic
85 ADD_DEFINITIONS("-pedantic-errors") # Make pedantic warnings into errors
86 ADD_DEFINITIONS(-DPROGRAM_VERSION="${VERSION}")
87 ADD_DEFINITIONS(-DPROJECT_SOURCE_DIR="${PROJECT_SOURCE_DIR}")
88 ADD_DEFINITIONS(-DUSE_EXEC)
89
90 IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
91     # Warn about documentation problems
92     ADD_DEFINITIONS("-Wdocumentation")
93
94     IF(ALL_WARNINGS)
95         # turn on every -W flags except a few explicitly mentioned
96         ADD_DEFINITIONS("-Wno-error")
97         ADD_DEFINITIONS("-Weverything")
98         ADD_DEFINITIONS("-Wno-c++98-compat")
99         ADD_DEFINITIONS("-Wno-c++98-compat-pedantic")
100         ADD_DEFINITIONS("-Wno-padded")
101         ADD_DEFINITIONS("-Wno-global-constructors")
102         ADD_DEFINITIONS("-Wno-exit-time-destructors")
103         ADD_DEFINITIONS("-Wno-weak-vtables")
104     ENDIF(ALL_WARNINGS)
105 ENDIF()
106
107 IF(NOT DEFINED VASUM_USER)
108     SET(VASUM_USER "security-containers")
109 ENDIF(NOT DEFINED VASUM_USER)
110 IF(NOT DEFINED INPUT_EVENT_GROUP)
111     SET(INPUT_EVENT_GROUP "input")
112 ENDIF(NOT DEFINED INPUT_EVENT_GROUP)
113 IF(NOT DEFINED DISK_GROUP)
114     SET(DISK_GROUP "disk")
115 ENDIF(NOT DEFINED DISK_GROUP)
116 IF(NOT DEFINED TTY_GROUP)
117     SET(TTY_GROUP "tty")
118 ENDIF(NOT DEFINED TTY_GROUP)
119
120 ADD_DEFINITIONS(-DVASUM_USER="${VASUM_USER}")
121 ADD_DEFINITIONS(-DINPUT_EVENT_GROUP="${INPUT_EVENT_GROUP}")
122 ADD_DEFINITIONS(-DDISK_GROUP="${DISK_GROUP}")
123 ADD_DEFINITIONS(-DTTY_GROUP="${TTY_GROUP}")
124
125 ## Python packages directory ###################################################
126 IF(NOT DEFINED PYTHON_SITELIB)
127     EXECUTE_PROCESS(COMMAND python -c
128     "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib())"
129     OUTPUT_VARIABLE PYTHON_SITELIB)
130 ENDIF(NOT DEFINED PYTHON_SITELIB)
131
132 ## Subdirectories ##############################################################
133 SET(COMMON_FOLDER ${PROJECT_SOURCE_DIR}/common)
134 SET(CLIENT_FOLDER ${PROJECT_SOURCE_DIR}/client)
135 SET(SERVER_FOLDER ${PROJECT_SOURCE_DIR}/server)
136 SET(ZONE_SUPPORT_FOLDER ${PROJECT_SOURCE_DIR}/zone-support)
137 SET(ZONE_DAEMON_FOLDER ${PROJECT_SOURCE_DIR}/zone-daemon)
138 SET(TESTS_FOLDER ${PROJECT_SOURCE_DIR}/tests)
139 SET(CLI_FOLDER ${PROJECT_SOURCE_DIR}/cli)
140
141 IF(NOT DEFINED SYSCONF_INSTALL_DIR)
142     SET(SYSCONF_INSTALL_DIR "/etc")
143 ENDIF(NOT DEFINED SYSCONF_INSTALL_DIR)
144
145 IF(NOT DEFINED LIB_INSTALL_DIR)
146     SET(LIB_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBDIR}")
147 ENDIF(NOT DEFINED LIB_INSTALL_DIR)
148
149 IF(NOT DEFINED INCLUDE_INSTALL_DIR)
150     SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
151 ENDIF(NOT DEFINED INCLUDE_INSTALL_DIR)
152
153 IF(NOT DEFINED SCRIPT_INSTALL_DIR)
154     SET(SCRIPT_INSTALL_DIR "${CMAKE_INSTALL_FULL_SBINDIR}")
155 ENDIF(NOT DEFINED SCRIPT_INSTALL_DIR)
156
157 IF(NOT DEFINED SHARE_INSTALL_PREFIX)
158     SET(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_FULL_DATAROOTDIR}")
159 ENDIF(NOT DEFINED SHARE_INSTALL_PREFIX)
160
161 IF(NOT DEFINED SYSTEMD_UNIT_DIR)
162     SET(SYSTEMD_UNIT_DIR "${LIB_INSTALL_DIR}/systemd/system")
163 ENDIF(NOT DEFINED SYSTEMD_UNIT_DIR)
164
165 IF(NOT DEFINED DATA_DIR)
166     SET(DATA_DIR "${CMAKE_INSTALL_FULL_DATAROOTDIR}")
167 ENDIF(NOT DEFINED DATA_DIR)
168
169 SET(VSM_CONFIG_INSTALL_DIR ${SYSCONF_INSTALL_DIR}/vasum)
170 SET(VSM_DATA_INSTALL_DIR ${SHARE_INSTALL_PREFIX}/vasum)
171
172 ADD_SUBDIRECTORY(${CLIENT_FOLDER})
173 ADD_SUBDIRECTORY(${SERVER_FOLDER})
174 ADD_SUBDIRECTORY(${ZONE_SUPPORT_FOLDER})
175 ADD_SUBDIRECTORY(${ZONE_DAEMON_FOLDER})
176 ADD_SUBDIRECTORY(${TESTS_FOLDER})
177 ADD_SUBDIRECTORY(${CLI_FOLDER})
178