# cppcore/Makefile # This will build for all platforms except iOS (XCode is used) # and Android (see .../jni/Android.mk which uses Android build scheme) # include ../masterbuild/platform.mk CFLAGS = ${DEF_CFLAGS} LDFLAGS = ${DEF_LDFLAGS} CC = g++ ifeq (${UNAME},Linux) PLATFORM=lin64 endif CFLAGS += -I../cppjson -I../cppboost -I../libeye -I${JAVA_HOME}/include -I../libeye/sqlite -I../thirdparty/openssl/include # linking stuff #LIBDIRS = -L. -L../libeye/lib/${PLATFORM} -L../K2Client/lib/${PLATFORM} LIBDIRS = -L. -L../libeye/lib/${PLATFORM} LIBS = lib/${PLATFORM}/libcppcore${LIBEXTN} lib/${PLATFORM}/libcppcore.a JAR = lib/cppcore-${MVN_VERSION}.jar EXECLIBS = -lm -lpthread STATICLIBS = -lm -lpthread # platform dependent libraries and flags ifeq (${UNAME},Linux) LIBRARIES = -lstdc++ LDFLAGS += ${LIBDIRS} -L/usr/local/lib -std=c++11 CFLAGS += -I/usr/local/include -I${JAVA_HOME}/include/linux -I. CPPFLAGS = ${CFLAGS} -std=c++11 -Wno-unused-local-typedefs LD = ${CPP11} # 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' endif ifeq (${PLATFORM},Darwin) LIBRARIES = LDFLAGS = ${LIBDIRS} -std=gnu++11 #-stdlib=libc++ CFLAGS += -I/usr/local/include -I/opt/local/include -I${JAVA_HOME}/include/darwin CPPFLAGS = ${CFLAGS} -std=gnu++11 #-stdlib=libc++ LD = ${CPP11} endif CPPFLAGS += -Wno-reorder -Wno-unused-parameter OBJS = \ obj/${PLATFORM}/cppcoreobjects/cloudguardurn.o \ obj/${PLATFORM}/client/vanaccess.o \ obj/${PLATFORM}/component/storagenode.o \ obj/${PLATFORM}/component/storagenodestatus.o \ obj/${PLATFORM}/component/storagenodetype.o \ obj/${PLATFORM}/component/storagenodedbaccess.o \ obj/${PLATFORM}/component/storagelocation.o \ obj/${PLATFORM}/component/slfile.o \ obj/${PLATFORM}/internal.o \ obj/${PLATFORM}/cppcorejni.o CLIENT_HEADERS = \ client/vanaccess.h COMPONENT_HEADERS = \ cppcoreobjects/cloudguardurn.h \ component/slfile.h \ component/storagelocation.h \ component/storagenode.h \ component/storagenodedbaccess.h \ component/storagenodedbaccess_java.h \ component/storagenodestatus.h \ component/storagenodetype.h LOCAL_HEADERS = \ internal.h \ cppcorejni.h localobjdirs: mkdir -p obj/${PLATFORM}/client mkdir -p obj/${PLATFORM}/component mkdir -p obj/${PLATFORM}/cppcoreobjects all: showconfig init ${LIBS} ${JAR} @echo all compile: localobjdirs all @echo compile libs: ${LIBS} analyze: showconfig ${LOCAL_HEADERS}: ${CLIENT_HEADERS}: ${COMPONENT_HEADERS}: obj/${PLATFORM}/client/%.o: client/%.cpp ${CLIENT_HEADERS} ${COMPONENT_HEADERS} ${LOCAL_HEADERS} ${CC} ${CPPFLAGS} -c $< -o $@ obj/${PLATFORM}/cppcoreobjects/%.o: cppcoreobjects/%.cpp ${CLIENT_HEADERS} ${COMPONENT_HEADERS} ${LOCAL_HEADERS} ${CC} ${CPPFLAGS} -c $< -o $@ obj/${PLATFORM}/component/%.o: component/%.cpp ${CLIENT_HEADERS} ${COMPONENT_HEADERS} ${LOCAL_HEADERS} ${CC} ${CPPFLAGS} -c $< -o $@ obj/${PLATFORM}/%.o: %.cpp ${CLIENT_HEADERS} ${COMPONENT_HEADERS} ${LOCAL_HEADERS} ${CC} ${CPPFLAGS} -c $< -o $@ cppcoreTest: cppcore-test/cppcore-test.cpp cppcore-test/concretenetworksvc.cpp cppcore-test/concreteobserver.cpp ${LIBS} @echo cppcoreTest ${CC} -o bin/${PLATFORM}/cppcoreTest ${LIBDIRS} ${CPPFLAGS} cppcore-test/cppcore-test.cpp cppcore-test/concretenetworksvc.cpp cppcore-test/concreteobserver.cpp \ ../cppjson/lib/${PLATFORM}/libjsonobject.a ${LIBDIRS} ${EXECLIBS} ${LDFLAGS} \ -L lib/${PLATFORM} -lcppcore -luuid -leye ${LIBS}: init ${OBJS} @echo libs ${LIBS} ${CC} -shared -o lib/${PLATFORM}/libcppcore${LIBEXTN} ${OBJS} ../cppjson/lib/${PLATFORM}/libjsonobject.a ${LIBDIRS} ${EXECLIBS} ${LDFLAGS} \ -L lib/${PLATFORM} -leye rm -f lib/${PLATFORM}/libcppcore.a ; ar -cr lib/${PLATFORM}/libcppcore.a ${OBJS} ifeq (${UNAME},Darwin) install_name_tool -change lib/Darwin/libeye.dylib "@loader_path/libeye.dylib" lib/${PLATFORM}/libcppcore${LIBEXTN} endif # 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 cppcore.dox cd lib/docs/html; jar -cvf ../cppcore.docs.jar * endif install: init localobjdirs ${LIBS} ${JAR} docs @echo Installing Java to Maven mvn ${MVN_REPO} ${MVN_INSTALL_PLUGIN}install-file -Dfile=${JAR} -DgroupId=com.sequencelogic -DartifactId=cppcore \ -Dversion=${MVN_VERSION} -Dpackaging=jar -DgeneratePom=true @echo Installed deploy: install ifneq (${PLATFORM},win32) @echo Deploying to Artifactory mvn deploy:deploy-file -DgroupId=com.sequencelogic \ -DartifactId=cppcore \ -Dversion=${MVN_VERSION} \ -Dpackaging=jar \ -Dfile=${JAR} \ -DrepositoryId=Sequence\ Logic\ Repository \ -Durl=http://artifactory.sl.int:8081/artifactory/libs-release-local endif IONUPKG = com/sequencelogic/cppcore IONUCLASSPKG = classes/${IONUPKG} IONUSRCPKG = java/${IONUPKG} SWIGINT = cppcore.i SWIGJNI = cppcorejni.cpp #CLASSES = \ # $(IONUCLASSPKG)/client/PeerObserver.class \ # $(IONUCLASSPKG)/client/OfficeSvcs.class \ # $(IONUCLASSPKG)/client/WebSvcs.class \ # $(IONUCLASSPKG)/client/SyncAndMessageDispatch.class \ # $(IONUCLASSPKG)/client/cppcore.class \ # $(IONUCLASSPKG)/client/StorageNodeDBAccessJava.class \ # $(IONUCLASSPKG)/client/VanAccess.class \ # $(IONUCLASSPKG)/client/cppcoreJNI.class CLASSES = \ $(IONUCLASSPKG)/client/cppcore.class \ $(IONUCLASSPKG)/client/StorageNodeDBAccessJava.class \ $(IONUCLASSPKG)/client/VanAccess.class \ $(IONUCLASSPKG)/client/cppcoreJNI.class OLDCLASSES = $(IONUCLASSPKG)/client/*.class ${JAR}: ${CLASSES} @echo ${JAR} (cd classes; \ jar -cvf ../${JAR} ${IONUPKG}/client/*.class) # CLASSPATH = classes:../libeye/javalib/json-20090211.jar:../javacore/target/csf-${MVN_VERSION}.jar:../dtcore/target/dtcore-1.0.0.jar:${JAR} CLASSPATH = classes:../libeye/javalib/json-20090211.jar:../javacore/target/csf-${MVN_VERSION}.jar:../dtcore/target/dtcore-1.1.0.jar $(IONUCLASSPKG)/client/%.class: $(IONUSRCPKG)/client/%.java @echo javac "$<" javac -source ${JAVA_TARGET} -target ${JAVA_TARGET} -cp ${CLASSPATH} -sourcepath java -d classes $< $(IONUCLASSPKG)/test/%.class: $(IONUSRCPKG)/test/%.java @echo javac $< javac -source ${JAVA_TARGET} -target ${JAVA_TARGET} -cp ${CLASSPATH} -sourcepath java -d classes $< testC: ${LIBS} cppcoreTest dummyTarget @echo "\n\n*** cppcoreTest ***" ./bin/${PLATFORM}/cppcoreTest TESTCLASSES = ${IONUCLASSPKG}/test/concreteOfficeSvc.class \ ${IONUCLASSPKG}/test/concreteWebSvc.class \ ${IONUCLASSPKG}/test/concretePeerObserver.class \ ${IONUCLASSPKG}/test/testcppcore.class dummyTarget: testJava: ${JAR} ${TESTCLASSES} dummyTarget @echo "\n\n*** test Java CPPCORE ***" # TODO use junit java -cp ${CLASSPATH} -Djava.library.path=./lib/${PLATFORM} com.sequencelogic.cppcore.test.testcppcore swig: swig -c++ -o $(SWIGJNI) -java -outdir ${IONUSRCPKG}/client -package com.sequencelogic.cppcore.client $(SWIGINT) perl updateJniCode.pl $(SWIGINT) ifeq (${PLATFORM},Darwin) test: @echo Tests disabled for Darwin because cannot compile them else test: testC testJava @echo "\n\nTESTS SUCCESSFUL!" endif package: @echo "Nothing to package" clean: init @echo clean rm -f ${LIBS} rm -f ${OBJS} rm -f ${JAR} rm -f $(IONUCLASSPKG)/client/*.class rm -f $(IONUCLASSPKG)/test/*.class