Makefile.common 6.42 KB
Newer Older
Gerard Ryan's avatar
Gerard Ryan committed
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
#
#Copyright (c) 2015, New Jersey Institute of Technology (NJIT)
#All rights reserved.
#Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
#met:
#1. Redistributions of source code must retain the above copyright
#notice, this list of conditions and the following disclaimer.
#2. Redistributions in binary form must reproduce the above copyright
#notice, this list of conditions and the following disclaimer in the
#documentation and/or other materials provided with the distribution.
#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
#IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
#TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
#PARTICULAR PURPOSE ARE DISCLAIMED.
#IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
#ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
#DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
#OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
#HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
#STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
#IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#POSSIBILITY OF SUCH DAMAGE.
#

################
# Makefile contains core definitions and then includes  build instructions
# for making all the palisade components
################

Gerard Ryan's avatar
Gerard Ryan committed
31
TEST_LIB := $(LOADTHREADFLAG) -fopenmp $(GMPLIB) -lgomp
Gerard Ryan's avatar
Gerard Ryan committed
32 33 34 35 36 37 38 39 40

# NOTE select the appropriate set of CPPFLAGS 
# most code is checked into git with the first line active

#CPPFLAGS += -Wall -w -g ## undefine for single thread debug NO OPTIMIZATION operation
#CPPFLAGS += -Wall -Ofast -w #-g #undefine for single thread debug operation
#CPPFLAGS += -Wall -Ofast -w -fopenmp  -g ##undefine for parallel debug operation
#CPPFLAGS += -Wall -O3 -w  -DNDEBUG  -pg ##undefine for single thread best performance operation with gprof profiling 

Gerard Ryan's avatar
Gerard Ryan committed
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
##parallel best performance operation with debug
##warn everything
##no threading or optimization when doing coverage testing
CPPFLAGS += -g -Wall -Werror

## handle coverage test options if user set COVERAGE to any value on the command line
ifdef COVERAGE
	CPPFLAGS += --coverage -Wno-unknown-pragmas
	TEST_LIB += --coverage
	LIBSUFFIX=.a
	LIBCMD=$(AR) crv
else
	CPPFLAGS += -O3 -fopenmp $(COMPTHREADFLAG) ##optimize and threads
endif

## set backend if user set it on the command line
ifdef BACKEND
	CPPFLAGS += -DMATHBACKEND=$(BACKEND)
endif
Gerard Ryan's avatar
Gerard Ryan committed
60 61 62 63

#CPPFLAGS += -Wall -O3 -w -fopenmp -m64 -DNDEBUG  ##undefine for parallel best performance operation with no debug

#THE OPTIONS BELOW SHOULD BE USED WITH CARE AS THEY USE A LOT OF AGGRESSIVE OPTIMIZATION OPTIONS
Gerard Ryan's avatar
Gerard Ryan committed
64 65 66 67
#CPPFLAGS += -Wall  Werror -DNDEBUG -m64 -Ofast -flto -march=native -funroll-loops ##undefine for single thread best performance operation
#CPPFLAGS += -Wall -Werror -DNDEBUG -m64 -Ofast -flto -march=native -funroll-loops -fopenmp ##undefine for multithread really best performance operation
#CPPFLAGS += -Wall -Werror -m64 -Ofast -flto -march=native -funroll-loops -fopenmp -DNDEBUG ##undefine for multithread really best performance operation
#CPPFLAGS += -Wall -Werror -m64 -Ofast -flto -march=native -funroll-loops -fopenmp ##undefine for multithread really best performance operation
Gerard Ryan's avatar
Gerard Ryan committed
68

Gerard Ryan's avatar
Gerard Ryan committed
69 70
# base directory of project
ROOTDIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
Gerard Ryan's avatar
Gerard Ryan committed
71

Gerard Ryan's avatar
Gerard Ryan committed
72 73
PROJECT := palisade
VERSION := 1.3.0
Gerard Ryan's avatar
Gerard Ryan committed
74 75 76 77 78

#build directory
BUILDDIR := build

#bin directory
Gerard Ryan's avatar
Gerard Ryan committed
79
BINDIR ?= bin
Gerard Ryan's avatar
Gerard Ryan committed
80 81

#sources for palisade library
Gerard Ryan's avatar
Gerard Ryan committed
82 83 84
EXTLIBDIR := $(BINDIR)/lib
EXTTESTDIR := $(BINDIR)/unittest
EXTDEMODIR := $(BINDIR)/demo
Gerard Ryan's avatar
Gerard Ryan committed
85 86 87 88 89 90 91

# extentions for source and header files
SRCEXT := cpp
HDREXT := h

$(objects) : %.o : %.cpp

Gerard Ryan's avatar
Gerard Ryan committed
92 93 94 95 96 97 98 99 100 101 102 103 104
# sub makefiles: each src subdirectory needs to be here
SUBMAKEFILES := core pke 

# third party directories
THIRDPARTYDIR := third-party
THIRDPARTYLIBDIR := $(THIRDPARTYDIR)/lib
THIRDPARTYINCLUDE := -I $(THIRDPARTYDIR)/include -I $(THIRDPARTYDIR)/include/rapidjson

# dynamic lib directories on system
ifeq ($(PREFIX),)
	PREFIX := /usr/local
endif
LIB_DEST := $(PREFIX)/lib/$(PROJECT)/$(VERSION)
Gerard Ryan's avatar
Gerard Ryan committed
105

