1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
# Description: Use make as buildsystem instead of Gradle to
# avoid a circular dependencies between gradle and native-platform.
# This is very minimalistic Makefile so it will only work for
# Debian use case for now.
# Author: Damien Raude-Morvan <drazzib@debian.org>
# Adapted for Fedora by: gil cattaneo <puntogil@libero.it>
CXX ?= g++
STRIP ?= strip
JAVA_HOME ?= /usr/lib/default-java
JOPT_JAR ?= $(shell locate jopt-simple.jar)
JTARGET ?= 1.5
JSOURCE ?= 1.5
IDIR=src/main/headers
SRCDIR=src/main/cpp
JSRCDIR=src/main/java
BUILD=build
IGEN=$(BUILD)/headers
JCLASSESDIR=$(BUILD)/classes
JDOCDIR=$(BUILD)/docs/javadoc
ODIR=$(BUILD)/binaries
JAR=$(BUILD)/native-platform.jar
JAR_ARCH=$(BUILD)/native-platform-linux.jar
INCLUDE=-I$(IDIR) -I$(IGEN) -I/usr/include -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
_OBJ_STD = generic.o generic_posix.o linux.o osx.o posix.o win.o
_OBJ_CURSES = generic.o generic_posix.o curses.o
OBJ_STD = $(patsubst %,$(ODIR)/%,$(_OBJ_STD))
OBJ_CURSES = $(patsubst %,$(ODIR)/%,$(_OBJ_CURSES))
_JAVA = $(shell find $(JSRCDIR) -name "*.java" -print)
.PHONY: clean jar javadoc
build: $(ODIR)/libnative-platform.so $(ODIR)/libnative-platform-curses.so jar javadoc arch-jar
$(ODIR)/libnative-platform.so: $(OBJ_STD)
$(CXX) -shared -fPIC $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $^
$(STRIP) $@
$(ODIR)/libnative-platform-curses.so: $(OBJ_CURSES)
$(CXX) $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -lcurses -shared -fPIC -o $@ $^
$(STRIP) $@
$(JCLASSESDIR)/%.class: javafiles-list
mkdir -p $(JCLASSESDIR)
$(JAVA_HOME)/bin/javac -source $(JTARGET) -target $(JSOURCE) -d $(JCLASSESDIR) -classpath $(JOPT_JAR) @javafiles-list
javafiles-list: $(_JAVA)
echo $^ > javafiles-list
javadoc: javafiles-list
mkdir -p $(JDOCDIR)
$(JAVA_HOME)/bin/javadoc -d $(JDOCDIR) -classpath $(JOPT_JAR) @javafiles-list
jar: $(JCLASSESDIR)/%.class
mkdir -p $(JDOCDIR)
(cd $(JCLASSESDIR) ; $(JAVA_HOME)/bin/jar cf ../../$(JAR) .)
arch-jar: $(ODIR)/libnative-platform.so $(ODIR)/libnative-platform-curses.so
(cd $(ODIR) ; $(JAVA_HOME)/bin/jar cf ../../$(JAR_ARCH) *.so)
$(ODIR)/%.o: $(SRCDIR)/%.cpp $(IGEN)/native.h
mkdir -p $(ODIR)
$(CXX) $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(INCLUDE) -fPIC -c -o $@ $<
$(IGEN)/native.h: $(JCLASSESDIR)/%.class
mkdir -p $(IGEN)
$(JAVA_HOME)/bin/javah -o $(IGEN)/native.h -classpath $(JCLASSESDIR) \
net.rubygrapefruit.platform.internal.jni.NativeLibraryFunctions \
net.rubygrapefruit.platform.internal.jni.PosixFileFunctions \
net.rubygrapefruit.platform.internal.jni.PosixFileSystemFunctions \
net.rubygrapefruit.platform.internal.jni.PosixProcessFunctions \
net.rubygrapefruit.platform.internal.jni.PosixTerminalFunctions \
net.rubygrapefruit.platform.internal.jni.TerminfoFunctions \
net.rubygrapefruit.platform.internal.jni.WindowsConsoleFunctions \
net.rubygrapefruit.platform.internal.jni.WindowsHandleFunctions
clean:
-rm javafiles-list
-rm -Rf $(BUILD)
|