diff --git a/Makefile.conf b/Makefile.conf index 2a43844..2624aea 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -24,9 +24,9 @@ LDLIBS=-lstdc++ -lpEpEngine -lpEpAdapter ######### C++ ######### ifeq ($(BUILD_FOR),Linux) - CXX=g++ -std=c++14 + CXX=g++ -std=c++11 else ifeq ($(BUILD_FOR),Darwin) - CXX=clang -std=c++14 + CXX=clang -std=c++11 endif ifeq ($(BUILD_FOR),Linux) diff --git a/src/Makefile b/src/Makefile index 38404ab..9eb55fb 100644 --- a/src/Makefile +++ b/src/Makefile @@ -9,7 +9,7 @@ ifndef JAVA_HOME $(error JAVA_HOME is not set!) endif -JP=$(JAVA_HOME)/bin +JAVA_BIN=$(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,71 +17,72 @@ ifeq ($(.SHELLSTATUS),0) OLD_JAVA=placeholder endif -LIBRARY=libpEpJNI.a -JAR=pEp.jar +DEST=out + +AR_CXX=libpEpJNI.a +LIB_JAVA=pEp.jar ifeq ($(BUILD_FOR),Linux) - SHARED=libpEpJNI.so + LIB_CXX=libpEpJNI.so else ifeq ($(BUILD_FOR),Darwin) - SHARED=libpEpJNI.dylib + LIB_CXX=libpEpJNI.dylib else $(error I dont know how to build for $(BUILD_FOR).) endif -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 - $(JP)/javah $(subst /,.,$(subst .java,,$<)) -else - $(JP)/javac -h . $< -endif +SRC_JAVA=$(shell find ./foundation/pEp/jniadapter/ -name '*.java') -foundation_pEp_jniadapter_AbstractEngine.o: %.o: %.cc %.h throw_pEp_exception.hh jniutils.hh - $(CXX) $(CXXFLAGS) -c $< -o $@ +SRC_CXX:=$(shell ls -1 | grep -E '.cc$|.hh$|.h$') +OBJS:=$(shell ls -1 | grep -E '.cc' | sed 's/\.cc/.o/g') -foundation_pEp_jniadapter_Engine.o foundation_pEp_jniadapter_Message.o: %.o: %.cc %.h - $(CXX) $(CXXFLAGS) -c $< -o $@ -$(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 +#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 -$(SHARED): $(LIBRARY) +.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 $@ -status_list.yml2: pEp.yml2 - bash ../utils/extract_pEp_status_codes_from_engine.sh "$(PEP_HEADER)" $@ +$(AR_CXX): $(OBJS) + ar -r $@ *.o -foundation/pEp/jniadapter/pEpException.java: pEp.yml2 gen_java_exceptions.ysl2 pEp.yml2 +%.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 +ifdef OLD_JAVA + $(JAVA_BIN)/javah $(subst /,.,$(subst .java,,$<)) +else + $(JAVA_BIN)/javac -h . $< +endif + + + +# 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 + +foundation/pEp/jniadapter/pEpException.java: pEp.yml2 gen_java_exceptions.ysl2 types_java.ysl2 $(YML2_PROC) -y gen_java_exceptions.ysl2 $< -o $@ foundation/pEp/jniadapter/Message.java: pEp.yml2 gen_java_Message.ysl2 types_java.ysl2 @@ -99,13 +100,16 @@ 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 -basic_api.o: basic_api.cc jniutils.hh 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 $@ + -.PHONY: clean clean: - rm -f $(JAR) $(LIBRARY) $(SHARED) + rm -f $(LIB_JAVA) $(AR_CXX) $(LIB_CXX) rm -f *.o rm -f *.class rm -f *.xml *.xsl diff --git a/src/get_header.cc b/src/get_header.cc deleted file mode 100644 index d713295..0000000 --- a/src/get_header.cc +++ /dev/null @@ -1 +0,0 @@ -#include