Q := @ ifeq ($(Q),@) MSG := echo else MSG := true endif QMSG := @$(MSG) SOURCEPATH := $(TOP_DIR)/src OUTPATH := $(TOP_DIR)/classes JAVA := $(shell find $(SOURCEPATH) -name "*.java") CLASSES := $(subst $(SOURCEPATH),$(OUTPATH),$(patsubst %.java,%.class,$(JAVA))) CLASSPATH := $(OUTPATH):$(TOP_DIR)/lib/junit4-4.3.1.jar ################################################################## # Compiling # .PHONY: classes # The funky dependency prevents make from trying to build each class # individually, since the build process for one class actually builds # all fo them. classes: $(word 1,$(CLASSES)) $(CLASSES): $(JAVA) $(Q) if [[ ! -d $(OUTPATH) ]]; then \ $(MSG) '[ mkdir]' $(OUTPATH); mkdir $(OUTPATH); \ fi $(Q) for c in `find $(OUTPATH) -name "*.class"`; do \ if ! echo $(CLASSES) | grep -q `echo $$c | sed -e 's/$$.*\.class/.class/'`; then \ $(MSG) '[ rm]' $$c; rm $$c; \ fi; \ done # $(QMSG) '[ javac]' $(JAVA:$(SOURCEPATH)/%=%) $(QMSG) '[ javac]' '**/*.java' $(Q) javac -sourcepath $(SOURCEPATH) \ -d $(OUTPATH) \ -classpath $(CLASSPATH) \ -Xlint:unchecked,deprecation \ -g \ $(JAVA) ################################################################## # Running # .PHONY: bsh bsh: classes CLASSPATH=$(CLASSPATH) bsh .PHONY: test test: classes $(Q) \ set -e; \ PKG=$$(PKG=; \ SPWD=$$PWD; \ while [[ ! $$PWD -ef $$SPWD/$(SOURCEPATH) ]]; do \ if [[ $$PWD -ef / ]]; then PKG=/; break; fi; \ PKG=`basename $$PWD`.$$PKG; cd ..; \ done; \ echo $$PKG); \ ROOT=; \ if [[ $$PKG == / ]]; then cd src; ROOT=true; PKG=; fi; \ TESTS=`find . -name "*Test.java" | sed "s,./,$$PKG, ; s,/,.,g ; s,\\.java,,"`; \ $(MSG) '[ junit]' $$TESTS; \ if [[ $$ROOT == true ]]; then cd ..; fi; \ java -ea -classpath $(CLASSPATH) anastore.util.JUnitRunner $$TESTS .PHONY: testauspex testauspex: classes java -ea -cp $(CLASSPATH) -XX:+PrintGC \ traces.Auspex $(TOP_DIR)/traces/auspex/short.gz ################################################################## # Auspex traces # AUSPEX_JAVA_ARGS=-ea -cp $(CLASSPATH) -Xmx512m AUSPEX_FILE=$(TOP_DIR)/traces/auspex/short.gz AUSPEX_ARGS=$(AUSPEX_FILE) 20000-oc-retry-ro-2.0 .PHONY: runauspex runauspex: classes rm -rf /tmp/anastore-cache java $(AUSPEX_JAVA_ARGS) traces.TraceRunner $(AUSPEX_ARGS) .PHONY: runauspex-hprof runauspex-hprof: classes rm -rf /tmp/anastore-cache java $(AUSPEX_JAVA_ARGS) -Xrunhprof:heap=dump,format=b \ traces.TraceRunner $(AUSPEX_ARGS) .PHONY: runauspex-pprof runauspex-pprof: classes rm -rf /tmp/anastore-cache java $(AUSPEX_JAVA_ARGS) -Xrunhprof:cpu=samples \ traces.TraceRunner $(AUSPEX_ARGS) .PHONY: runauspex-debug runauspex-debug: classes rm -rf /tmp/anastore-cache java $(AUSPEX_JAVA_ARGS) \ -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y \ traces.TraceRunner $(AUSPEX_ARGS) ################################################################## # Report # REPORT_DIR=$(TOP_DIR)/doc/report -include $(REPORT_DIR)/.deps $(REPORT_DIR)/report.pdf: $(QMSG) '[ rubber] report.tex' $(Q) cd $(REPORT_DIR) && rubber --pdf -Wrefs -Wmisc report.tex $(QMSG) '[ rubber] report.tex deps' $(Q) cd $(REPORT_DIR) && \ rubber-info --pdf --deps report.tex | \ awk '{print "$$(TOP_DIR)/doc/report/report.pdf: " $$0; \ for(i=1; i<=NF; i++) print $$i ":" }' > .deps .PHONY: reportdata reportdata: \ $(REPORT_DIR)/data/stats-50000-oc-retry-ro-2.0 \ $(REPORT_DIR)/data/stats-50000-oc-retry-rw $(REPORT_DIR)/data/stats-%: classes rm -rf /tmp/anastore-cache java $(AUSPEX_JAVA_ARGS) traces.TraceRunner $(AUSPEX_FILE) $* $@ 2>&1 | \ tee $(REPORT_DIR)/data/log-$* ################################################################## # Misc # .PHONY: javadoc javadoc: $(QMSG) '[ javadoc]' '-package' '**/*.java' $(Q) javadoc -classpath $(CLASSPATH) \ -d $(TOP_DIR)/doc/javadoc -package \ $(JAVA) .PHONY: clean clean: rm -rf $(OUTPATH)