rough work in progress; may not build
[tripe-android] / Makefile
1 ### -*-makefile-*-
2
3 V = 0
4 v_tag = $(call v_tag_$V,$1)
5 v_tag_0 = @printf " %-8s %s\n" "$1" "$@";
6 V_AT = $(V_AT_$V)
7 V_AT_0 = @
8
9 JDK = /usr/lib/jvm/default-java
10 JDK_PLAT = linux
11 INCLUDES = $(JDK)/include $(JDK)/include/$(JDK_PLAT)
12
13 PKGS = mLib catacomb
14 PKGS_CFLAGS := $(foreach p,$(PKGS),$(shell pkg-config --cflags $p))
15 PKGS_LIBS := $(foreach p,$(PKGS),$(shell pkg-config --libs $p))
16
17 CC = gcc
18 CFLAGS = -O2 -g -Wall -pedantic -Werror \
19 -fPIC $(addprefix -I,$(INCLUDES))
20 CFLAGS += $(PKGS_CFLAGS)
21
22 LD = gcc
23 LIBS = $(PKGS_LIBS)
24 LDFLAGS.so = -shared
25
26 JAVAC = javac
27 JAVAFLAGS =
28
29 SCALAC = fsc
30 SCALAFLAGS = -optimise -Xlint -Xlint:-package-object-classes \
31 -Yinline-warnings:false
32
33 ## Hack around https://issues.scala-lang.org/browse/SI-9689
34 SCALAFLAGS += -Yno-load-impl-class
35
36 all::
37 .PHONY: all
38
39 %.o: %.c
40 $(call v_tag,CC)$(CC) -c $(CFLAGS) -MMD -o$@ $<
41 CLEANFILES += *.o *.d
42
43 CLASSDIR = cls/
44 %.stamp: %.java
45 $(call v_tag,JAVAC)mkdir -p $(CLASSDIR) && \
46 $(JAVAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(JAVAFLAGS) $< && \
47 echo built >$@
48 $(V_AT)$(SCALAC) -reset
49 %.stamp: %.scala
50 $(call v_tag,SCALAC)mkdir -p $(CLASSDIR) && \
51 $(SCALAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(SCALAFLAGS) $< && \
52 echo built >$@
53 CLEANFILES += *.stamp
54 clean::; rm -rf $(CLASSDIR)
55
56 objects = $(patsubst %.c,%$2,$1)
57
58 TARGETS += libtoy.so
59 libtoy.so_SOURCES = jni.c
60 libtoy.so: $(call objects,$(libtoy.so_SOURCES),.o)
61 $(call v_tag,LD)$(LD) $(LDFLAGS.so) -o$@ $^ $(LIBS)
62
63 TARGETS += util.stamp
64
65 TARGETS += sys.stamp
66 sys.stamp: util.stamp
67
68 TARGETS += admin.stamp
69 admin.stamp: sys.stamp util.stamp
70
71 TARGETS += tar.stamp
72 tar.stamp: sys.stamp util.stamp
73
74 TARGETS += keys.stamp
75 keys.stamp: tar.stamp sys.stamp util.stamp
76
77 TARGETS += main.stamp
78 main.stamp: sys.stamp
79
80 all:: $(TARGETS)
81 ALLSOURCES += $(foreach t,$(TARGETS),$($t_SOURCES))
82
83 clean::; rm -f $(CLEANFILES) $(TARGETS)
84 .PHONY: clean
85
86 -include $(call objects,$(ALLSOURCES),.d)