87 lines
2.6 KiB
Makefile
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
|