Sleds/K2Client/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"