Makefile.common 6.22 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 31
#
#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
32
TEST_LIB := $(LOADTHREADFLAG) -fopenmp $(GMPLIB) -lgomp
Gerard Ryan's avatar
Gerard Ryan committed
33 34 35 36 37 38 39 40 41

# 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
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
##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
61

Gerard Ryan's avatar
Gerard Ryan committed
62 63 64 65 66 67
## turn on openmp loop parallelization in the library code
## currently turns on loop parallelization only for the Matrix class
ifdef OMP
	CPPFLAGS += -DOMP=$(OMP)
endif

Gerard Ryan's avatar
Gerard Ryan committed
68 69 70
#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
71 72 73 74
#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
75 76 77 78 79 80 81



#build directory
BUILDDIR := build

#bin directory
Gerard Ryan's avatar
Gerard Ryan committed
82
BINDIR ?= bin
Gerard Ryan's avatar
Gerard Ryan committed
83 84

#sources for palisade library
Gerard Ryan's avatar
Gerard Ryan committed
85 86 87
EXTLIBDIR := $(BINDIR)/lib
EXTTESTDIR := $(BINDIR)/unittest
EXTDEMODIR := $(BINDIR)/demo
Gerard Ryan's avatar
Gerard Ryan committed
88 89 90 91 92 93 94 95 96 97

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

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

NTLINCLUDE := -I third-party/include
GMPINCLUDE := -I third-party/include

Gerard Ryan's avatar
Gerard Ryan committed
98
EXTLIB := -L$(EXTLIBDIR) $(TEST_LIB) #no profiling
Gerard Ryan's avatar
Gerard Ryan committed
99 100 101 102 103 104 105 106 107 108 109 110

INC := -I src/core/lib -I src/pke/lib -I src/trapdoor/lib -I src/circuit/lib -I test $(OMPINCLUDE) $(NTLINCLUDE) $(GMPINCLUDE)

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

PALISADEPYLIB := pycrypto$(LIBSUFFIX)

# run make for all components. you can run any individual component separately
Gerard Ryan's avatar
Gerard Ryan committed
111 112 113 114 115 116
#  by invoking   "make allxxx"  for example, make allcore makes everything in core only

all:
	$(MAKE) gmp_all
	$(MAKE) ntl_all
	$(MAKE) allcore allpke alltrapdoor allcircuit utall
Gerard Ryan's avatar
Gerard Ryan committed
117 118 119 120 121 122 123 124 125

docs: apidocs

alljava: allcore allpke jwrapper

allpython: allcore allpke alltrapdoor pywrapper

alldemos: allcoredemos allpkedemos alltrapdoordemos allcircuitdemos

Gerard Ryan's avatar
Gerard Ryan committed
126 127
testall: $(CORE_TEST_TARGET) $(PKE_TEST_TARGET) $(TRAPDOOR_TEST_TARGET) $(CIRCUIT_TEST_TARGET) utall
	$(BINDIR)/unittest/tests$(EXESUFFIX) -t
Gerard Ryan's avatar
Gerard Ryan committed
128 129 130 131

# 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
132
.PHONEY: clean clobber
Gerard Ryan's avatar
Gerard Ryan committed
133 134
clean: cleancore cleanpke cleantrapdoor cleancircuit cleandocs cleanbenchmark
	@echo 'Cleaning top level autogenerated directories'
Gerard Ryan's avatar
Gerard Ryan committed
135 136 137 138 139 140 141 142 143 144 145 146
	$(RM) -rf $(BINDIR) 
	$(RM) -rf src/*/bin

clobber: clean clean_gmp clean_ntl

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
147 148 149 150 151 152

include Makefile.core
include Makefile.pke
include Makefile.trapdoor
include Makefile.circuit

Gerard Ryan's avatar
Gerard Ryan committed
153 154 155
include Makefile.gmp
include Makefile.ntl

Gerard Ryan's avatar
Gerard Ryan committed
156 157 158 159
include Makefile.wrapper
include Makefile.benchmark     #builds the benchmark framework
include Makefile.docs          #populates doxgen documentation

Gerard Ryan's avatar
Gerard Ryan committed
160
$(BINDIR)/unittest/tests$(EXESUFFIX): $(UNITTESTMAINOBJ) $(COREUNITOBJECTS) $(EXTLIBDIR)/$(PALISADECORELIB) $(PKEUNITOBJECTS) $(EXTLIBDIR)/$(PALISADEPKELIB) $(TRAPDOORUNITOBJECTS) $(EXTLIBDIR)/$(PALISADETRAPDOORLIB) $(NTLLIB) $(GMPLIB)
Gerard Ryan's avatar
Gerard Ryan committed
161
	@mkdir -p $(BINDIR)/unittest
Gerard Ryan's avatar
Gerard Ryan committed
162
	$(CC) -o $@ $(UNITTESTMAINOBJ) $(COREUNITOBJECTS) $(PKEUNITOBJECTS) $(TRAPDOORUNITOBJECTS) $(EXTLIB) -lPALISADEtrapdoor -lPALISADEpke -lPALISADEcore $(TEST_LIB) $(NTLLIB) $(GMPLIB)