Gerard Ryan's avatar
Gerard Ryan committed
106
EXTLIB := -L$(EXTLIBDIR) $(TEST_LIB) #no profiling
Gerard Ryan's avatar
Gerard Ryan committed
107

Gerard Ryan's avatar
Gerard Ryan committed
108
INC := -I src $(patsubst %,-Isrc/%/lib,$(SUBMAKEFILES)) -I test $(OMPINCLUDE) $(THIRDPARTYINCLUDE)
Gerard Ryan's avatar
Gerard Ryan committed
109 110 111 112 113

#the name of the shared object library for palisade objects.  
PALISADECORELIB := libPALISADEcore$(LIBSUFFIX)
PALISADEPKELIB := libPALISADEpke$(LIBSUFFIX)

Gerard Ryan's avatar
Gerard Ryan committed
114 115
PALISADEPYLIB := pycrypto$(LIBSUFFIX)

Gerard Ryan's avatar
Gerard Ryan committed
116
# run make for all components. you can run any individual component separately
Gerard Ryan's avatar
Gerard Ryan committed
117 118 119 120 121
#  by invoking   "make allxxx"  for example, make allcore makes everything in core only

all:
	$(MAKE) gmp_all
	$(MAKE) ntl_all
Gerard Ryan's avatar
Gerard Ryan committed
122
	$(MAKE) allcore allpke utall 
Gerard Ryan's avatar
Gerard Ryan committed
123 124 125

docs: apidocs

Gerard Ryan's avatar
Gerard Ryan committed
126 127 128 129
alljava: allcore allpke jwrapper

allpython: allcore allpke pywrapper

Gerard Ryan's avatar
Gerard Ryan committed
130
alldemos: allcoredemos allpkedemos 
Gerard Ryan's avatar
Gerard Ryan committed
131

Gerard Ryan's avatar
Gerard Ryan committed
132 133
testall: $(CORE_TEST_TARGET) $(PKE_TEST_TARGET) $(TRAPDOOR_TEST_TARGET) $(WIP_TEST_TARGET) $(CIRCUIT_TEST_TARGET) $(ABE_TEST_TARGET) $(SIGNATURE_TEST_TARGET) utall
	LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(ROOTDIR)/$(THIRDPARTYLIBDIR):$(ROOTDIR)/$(EXTLIBDIR) $(BINDIR)/unittest/tests$(EXESUFFIX) -t
Gerard Ryan's avatar
Gerard Ryan committed
134 135 136 137

# clean up all components. you can clean any individual compoenent separately
#  by invoking   "make cleantargets"  for example
# each corresponding makefile will make the cleanxxxx target
Gerard Ryan's avatar
Gerard Ryan committed
138 139
.PHONY: clean
clean: cleancore cleanpke cleandocs cleanbenchmark 
Gerard Ryan's avatar
Gerard Ryan committed
140
	@echo 'Cleaning top level autogenerated directories'
Gerard Ryan's avatar
Gerard Ryan committed
141 142 143
	$(RM) -rf $(BINDIR) 
	$(RM) -rf src/*/bin

Gerard Ryan's avatar
Gerard Ryan committed
144
.PHONY: clobber
Gerard Ryan's avatar
Gerard Ryan committed
145 146
clobber: clean clean_gmp clean_ntl

Gerard Ryan's avatar
Gerard Ryan committed
147 148 149 150 151 152 153 154 155 156
.PHONY: libdir
libdir:
	install --directory $(LIB_DEST)

.PHONY: install
install: installcore installpke 

.PHONY: uninstall
uninstall: uninstallcore uninstallpke 

Gerard Ryan's avatar
Gerard Ryan committed
157 158 159 160 161 162 163
UNITTESTMAINOBJ := $(BINDIR)/unittest/Main_TestAll.o

$(UNITTESTMAINOBJ): test/include/gtest/Main_TestAll.cpp src/core/lib/math/backend.h 
	@mkdir -p $(BINDIR)/unittest
	$(CC) -c $(CPPFLAGS) $(INC) -o $@ $<

utall: $(BINDIR)/unittest/tests$(EXESUFFIX)
Gerard Ryan's avatar
Gerard Ryan committed
164 165 166 167

include Makefile.core
include Makefile.pke

Gerard Ryan's avatar
Gerard Ryan committed
168 169 170
include Makefile.gmp
include Makefile.ntl

Gerard Ryan's avatar
Gerard Ryan committed
171 172 173
include Makefile.benchmark     #builds the benchmark framework
include Makefile.docs          #populates doxgen documentation

Gerard Ryan's avatar
Gerard Ryan committed
174
$(BINDIR)/unittest/tests$(EXESUFFIX): $(UNITTESTMAINOBJ) $(COREUNITOBJECTS) $(EXTLIBDIR)/$(PALISADECORELIB) $(PKEUNITOBJECTS) $(EXTLIBDIR)/$(PALISADEPKELIB) $(NTLLIB) $(GMPLIB)
Gerard Ryan's avatar
Gerard Ryan committed
175
	@mkdir -p $(BINDIR)/unittest
Gerard Ryan's avatar
Gerard Ryan committed
176
	$(CC) -o $@ $(UNITTESTMAINOBJ) $(COREUNITOBJECTS) $(PKEUNITOBJECTS) $(EXTLIB) -lPALISADEpke -lPALISADEcore $(TEST_LIB) $(NTLLIB) $(GMPLIB)