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 82 83 84 85 86 87 88 89 90
|
Description: Use make as buildsystem instead of Gradle to
avoid a circular dependencies between gradle and native-platform.
Author: Damien Raude-Morvan <drazzib@debian.org>
Author: gil cattaneo <puntogil@libero.it>
Last-Update: 2014-01-19
Forwarded: no
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,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)
|