all::
.PHONY: all
-%.o: %.c
- $(call v_tag,CC)$(CC) -c $(CFLAGS) -MMD -o$@ $<
-CLEANFILES += *.o *.d
+OUTDIR = out/
-CLASSDIR = cls/
-%.stamp: %.java
+out/%.o: %.c
+ $(call v_tag,CC)mkdir -p $(OUTDIR) && $(CC) -c $(CFLAGS) -MMD -o$@ $<
+CLEANFILES += $(OUTDIR)*.o $(OUTDIR)*.d
+
+stamp = $(patsubst %,$(OUTDIR)%.stamp,$1)
+CLASSDIR = $(OUTDIR)cls/
+$(OUTDIR)%.stamp: %.java
$(call v_tag,JAVAC)mkdir -p $(CLASSDIR) && \
$(JAVAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(JAVAFLAGS) $< && \
echo built >$@
$(V_AT)$(SCALAC) -reset
-%.stamp: %.scala
+$(OUTDIR)%.stamp: %.scala
$(call v_tag,SCALAC)mkdir -p $(CLASSDIR) && \
$(SCALAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(SCALAFLAGS) $< && \
echo built >$@
-CLEANFILES += *.stamp
+CLEANFILES += $(OUTDIR)*.stamp
clean::; rm -rf $(CLASSDIR)
-objects = $(patsubst %.c,%$2,$1)
+objects = $(patsubst %.c,$(OUTDIR)%$2,$1)
-TARGETS += libtoy.so
+TARGETS += $(OUTDIR)libtoy.so
libtoy.so_SOURCES = jni.c
-libtoy.so: $(call objects,$(libtoy.so_SOURCES),.o)
+$(OUTDIR)libtoy.so: $(call objects,$(libtoy.so_SOURCES),.o)
$(call v_tag,LD)$(LD) $(LDFLAGS.so) -o$@ $^ $(LIBS)
-TARGETS += util.stamp
-
-TARGETS += sys.stamp
-sys.stamp: util.stamp
-
-TARGETS += admin.stamp
-admin.stamp: sys.stamp util.stamp
-
-TARGETS += tar.stamp
-tar.stamp: sys.stamp util.stamp
-
-TARGETS += keys.stamp
-keys.stamp: tar.stamp sys.stamp util.stamp
-
-TARGETS += main.stamp
-main.stamp: sys.stamp
+CLASSES += util
+CLASSES += sys
+sys_DEPS = util
+CLASSES += admin
+admin_DEPS = sys util
+CLASSES += tar
+tar_DEPS = util
+CLASSES += keys
+keys_DEPS = tar sys util
+CLASSES += main
+main_DEPS = sys
+
+$(foreach c,$(CLASSES),$(eval $(call stamp,$c): $(call stamp,$($c_DEPS))))
+TARGETS += $(call stamp,$(CLASSES))
all:: $(TARGETS)
ALLSOURCES += $(foreach t,$(TARGETS),$($t_SOURCES))
+repl: $(TARGETS)
+ scala -cp $(CLASSDIR) -Djava.library.path=$(OUTDIR)
+
clean::; rm -f $(CLEANFILES) $(TARGETS)
.PHONY: clean