Makefile.common 7.59 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
##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
Gerard Ryan's avatar
Gerard Ryan committed
53 54 55 56 57 58
	ifdef MEM
		CPPFLAGS += -O0 
	else
		CPPFLAGS += -O3
	endif
	CPPFLAGS += -fopenmp $(COMPTHREADFLAG) ##optimize and threads 
Gerard Ryan's avatar
Gerard Ryan committed
59 60 61 62 63 64
endif

## set backend if user set it on the command line
ifdef BACKEND
	CPPFLAGS += -DMATHBACKEND=$(BACKEND)
endif
Gerard Ryan's avatar
Gerard Ryan committed
65 66 67 68

#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
69 70 71 72
#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
73

Gerard Ryan's avatar
Gerard Ryan committed
74 75
# base directory of project
ROOTDIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
Gerard Ryan's avatar
Gerard Ryan committed
76

Gerard Ryan's avatar
Gerard Ryan committed
77 78
PACKAGE := palisade
VERSION := 1.4.0
Gerard Ryan's avatar
Gerard Ryan committed
79 80 81 82 83

#build directory
BUILDDIR := build

#bin directory
Gerard Ryan's avatar
Gerard Ryan committed
84
BINDIR ?= bin
Gerard Ryan's avatar
Gerard Ryan committed
85 86

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

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

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

Gerard Ryan's avatar
Gerard Ryan committed
97
# sub makefiles: each src subdirectory needs to be here
Gerard Ryan's avatar
Gerard Ryan committed
98
SUBMAKEFILES := core pke abe signature
Gerard Ryan's avatar
Gerard Ryan committed
99 100 101 102 103 104 105 106 107 108

# 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
Gerard Ryan's avatar
Gerard Ryan committed
109
LIB_DEST := $(PREFIX)/lib/$(PACKAGE)/$(VERSION)
Gerard Ryan's avatar
Gerard Ryan committed
110

Gerard Ryan's avatar
Gerard Ryan committed
111 112 113


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

Gerard Ryan's avatar
Gerard Ryan committed
115
INC := -I src $(patsubst %,-Isrc/%/lib,$(SUBMAKEFILES)) -I test $(OMPINCLUDE) $(THIRDPARTYINCLUDE)
Gerard Ryan's avatar
Gerard Ryan committed
116

Gerard Ryan's avatar
Gerard Ryan committed
117 118
ABEOBJECTSALL = $(patsubst $(ABESRCDIR)/%,$(ABEBINDIR)/%,$(patsubst %.cpp,%.o,$(ABESOURCES)))

Gerard Ryan's avatar
Gerard Ryan committed
119 120 121
#the name of the shared object library for palisade objects.  
PALISADECORELIB := libPALISADEcore$(LIBSUFFIX)
PALISADEPKELIB := libPALISADEpke$(LIBSUFFIX)
Gerard Ryan's avatar
Gerard Ryan committed
122 123
PALISADEABELIB := libPALISADEabe$(LIBSUFFIX)
PALISADESIGNATURELIB := libPALISADEsignature$(LIBSUFFIX)
Gerard Ryan's avatar
Gerard Ryan committed
124

Gerard Ryan's avatar
Gerard Ryan committed
125 126
PALISADEPYLIB := pycrypto$(LIBSUFFIX)

Gerard Ryan's avatar
Gerard Ryan committed
127
# run make for all components. you can run any individual component separately
Gerard Ryan's avatar
Gerard Ryan committed
128 129
#  by invoking   "make allxxx"  for example, make allcore makes everything in core only

Gerard Ryan's avatar
Gerard Ryan committed
130
.PHONY: all
Gerard Ryan's avatar
Gerard Ryan committed
131 132 133
all:
	$(MAKE) gmp_all
	$(MAKE) ntl_all
Gerard Ryan's avatar
Gerard Ryan committed
134
	$(MAKE) allcore allpke allabe allsignature utall 
Gerard Ryan's avatar
Gerard Ryan committed
135

Gerard Ryan's avatar
Gerard Ryan committed
136
.PHONY: docs
Gerard Ryan's avatar
Gerard Ryan committed
137 138
docs: apidocs

Gerard Ryan's avatar
Gerard Ryan committed
139
.PHONY: alljava
Gerard Ryan's avatar
Gerard Ryan committed
140 141
alljava: allcore allpke jwrapper

Gerard Ryan's avatar
Gerard Ryan committed
142 143
.PHONY: allpython
allpython: allcore allpke alltrapdoor allwip pywrapper
Gerard Ryan's avatar
Gerard Ryan committed
144

