chiark / gitweb /
Makefile: Move all artifacts into a subdirectory.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 3 Jun 2018 13:26:41 +0000 (14:26 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 3 Jun 2018 13:28:50 +0000 (14:28 +0100)
.gitignore
Makefile

index d0f608a5320f70adb9c33256915d75486553a080..b82f8dcb30d06dd7c5cce28ab8520d6e5b868351 100644 (file)
@@ -3,3 +3,4 @@
 *.o
 *.so
 *.stamp
+/out/
index ff2a65c0723d05e12dd348b7abb7c3729ce4d7fe..d99d6bd2d41acc58ea2a5c76b1ffa11961337447 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -36,50 +36,54 @@ SCALAFLAGS          += -Yno-load-impl-class
 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