forked from vmware/concord-bft
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
164 lines (130 loc) · 4.99 KB
/
CMakeLists.txt
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
cmake_minimum_required(VERSION 3.2)
project(concord-bft VERSION 0.1.0.0 LANGUAGES CXX)
#
# C++ options
# TODO: change to set_target_properties?
# https://crascit.com/2015/03/28/enabling-cxx11-in-cmake/
#
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(SLEEP_FOR_DBG FALSE)
set(MIN_BOOST_VERSION 1.64)
# Default to debug builds
# Release builds can be enabled by running cmake with -DCMAKE_BUILD_TYPE=Release
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Enable debug or release builds" FORCE)
endif()
# Default USE_LOG4CPP to FALSE
if (NOT DEFINED USE_LOG4CPP)
option(USE_LOG4CPP "Enable LOG4CPP" FALSE)
endif()
# Default KEEP_APOLLO_LOGS to TRUE
option(KEEP_APOLLO_LOGS "Retains logs from replicas in separate folder for each test in build/tests/apollo/logs " TRUE)
# Default TXN_SIGNING_ENABLED to FALSE
option(TXN_SIGNING_ENABLED "Enable External concord client transcattion signing" TRUE)
# Default BUILD_COMM_TCP_PLAIN to FALSE
option(BUILD_COMM_TCP_PLAIN "Enable TCP communication" FALSE)
# Default LEAKCHECK to FALSE
option(LEAKCHECK "Enable Address and Leak Sanitizers" FALSE)
# Default THREADCHECK to FALSE
option(THREADCHECK "Enable Thread Sanitizer" FALSE)
# Default BUILD_COMM_TCP_TLS to FALSE
option(BUILD_COMM_TCP_TLS "Enable TCP TLS communication" FALSE)
# Rocksdb is required for storage now. Consider removing this flag.
option(BUILD_ROCKSDB_STORAGE "Enable building of RocksDB storage library" TRUE)
# Build S3 Object Store support.
option(USE_S3_OBJECT_STORE "Enable S3 Object Store" FALSE)
# Build Slowdown framework
option(BUILD_SLOWDOWN "Build Slowdown framework" FALSE)
# Build KVBC Benchmarking tool
option(BUILD_KVBC_BENCH "BUILD kvbcbench" FALSE)
# Build Time service with fake clock
option(USE_FAKE_CLOCK_IN_TIME_SERVICE "BUILD TimeService Using Fake Clock" FALSE)
set(COMM_MODULES 0)
if(BUILD_COMM_TCP_PLAIN)
math(EXPR COMM_MODULES "${COMM_MODULES}+1")
endif()
if(BUILD_COMM_TCP_TLS)
math(EXPR COMM_MODULES "${COMM_MODULES}+1")
endif()
# UDP module is not part of the CMake configuration, it will be used by default
# if neither of plain TCP or TLS will be chosen
if(${COMM_MODULES} GREATER 1)
message(FATAL_ERROR "Only one comm module can be chosen")
endif()
if(SLEEP_FOR_DBG)
add_definitions(-DSLEEP_DBG)
endif()
option(USE_OPENTRACING "Enable OpenTracing" ON)
#
# Compiler options
#
#
string(APPEND CMAKE_CXX_FLAGS " -Wall")
string(APPEND CMAKE_CXX_FLAGS " -Wbuiltin-macro-redefined")
string(APPEND CMAKE_CXX_FLAGS " -pedantic")
string(APPEND CMAKE_CXX_FLAGS " -Werror")
string(APPEND CMAKE_CXX_FLAGS " -fno-omit-frame-pointer")
if(LEAKCHECK AND THREADCHECK)
message(FATAL_ERROR "Cannot have both Thread and Address/Leak Sanitizers Enabled")
endif()
if(LEAKCHECK)
string(APPEND CMAKE_CXX_FLAGS " -fsanitize=leak -fsanitize=address")
message("-- Address and Leak Sanitizers Enabled")
endif()
if(THREADCHECK)
string(APPEND CMAKE_CXX_FLAGS " -fsanitize=thread")
message("-- Thread Sanitizer Enabled")
endif()
# TODO: Figure out right way to deal with -fstrict-overflow / -Wstrict-overflow related errors
# string(APPEND CXX_FLAGS " -fno-strict-overflow")
# Prevents some buffer overflows: https://access.redhat.com/blogs/766093/posts/1976213
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -D_FORTIFY_SOURCE=2")
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -fstack-protector-all")
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
string(APPEND CMAKE_CXX_FLAGS " -ferror-limit=3")
# Our RELIC library used in threshsign is in the habit of picking generic
# macro names like HASH and ALIGNED, which conflicts with our own code or
# other libraries. Even worse, compilers don't show 'macro redefined' warnings
# for system header files such as our installed RELIC library. So we do this:
# TODO: [TK] move to the threshsign module
string(APPEND CMAKE_CXX_FLAGS " --no-system-header-prefix relic")
string(APPEND CMAKE_CXX_FLAGS " -Wmacro-redefined")
string(APPEND CMAKE_CXX_FLAGS " -Wsign-compare")
# Export a compile database for use by semantic analysis tools
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
string(APPEND CMAKE_CXX_FLAGS " -fmax-errors=3")
endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
include(CTest)
#
# Subdirectories
#
add_subdirectory(logging)
add_subdirectory(util)
add_subdirectory(secretsmanager)
add_subdirectory(threshsign)
add_subdirectory(communication)
add_subdirectory(kvbc)
add_subdirectory(performance)
add_subdirectory(bftengine)
add_subdirectory(tools)
add_subdirectory(storage)
add_subdirectory(scripts)
add_subdirectory(diagnostics)
add_subdirectory(bftclient)
add_subdirectory(reconfiguration)
add_subdirectory(client)
add_subdirectory(thin-replica-server)
add_subdirectory(ccron)
#
# Setup testing
#
option(OMIT_TEST_OUTPUT "Forwards output stdout and stdin to /dev/null" OFF)
if(BUILD_TESTING)
add_subdirectory(bftengine/tests)
add_subdirectory(tests)
add_subdirectory(messages)
endif()