# Copyright (c) 2015, 2016 Sequence Logic # # K2Client/makefile # This will build for Linux and OSX # # *** IMPORTANT *** # There is another makefile elsewhere: ../smo-android/jni/Android.mk # Search for "K2Client" to find the appropriate section. # # Also see ./Nmakefile for the Windows build # include ../masterbuild/common.mk include ../masterbuild/platform.mk CC = g++ LD = g++ #DEF_CFLAGS = -g -Wall -m64 -Wfatal-errors -Wno-unused-parameter -std=gnu++11 INCLUDES = -I../libeye -I../thirdparty/openssl/include UNAME := $(shell uname) ifeq (${UNAME},Darwin) PLATFORM=Darwin LIBEXTN = .dylib JNI_INCLUDE = -I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin CFLAGS = ${DEF_CFLAGS} -D${UNAME} ${INCLUDES} else ifeq (${UNAME},Linux) PLATFORM=lin64 LIBEXTN = .so JNI_INCLUDE = -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux CFLAGS = ${DEF_CFLAGS} -std=gnu++11 -DLIN64 -fPIC -pthread ${INCLUDES} LDFLAGS = -m64 -fPIC -std=gnu++11 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 # linking stuff LIBDIRS = -L../libeye/lib/${PLATFORM} # target for 'all' or 'compile' TARGETNAME = libK2Client TESTTARGET = bin/${PLATFORM}/K2Client_Test TESTLIBS = -L../thirdparty/openssl/lib/lin64 -ldl -L../libeye/zlib/lin64 -lz TARGETLIBS = lib/${PLATFORM}/${TARGETNAME}${LIBEXTN} lib/${PLATFORM}/${TARGETNAME}.a # platform dependent libraries ifeq (${PLATFORM},Darwin) LIBS = else LIBS = -lrt endif # common libraries LIBS += -leye OBJS = obj/${PLATFORM}/main.o \ obj/${PLATFORM}/K2Client.o \ obj/${PLATFORM}/proxy.o \ obj/${PLATFORM}/Hash.o \ obj/${PLATFORM}/util.o \ obj/${PLATFORM}/servers.o \ obj/${PLATFORM}/platform_binding.o \ obj/${PLATFORM}/K2jnibinding.o obj/${PLATFORM}/main.o : main.cpp K2Client.h ${CC} ${CFLAGS} -c main.cpp -o $*.o obj/${PLATFORM}/K2Client.o : K2Client.cpp K2Client.h K2IPC.h Hash.h util.h ${CC} ${CFLAGS} -c K2Client.cpp -o $*.o obj/${PLATFORM}/proxy.o : proxy.cpp proxy.h util.h constants.h Hash.h ${CC} ${CFLAGS} -c proxy.cpp -o $*.o obj/${PLATFORM}/Hash.o : Hash.cpp Hash.h ${CC} ${CFLAGS} -c Hash.cpp -o $*.o obj/${PLATFORM}/util.o : util.cpp util.h constants.h Hash.h ${CC} ${CFLAGS} -c util.cpp -o $*.o obj/${PLATFORM}/servers.o : servers.cpp servers.h util.h constants.h ${CC} ${CFLAGS} -c servers.cpp -o $*.o obj/${PLATFORM}/platform_binding.o : platform_binding.cpp platform_binding.h K2IPC.h proxy.h util.h servers.h constants.h ${CC} ${CFLAGS} -c platform_binding.cpp -o $*.o obj/${PLATFORM}/K2jnibinding.o: K2jnibinding.cpp K2Client.h ${CC} ${CFLAGS} ${JNI_INCLUDE} -c K2jnibinding.cpp -o $*.o ${TARGETLIBS} : ${OBJS} @echo building target libraries: ${TARGETLIBS} ${LD} -shared -o lib/${PLATFORM}/${TARGETNAME}${LIBEXTN} ${OBJS} ${LIBDIRS} ${LIBS} ${LDFLAGS} rm -f lib/${PLATFORM}/${TARGETNAME}.a ; ar -cr lib/${PLATFORM}/${TARGETNAME}.a ${OBJS} ifeq (${UNAME},Darwin) install_name_tool -change lib/Darwin/libeye.dylib "@loader_path/libeye.dylib" lib/${PLATFORM}/${TARGETNAME}${LIBEXTN} endif ${TESTTARGET} : ${TARGETLIBS} @echo Building test application: ${TESTTARGET} ${LD} -o ${TESTTARGET} ${LIBDIRS} ${CFLAGS} lib/${PLATFORM}/libK2Client.a ${LDFLAGS} ${LIBS} ${TESTLIBS} ${MD5} ${TESTTARGET} > ${TESTTARGET}.md5 .PHONY: showconfig showconfig: init @echo showconfig - use make all/clean to actually build something @echo PLATFORM........ ${PLATFORM} @echo JAVA_HOME....... ${JAVA_HOME} @echo CFLAGS.......... ${CFLAGS} @echo LDFLAGS......... ${LDFLAGS} @echo CC.............. ${CC} .PHONY: init init: @echo platform.mk init mkdir -p obj/${PLATFORM} mkdir -p obj/${PLATFORM}/client mkdir -p lib/${PLATFORM} mkdir -p bin/${PLATFORM} mkdir -p classes ifeq (${PLATFORM},win32) mkdir -p ../smo-qt/bin endif export LANG=en_US.US-ASCII .PHONY: clean clean : @echo clean rm -f ${TESTTARGET} ${TARGETLIBS} ${OBJS} rm -rf bin/${PLATFORM} rm -rf classes rm -f ${SLSRCPKG}/K2ClientConstants.java .PHONY: all all: showconfig init ${TESTTARGET} ${TARGETLIBS} @echo all .PHONY: compile compile: all @echo compile MVN_INSTALL_PLUGIN = org.apache.maven.plugins:maven-install-plugin:2.3.1: docs: ifeq (${UNAME},Linux) doxygen K2Client.dox cd lib/docs/html; jar -cvf ../K2Client.docs.jar * endif .PHONY: install install: compile javaInstall docs .PHONY: javaInstall javaInstall: K2Client.jar @echo install @echo Installing Java to Maven mvn ${MVN_REPO} ${MVN_INSTALL_PLUGIN}install-file -Dfile=K2Client.jar -DgroupId=com.sequencelogic -DartifactId=K2Client \ -Dversion=${MVN_VERSION} -Dpackaging=jar -DgeneratePom=true deploy: install ifneq (${PLATFORM},win32) @echo Deploying to Artifactory mvn deploy:deploy-file -DgroupId=com.sequencelogic \ -DartifactId=K2Client \ -Dversion=${MVN_VERSION} \ -Dpackaging=jar \ -Dfile=K2Client.jar \ -DrepositoryId=Sequence\ Logic\ Repository \ -Durl=http://artifactory.sl.int:8081/artifactory/libs-release-local endif test: @echo There are no tests TODO remedy this # Java bits SLPKG = com/sequencelogic SLCLASSPKG = classes/${SLPKG} SLSRCPKG = java/${SLPKG} K2Client.jar: ${SLCLASSPKG}/K2ClientConstants.class ${SLCLASSPKG}/K2Client.class @echo K2Client.jar (cd classes; \ jar -cvf ../K2Client.jar ${SLPKG}/K2ClientConstants.class ${SLPKG}/K2Client.class; \ cd ..) CLASSPATH = classes #:../ionu-java/target/ionu-1.2.0.jar #:javalib/json-20090211.jar ${SLSRCPKG}/K2ClientConstants.java: generate-K2ClientConstants_java.awk K2Client.h platform_binding.h K2IPC.h @echo Generate K2ClientConstants.java from K2Client.h awk -f generate-K2ClientConstants_java.awk K2Client.h platform_binding.h K2IPC.h > ${SLSRCPKG}/K2ClientConstants.java ${SLCLASSPKG}/K2ClientConstants.class: showconfig ${SLSRCPKG}/K2ClientConstants.java @echo javac K2ClientConstants.java javac -source ${JAVA_TARGET} -target ${JAVA_TARGET} -cp ${CLASSPATH} -d classes ${SLSRCPKG}/K2ClientConstants.java ${SLCLASSPKG}/K2Client.class: showconfig ${SLSRCPKG}/K2Client.java @echo javac K2Client.java javac -source ${JAVA_TARGET} -target ${JAVA_TARGET} -cp ${CLASSPATH} -d classes ${SLSRCPKG}/K2Client.java .PHONY: package package: @echo "Nothing to package"