1 #Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
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
7 # http://www.apache.org/licenses/LICENSE-2.0
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.
16 # @file CMakeLists.txt
17 # @author Jan Olszak (j.olszak@samsung.com)
20 CMAKE_MINIMUM_REQUIRED (VERSION 2.6.2)
24 ## pkgconfig ###################################################################
25 INCLUDE(FindPkgConfig)
28 ## default CMAKE_INSTALL_* variables ###########################################
29 INCLUDE(GNUInstallDirs)
32 ## Compiler flags, depending on the build type #################################
33 IF(NOT CMAKE_BUILD_TYPE)
34 SET(CMAKE_BUILD_TYPE "DEBUG")
35 ENDIF(NOT CMAKE_BUILD_TYPE)
36 MESSAGE(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
38 # special case for a GCC < 4.7, assume rest is fine
39 IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
40 SET(CXX_11_STD "c++0x")
42 SET(CXX_11_STD "c++11")
45 SET(CMAKE_C_FLAGS_PROFILING "-g -O0 -pg")
46 SET(CMAKE_CXX_FLAGS_PROFILING "-g -std=${CXX_11_STD} -O0 -pg")
47 SET(CMAKE_C_FLAGS_DEBUG "-g -O0 -ggdb")
48 SET(CMAKE_CXX_FLAGS_DEBUG "-g -std=${CXX_11_STD} -O0 -ggdb")
49 SET(CMAKE_C_FLAGS_RELEASE "-g -O2 -DNDEBUG")
50 SET(CMAKE_CXX_FLAGS_RELEASE "-g -std=${CXX_11_STD} -O2 -DNDEBUG")
51 SET(CMAKE_C_FLAGS_CCOV "-g -O2 --coverage")
52 SET(CMAKE_CXX_FLAGS_CCOV "-g -std=${CXX_11_STD} -O2 --coverage")
55 # Enable sanitize build.
56 # It works with clang and gcc>=4.8
57 # Possible arguments: address, thread and others (see doc.)
58 # Note on thread sanitizer bugs left in out code:
59 # - we use non thread save boost test library
60 # - there are some mysterious problems with glib
61 SET(SANITIZE_FLAGS "-fsanitize=${SANITIZE}")
62 MESSAGE(STATUS "Sanitize flags: ${SANITIZE_FLAGS}")
63 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZE_FLAGS} -fPIE -fno-omit-frame-pointer")
64 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZE_FLAGS} -fPIE -fno-omit-frame-pointer")
65 SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie ${SANITIZE_FLAGS}")
66 ENDIF(DEFINED SANITIZE)
68 ADD_DEFINITIONS("-fPIC") # Position Independent Code
69 ADD_DEFINITIONS("-Werror") # Make all warnings into errors
70 ADD_DEFINITIONS("-Wall") # Generate all warnings
71 ADD_DEFINITIONS("-Wextra") # Generate even more extra warnings
72 ADD_DEFINITIONS("-pedantic") # Be pedantic
73 ADD_DEFINITIONS("-pedantic-errors") # Make pedantic warnings into errors
74 ADD_DEFINITIONS(-DPROGRAM_VERSION="${VERSION}")
75 ADD_DEFINITIONS(-DPROJECT_SOURCE_DIR="${PROJECT_SOURCE_DIR}")
76 ADD_DEFINITIONS(-DUSE_EXEC)
78 IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
79 # Warn about documentation problems
80 ADD_DEFINITIONS("-Wdocumentation")
83 # turn on every -W flags except a few explicitly mentioned
84 ADD_DEFINITIONS("-Wno-error")
85 ADD_DEFINITIONS("-Weverything")
86 ADD_DEFINITIONS("-Wno-c++98-compat")
87 ADD_DEFINITIONS("-Wno-c++98-compat-pedantic")
88 ADD_DEFINITIONS("-Wno-padded")
89 ADD_DEFINITIONS("-Wno-global-constructors")
90 ADD_DEFINITIONS("-Wno-exit-time-destructors")
91 ADD_DEFINITIONS("-Wno-weak-vtables")
95 IF(NOT DEFINED VASUM_USER)
96 SET(VASUM_USER "security-containers")
97 ENDIF(NOT DEFINED VASUM_USER)
98 IF(NOT DEFINED INPUT_EVENT_GROUP)
99 SET(INPUT_EVENT_GROUP "input")
100 ENDIF(NOT DEFINED INPUT_EVENT_GROUP)
101 IF(NOT DEFINED DISK_GROUP)
102 SET(DISK_GROUP "disk")
103 ENDIF(NOT DEFINED DISK_GROUP)
104 IF(NOT DEFINED TTY_GROUP)
106 ENDIF(NOT DEFINED TTY_GROUP)
108 ADD_DEFINITIONS(-DVASUM_USER="${VASUM_USER}")
109 ADD_DEFINITIONS(-DINPUT_EVENT_GROUP="${INPUT_EVENT_GROUP}")
110 ADD_DEFINITIONS(-DDISK_GROUP="${DISK_GROUP}")
111 ADD_DEFINITIONS(-DTTY_GROUP="${TTY_GROUP}")
113 ## Python packages directory ###################################################
115 IF(NOT DEFINED PYTHON_SITELIB)
116 EXECUTE_PROCESS(COMMAND python -c
117 "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib())"
118 OUTPUT_VARIABLE PYTHON_SITELIB)
119 ENDIF(NOT DEFINED PYTHON_SITELIB)
122 ## Subdirectories ##############################################################
123 SET(COMMON_FOLDER ${PROJECT_SOURCE_DIR}/common)
124 SET(CLIENT_FOLDER ${PROJECT_SOURCE_DIR}/client)
125 SET(SERVER_FOLDER ${PROJECT_SOURCE_DIR}/server)
126 SET(ZONE_SUPPORT_FOLDER ${PROJECT_SOURCE_DIR}/zone-support)
127 SET(ZONE_DAEMON_FOLDER ${PROJECT_SOURCE_DIR}/zone-daemon)
128 SET(TESTS_FOLDER ${PROJECT_SOURCE_DIR}/tests)
129 SET(UNIT_TESTS_FOLDER ${TESTS_FOLDER}/unit_tests)
130 SET(CLI_FOLDER ${PROJECT_SOURCE_DIR}/cli)
132 IF(NOT DEFINED SYSCONF_INSTALL_DIR)
133 SET(SYSCONF_INSTALL_DIR "/etc")
134 ENDIF(NOT DEFINED SYSCONF_INSTALL_DIR)
136 IF(NOT DEFINED LIB_INSTALL_DIR)
137 SET(LIB_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBDIR}")
138 ENDIF(NOT DEFINED LIB_INSTALL_DIR)
140 IF(NOT DEFINED INCLUDE_INSTALL_DIR)
141 SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
142 ENDIF(NOT DEFINED INCLUDE_INSTALL_DIR)
144 IF(NOT DEFINED SCRIPT_INSTALL_DIR)
145 SET(SCRIPT_INSTALL_DIR "${CMAKE_INSTALL_FULL_SBINDIR}")
146 ENDIF(NOT DEFINED SCRIPT_INSTALL_DIR)
148 IF(NOT DEFINED SHARE_INSTALL_PREFIX)
149 SET(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_FULL_DATAROOTDIR}")
150 ENDIF(NOT DEFINED SHARE_INSTALL_PREFIX)
152 IF(NOT DEFINED SYSTEMD_UNIT_DIR)
153 SET(SYSTEMD_UNIT_DIR "${LIB_INSTALL_DIR}/systemd/system")
154 ENDIF(NOT DEFINED SYSTEMD_UNIT_DIR)
156 IF(NOT DEFINED DATA_DIR)
157 SET(DATA_DIR "${CMAKE_INSTALL_FULL_DATAROOTDIR}")
158 ENDIF(NOT DEFINED DATA_DIR)
160 SET(VSM_CONFIG_INSTALL_DIR ${SYSCONF_INSTALL_DIR}/vasum)
161 SET(VSM_DATA_INSTALL_DIR ${SHARE_INSTALL_PREFIX}/vasum)
163 ADD_SUBDIRECTORY(${CLIENT_FOLDER})
164 ADD_SUBDIRECTORY(${SERVER_FOLDER})
165 ADD_SUBDIRECTORY(${ZONE_SUPPORT_FOLDER})
166 ADD_SUBDIRECTORY(${ZONE_DAEMON_FOLDER})
167 ADD_SUBDIRECTORY(${TESTS_FOLDER})
168 ADD_SUBDIRECTORY(${CLI_FOLDER})