diff --git a/src/Makefile b/src/Makefile index ae3efa9..9e7af01 100644 --- a/src/Makefile +++ b/src/Makefile @@ -6,18 +6,24 @@ include ../Makefile.conf # Names of the java and c++ libs to be built -LIB_JAVA=pEp.jar +LIB_JAVA_NAME=pEp.jar LIB_CXX_NAME=libpEpJNI -LIB_CXX_STATIC=$(addsuffix .a,$(LIB_CXX_NAME)) +DIST_DIR=../dist/ + +LIB_CXX_STATIC_NAME=$(addsuffix .a,$(LIB_CXX_NAME)) ifeq ($(PLATFORM),linux) - LIB_CXX_DYN=$(addsuffix .so,$(LIB_CXX_NAME)) + LIB_CXX_DYN_NAME=$(addsuffix .so,$(LIB_CXX_NAME)) else ifeq ($(PLATFORM),darwin) - LIB_CXX_DYN=$(addsuffix .dylib,$(LIB_CXX_NAME)) + LIB_CXX_DYN_NAME=$(addsuffix .dylib,$(LIB_CXX_NAME)) else $(error I dont know how to build for $(PLATFORM).) endif +LIB_JAVA=$(DIST_DIR)/$(LIB_JAVA_NAME) +LIB_CXX_STATIC=$(DIST_DIR)/$(LIB_CXX_STATIC_NAME) +LIB_CXX_DYN=$(DIST_DIR)/$(LIB_CXX_DYN_NAME) + $(info ------------------ DIST FILES ---------------------) $(info LIB_JAVA: $(LIB_JAVA)) $(info LIB_CXX_STATIC: $(LIB_CXX_STATIC)) @@ -39,10 +45,13 @@ $(info ---------------------------------------------------) # Dirs # relative to "src/" +BUILD_ROOT=../build/ +CXX_DIR=cxx/ + JAVA_PKG_ROOT=foundation/pEp/jniadapter/ -JAVA_BUILD_ROOT=../build/java/ -OBJ_DIR=../build/cxx/ -DIST_DIR=../dist/ +JAVA_BUILD_ROOT=$(BUILD_ROOT)/java/ +OBJ_DIR=$(BUILD_ROOT)/$(CXX_DIR) + # for "make clean" only GENERATED_JAVA=\ @@ -60,35 +69,34 @@ GENERATED_JAVA=\ # files to compile which will be be generated GENERATED_CC=\ - foundation_pEp_jniadapter_Engine.cc \ - foundation_pEp_jniadapter_Message.cc \ - throw_pEp_exception.cc + $(CXX_DIR)/foundation_pEp_jniadapter_Engine.cc \ + $(CXX_DIR)/foundation_pEp_jniadapter_Message.cc \ + $(CXX_DIR)/throw_pEp_exception.cc # for "make clean" only GENERATED_HH=\ - throw_pEp_exception.hh + $(CXX_DIR)/throw_pEp_exception.hh # Generated JNI headers (javac -h) JNI_GENERATED_HH=\ - foundation_pEp_jniadapter_AbstractEngine.h \ - foundation_pEp_jniadapter__Blob.h \ - foundation_pEp_jniadapter_Engine.h \ - foundation_pEp_jniadapter_Identity.h \ - foundation_pEp_jniadapter_Message.h - -# Derive Java sources that will cause generated headers (for incremental build) -helper=$(subst _,/,$(JNI_GENERATED_HH)) -JNI_GENERATING_JAVA=$(subst .h,.java,$(helper)) + $(CXX_DIR)/foundation_pEp_jniadapter_AbstractEngine.h \ + $(CXX_DIR)/foundation_pEp_jniadapter__Blob.h \ + $(CXX_DIR)/foundation_pEp_jniadapter_Engine.h \ + $(CXX_DIR)/foundation_pEp_jniadapter_Identity.h \ + $(CXX_DIR)/foundation_pEp_jniadapter_Message.h # Auto dependencies using gcc/clang CXXFLAGS+= -MMD -MP -SOURCES=$(wildcard *.cc) +SOURCES=$(wildcard $(CXX_DIR)/*.cc) SOURCES+=$(GENERATED_CC) tmp=$(SOURCES:.cc=.o) -OBJECTS=$(addprefix $(OBJ_DIR), $(tmp)) +OBJECTS=$(addprefix $(BUILD_ROOT), $(tmp)) DEPENDS=$(OBJECTS:.o=.d) +-include $(DEPENDS) +VPATH = $(CXX_DIR)/ + .PHONY: all lib-java lib-cxx compile-java compile-cxx gen-jni-headers codegen clean create-dirs remove-dirs install uninstall $(info SOURCES: $(SOURCES)) @@ -105,13 +113,13 @@ lib-cxx: $(LIB_CXX_DYN) $(LIB_CXX_STATIC) # ---------------- Link ----------------- $(LIB_JAVA): compile-java - $(JAVA_BIN_DIR)/jar cf $(DIST_DIR)/$@ -C $(JAVA_BUILD_ROOT) foundation + $(JAVA_BIN_DIR)/jar cf $@ -C $(JAVA_BUILD_ROOT) foundation $(LIB_CXX_DYN): compile-cxx - $(CXX) $(OBJ_DIR)*.o $(LDFLAGS) $(LDLIBS) -o $(DIST_DIR)/$@ + $(CXX) $(OBJ_DIR)*.o $(LDFLAGS) $(LDLIBS) -o $@ $(LIB_CXX_STATIC): compile-cxx - $(AR) -r $(DIST_DIR)/$@ $(OBJ_DIR)*.o + $(AR) -r $@ $(OBJ_DIR)*.o # -------------- Compile ----------------- @@ -123,20 +131,18 @@ compile-java: create-dirs codegen compile-cxx: create-dirs gen-jni-headers $(OBJECTS) -$(OBJECTS): $(OBJ_DIR)%.o: %.cc +$(OBJECTS): $(BUILD_ROOT)%.o: %.cc $(CXX) $(CXXFLAGS) -c $< -o $@ --include $(DEPENDS) - # --------- Generate JNI headers ---------- gen-jni-headers: codegen $(JNI_GENERATED_HH) -$(JNI_GENERATED_HH): $(JNI_GENERATING_JAVA) +$(JNI_GENERATED_HH): ifdef OLD_JAVA $(JAVA_BIN_DIR)/javah -d $(JAVA_BUILD_ROOT) $(subst /,.,$(subst .java,,$<)) else - $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) -h . $(JAVA_PKG_ROOT)/*.java + $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) -h $(CXX_DIR)/ $(JAVA_PKG_ROOT)/*.java endif @@ -169,12 +175,12 @@ clean: remove-dirs install: $(LIB_JAVA) $(LIB_CXX_STATIC) $(LIB_CXX_DYN) mkdir -p $(PREFIX)/lib - cp -v $(DIST_DIR)/$(LIB_JAVA) $(PREFIX)/lib/ - cp -v $(DIST_DIR)/$(LIB_CXX_STATIC) $(PREFIX)/lib/ - cp -v $(DIST_DIR)/$(LIB_CXX_DYN) $(PREFIX)/lib/ + cp -v $(LIB_JAVA) $(PREFIX)/lib/ + cp -v $(LIB_CXX_STATIC) $(PREFIX)/lib/ + cp -v $(LIB_CXX_DYN) $(PREFIX)/lib/ uninstall: - cd $(PREFIX)/lib && rm -vf $(LIB_JAVA) - cd $(PREFIX)/lib && rm -vf $(LIB_CXX_STATIC) - cd $(PREFIX)/lib && rm -vf $(LIB_CXX_DYN) + cd $(PREFIX)/lib && rm -vf $(LIB_JAVA_NAME) + cd $(PREFIX)/lib && rm -vf $(LIB_CXX_STATIC_NAME) + cd $(PREFIX)/lib && rm -vf $(LIB_CXX_DYN_NAME) diff --git a/src/codegen/Makefile b/src/codegen/Makefile index 2f6fb48..907426c 100644 --- a/src/codegen/Makefile +++ b/src/codegen/Makefile @@ -7,7 +7,7 @@ include ../../Makefile.conf MARKER_DIR=../../build/marker/ -PEP_HEADER:=$(shell $(CXX) $(CXXFLAGS) -E -M ../get_header.cc | grep -oe '[^[:space:]]*pEpEngine\.h' | head -1) +PEP_HEADER:=$(shell $(CXX) $(CXXFLAGS) -E -M ../cxx/get_header.cc | grep -oe '[^[:space:]]*pEpEngine\.h' | head -1) # Every ysl2 file that need to be "compiled" separately, needs to generate a "marker" file # The marker serves as the make target. diff --git a/src/codegen/gen_cpp_Engine.ysl2 b/src/codegen/gen_cpp_Engine.ysl2 index 994fed3..66998ee 100644 --- a/src/codegen/gen_cpp_Engine.ysl2 +++ b/src/codegen/gen_cpp_Engine.ysl2 @@ -10,7 +10,7 @@ tstylesheet { document("../../build/marker/gen_cpp_Engine.marker", "text") > "" } - template "interface" document("../foundation_pEp_jniadapter_{@name}.cc", "text") + template "interface" document("../cxx/foundation_pEp_jniadapter_{@name}.cc", "text") || #include #include diff --git a/src/codegen/gen_cpp_Message.ysl2 b/src/codegen/gen_cpp_Message.ysl2 index 6aeea12..10672ef 100644 --- a/src/codegen/gen_cpp_Message.ysl2 +++ b/src/codegen/gen_cpp_Message.ysl2 @@ -13,7 +13,7 @@ tstylesheet { template "struct" { const "jname" call "CamelCase" with "text", "@name"; - document("../foundation_pEp_jniadapter_{$jname}.cc", "text") { + document("../cxx/foundation_pEp_jniadapter_{$jname}.cc", "text") { || #include #include diff --git a/src/codegen/gen_throw_pEp_exception.ysl2 b/src/codegen/gen_throw_pEp_exception.ysl2 index 7371e01..2314521 100644 --- a/src/codegen/gen_throw_pEp_exception.ysl2 +++ b/src/codegen/gen_throw_pEp_exception.ysl2 @@ -5,7 +5,7 @@ tstylesheet { template "/" { apply "namespace", 0; - document "../throw_pEp_exception.hh", "text" + document "../cxx/throw_pEp_exception.hh", "text" || #pragma once @@ -22,7 +22,7 @@ tstylesheet { } template "namespace" - document("../throw_pEp_exception.cc", "text") + document("../cxx/throw_pEp_exception.cc", "text") || #include #include diff --git a/src/basic_api.cc b/src/cxx/basic_api.cc similarity index 100% rename from src/basic_api.cc rename to src/cxx/basic_api.cc diff --git a/src/foundation_pEp_jniadapter_AbstractEngine.cc b/src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc similarity index 100% rename from src/foundation_pEp_jniadapter_AbstractEngine.cc rename to src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc diff --git a/src/foundation_pEp_jniadapter__Blob.cc b/src/cxx/foundation_pEp_jniadapter__Blob.cc similarity index 100% rename from src/foundation_pEp_jniadapter__Blob.cc rename to src/cxx/foundation_pEp_jniadapter__Blob.cc diff --git a/src/get_header.cc b/src/cxx/get_header.cc similarity index 100% rename from src/get_header.cc rename to src/cxx/get_header.cc diff --git a/src/identity_api.cc b/src/cxx/identity_api.cc similarity index 100% rename from src/identity_api.cc rename to src/cxx/identity_api.cc diff --git a/src/jniutils.cc b/src/cxx/jniutils.cc similarity index 100% rename from src/jniutils.cc rename to src/cxx/jniutils.cc diff --git a/src/jniutils.hh b/src/cxx/jniutils.hh similarity index 100% rename from src/jniutils.hh rename to src/cxx/jniutils.hh