diff --git a/Makefile.conf b/Makefile.conf index 2624aea..2a43844 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -24,9 +24,9 @@ LDLIBS=-lstdc++ -lpEpEngine -lpEpAdapter ######### C++ ######### ifeq ($(BUILD_FOR),Linux) - CXX=g++ -std=c++11 + CXX=g++ -std=c++14 else ifeq ($(BUILD_FOR),Darwin) - CXX=clang -std=c++11 + CXX=clang -std=c++14 endif ifeq ($(BUILD_FOR),Linux) diff --git a/src/Makefile b/src/Makefile index 9eb55fb..38404ab 100644 --- a/src/Makefile +++ b/src/Makefile @@ -9,7 +9,7 @@ ifndef JAVA_HOME $(error JAVA_HOME is not set!) endif -JAVA_BIN=$(JAVA_HOME)/bin +JP=$(JAVA_HOME)/bin # Old versions of a Java distribution have a `javah` binary, new versions do not. This checks whether or not `javah` can be found in the Java distribution found in the directory `$JAVA_HOME`. NOT_USED:=$(shell which $(JAVA_HOME)/bin/javah) @@ -17,72 +17,71 @@ ifeq ($(.SHELLSTATUS),0) OLD_JAVA=placeholder endif -DEST=out - -AR_CXX=libpEpJNI.a -LIB_JAVA=pEp.jar +LIBRARY=libpEpJNI.a +JAR=pEp.jar ifeq ($(BUILD_FOR),Linux) - LIB_CXX=libpEpJNI.so + SHARED=libpEpJNI.so else ifeq ($(BUILD_FOR),Darwin) - LIB_CXX=libpEpJNI.dylib + SHARED=libpEpJNI.dylib else $(error I dont know how to build for $(BUILD_FOR).) endif -SRC_JAVA=$(shell find ./foundation/pEp/jniadapter/ -name '*.java') - -SRC_CXX:=$(shell ls -1 | grep -E '.cc$|.hh$|.h$') -OBJS:=$(shell ls -1 | grep -E '.cc' | sed 's/\.cc/.o/g') - - -#JNI_GEN_H:=$(shell ls -1 |grep .cc | sed 's/\.cc/.h/g' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g') -JNI_GEN_H=foundation_pEp_jniadapter_AbstractEngine.h foundation_pEp_jniadapter_Engine.h foundation_pEp_jniadapter_Message.h - -.PHONY: all status_list codegen jnigen compile_cxx compile_java clean - -# BUILD ALL -all: - $(MAKE) codegen - $(MAKE) compile_java - -# COMPILE JAVA -compile_java: compile_cxx $(LIB_JAVA) - -$(LIB_JAVA): $(SRC_JAVA) $(SRC_CXX) - $(JAVA_BIN)/javac ./foundation/pEp/jniadapter/*.java - $(JAVA_BIN)/jar cf $@ ./foundation/pEp/jniadapter/*.class - - -# COMPILE C++ -compile_cxx: jnigen $(LIB_CXX) - -$(LIB_CXX): $(AR_CXX) - $(CXX) *.o $(LDFLAGS) $(LDLIBS) -o $@ - -$(AR_CXX): $(OBJS) - ar -r $@ *.o - -%.o: %.cc %.h - $(CXX) $(CXXFLAGS) -c $< -o $@ - - -# GENERATE JNI HEADERS -jnigen: codegen $(JNI_GEN_H) - -$(JNI_GEN_H): foundation_pEp_jniadapter_%.h: foundation/pEp/jniadapter/%.java +JAVA_SOURCES=foundation/pEp/jniadapter/AbstractEngine.java \ + foundation/pEp/jniadapter/Blob.java \ + foundation/pEp/jniadapter/CommType.java \ + foundation/pEp/jniadapter/Identity.java \ + foundation/pEp/jniadapter/Pair.java \ + foundation/pEp/jniadapter/Sync.java \ + foundation/pEp/jniadapter/_Blob.java \ + foundation/pEp/jniadapter/_Identity.java \ + foundation/pEp/jniadapter/pEpException.java \ + foundation/pEp/jniadapter/Message.java \ + foundation/pEp/jniadapter/Engine.java \ + +C_SOURCES=foundation_pEp_jniadapter_Engine.cc \ + foundation_pEp_jniadapter_Engine.h \ + foundation_pEp_jniadapter_Message.cc \ + foundation_pEp_jniadapter_Message.h \ + throw_pEp_exception.cc \ + throw_pEp_exception.hh \ + foundation_pEp_jniadapter_AbstractEngine.h + +PEP_HEADER:=$(shell $(CXX) $(CXXFLAGS) -E -M get_header.cc | grep -oe '[^[:space:]]*pEpEngine\.h' | head -1) + + +.PHONY: all +all: $(JAR) $(SHARED) + +$(JAR): status_list.yml2 $(JAVA_SOURCES) $(C_SOURCES) + $(JP)/javac foundation/pEp/jniadapter/*.java + $(JP)/jar cf $@ foundation/pEp/jniadapter/*.class + +BLUBB=foundation_pEp_jniadapter_AbstractEngine.h foundation_pEp_jniadapter_Engine.h foundation_pEp_jniadapter_Message.h +$(BLUBB): foundation_pEp_jniadapter_%.h: foundation/pEp/jniadapter/%.java ifdef OLD_JAVA - $(JAVA_BIN)/javah $(subst /,.,$(subst .java,,$<)) + $(JP)/javah $(subst /,.,$(subst .java,,$<)) else - $(JAVA_BIN)/javac -h . $< + $(JP)/javac -h . $< endif +foundation_pEp_jniadapter_AbstractEngine.o: %.o: %.cc %.h throw_pEp_exception.hh jniutils.hh + $(CXX) $(CXXFLAGS) -c $< -o $@ +foundation_pEp_jniadapter_Engine.o foundation_pEp_jniadapter_Message.o: %.o: %.cc %.h + $(CXX) $(CXXFLAGS) -c $< -o $@ -# CODEGEN -codegen: status_list foundation/pEp/jniadapter/pEpException.java foundation/pEp/jniadapter/Message.java foundation/pEp/jniadapter/Engine.java foundation_pEp_jniadapter_Message.cc foundation_pEp_jniadapter_Engine.cc throw_pEp_exception.cc throw_pEp_exception.hh +$(LIBRARY): foundation_pEp_jniadapter_AbstractEngine.o foundation_pEp_jniadapter_Engine.o foundation_pEp_jniadapter_Message.o throw_pEp_exception.o jniutils.o basic_api.o + ar -r $@ *.o + +$(SHARED): $(LIBRARY) + $(CXX) *.o $(LDFLAGS) $(LDLIBS) -o $@ -foundation/pEp/jniadapter/pEpException.java: pEp.yml2 gen_java_exceptions.ysl2 types_java.ysl2 +status_list.yml2: pEp.yml2 + bash ../utils/extract_pEp_status_codes_from_engine.sh "$(PEP_HEADER)" $@ + +foundation/pEp/jniadapter/pEpException.java: pEp.yml2 gen_java_exceptions.ysl2 pEp.yml2 $(YML2_PROC) -y gen_java_exceptions.ysl2 $< -o $@ foundation/pEp/jniadapter/Message.java: pEp.yml2 gen_java_Message.ysl2 types_java.ysl2 @@ -100,16 +99,13 @@ foundation_pEp_jniadapter_Engine.cc: pEp.yml2 gen_cpp_Engine.ysl2 types_c.ysl2 throw_pEp_exception.cc throw_pEp_exception.hh: pEp.yml2 gen_throw_pEp_exception.ysl2 textutils.ysl2 $(YML2_PROC) -y gen_throw_pEp_exception.ysl2 $< -o throw_pEp_exception.cc +throw_pEp_exception.o: throw_pEp_exception.cc throw_pEp_exception.hh -# GENERATE STATUS LIST -status_list: status_list.yml2 - -status_list.yml2: pEp.yml2 $(ENGINE_INC_PATH)/pEp/pEpEngine.h - bash ../utils/extract_pEp_status_codes_from_engine.sh $(ENGINE_INC_PATH)/pEp/pEpEngine.h $@ - +basic_api.o: basic_api.cc jniutils.hh throw_pEp_exception.hh +.PHONY: clean clean: - rm -f $(LIB_JAVA) $(AR_CXX) $(LIB_CXX) + rm -f $(JAR) $(LIBRARY) $(SHARED) rm -f *.o rm -f *.class rm -f *.xml *.xsl diff --git a/src/get_header.cc b/src/get_header.cc new file mode 100644 index 0000000..d713295 --- /dev/null +++ b/src/get_header.cc @@ -0,0 +1 @@ +#include