# 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