pEpJNIAdapter/Makefile.conf

87 lines
2.6 KiB
Makefile

# 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
HERE:=$(dir $(lastword $(MAKEFILE_LIST)))
PLATFORM:=$(shell uname | tr A-Z a-z)
JAVAC_CMD=javac -encoding UTF-8
JAVAH_CMD=javah -encoding UTF-8
# DEV ENV PATHS & CFG
# The build settings are set to a default value which can be overridden by using ./local.conf
######### DEFAULTS #########
DEBUG=0
PREFIX=$(HOME)
YML2_PATH=$(PREFIX)/src/yml2
YML2_PROC=$(YML2_PATH)/yml2proc $(YML2_OPTS)
YML2_OPTS=--encoding=utf8
### Guessing JAVA_HOME
ifeq ($(PLATFORM),linux)
JAVA_HOME=$(subst /bin,,$(dir $(realpath /usr/bin/javac)))
endif
######### Overrides from the config file(s) #########
ifneq ("$(wildcard $(HERE)local.conf)","")
$(info including: $(HERE)local.conf)
-include $(HERE)local.conf
else
$(info Optional build config not found: $(HERE)local.conf)
endif
### Apply config
ifndef JAVA_HOME
$(error JAVA_HOME is not set!)
endif
# Guessing USE_JAVAH
# cant be guessed earlier, because it depends on JAVA_HOME which can be set in the local.conf
# Old versions of a Java distribution have a `javah` binary, new version do not and the replacement is "javac -h"
# TODO: dont check for presence of javah, but check if javac -h is supported, because some java (RHEL) has javah but supports javac -h (and javac -h is preferred)
ifndef USE_JAVAH
DUMMY:=$(shell which $(JAVA_HOME)/bin/javah)
ifeq ($(.SHELLSTATUS),0)
USE_JAVAH=1
endif
endif
JAVA_BIN_DIR=$(JAVA_HOME)/bin
######### C and C++ #########
CXXFLAGS+=-O0 -std=c++11 -fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(PLATFORM) -I$(PREFIX)/include -I$(PREFIX)/include/pEp
LDFLAGS+=-shared -L$(PREFIX)/lib
LDLIBS=-lstdc++ -lpEpEngine -lpEpAdapter -lpEpCxx11
ifneq (,$(findstring g++,$(CXX)))
CXXFLAGS+=-fdiagnostics-color=always
else ifneq (,$(findstring clang,$(CXX)))
CXXFLAGS+=-fcolor-diagnostics
endif
### Debug or Release build
ifeq ($(DEBUG),1)
$(info Debug build (set DEBUG=0 for release build))
CXXFLAGS+=-g -O3
else
$(info Release Build (set DEBUG=1 for debug build))
CXXFLAGS+=-DNDEBUG=1 -O3
endif
### YML_PATH is needed in the environment of every call to a program of the YML2 distribution
export YML_PATH=$(YML2_PATH)
# BEGIN // kryptic hack to to replace a space with a newline
# $(subst ${ },${space}, whatever)
# maybe not well known: define/endef is custom makefile function definition
null :=
space := ${null} ${null}
${space} := ${space}
define \n
endef
# END // kryptic hack to to replace a space with a newline