forked from coinbase/cb-mpc
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
110 lines (89 loc) · 3.03 KB
/
Copy pathCMakeLists.txt
File metadata and controls
110 lines (89 loc) · 3.03 KB
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
cmake_minimum_required(VERSION 3.16)
project(
CBMPC
VERSION 0.1.0
LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# ------------- Available options ---------------
# * CMAKE_BUILD_TYPE (Release|Debug|RelWithDebInfo)
# * CBMPC_PLATFORM_DEP_OUTPUT_DIR
# * BUILD_TESTS
# ------------- Setup pathes --------------------
set(ROOT_DIR ${CMAKE_CURRENT_LIST_DIR})
set(SRC_DIR ${ROOT_DIR}/src/)
set(LIB_DIR ${ROOT_DIR}/lib/)
set(TEST_DIR ${ROOT_DIR}/tests/)
set(BIN_DIR ${CMAKE_BINARY_DIR}/bin/)
include(cmake/macros.cmake)
include(cmake/arch.cmake)
# ------------- Build types ---------------------
# Following the convention in
# https://llvm.org/docs/CMake.html#frequently-used-cmake-variables
if(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
set(ENABLE_O3 true)
set(ENABLE_DEBUG true)
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
set(ENABLE_O3 true)
set(ENABLE_DEBUG false)
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(ENABLE_O3 false)
set(ENABLE_DEBUG true)
else()
message(FATAL_ERROR "Unsupported build type: ${CMAKE_BUILD_TYPE}")
endif()
if(ENABLE_DEBUG)
add_definitions("-D_DEBUG")
if(NOT IS_WASM)
set_cxx_flags("-g")
endif()
else()
add_definitions("-DNDEBUG")
endif()
if(ENABLE_O3)
set_cxx_flags("-O3")
endif()
if(ENABLE_VALIDATION)
add_definitions("-DENABLE_VALIDATION")
endif()
message("======= Build Mode: ${CMAKE_BUILD_TYPE} =======")
message("ENABLE_DEBUG: ${ENABLE_DEBUG}")
message("ENABLE_O3: ${ENABLE_O3}")
message("ENABLE_VALIDATION: ${ENABLE_VALIDATION}")
message("BUILD_TESTS: ${BUILD_TESTS}")
message("BUILD_DUDECT: ${BUILD_DUDECT}")
include(cmake/compilation_flags.cmake)
include(cmake/openssl.cmake)
option(CBMPC_PLATFORM_DEP_OUTPUT_DIR
"library output directory will be platform-dependent" OFF)
if(CBMPC_PLATFORM_DEP_OUTPUT_DIR)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
${LIB_DIR}/${CMAKE_BUILD_TYPE}/${CMAKE_OS}-${CMAKE_ARCH})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
${LIB_DIR}/${CMAKE_BUILD_TYPE}/${CMAKE_OS}-${CMAKE_ARCH})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
${BIN_DIR}/${CMAKE_BUILD_TYPE}/${CMAKE_OS}-${CMAKE_ARCH})
else()
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIB_DIR}/${CMAKE_BUILD_TYPE})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB_DIR}/${CMAKE_BUILD_TYPE})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR}/${CMAKE_BUILD_TYPE})
endif()
include_directories(${SRC_DIR})
add_library(
cbmpc STATIC $<TARGET_OBJECTS:cbmpc_core> $<TARGET_OBJECTS:cbmpc_crypto>
$<TARGET_OBJECTS:cbmpc_zk> $<TARGET_OBJECTS:cbmpc_protocol>)
link_openssl(cbmpc)
add_subdirectory(src/cbmpc/core)
add_subdirectory(src/cbmpc/crypto)
add_subdirectory(src/cbmpc/zk)
add_subdirectory(src/cbmpc/protocol)
# ------------- Tests ---------------------------
if(NOT IS_MACOS)
set(USE_FETCH_CONTENT true)
endif()
option(BUILD_TESTS "Also build the unit and integration tests" ON)
option(BUILD_DUDECT "Also build the dudect tests" OFF)
if(BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()