Commit | Line | Data |
---|---|---|
3a2f1a4b MW |
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 | ||
ac8e32b7 | 9 | JDK = /usr/lib/jvm/default-java |
3a2f1a4b MW |
10 | JDK_PLAT = linux |
11 | INCLUDES = $(JDK)/include $(JDK)/include/$(JDK_PLAT) | |
12 | ||
8eabb4ff MW |
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 | ||
3a2f1a4b | 17 | CC = gcc |
c8292b34 MW |
18 | CFLAGS = -O2 -g -Wall -pedantic -Werror \ |
19 | -fPIC $(addprefix -I,$(INCLUDES)) | |
8eabb4ff | 20 | CFLAGS += $(PKGS_CFLAGS) |
3a2f1a4b MW |
21 | |
22 | LD = gcc | |
8eabb4ff | 23 | LIBS = $(PKGS_LIBS) |
3a2f1a4b MW |
24 | LDFLAGS.so = -shared |
25 | ||
26 | JAVAC = javac | |
b4cf5ec4 | 27 | JAVAFLAGS = |
3a2f1a4b | 28 | |
81502866 | 29 | SCALAC = fsc |
c8292b34 MW |
30 | SCALAFLAGS = -optimise -Xlint -Xlint:-package-object-classes \ |
31 | -Yinline-warnings:false | |
3a2f1a4b | 32 | |
8eabb4ff MW |
33 | ## Hack around https://issues.scala-lang.org/browse/SI-9689 |
34 | SCALAFLAGS += -Yno-load-impl-class | |
35 | ||
3a2f1a4b MW |
36 | all:: |
37 | .PHONY: all | |
38 | ||
2812483e | 39 | OUTDIR = out/ |
3a2f1a4b | 40 | |
2812483e MW |
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 | |
2a02a846 MW |
48 | $(call v_tag,JAVAC)mkdir -p $(CLASSDIR) && \ |
49 | $(JAVAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(JAVAFLAGS) $< && \ | |
50 | echo built >$@ | |
8eabb4ff | 51 | $(V_AT)$(SCALAC) -reset |
2812483e | 52 | $(OUTDIR)%.stamp: %.scala |
2a02a846 MW |
53 | $(call v_tag,SCALAC)mkdir -p $(CLASSDIR) && \ |
54 | $(SCALAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(SCALAFLAGS) $< && \ | |
55 | echo built >$@ | |
2812483e | 56 | CLEANFILES += $(OUTDIR)*.stamp |
2a02a846 | 57 | clean::; rm -rf $(CLASSDIR) |
3a2f1a4b | 58 | |
2812483e | 59 | objects = $(patsubst %.c,$(OUTDIR)%$2,$1) |
3a2f1a4b | 60 | |
2812483e | 61 | TARGETS += $(OUTDIR)libtoy.so |
3a2f1a4b | 62 | libtoy.so_SOURCES = jni.c |
2812483e | 63 | $(OUTDIR)libtoy.so: $(call objects,$(libtoy.so_SOURCES),.o) |
8eabb4ff MW |
64 | $(call v_tag,LD)$(LD) $(LDFLAGS.so) -o$@ $^ $(LIBS) |
65 | ||
2812483e MW |
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)) | |
3a2f1a4b MW |
80 | |
81 | all:: $(TARGETS) | |
82 | ALLSOURCES += $(foreach t,$(TARGETS),$($t_SOURCES)) | |
83 | ||
2812483e MW |
84 | repl: $(TARGETS) |
85 | scala -cp $(CLASSDIR) -Djava.library.path=$(OUTDIR) | |
86 | ||
3a2f1a4b MW |
87 | clean::; rm -f $(CLEANFILES) $(TARGETS) |
88 | .PHONY: clean | |
89 | ||
90 | -include $(call objects,$(ALLSOURCES),.d) |