343 lines
11 KiB
Makefile
343 lines
11 KiB
Makefile
|
|
# libeye/Makefile
|
|
# This will build Darwin or Linux
|
|
# iOS uses XCode, Android uses .../jni/Android.mk, Windows uses Nmakefile or VisualStudio
|
|
|
|
#UNAME := $(shell uname)
|
|
include ../masterbuild/common.mk
|
|
|
|
ifeq (${UNAME},Darwin)
|
|
PLATFORM=Darwin
|
|
CC = gcc
|
|
CPP = g++
|
|
LD = g++
|
|
LIBEXTN = .dylib
|
|
INCLUDES = -I../thirdparty/openssl/include
|
|
JNI_INCLUDE = -I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin
|
|
CFLAGS = -g -Wall -pthread -m64 -Wno-deprecated-declarations -D${UNAME} -std=gnu++11 ${INCLUDES}
|
|
else ifeq (${UNAME},Linux)
|
|
PLATFORM=lin64
|
|
CC = gcc
|
|
CPP = g++
|
|
LD = g++
|
|
LIBEXTN = .so
|
|
INCLUDES = -I../thirdparty/openssl/include
|
|
JNI_INCLUDE = -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux
|
|
# CFLAGS = -g -DDEBUG -DLIN64 -Wall -pthread -m64 -fPIC -std=c++11 ${INCLUDES}
|
|
OPTCFLAGS = -O2 -DLIN64 -Wall -pthread -m64 -fPIC -std=c++11 ${INCLUDES}
|
|
PROFCFLAGS = -g -pg -Wall -pthread -m64 -fPIC -std=c++11
|
|
LDFLAGS = -m64 -fPIC -std=c++11
|
|
CFLAGS = ${OPTCFLAGS}
|
|
MD5 = openssl md5
|
|
# TEB via FxData - https://github.com/bimargulies/jni-origin-testbed
|
|
# note that Darwin requires additional command to replace name of linked libs
|
|
LDFLAGS += -Wl,-rpath='$$ORIGIN'
|
|
else
|
|
PLATFORM=win32
|
|
endif
|
|
|
|
LIBDIRS = -Llib/${PLATFORM} -Lzlib/${PLATFORM}
|
|
LINKLIBS = -lm -lpthread -lstdc++ ../thirdparty/openssl/lib/${PLATFORM}/libcrypto.a zlib/${PLATFORM}/libz.a
|
|
#LINKLIBS = -lm -lpthread -lstdc++ -lcrypto zlib/${PLATFORM}/libz.a
|
|
EXECLIBS = -leye -ldl -lm -lpthread
|
|
#EXECLIBS = -leye -lcrypto -ldl -lm -lpthread
|
|
ZLIB_VER=1.2.8
|
|
|
|
# linking stuff
|
|
LIBS = lib/${PLATFORM}/libeye${LIBEXTN} lib/${PLATFORM}/libeye.a
|
|
ZLIB = lib/${PLATFORM}/libz.a
|
|
JAR = lib/eye-${MVN_VERSION}.jar
|
|
|
|
OBJS = \
|
|
obj/${PLATFORM}/eyedb.o \
|
|
obj/${PLATFORM}/eyedrbg.o \
|
|
obj/${PLATFORM}/eyeencrypteddb.o \
|
|
obj/${PLATFORM}/eyeinterface.o \
|
|
obj/${PLATFORM}/eyejni.o \
|
|
obj/${PLATFORM}/eyejson.o \
|
|
obj/${PLATFORM}/eyelock.o \
|
|
obj/${PLATFORM}/eyelog.o \
|
|
obj/${PLATFORM}/eyering.o \
|
|
obj/${PLATFORM}/eyetime.o \
|
|
obj/${PLATFORM}/eyeutils.o \
|
|
obj/${PLATFORM}/sqlite3.o
|
|
|
|
all: init ${LIBS} ${JAR} obj/${PLATFORM}/pbkdf2 bin/${PLATFORM}/generatekeys
|
|
@echo all
|
|
|
|
compile: all
|
|
@echo compile
|
|
|
|
libs: ${LIBS}
|
|
|
|
analyze: ${LIBS}
|
|
clang --analyze -std=gnu++11 -I../openssl/include/lin64 ${JNI_INCLUDE} *.cpp
|
|
|
|
obj/${PLATFORM}/eyedb.o: eyedb.cpp eyedb.h eyeutils.h eyelog.h
|
|
${CPP} ${CFLAGS} -c eyedb.cpp -o $*.o
|
|
|
|
obj/${PLATFORM}/eyedrbg.o: eyedrbg.cpp eyedrbg.h eyeutils.h eyelog.h
|
|
${CPP} ${CFLAGS} -c eyedrbg.cpp -o $*.o
|
|
|
|
obj/${PLATFORM}/eyeencrypteddb.o: eyeencrypteddb.cpp eyeencrypteddb.h eyedb.h eyelog.h
|
|
${CPP} ${CFLAGS} -c eyeencrypteddb.cpp -o $*.o
|
|
|
|
obj/${PLATFORM}/eyeinterface.o: eyeinterface.cpp eyeinterface.h eyeutils.h eyejson.h eyelog.h
|
|
${CPP} ${CFLAGS} -c eyeinterface.cpp -o $*.o
|
|
|
|
obj/${PLATFORM}/eyejson.o: eyejson.cpp eyejson.h eyeutils.h eyelog.h
|
|
${CPP} ${CFLAGS} -c eyejson.cpp -o $*.o
|
|
|
|
obj/${PLATFORM}/eyelock.o: eyelock.cpp eyeutils.h eyelock.h
|
|
${CPP} ${CFLAGS} -c eyelock.cpp -o $*.o
|
|
|
|
obj/${PLATFORM}/eyelog.o: eyelog.cpp eyeutils.h eyelog.h eyering.h
|
|
${CPP} ${CFLAGS} -c eyelog.cpp -o $*.o
|
|
|
|
obj/${PLATFORM}/eyering.o: eyering.cpp eyeutils.h eyering.h eyelog.h eyejson.h
|
|
${CPP} ${CFLAGS} -c eyering.cpp -o $*.o
|
|
|
|
obj/${PLATFORM}/eyetime.o: eyetime.cpp eyeutils.h eyetime.h
|
|
${CPP} ${CFLAGS} -c eyetime.cpp -o $*.o
|
|
|
|
obj/${PLATFORM}/eyeutils.o: eyeutils.cpp eyeutils.h eyelog.h
|
|
${CPP} ${CFLAGS} -c eyeutils.cpp -o $*.o
|
|
|
|
obj/${PLATFORM}/eyejni.o: eyejni.cpp eyeinterface.h
|
|
${CPP} ${CFLAGS} -Wno-unused-parameter ${JNI_INCLUDE} -c eyejni.cpp -o $*.o
|
|
|
|
obj/${PLATFORM}/sqlite3.o: sqlite/sqlite3.c sqlite/sqlite3.h
|
|
# ${CC} -Fpermissive -g -DDEBUG -Wall -m64 -fPIC -c sqlite/sqlite3.c -o $*.o
|
|
${CC} -Fpermissive -O2 -Wall -m64 -fPIC -c sqlite/sqlite3.c -o $*.o
|
|
|
|
${LIBS}: init ${OBJS}
|
|
@echo libs ${LIBS}
|
|
cp -p zlib/${PLATFORM}/libz.a lib/${PLATFORM}
|
|
ifeq (${UNAME},Linux)
|
|
${CC} -shared -o lib/${PLATFORM}/libeye${LIBEXTN} ${OBJS} ${LDFLAGS} ${LIBDIRS} ${LINKLIBS}
|
|
endif
|
|
# ${CC} -shared -o lib/${PLATFORM}/libeye${LIBEXTN} ${OBJS} ${LDFLAGS} ${LIBDIRS} ${LINKLIBS}
|
|
rm -f lib/${PLATFORM}/libeye.a ; ar -cr lib/${PLATFORM}/libeye.a ${OBJS}
|
|
ifeq (${UNAME},Darwin)
|
|
${CC} -shared -o lib/${PLATFORM}/libeye${LIBEXTN} ${OBJS} ${LDFLAGS} ${LIBDIRS} ${LINKLIBS}
|
|
install_name_tool -change /usr/local/ssl/lib/libcrypto.1.0.0.dylib "@loader_path/libcrypto.1.0.0.dylib" lib/${PLATFORM}/libeye${LIBEXTN}
|
|
endif
|
|
|
|
|
|
${ZLIB}: zlib/${PLATFORM}/libz.a
|
|
# cd zlib; ./configure; make; cd ..
|
|
# mkdir -p zlib/${PLATFORM}
|
|
# cp -p zlib/libz.a zlib/${PLATFORM}
|
|
# cp -p zlib/libz${LIBEXTN} zlib/${PLATFORM}
|
|
|
|
clean:
|
|
@echo clean
|
|
rm -f ${LIBS}
|
|
rm -f ${OBJS}
|
|
rm -f ${JAR}
|
|
rm -f testapi
|
|
rm -f obj/${PLATFORM}/pbkdf2
|
|
rm -rf classes
|
|
rm -f test/empty.*
|
|
rm -f test/Message*
|
|
|
|
# Force use specific install version because of HAL/Thomas problems in fetching from repository.
|
|
MVN_INSTALL_PLUGIN = org.apache.maven.plugins:maven-install-plugin:2.3.1:
|
|
|
|
docs:
|
|
ifeq (${UNAME},Linux)
|
|
doxygen libeye.dox
|
|
cd lib/docs/html; jar -cvf ../libeye.docs.jar *
|
|
endif
|
|
|
|
install: ${LIBS} javaInstall mongo-policy.txt obj/${PLATFORM}/pbkdf2 bin/${PLATFORM}/generatekeys docs
|
|
|
|
javaInstall: init ${JAR}
|
|
@echo Installing ${JAR} to Maven
|
|
mvn ${MVN_REPO} ${MVN_INSTALL_PLUGIN}install-file -Dfile=${JAR} -DgroupId=com.sequencelogic -DartifactId=eye \
|
|
-Dversion=${MVN_VERSION} -Dpackaging=jar -DgeneratePom=true
|
|
|
|
deploy: install
|
|
ifneq (${PLATFORM},win32)
|
|
@echo Deploying to Artifactory
|
|
mvn deploy:deploy-file -DgroupId=com.sequencelogic \
|
|
-DartifactId=eye \
|
|
-Dversion=${MVN_VERSION} \
|
|
-Dpackaging=jar \
|
|
-Dfile=${JAR} \
|
|
-DrepositoryId=Sequence\ Logic\ Repository \
|
|
-Durl=http://artifactory.sl.int:8081/artifactory/libs-release-local
|
|
endif
|
|
|
|
Z_DLL = zlib/${PLATFORM}/zlib1.dll
|
|
SQL_DLL = sqlite/${PLATFORM}/sqlite3.dll
|
|
ifeq (${PLATFORM},win64)
|
|
RELDIR = ../smo-qt/bin/x64
|
|
else
|
|
RELDIR = ../smo-qt/bin
|
|
endif
|
|
|
|
install_win:
|
|
cp -p -f ${Z_DLL} ${RELDIR}
|
|
cp -p -f ${SQL_DLL} ${RELDIR}
|
|
|
|
|
|
# generatekeys executable...
|
|
bin/${PLATFORM}/generatekeys: generatekeys.cpp ${LIBS}
|
|
@echo generatekeys
|
|
${CPP} -o bin/${PLATFORM}/generatekeys ${CFLAGS} generatekeys.cpp ${LIBDIRS} ${EXECLIBS} ${LDFLAGS} ${LINKLIBS}
|
|
|
|
# Test executable
|
|
testapi: testapi.cpp ${LIBS}
|
|
@echo testapi
|
|
${CPP} -o testapi ${CFLAGS} testapi.cpp ${LIBDIRS} ${EXECLIBS} ${LDFLAGS} ${LINKLIBS}
|
|
|
|
# Lock test executable
|
|
locktest: locktest.cpp eyeutils.h ${LIBS}
|
|
@echo locktest
|
|
${CPP} -o locktest ${CFLAGS} locktest.cpp ${LIBDIRS} ${EXECLIBS} ${LDFLAGS}
|
|
|
|
# P2P test executable
|
|
nettest: nettest.cpp eyeutils.h eyenet.h eyeconnection.h ${LIBS}
|
|
@echo nettest
|
|
${CPP} -o nettest ${CFLAGS} nettest.cpp ${LIBDIRS} ${EXECLIBS} ${LDFLAGS}
|
|
|
|
# Command line utility
|
|
eyecryptor: eyecryptor.cpp eyeutils.h eyering.h eyecontainer.h ${LIBS}
|
|
@echo eyecryptor
|
|
${CPP} -o eyecryptor ${CFLAGS} eyecryptor.cpp ${LIBDIRS} ${EXECLIBS} ${LDFLAGS}
|
|
|
|
# Performance analysis executable
|
|
performance: performance.cpp eyeutils.h eyering.h ${LIBS}
|
|
@echo performance
|
|
${CPP} -o performance ${CFLAGS} performance.cpp ${LIBDIRS} ${EXECLIBS} ${LDFLAGS}
|
|
|
|
obj/${PLATFORM}/pbkdf2: pbkdf2.c ${LIBS}
|
|
@echo pbkdf2
|
|
${CPP} -o obj/${PLATFORM}/pbkdf2 ${LIBDIRS} ${CFLAGS} pbkdf2.c \
|
|
lib/${PLATFORM}/libeye.a \
|
|
lib/${PLATFORM}/libz.a \
|
|
-g ${PLATFORMFLAGS} \
|
|
../thirdparty/openssl/lib/${PLATFORM}/libcrypto.a \
|
|
-ldl
|
|
${MD5} obj/${PLATFORM}/pbkdf2 > obj/${PLATFORM}/pbkdf2.md5
|
|
|
|
SLPKG = com/sequencelogic
|
|
SLCLASSPKG = classes/${SLPKG}
|
|
SLSRCPKG = java/${SLPKG}
|
|
SWIGINT = eyeinterface.i
|
|
SWIGJNI = eyejni.cpp
|
|
CLASSES = \
|
|
$(SLCLASSPKG)/TestEye.class \
|
|
$(SLCLASSPKG)/ByteArr.class \
|
|
$(SLCLASSPKG)/Digester.class \
|
|
$(SLCLASSPKG)/eyeinterface.class \
|
|
$(SLCLASSPKG)/eyeinterfaceConstants.class \
|
|
$(SLCLASSPKG)/eyeinterfaceJNI.class \
|
|
$(SLCLASSPKG)/Key.class \
|
|
$(SLCLASSPKG)/PolicyNames.class \
|
|
$(SLCLASSPKG)/Keyring.class \
|
|
$(SLCLASSPKG)/EyeWrapper.class \
|
|
$(SLCLASSPKG)/EYE_FILE_LOCK_TYPE.class \
|
|
$(SLCLASSPKG)/EYE_FILE_LOCK_STATUS.class \
|
|
$(SLCLASSPKG)/EYE_LOG_LEVEL.class \
|
|
$(SLCLASSPKG)/EYE_LOG_SINK.class \
|
|
$(SLCLASSPKG)/SWIGTYPE_p_size_t.class \
|
|
$(SLCLASSPKG)/SWIGTYPE_p_void.class \
|
|
$(SLCLASSPKG)/SWIGTYPE_p_std__vectorT_std__string_t.class \
|
|
$(SLCLASSPKG)/SWIGTYPE_p_unsigned_char.class
|
|
|
|
${JAR}: ${CLASSES}
|
|
@echo ${JAR}
|
|
(cd classes; \
|
|
jar -cvf ../${JAR} \
|
|
${SLPKG}/ByteArr.class \
|
|
${SLPKG}/Digester.class \
|
|
${SLPKG}/eyeinterface.class \
|
|
${SLPKG}/eyeinterfaceConstants.class \
|
|
${SLPKG}/eyeinterfaceJNI.class \
|
|
${SLPKG}/Key.class \
|
|
${SLPKG}/Keyring.class \
|
|
${SLPKG}/EyeWrapper.class \
|
|
$(SLPKG)/PolicyNames.class \
|
|
${SLPKG}/EYE_FILE_LOCK_TYPE.class \
|
|
${SLPKG}/EYE_FILE_LOCK_STATUS.class \
|
|
${SLPKG}/EYE_LOG_LEVEL.class \
|
|
${SLPKG}/EYE_LOG_SINK.class \
|
|
${SLPKG}/SWIGTYPE_p_size_t.class \
|
|
${SLPKG}/SWIGTYPE_p_void.class \
|
|
$(SLPKG)/SWIGTYPE_p_std__vectorT_std__string_t.class \
|
|
${SLPKG}/SWIGTYPE_p_unsigned_char.class \
|
|
; \
|
|
cd ..)
|
|
|
|
CLASSPATH = classes:javalib/log4j-1.2.14.jar:javalib/json-20090211.jar:${HOME}/.m2/repository/com/dt/dovetail/1.1.0/dovetail-1.4.0.jar:javalib/junit-4.10.jar:${JAR}
|
|
|
|
$(SLCLASSPKG)/%.class: $(SLSRCPKG)/%.java
|
|
@echo javac $<
|
|
javac -source ${JAVA_TARGET} -target ${JAVA_TARGET} -sourcepath java -d classes $<
|
|
|
|
mongo-policy.txt: eyeconstants.h eyeconstants.py
|
|
@echo Generate mongo-policy.txt from eyeconstants.h
|
|
${PYTHON2} eyeconstants.py
|
|
|
|
${SLSRCPKG}/PolicyNames.java: eyeconstants.h
|
|
@echo Generate PolicyNames.java from eyeconstants.h
|
|
${PYTHON2} eyeconstants.py
|
|
|
|
${SLCLASSPKG}/SWIGTYPE_p_size_t.class: ${SLSRCPKG}/SWIGTYPE_p_size_t.java
|
|
@echo javac SWIGTYPE_p_size_t.java
|
|
javac -source 1.6 -target 1.6 -cp classes -sourcepath java -d classes ${SLSRCPKG}/SWIGTYPE_p_size_t.java
|
|
|
|
${SLCLASSPKG}/Permissions.class: ${SLSRCPKG}/Permissions.java
|
|
@echo javac Permissions.java
|
|
javac -source 1.6 -target 1.6 -cp classes -sourcepath java -d classes ${SLSRCPKG}/Permissions.java
|
|
|
|
testC: ${LIBS} testapi
|
|
@echo
|
|
@echo
|
|
@echo "*** testapi NOT RUN ***"
|
|
# touch test/empty.ionu
|
|
# touch test/empty.iks
|
|
# cp test/tartest.orig test/tartest.txt
|
|
# cp test/shredtest.ionu test/shred.ionu
|
|
# mkdir -p test/thisisaverylongtestpathfortarformatcheckingandverificationpurposes_exceedstar1988maxpath
|
|
# cp test/tartest.orig test/thisisaverylongtestpathfortarformatcheckingandverificationpurposes_exceedstar1988maxpath/verylongpathtartest.txt
|
|
# ./testapi
|
|
|
|
testJava: ${SLCLASSPKG}/TestEye.class ${JAR}
|
|
@echo
|
|
@echo
|
|
@echo "*** test Java EyeContainer ***"
|
|
# cp testfile.txt.orig testfile.txt
|
|
# TODO use junit
|
|
#java -cp ${CLASSPATH} -Djava.library.path=./lib/${PLATFORM} org.junit.runner.JUnitCore com.sequencelogic.TestEye
|
|
#export DYLD_LIBRARY_PATH="./lib/${PLATFORM}:../thirdparty/openssl/lib/${PLATFORM}"
|
|
@echo "PLATFORM is ${PLATFORM}"
|
|
java -cp ${CLASSPATH} -Djava.library.path=./lib/${PLATFORM}:../thirdparty/openssl/lib/${PLATFORM} com.sequencelogic.TestEye
|
|
|
|
swig:
|
|
swig -c++ -o $(SWIGJNI) -java -outdir java/com/sequencelogic -package com.sequencelogic $(SWIGINT)
|
|
|
|
testGenKeys:
|
|
export GENKEYSHOME=`pwd`/bin/${PLATFORM}; ./testgeneratekeys.sh
|
|
|
|
test: testC testJava testGenKeys
|
|
@echo
|
|
@echo
|
|
@echo "TESTS SUCCESSFUL!"
|
|
|
|
package:
|
|
@echo "Nothing to package"
|
|
|
|
certs:
|
|
@echo "Generate public/private pair for testapi"
|
|
openssl genrsa -out testapi.pem 1024
|
|
openssl rsa -in testapi.pem -out testapi-public.pem -outform PEM -pubout
|
|
init:
|
|
mkdir -p obj/${PLATFORM}
|
|
mkdir -p lib/${PLATFORM}
|
|
mkdir -p bin/${PLATFORM}
|
|
mkdir -p classes
|
|
|