Gerard Ryan's avatar
Gerard Ryan committed
145 146
.PHONY: alldemos
alldemos: allcoredemos allpkedemos allabedemos allsignaturedemos
Gerard Ryan's avatar
Gerard Ryan committed
147

Gerard Ryan's avatar
Gerard Ryan committed
148
.PHONY: testall
Gerard Ryan's avatar
Gerard Ryan committed
149 150
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
151 152 153 154

# 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
155
.PHONY: clean
Gerard Ryan's avatar
Gerard Ryan committed
156
clean: cleancore cleanpke cleandocs cleanbenchmark cleanabe cleansignature
Gerard Ryan's avatar
Gerard Ryan committed
157
	@echo 'Cleaning top level autogenerated directories'
Gerard Ryan's avatar
Gerard Ryan committed
158 159 160
	$(RM) -rf $(BINDIR) 
	$(RM) -rf src/*/bin

Gerard Ryan's avatar
Gerard Ryan committed
161
.PHONY: clobber
Gerard Ryan's avatar
Gerard Ryan committed
162 163
clobber: clean clean_gmp clean_ntl

Gerard Ryan's avatar
Gerard Ryan committed
164 165
.PHONY: installdirs
installdirs:
Gerard Ryan's avatar
Gerard Ryan committed
166 167 168
	install --directory $(LIB_DEST)

.PHONY: install
Gerard Ryan's avatar
Gerard Ryan committed
169 170 171 172 173 174 175 176 177 178 179
install: installcore installpke installtrapdoor installwip installcircuit installabe installsignature

.PHONY: dist
dist:
	mkdir $(PACKAGE)-$(VERSION)
	cp $(EXTLIBDIR)/$(PALISADECORELIB) $(PACKAGE)-$(VERSION)
	cp $(EXTLIBDIR)/$(PALISADEPKELIB) $(PACKAGE)-$(VERSION)
	cp $(EXTLIBDIR)/$(PALISADEABELIB) $(PACKAGE)-$(VERSION)
	cp $(EXTLIBDIR)/$(PALISADESIGNATURELIB) $(PACKAGE)-$(VERSION)
	tar -zcvf $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)-$(VERSION)
	rm -rf $(PACKAGE)-$(VERSION)
Gerard Ryan's avatar
Gerard Ryan committed
180 181

.PHONY: uninstall
Gerard Ryan's avatar
Gerard Ryan committed
182 183
uninstall: uninstallcore uninstallpke uninstallabe uninstallsignature

Gerard Ryan's avatar
Gerard Ryan committed
184

Gerard Ryan's avatar
Gerard Ryan committed
185 186 187 188 189 190
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 $@ $<

Gerard Ryan's avatar
Gerard Ryan committed
191
.PHONY: utall
Gerard Ryan's avatar
Gerard Ryan committed
192
utall: $(BINDIR)/unittest/tests$(EXESUFFIX)
Gerard Ryan's avatar
Gerard Ryan committed
193 194 195

include Makefile.core
include Makefile.pke
Gerard Ryan's avatar
Gerard Ryan committed
196 197
include Makefile.abe
include Makefile.signature
Gerard Ryan's avatar
Gerard Ryan committed
198

Gerard Ryan's avatar
Gerard Ryan committed
199 200 201
include Makefile.gmp
include Makefile.ntl

Gerard Ryan's avatar
Gerard Ryan committed
202 203 204
include Makefile.benchmark     #builds the benchmark framework
include Makefile.docs          #populates doxgen documentation

Gerard Ryan's avatar
Gerard Ryan committed
205
$(BINDIR)/unittest/tests$(EXESUFFIX): $(UNITTESTMAINOBJ) $(COREUNITOBJECTS) $(EXTLIBDIR)/$(PALISADECORELIB) $(PKEUNITOBJECTS) $(EXTLIBDIR)/$(PALISADEPKELIB) $(ABEUNITOBJECTS) $(EXTLIBDIR)/$(PALISADEABELIB) $(SIGNATUREUNITOBJECTS) $(EXTLIBDIR)/$(PALISADESIGNATURELIB) $(NTLLIB) $(GMPLIB)
Gerard Ryan's avatar
Gerard Ryan committed
206
	@mkdir -p $(BINDIR)/unittest
Gerard Ryan's avatar
Gerard Ryan committed
207
	$(CC) -o $@ $(UNITTESTMAINOBJ) $(COREUNITOBJECTS) $(PKEUNITOBJECTS) $(ABEUNITOBJECTS) $(SIGNATUREUNITOBJECTS) $(EXTLIB) -lPALISADEsignature -lPALISADEabe -lPALISADEpke -lPALISADEcore $(TEST_LIB) $(NTLLIB) $(GMPLIB)