Sleds/cppcore/Makefile

232 lines
7.2 KiB
Makefile
Raw Normal View History

2025-03-13 21:28:38 +00:00
# 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