chiark / gitweb /
Makefile: Move all artifacts into a subdirectory.
[tripe-android] / Makefile
index c6391a17a385091777b8f921098cf47db57d9696..d99d6bd2d41acc58ea2a5c76b1ffa11961337447 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -10,50 +10,80 @@ 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                  = -O0 -g -Wall -fPIC $(addprefix -I,$(INCLUDES))
+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
+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
 
-%.o: %.c
-       $(call v_tag,CC)$(CC) -c $(CFLAGS) -MMD -o$@ $<
-CLEANFILES             += *.o *.d
-
-%.stamp: %.java
-       $(call v_tag,JAVAC)$(JAVAC) -d . $(JAVAFLAGS) $< && echo built >$@
-%.stamp: %.scala
-       $(call v_tag,SCALAC)$(SCALAC) -d . $(SCALAFLAGS) $< && echo built >$@
-CLEANFILES             += *.stamp
-clean::; rm -rf uk/
-
-objects                         = $(patsubst %.c,%$2,$1)
-
-TARGETS += libtoy.so
+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
-libtoy.so: $(call objects,$(libtoy.so_SOURCES),.o)
-       $(call v_tag,LD)$(LD) $(LDFLAGS.so) -o$@ $^
-
-TARGETS                        += jni.stamp
-
-TARGETS                        += sock.stamp
-sock.stamp: jni.stamp
-
-TARGETS                        += main.stamp
-main.stamp: jni.stamp sock.stamp
+$(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