### -*-makefile-*- V = 0 v_tag = $(call v_tag_$V,$1) v_tag_0 = @printf " %-8s %s\n" "$1" "$@"; V_AT = $(V_AT_$V) V_AT_0 = @ JDK = /usr/lib/jvm/default-java JDK_PLAT = linux INCLUDES = $(JDK)/include $(JDK)/include/$(JDK_PLAT) PKGS = mLib catacomb PKGS_CFLAGS := $(foreach p,$(PKGS),$(shell pkg-config --cflags $p)) PKGS_LIBS := $(foreach p,$(PKGS),$(shell pkg-config --libs $p)) CC = gcc CFLAGS = -O2 -g -Wall -pedantic -Werror \ -fPIC $(addprefix -I,$(INCLUDES)) CFLAGS += $(PKGS_CFLAGS) LD = gcc LIBS = $(PKGS_LIBS) LDFLAGS.so = -shared JAVAC = javac JAVAFLAGS = SCALAC = fsc SCALAFLAGS = -optimise -Xlint -Xlint:-package-object-classes \ -Yinline-warnings:false ## Hack around https://issues.scala-lang.org/browse/SI-9689 SCALAFLAGS += -Yno-load-impl-class all:: .PHONY: all OUTDIR = out/ 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 $(OUTDIR)%.stamp: %.scala $(call v_tag,SCALAC)mkdir -p $(CLASSDIR) && \ $(SCALAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(SCALAFLAGS) $< && \ echo built >$@ CLEANFILES += $(OUTDIR)*.stamp clean::; rm -rf $(CLASSDIR) objects = $(patsubst %.c,$(OUTDIR)%$2,$1) TARGETS += $(OUTDIR)libtoy.so libtoy.so_SOURCES = jni.c $(OUTDIR)libtoy.so: $(call objects,$(libtoy.so_SOURCES),.o) $(call v_tag,LD)$(LD) $(LDFLAGS.so) -o$@ $^ $(LIBS) 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 -include $(call objects,$(ALLSOURCES),.d)