214 lines
6.2 KiB
Makefile
214 lines
6.2 KiB
Makefile
# 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"
|
|
|