From 2812483ebad8151c17366510fbc296983eb70b68 Mon Sep 17 00:00:00 2001 Message-Id: <2812483ebad8151c17366510fbc296983eb70b68.1713435960.git.mdw@distorted.org.uk> From: Mark Wooding Date: Sun, 3 Jun 2018 14:26:41 +0100 Subject: [PATCH] Makefile: Move all artifacts into a subdirectory. Organization: Straylight/Edgeware From: Mark Wooding --- .gitignore | 1 + Makefile | 56 +++++++++++++++++++++++++++++------------------------- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index d0f608a..b82f8dc 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ *.o *.so *.stamp +/out/ diff --git a/Makefile b/Makefile index ff2a65c..d99d6bd 100644 --- 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 -- [mdw]