mirror of
https://github.com/data61/MP-SPDZ.git
synced 2026-01-06 20:23:50 -05:00
126 lines
3.0 KiB
Plaintext
126 lines
3.0 KiB
Plaintext
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)
|
|
ARM := $(shell uname -m | grep x86; echo $$?)
|
|
OS := $(shell uname -s)
|
|
ifeq ($(MACHINE), x86_64)
|
|
ifeq ($(OS), Linux)
|
|
ifeq ($(shell cat /proc/cpuinfo | grep -q avx2; echo $$?), 0)
|
|
AVX_OT = 1
|
|
else
|
|
AVX_OT = 0
|
|
endif
|
|
else
|
|
AVX_OT = 0
|
|
endif
|
|
else
|
|
ARCH =
|
|
AVX_OT = 0
|
|
endif
|
|
|
|
AVX_SIMPLEOT := $(AVX_OT)
|
|
|
|
ifeq ($(OS), Darwin)
|
|
BREW_CFLAGS += -I/usr/local/opt/openssl/include -I`brew --prefix`/opt/openssl/include -I`brew --prefix`/include
|
|
BREW_LDLIBS += -L/usr/local/opt/openssl/lib -L`brew --prefix`/lib -L`brew --prefix`/opt/openssl/lib
|
|
endif
|
|
|
|
ifeq ($(OS), Linux)
|
|
ifeq ($(ARM), 1)
|
|
ARCH = -mcpu=native
|
|
endif
|
|
endif
|
|
|
|
USE_KOS = 0
|
|
|
|
# allow to set compiler in CONFIG.mine
|
|
CXX = clang++
|
|
|
|
# use CONFIG.mine to overwrite DIR settings
|
|
-include CONFIG.mine
|
|
|
|
AVX_SIMPLEOT := $(AVX_OT)
|
|
|
|
ifeq ($(USE_GF2N_LONG),1)
|
|
GF2N_LONG = -DUSE_GF2N_LONG
|
|
endif
|
|
|
|
ifeq ($(AVX_SIMPLEOT), 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 = -lgmpxx -lgmp -lsodium $(MY_LDLIBS)
|
|
LDLIBS += $(BREW_LDLIBS)
|
|
LDLIBS += -Wl,-rpath -Wl,$(CURDIR)/local/lib -L$(CURDIR)/local/lib
|
|
LDLIBS += -lssl -lcrypto
|
|
LDLIBS += -lboost_filesystem -lboost_iostreams
|
|
|
|
CFLAGS += -I./local/include
|
|
|
|
ifeq ($(USE_NTL),1)
|
|
CFLAGS += -DUSE_NTL
|
|
LDLIBS := -lntl $(LDLIBS)
|
|
endif
|
|
|
|
ifeq ($(OS), Linux)
|
|
LDLIBS += -lrt
|
|
LDLIBS += -z noexecstack
|
|
endif
|
|
|
|
BOOST = -lboost_thread $(MY_BOOST)
|
|
|
|
CFLAGS += $(ARCH) $(MY_CFLAGS) $(GDEBUG) -Wextra -Wall $(OPTIM) -I$(ROOT) -I$(ROOT)/deps -pthread $(PROF) $(DEBUG) $(MOD) $(GF2N_LONG) $(PREP_DIR) $(SSL_DIR) $(SECURE) -std=c++17 -Werror
|
|
CFLAGS += $(BREW_CFLAGS)
|
|
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
|
|
|
|
ifeq ($(USE_KOS),1)
|
|
CFLAGS += -DUSE_KOS
|
|
else
|
|
CFLAGS += -std=c++17
|
|
endif
|