Makefile.abe 4.67 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 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
#
#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.abe builds the attribute-based encryption components of the PALISADE library
# Includes unit tests and demos
################

ABESRCDIR := src/abe
ABEBINDIR := $(BINDIR)/build/abe
ABETESTDIR := src/abe/unittest
ABEDEMODIR := src/abe/demo

ABESOURCES := $(shell find $(ABESRCDIR)/lib -name '*.cpp' ! -name '*-public.cpp')
ABEUNITSOURCES := $(wildcard $(ABESRCDIR)/unittest/*.cpp)
ABEDEMOSOURCES := $(wildcard $(ABESRCDIR)/demo/*.cpp)

ABEOBJECTSALL = $(patsubst $(ABESRCDIR)/%,$(ABEBINDIR)/%,$(patsubst %.cpp,%.o,$(ABESOURCES)))
ABEOBJECTS = $(filter %-impl.o,$(ABEOBJECTSALL))
ABEUNITOBJECTS := $(patsubst $(ABESRCDIR)/%,$(ABEBINDIR)/%,$(patsubst %.cpp,%.o,$(ABEUNITSOURCES)))
ABEDEMOOBJECTS += $(patsubst $(ABESRCDIR)/%,$(ABEBINDIR)/%,$(patsubst %.cpp,%.o,$(ABEDEMOSOURCES)))

ABE_TEST_TARGET := $(EXTTESTDIR)/abe/tests$(EXESUFFIX)

-include $(ABEOBJECTS:.o=.d)
-include $(ABEUNITOBJECTS:.o=.d)
-include $(ABEDEMOOBJECTS:.o=.d)

.PHONY: allabe
allabe: allcore $(EXTLIBDIR)/$(PALISADEABELIB) $(ABE_TEST_TARGET) allabedemos

.PHONY: allabedemos
allabedemos: $(patsubst $(ABEBINDIR)/demo/%,$(BINDIR)/demo/abe/%,$(patsubst %.o,%$(EXESUFFIX),$(ABEDEMOOBJECTS)))

$(BINDIR)/demo/abe/%$(EXESUFFIX): $(ABEBINDIR)/demo/%.o $(EXTLIBDIR)/$(PALISADEABELIB) $(EXTLIBDIR)/$(PALISADECORELIB) $(NTLLIB) $(GMPLIB)
	@mkdir -p $(@D)
	$(CC) -o $@ $< $(EXTLIB) -lPALISADEabe -lPALISADEcore $(NTLLIB) $(GMPLIB)

#this builds the palisade library out of the objects 
$(EXTLIBDIR)/$(PALISADEABELIB): $(ABEOBJECTS) $(EXTLIBDIR)/$(PALISADECORELIB) $(NTLLIB) $(GMPLIB)
	@echo " -- abe:linking $@ from ABEOBJECTS"
	@mkdir -p $(EXTLIBDIR)
ifdef COVERAGE
	$(LIBCMD) $@ $(ABEOBJECTS) 
else
	$(LIBCMD) $@ $(ABEOBJECTS) $(EXTLIB) -lPALISADEcore $(NTLLIB) $(GMPLIB)
endif

### #this builds the individual objects that make up the library .
.PRECIOUS: $(ABEBINDIR)/%
$(ABEBINDIR)/%:
	@if [ "$(suffix $@)" = ".o" ] ;   \
	then  \
		mkdir -p $(@D)  ;\
		echo $(CC) $(CPPFLAGS) $(INC) -c -o $@ $(patsubst $(ABEBINDIR)/%,$(ABESRCDIR)/%,$(patsubst %.o,%.cpp,$@))  ;\
		$(CC) -MM $(CPPFLAGS) $(INC) $(patsubst $(ABEBINDIR)/%,$(ABESRCDIR)/%,$(patsubst %.o,%.cpp,$@)) > $(patsubst %.o,%.d,$@) ;\
		mv -f $(patsubst %.o,%.d,$@) $(patsubst %.o,%.d.tmp,$@)  ;\
		sed -e 's|.*\.o:|$(ABEBINDIR)/$*:|' < $(patsubst %.o,%.d.tmp,$@) > $(patsubst %.o,%.d,$@)  ;\
		rm -f $(patsubst %.o,%.d.tmp,$@)  ; \
		$(CC) $(CPPFLAGS) $(INC) -c -o $@ $(patsubst $(ABEBINDIR)/%,$(ABESRCDIR)/%,$(patsubst %.o,%.cpp,$@))  ;\
	fi

#this target is used to cleanup, it is called from the top Makefile
.PHONY: cleanabe 
cleanabe: 
	$(RM) -fr $(ABEBINDIR) $(EXTLIBDIR)/$(PALISADEABELIB) `dirname $(ABE_TEST_TARGET)` $(BINDIR)/demo/abe

# this links test executable  from objects in the test build directory
$(ABE_TEST_TARGET): $(UNITTESTMAINOBJ) $(ABEUNITOBJECTS) $(EXTLIBDIR)/$(PALISADEABELIB) $(EXTLIBDIR)/$(PALISADECORELIB) $(NTLLIB) $(GMPLIB)
	@mkdir -p `dirname $(ABE_TEST_TARGET)`
	$(CC) -o $(ABE_TEST_TARGET) $(UNITTESTMAINOBJ) $(ABEUNITOBJECTS) $(EXTLIB) -lPALISADEabe -lPALISADEcore $(TEST_LIB) $(NTLLIB) $(GMPLIB)

#used to run tests from make
.PHONY: testabe
testabe: $(ABE_TEST_TARGET)
	LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(ROOTDIR)/$(THIRDPARTYLIBDIR):$(ROOTDIR)/$(EXTLIBDIR) $(ABE_TEST_TARGET)

.PHONY: installabe
installabe: installdirs
	install -t $(LIB_DEST) $(EXTLIBDIR)/$(PALISADEABELIB)

.PHONY: uninstallabe
uninstallabe:
	rm $(LIB_DEST)/$(PALISADEABELIB)