forked from data61/MP-SPDZ
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CONFIG
132 lines (112 loc) · 3.31 KB
/
CONFIG
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
ROOT = .
OPTIM= -O3
#PROF = -pg
#DEBUG = -DDEBUG
GDEBUG = -g
# set this to your preferred local storage directory
PREP_DIR = '-DPREP_DIR="Player-Data/"'
# directory to store SSL keys
SSL_DIR = '-DSSL_DIR="Player-Data/"'
# set for SHE preprocessing (SPDZ and Overdrive)
USE_NTL = 0
# set for using GF(2^128)
# unset for GF(2^40)
USE_GF2N_LONG = 1
# set to -march=<architecture> for optimization
# SSE4.2 is required homomorphic encryption in GF(2^n) when compiling with clang
# AES-NI and PCLMUL are not required
# AVX is required for oblivious transfer (OT)
# AVX2 support (Haswell or later) is used to optimize OT
# AVX/AVX2 is required for replicated binary secret sharing
# BMI2 is used to optimize multiplication modulo a prime
# ADX is used to optimize big integer additions
# delete the second line to compile for a platform that supports everything
ARCH = -mtune=native -msse4.1 -msse4.2 -maes -mpclmul -mavx -mavx2 -mbmi2 -madx
ARCH = -march=native
MACHINE := $(shell uname -m)
OS := $(shell uname -s)
ifeq ($(MACHINE), x86_64)
# set this to 0 to avoid using AVX for OT
ifeq ($(OS), Linux)
CHECK_AVX := $(shell grep -q avx /proc/cpuinfo; echo $$?)
ifeq ($(CHECK_AVX), 0)
AVX_OT = 1
else
AVX_OT = 0
endif
else
AVX_OT = 1
endif
else
ARCH =
AVX_OT = 0
endif
# allow to set compiler in CONFIG.mine
CXX = g++
# use CONFIG.mine to overwrite DIR settings
-include CONFIG.mine
ifeq ($(USE_GF2N_LONG),1)
GF2N_LONG = -DUSE_GF2N_LONG
endif
ifeq ($(AVX_OT), 0)
CFLAGS += -DNO_AVX_OT
endif
# MAX_MOD_SZ (for FHE) must be least and GFP_MOD_SZ (for computation)
# must be exactly ceil(len(p)/len(word)) for the relevant prime p
# GFP_MOD_SZ only needs to be set for primes of bit length more that 256.
# Default for MAX_MOD_SZ is 10, which suffices for all Overdrive protocols
# MOD = -DMAX_MOD_SZ=10 -DGFP_MOD_SZ=5
LDLIBS = -lmpirxx -lmpir -lsodium $(MY_LDLIBS)
LDLIBS += -lboost_system -lssl -lcrypto
ifeq ($(USE_NTL),1)
CFLAGS += -DUSE_NTL
LDLIBS := -lntl -lgmp $(LDLIBS)
EXTRA_LDLIBS = -lgf2x
endif
ifeq ($(OS), Linux)
LDLIBS += -lrt
endif
ifeq ($(OS), Darwin)
BOOST = -lboost_thread-mt $(MY_BOOST)
else
BOOST = -lboost_thread $(MY_BOOST)
endif
GEAR_FLAGS = -DVERBOSE_CONV2D
ifeq ($(GEAR_DIRECT_SUM),1)
GEAR_FLAGS += -DCONV2D_DIRECT_SUM
else
ifeq ($(GEAR_BASIC_MATMUL),1)
GEAR_FLAGS += -DCONV2D_BASIC_MATMUL
endif
endif
ifeq ($(LOWGEAR),1)
MOD = -DMAX_MOD_SZ=6
ifeq ($(LOWGEAR_FILTER_CIPHERTEXTS),1)
GEAR_FLAGS += -DCONV2D_LOWGEAR_FILTER_CIPHERTEXTS
endif
ifeq ($(LOWGEAR_EXPANDED_BGV), 1)
GEAR_FLAGS += -DCONV2D_LOWGEAR_EXPANDED_BGV
ifeq ($(LOWGEAR_NO_EXPANDED_MASK),1)
GEAR_FLAGS += -DCONV2D_LOWGEAR_NO_EXPANDED_MASK
endif
endif
else
MOD = -DMAX_MOD_SZ=6
ifeq ($(HIGHGEAR_NO_SUMS),1)
else
GEAR_FLAGS += -DCONV2D_SUMMING_CIPHERTEXTS -DCONV2D_MAX_IMAGE_DEPTH=512
endif
ifeq ($(HIGHGEAR_GENERIC_EC),1)
GEAR_FLAGS += -DCONV2D_HIGHGEAR_GENERIC_EC
endif
endif
CFLAGS += $(ARCH) $(MY_CFLAGS) $(GEAR_FLAGS) $(GDEBUG) -Wextra -Wall $(OPTIM) -I$(ROOT) -pthread $(PROF) $(DEBUG) $(MOD) $(GF2N_LONG) $(PREP_DIR) $(SSL_DIR) $(SECURE) -std=c++20 -Werror
CPPFLAGS = $(CFLAGS)
LD = $(CXX)
ifeq ($(OS), Darwin)
# for boost with OpenSSL 3
CFLAGS += -Wno-error=deprecated-declarations
ifeq ($(USE_NTL),1)
CFLAGS += -Wno-error=unused-parameter -Wno-error=deprecated-copy
endif
endif