summaryrefslogtreecommitdiff
path: root/chapter25/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'chapter25/Makefile')
-rw-r--r--chapter25/Makefile160
1 files changed, 43 insertions, 117 deletions
diff --git a/chapter25/Makefile b/chapter25/Makefile
index 954a22a5..e02c8096 100644
--- a/chapter25/Makefile
+++ b/chapter25/Makefile
@@ -15,7 +15,6 @@
# run the tests
#
# make tests
-# make test CLASS=Chapter25Test METHOD=testHelloWorldNoInline
#######################################################
#
@@ -64,39 +63,19 @@ TST := src/test/java
CLZDIR:= build/classes
main_javas := $(wildcard $(SRC)/$(SIMPLE)/*java $(SRC)/$(SIMPLE)/*/*java $(SRC)/$(SIMPLE)/node/cpus/*/*java)
test_javas := $(wildcard $(TST)/$(SIMPLE)/*java $(TST)/$(SIMPLE)/*/*java)
-simple_driver := $(TST)/$(SIMPLE)/Simple.java
main_classes := $(patsubst $(SRC)/%java,$(CLZDIR)/main/%class,$(main_javas))
include $(firstword $(wildcard ../graph/graph.mk graph/graph.mk))
include $(firstword $(wildcard ../print/print.mk print/print.mk))
include $(firstword $(wildcard ../isa/isa.mk isa/isa.mk))
test_classes := $(patsubst $(TST)/%java,$(CLZDIR)/test/%class,$(test_javas))
-# These tests do not rely on the stdlib
-test_alone := com.seaofnodes.simple.BrainFuckTest com.seaofnodes.simple.MergeSortTest com.seaofnodes.simple.TypeTest
-test_raw_nums0 := 01 02 03 04 05 06 07 08 09 10 12 13 14Float 14 15 16 17a 17b 18 19 20 21
-test_raw_nums1 := 22 23 24
-# These tests DO rely on the stdlib
-test_raw_sys := 25
-
-# Convert chapter numbers to test files
-test_raw0 := $(patsubst %,com.seaofnodes.simple.Chapter%Test,$(test_raw_nums0))
-test_raw1 := $(patsubst %,com.seaofnodes.simple.Chapter%Test,$(test_raw_nums1))
-test_sys := $(patsubst %,com.seaofnodes.simple.Chapter%Test,$(test_raw_sys) )
-# All the 'src/test/java' files ending in 'Test'
-test_cp0 := $(patsubst $(TST)/$(SIMPLE)/%.java,com.seaofnodes.simple.%,$(wildcard $(TST)/$(SIMPLE)/*Test.java))
-# Minus raw0, raw1, alone tests
-test_cp1 := $(filter-out $(test_raw0) ,$(test_cp0))
-test_cp2 := $(filter-out $(test_raw1) ,$(test_cp1))
-test_cp3 := $(filter-out $(test_alone),$(test_cp2))
-test_cp4 := $(filter-out com.seaofnodes.simple.Chapter25Test,$(test_cp3))
-test_cp := $(filter-out $(test_sys) ,$(test_cp4))
-# All the classes to compile
+test_cp := $(patsubst $(TST)/$(SIMPLE)/%.java,com.seaofnodes.simple.%,$(wildcard $(TST)/$(SIMPLE)/*Test.java)) com.seaofnodes.simple.codegen.X86EncodingTest
classes = $(main_classes) $(test_classes)
# All the libraries
libs = $(wildcard lib/*jar)
jars = $(subst $(space),$(SEP),$(libs))
-default_targets := TAGS release tests
+default_targets := $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag
# Optionally add ctags to the default target if a reasonable one was found.
ifneq ($(CTAGS),)
default_targets += tags
@@ -104,129 +83,76 @@ endif
default: $(default_targets)
-.PHONY: build
-build: $(CLZDIR)/main/.mtag
-
#######################################################
-# Compile Java as a whole source set. javac tracks Java dependencies
-# internally, so compiling only the directly out-of-date .java files can leave
-# stale dependent .class files behind.
-$(CLZDIR)/main/.mtag: $(main_javas)
+# Compile the chapter and shared viewer sources together
+
+$(CLZDIR)/main/.mtag: $(main_javas) Makefile
@[ -d $(CLZDIR)/main ] || mkdir -p $(CLZDIR)/main
@# This crap is really just "javac", but with a beautiful error message.
@# The very very long list of java files is suppressed and counted.
@# The required output "Note: blah blah deprecated blah" is suppressed.
- $(file > .argsM.txt, $(main_javas))
- @echo "compiling main " `wc -w < .argsM.txt` " files"
- @if ! javac $(JAVAC_ARGS) -cp "$(CLZDIR)/main$(SEP)$(jars)" -sourcepath $(SRC) -d $(CLZDIR)/main @.argsM.txt >& .out.txt ; then \
+ $(file >.argsM.txt,$(main_javas))
+ @if [ ! -z "$(main_javas)" ] ; then \
+ echo "compiling main because " $< " and " `wc -w < .argsM.txt` " more files" ; \
+ if ! javac $(JAVAC_ARGS) -cp "$(CLZDIR)/main$(SEP)$(jars)" -sourcepath $(SRC) -d $(CLZDIR)/main $(main_javas) >& .out.txt ; then \
cat .out.txt ; \
exit 1; \
+ fi ; \
+ rm -rf .out.txt ; \
fi
- @rm -rf .out.txt
@touch $(CLZDIR)/main/.mtag
@rm -f .argsM.txt
+$(main_classes): $(CLZDIR)/main/.mtag
+
+
#######################################################
-$(CLZDIR)/test/.ttag: $(test_javas) $(isa_test_javas) $(CLZDIR)/main/.mtag
+OODT := $(isa_test_javas)
+$(CLZDIR)/test/.ttag: $(test_classes) $(test_javas) $(isa_test_javas) $(CLZDIR)/main/.mtag
@[ -d $(CLZDIR)/test ] || mkdir -p $(CLZDIR)/test
- $(file > .argsT.txt, $(test_javas) $(isa_test_javas))
- @echo "compiling test " `wc -w < .argsT.txt` " files"
- @if ! javac $(JAVAC_ARGS) -cp "$(CLZDIR)/test$(SEP)$(CLZDIR)/main$(SEP)$(jars)" -sourcepath $(TST) -d $(CLZDIR)/test @.argsT.txt >& .out.txt ; then \
+ $(file >.argsT.txt,$(OODT))
+ @if [ ! -z "$(OODT)" ] ; then \
+ echo "compiling test because " $< " and " `wc -w < .argsT.txt` " more files" ; \
+ if ! javac $(JAVAC_ARGS) -cp "$(CLZDIR)/test$(SEP)$(CLZDIR)/main$(SEP)$(jars)" -sourcepath $(TST) -d $(CLZDIR)/test $(OODT) >& .out.txt ; then \
cat .out.txt ; \
exit 1; \
+ fi ; \
+ rm -rf .out.txt ; \
fi
- @rm -rf .out.txt
@touch $(CLZDIR)/test/.ttag
@rm -f .argsT.txt
-#######################################################
-
-# Default Simple .o target is build/objs which is where all the test .o's get
-# dumped. The default sys search needs to NOT include all the dumped test
-# files; move it down into lib/
-OBJS:= build/objs
-SYS_SMPS:= $(wildcard src/main/smp/*.smp src/main/smp/*/*.smp src/main/smp/*/*/*.smp)
-CPU_PORT:= x86_64_v2
-CALL_CONV:= $(if $(filter Windows_NT,$(OS)),win64,SystemV)
-CPU_ABI:= $(CPU_PORT)_$(CALL_CONV)
-RELEASE:= build/release
-TEST_SYS:= $(OBJS)/lib_$(CPU_ABI)/sys.o
-RELEASE_SYS:= $(RELEASE)/$(CPU_ABI)/sys.o
-RELEASE_CRT:= $(RELEASE)/$(CPU_ABI)/simple_crt.o
-C_CALL_CONV:= $(if $(filter win64,$(CALL_CONV)),ms_abi,sysv_abi)
-
-$(TEST_SYS): $(CLZDIR)/main/.mtag $(simple_driver) $(SYS_SMPS) | $(CLZDIR)/test/.ttag
- @echo "simping " $@
- @$(JVM) com.seaofnodes.simple.Simple --cpu $(CPU_PORT) --abi $(CALL_CONV) --norun -o $@ src/main/smp/sys.smp
-
-$(RELEASE_SYS): $(OBJS)/lib_$(CPU_ABI)/sys.o
- @echo "copying " $@
- @[ -d $(dir $@) ] || mkdir -p $(dir $@)
- @cp $< $@
-
-$(RELEASE_CRT): src/main/c/simple_crt.c
- @echo "compiling " $@
- @[ -d $(dir $@) ] || mkdir -p $(dir $@)
- @gcc -c -O2 -DCALL_CONV=$(C_CALL_CONV) -o $@ $<
+# Collect just the out-of-date files
+$(test_classes): $(CLZDIR)/test/%class: $(TST)/%java
+ $(eval OODT += $$<)
#######################################################
# Base launch line for JVM tests
JVM=nice java -ea -cp "$(CLZDIR)/main${SEP}${jars}${SEP}$(CLZDIR)/test"
-# Tests that do NOT need sys.smp
-tests_raw0: $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag $(RELEASE_CRT)
- @echo "testing " $(test_raw0)
- @[ -d $(OBJS) ] || mkdir -p $(OBJS)
- @$(JVM) org.junit.runner.JUnitCore $(test_raw0)
-
-tests_raw1: $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag $(RELEASE_CRT)
- @echo "testing " $(test_raw1)
- @[ -d $(OBJS) ] || mkdir -p $(OBJS)
- @$(JVM) org.junit.runner.JUnitCore $(test_raw1)
-
-# Larger standalone tests, still JUnits, still no sys.smp
-tests_alone: $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag $(RELEASE_CRT)
- @echo "testing " $(test_alone)
- @[ -d $(OBJS) ] || mkdir -p $(OBJS)
- @$(JVM) org.junit.runner.JUnitCore $(test_alone)
-
-# Tests that DO need sys.smp
-tests_sys: $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag $(TEST_SYS) $(RELEASE_CRT)
- @echo "testing " $(test_sys)
- @[ -d $(OBJS) ] || mkdir -p $(OBJS)
- @$(JVM) org.junit.runner.JUnitCore $(test_sys)
-
-# One test method (or the whole class when METHOD is omitted).
-CLASS ?= Chapter25Test
-METHOD ?=
-.PHONY: test
-test: $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag $(TEST_SYS) $(RELEASE_CRT)
- @$(JVM) com.seaofnodes.simple.TestRunner "$(CLASS)" "$(METHOD)"
-fuzzer: $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag
- @echo "fuzzing "
- @$(JVM) org.junit.runner.JUnitCore com.seaofnodes.simple.FuzzerWrap
-
-tests: $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag tests_raw0 tests_raw1 tests_alone tests_sys fuzzer
- @echo "All tests"
- @[ -d $(OBJS) ] || mkdir -p $(OBJS)
+tests: $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag
+ @echo "testing " $(test_cp)
+ @[ -d build/objs ] || mkdir -p build/objs
@$(JVM) org.junit.runner.JUnitCore $(test_cp)
+ @$(JVM) org.junit.runner.JUnitCore com.seaofnodes.simple.FuzzerWrap
+fuzzer: $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag
+ @echo "fuzzing " $(test_cp)
+ @$(JVM) org.junit.runner.JUnitCore com.seaofnodes.simple.FuzzerWrap
-# Build a Simple jar and release stdlib
-release: build/release/Simple.jar $(RELEASE_SYS) $(RELEASE_CRT)
+# Build a Simple jar
+release: build/release/simple.jar
# Build a Simple jar
-build/release/Simple.jar: $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag
+build/release/simple.jar: $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag
@echo "jarring " $@ " because " $?
@[ -d $(dir $@) ] || mkdir -p $(dir $@)
- @printf "Main-Class: com.seaofnodes.simple.Simple\nClass-Path: ../../lib/junit-4.12.jar ../../lib/hamcrest-core-1.3.jar\n\n" > build/release/MANIFEST.MF
- @jar cfm $@ build/release/MANIFEST.MF -C $(CLZDIR)/main . -C $(CLZDIR)/test . -C $(SRC)/$(SIMPLE) . -C $(TST)/$(SIMPLE) .
+ @jar cf build/release/simple.jar -C $(CLZDIR)/main . -C $(CLZDIR)/test . -C $(SRC)/$(SIMPLE) . -C $(TST)/$(SIMPLE) .
-#######################################################
.PHONY: clean
clean:
rm -rf build
@@ -246,15 +172,15 @@ lib/hamcrest-core-1.3.jar:
@(cd lib; wget https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar)
# Build emacs tags (part of a tasty emacs ide experience)
-.PHONY: tags
-tags: TAGS
-
-TAGS: $(main_javas) $(test_javas)
+tags: $(main_javas) $(test_javas)
@rm -f TAGS
- @$(CTAGS) -e --recurse=yes --fields=+fksaiS $(SRC) $(TST)
+ @$(CTAGS) -e --recurse=yes --extra=+q --fields=+fksaiS $(SRC) $(TST)
-# Frozen earlier allocation cohorts, followed by Chapter 25's native tests.
-spill-stats: $(CLZDIR)/test/.ttag $(TEST_SYS) $(RELEASE_SYS) $(RELEASE_CRT)
+spill-stats: $(CLZDIR)/main/.mtag $(CLZDIR)/test/.ttag
+ @[ -d build/objs ] || mkdir -p build/objs
@$(JVM) com.seaofnodes.simple.SpillStats
.PHONY: spill-stats
+
+.PHONY: build
+build: $(CLZDIR)/main/.mtag