chiark / gitweb /
d99d6bd2d41acc58ea2a5c76b1ffa11961337447
[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 OUTDIR                   = out/
40
41 out/%.o: %.c
42         $(call v_tag,CC)mkdir -p $(OUTDIR) && $(CC) -c $(CFLAGS) -MMD -o$@ $<
43 CLEANFILES              += $(OUTDIR)*.o $(OUTDIR)*.d
44
45 stamp                    = $(patsubst %,$(OUTDIR)%.stamp,$1)
46 CLASSDIR                 = $(OUTDIR)cls/
47 $(OUTDIR)%.stamp: %.java
48         $(call v_tag,JAVAC)mkdir -p $(CLASSDIR) && \
49                 $(JAVAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(JAVAFLAGS) $< && \
50                 echo built >$@
51         $(V_AT)$(SCALAC) -reset
52 $(OUTDIR)%.stamp: %.scala
53         $(call v_tag,SCALAC)mkdir -p $(CLASSDIR) && \
54                 $(SCALAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(SCALAFLAGS) $< && \
55                 echo built >$@
56 CLEANFILES              += $(OUTDIR)*.stamp
57 clean::; rm -rf $(CLASSDIR)
58
59 objects                  = $(patsubst %.c,$(OUTDIR)%$2,$1)
60
61 TARGETS += $(OUTDIR)libtoy.so
62 libtoy.so_SOURCES        = jni.c
63 $(OUTDIR)libtoy.so: $(call objects,$(libtoy.so_SOURCES),.o)
64         $(call v_tag,LD)$(LD) $(LDFLAGS.so) -o$@ $^ $(LIBS)
65
66 CLASSES                 += util
67 CLASSES                 += sys
68 sys_DEPS                 = util
69 CLASSES                 += admin
70 admin_DEPS               = sys util
71 CLASSES                 += tar
72 tar_DEPS                 = util
73 CLASSES                 += keys
74 keys_DEPS                = tar sys util
75 CLASSES                 += main
76 main_DEPS                = sys
77
78 $(foreach c,$(CLASSES),$(eval $(call stamp,$c): $(call stamp,$($c_DEPS))))
79 TARGETS                 += $(call stamp,$(CLASSES))
80
81 all:: $(TARGETS)
82 ALLSOURCES              += $(foreach t,$(TARGETS),$($t_SOURCES))
83
84 repl: $(TARGETS)
85         scala -cp $(CLASSDIR) -Djava.library.path=$(OUTDIR)
86
87 clean::; rm -f $(CLEANFILES) $(TARGETS)
88 .PHONY: clean
89
90 -include $(call objects,$(ALLSOURCES),.d)