File: Makefile

package info (click to toggle)
libnative-platform-java 0.3~rc2-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 488 kB
  • ctags: 583
  • sloc: java: 1,652; cpp: 884; sh: 122; makefile: 78
file content (81 lines) | stat: -rw-r--r-- 2,962 bytes parent folder | download
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)