From 7a860ad61b45b6df9d3f413a25e34e159dd1f3fb Mon Sep 17 00:00:00 2001 From: Damiano Boppart Date: Tue, 11 Dec 2018 18:37:54 +0100 Subject: [PATCH] Start make cleanup --- src/Makefile | 109 ++++++++++++++++++++++++++++++---------------- src/Makefile.conf | 71 ++++++++++++++++++++++++++++-- 2 files changed, 140 insertions(+), 40 deletions(-) diff --git a/src/Makefile b/src/Makefile index 348c9dd..cf2480a 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,44 +1,81 @@ -LIBRARY=libpEpJNI.a -SHARED=libpEpJNI.so -JAR=jniadapter.jar +# Copyright 2018, pEp Foundation +# This file is part of pEp JNI Adapter +# This file may be used under the terms of the GNU General Public License version 3 +# see LICENSE.txt + include Makefile.conf -CXXFLAGS+=-std=c++14 -fPIC +ifneq ($(wildcard local.conf),) + $(info ================================================) + $(info Overrides in \`local.conf\` are used.) + $(info ================================================) +endif -all: $(JAR) $(SHARED) +ifdef BUILD_CONFIG + $(info ================================================) + $(info Overrides in \`$(BUILD_CONFIG)\` are used.) + $(info ================================================) +endif + +ifndef JAVA_HOME + $(error JAVA_HOME is not set!) +endif + +LIBRARY=libpEpJNI.a +JAR=jniadapter.jar + +ifeq ($(BUILD_FOR),Linux) + SHARED=libpEpJNI.so +else ifeq ($(BUILD_FOR),Darwin) + SHARED=libpEpJNI.dylib +else + $(error I don't know how to build for $(BUILD_FOR).) +endif JAVA_SOURCES=org/pEp/jniadapter/pEpException.java \ - org/pEp/jniadapter/AbstractEngine.java \ - org/pEp/jniadapter/Message.java \ - org/pEp/jniadapter/Engine.java \ - org/pEp/jniadapter/Identity.java \ - org/pEp/jniadapter/_Identity.java \ - org/pEp/jniadapter/Blob.java \ - org/pEp/jniadapter/_Blob.java \ - org/pEp/jniadapter/CommType.java + org/pEp/jniadapter/AbstractEngine.java \ + org/pEp/jniadapter/Message.java \ + org/pEp/jniadapter/Engine.java \ + org/pEp/jniadapter/Identity.java \ + org/pEp/jniadapter/_Identity.java \ + org/pEp/jniadapter/Blob.java \ + org/pEp/jniadapter/_Blob.java \ + org/pEp/jniadapter/CommType.java C_SOURCES=org_pEp_jniadapter_Engine.cc \ - org_pEp_jniadapter_Engine.h \ - org_pEp_jniadapter_Message.cc \ - org_pEp_jniadapter_Message.h \ - throw_pEp_exception.cc \ - throw_pEp_exception.hh \ - org_pEp_jniadapter_AbstractEngine.h + org_pEp_jniadapter_Engine.h \ + org_pEp_jniadapter_Message.cc \ + org_pEp_jniadapter_Message.h \ + throw_pEp_exception.cc \ + throw_pEp_exception.hh \ + org_pEp_jniadapter_AbstractEngine.h -gensource: $(JAVA_SOURCES) $(C_SOURCES) +# 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 type $(JAVA_HOME)/bin/javah) +ifeq ($(.SHELLSTATUS),0) + NEW_JAVA=placeholder +endif -$(JAR): $(JAVA_SOURCES) - javac org/pEp/jniadapter/*.java - jar cf $@ org/pEp/jniadapter/*.class +JP=$(JAVA_HOME)/bin -org_pEp_jniadapter_AbstractEngine.h: org/pEp/jniadapter/AbstractEngine.java - javah $(subst /,.,$(subst .java,,$<)) -org_pEp_jniadapter_Engine.h: org/pEp/jniadapter/Engine.java - javah $(subst /,.,$(subst .java,,$<)) +.PHONY: all +all: $(JAR) $(SHARED) -org_pEp_jniadapter_Message.h: org/pEp/jniadapter/Message.java - javah $(subst /,.,$(subst .java,,$<)) +.PHONY: gensource +gensource: $(JAVA_SOURCES) $(C_SOURCES) + +$(JAR): $(JAVA_SOURCES) + $(JP)/javac org/pEp/jniadapter/*.java + $(JP)/jar cf $@ org/pEp/jniadapter/*.class + +BLUBB = org_pEp_jniadapter_AbstractEngine.h org_pEp_jniadapter_Engine.h org_pEp_jniadapter_Message.h +$(BLUBB): org_pEp_jniadapter_%.h: org/pEp/jniadapter/%.java +ifdef NEW_JAVA + $(JP)/javac -h . $< +else + $(JP)/javah $(subst /,.,$(subst .java,,$<)) +endif org_pEp_jniadapter_AbstractEngine.o: %.o: %.cc %.h throw_pEp_exception.hh jniutils.hh $(CXX) $(CXXFLAGS) -c $< -o $@ @@ -53,29 +90,28 @@ $(SHARED): $(LIBRARY) $(CXX) $(CXXFLAGS) -shared -o $(SHARED) $(LDFLAGS) -lpEpEngine *.o org/pEp/jniadapter/pEpException.java: pEp.yml2 gen_java_exceptions.ysl2 - yml2proc -y gen_java_exceptions.ysl2 $< -o $@ + $(YML2_PROC) -y gen_java_exceptions.ysl2 $< -o $@ org/pEp/jniadapter/Message.java: pEp.yml2 gen_java_Message.ysl2 types_java.ysl2 - yml2proc -y gen_java_Message.ysl2 $< + $(YML2_PROC) -y gen_java_Message.ysl2 $< org_pEp_jniadapter_Message.cc: pEp.yml2 gen_cpp_Message.ysl2 types_c.ysl2 - yml2proc -y gen_cpp_Message.ysl2 $< + $(YML2_PROC) -y gen_cpp_Message.ysl2 $< org/pEp/jniadapter/Engine.java: pEp.yml2 gen_java_Engine.ysl2 types_java.ysl2 - yml2proc -y gen_java_Engine.ysl2 $< + $(YML2_PROC) -y gen_java_Engine.ysl2 $< org_pEp_jniadapter_Engine.cc: pEp.yml2 gen_cpp_Engine.ysl2 types_c.ysl2 - yml2proc -y gen_cpp_Engine.ysl2 $< + $(YML2_PROC) -y gen_cpp_Engine.ysl2 $< throw_pEp_exception.cc throw_pEp_exception.hh: pEp.yml2 gen_throw_pEp_exception.ysl2 textutils.ysl2 - yml2proc -y gen_throw_pEp_exception.ysl2 $< -o throw_pEp_exception.cc + $(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 .PHONY: clean - clean: rm -f $(JAR) $(LIBRARY) $(SHARED) rm -f *.o @@ -89,4 +125,3 @@ clean: rm -f org/pEp/jniadapter/Color.java rm -f throw_pEp_exception.* rm -f org_pEp_jniadapter_Message.cc org_pEp_jniadapter_Engine.cc - diff --git a/src/Makefile.conf b/src/Makefile.conf index 567b8ad..f609ceb 100644 --- a/src/Makefile.conf +++ b/src/Makefile.conf @@ -1,3 +1,68 @@ -CXXFLAGS=-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/darwin -I$(HOME)/include -fpermissive -LDFLAGS=-L$(HOME)/lib -SHARED=libpEpJNI.dylib +# Copyright 2018, pEp Foundation +# This file is part of pEp JNI Adapter +# This file may be used under the terms of the GNU General Public License version 3 +# see LICENSE.txt + +######### Header ######### +HERE:=$(dir $(lastword $(MAKEFILE_LIST))) + + +######### General ######### +BUILD_FOR:=$(shell uname) + + +######### Java ######### +#JAVA_HOME= + + +######### C and C++ ######### +LDFLAGS=$(AD_INC) $(ENGINE_INC) + + +######### C++ ######### +ifeq ($(BUILD_FOR),Linux) + CXX=g++ -std=c++14 +else ifeq ($(BUILD_FOR),Darwin) + CXX=clang -std=c++14 +endif + +ifeq ($(BUILD_FOR),Linux) + CXXFLAGS=-fdiagnostics-color=always -fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux $(AD_INC) $(ENGINE_INC) +else ifeq ($(BUILD_FOR),Darwin) + CXXFLAGS=-fcolor-diagnostics -fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/darwin $(AD_INC) $(ENGINE_INC) +endif + + +######### YML2 ######### +YML2_PATH=$(HOME)/yml2 + +YML2_PROC=$(YML2_PATH)/yml2proc $(YML2_OPTS) + +YML2_OPTS=--encoding=utf8 + + +######### Engine ######### +ENGINE_LIB= +#ENGINE_LIB=-L$(HOME)/local/lib + +ENGINE_INC= +#ENGINE_INC=-I$(HOME)/local/inc + + +######### libAdapter ######### +AD_LIB= +#AD_LIB=-L$(HOME)/local/lib + +AD_INC= +#AD_INC=-I$(HOME)/local/inc + + +######### Footer ######### +-include $(HERE)/local.conf + +ifdef BUILD_CONFIG + include $(BUILD_CONFIG) +endif + +# YML_PATH is needed in the environment of every call to a program of the YML2 distribution +export YML_PATH=$(YML2_PATH)