1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# Common chapter build mechanics. Chapter Makefiles add only their own features.
SHELL := /bin/bash
.DEFAULT_GOAL := default
.DELETE_ON_ERROR:
.NOTINTERMEDIATE:
java_rules := $(lastword $(MAKEFILE_LIST))
BUILD_SUPPORT := $(patsubst %/,%,$(dir $(java_rules)))
SIMPLE := com/seaofnodes/simple
SRC := src/main/java
TST := src/test/java
CLZDIR ?= build/classes
JAVAC_ARGS ?= -g
SEP := $(if $(filter Windows_NT,$(OS)),;,:)
CTAGS := $(shell command -v ctags 2>/dev/null)
include $(BUILD_SUPPORT)/libraries.mk
library_rules := $(lastword $(MAKEFILE_LIST))
# Explicit paths/prerequisites: a missing JAR must not disappear from the classpath.
space := $() $()
libs := $(required_jars)
jars := $(subst $(space),$(SEP),$(libs))
main_javas := $(wildcard $(SRC)/$(SIMPLE)/*.java $(SRC)/$(SIMPLE)/*/*.java $(SRC)/$(SIMPLE)/node/cpus/*/*.java)
test_javas := $(wildcard $(TST)/$(SIMPLE)/*.java $(TST)/$(SIMPLE)/*/*.java)
include $(firstword $(wildcard ../graph/graph.mk graph/graph.mk))
include $(firstword $(wildcard ../print/print.mk print/print.mk))
ifeq ($(USE_ISA),1)
include $(firstword $(wildcard ../isa/isa.mk isa/isa.mk))
endif
main_classes := $(CLZDIR)/main/.mtag
test_classes := $(CLZDIR)/test/.ttag
simple_driver := $(TST)/$(SIMPLE)/Simple.java
test_cp = $(patsubst $(TST)/$(SIMPLE)/%.java,com.seaofnodes.simple.%,$(wildcard $(TST)/$(SIMPLE)/*Test.java)) $(EXTRA_TESTS)
JVM = nice java -ea -cp "$(CLZDIR)/main$(SEP)$(jars)$(SEP)$(CLZDIR)/test"
.PHONY: default build tests fuzzer tags clean release
DEFAULT_TARGETS ?= tests
default: $(DEFAULT_TARGETS) $(if $(CTAGS),tags)
build: $(main_classes)
print-%: ; @echo $* = $($*)
# Compile a complete source set once, including shared sources. Per-class rules
# and collecting only changed files left stale dependents in several chapters.
$(CLZDIR)/main $(CLZDIR)/test:
@mkdir -p $@
$(main_classes): $(main_javas) $(required_jars) Makefile $(java_rules) $(library_rules) | $(CLZDIR)/main
$(file >$(CLZDIR)/main.sources,$(main_javas))
@echo "compiling main " $(words $(main_javas)) " files"
@if ! javac $(JAVAC_ARGS) -cp "$(CLZDIR)/main$(SEP)$(jars)" -sourcepath $(SRC) -d $(CLZDIR)/main @$(CLZDIR)/main.sources >$(CLZDIR)/main.javac.log 2>&1; then cat $(CLZDIR)/main.javac.log; exit 1; fi
@touch $@
$(test_classes): $(test_javas) $(isa_test_javas) $(main_classes) $(required_jars) Makefile $(java_rules) $(library_rules) | $(CLZDIR)/test
$(file >$(CLZDIR)/test.sources,$(test_javas) $(isa_test_javas))
@echo "compiling test " $(words $(test_javas) $(isa_test_javas)) " files"
@if ! javac $(JAVAC_ARGS) -cp "$(CLZDIR)/test$(SEP)$(CLZDIR)/main$(SEP)$(jars)" -sourcepath $(TST) -d $(CLZDIR)/test @$(CLZDIR)/test.sources >$(CLZDIR)/test.javac.log 2>&1; then cat $(CLZDIR)/test.javac.log; exit 1; fi
@touch $@
ifneq ($(CUSTOM_TESTS),1)
tests: $(test_classes)
@mkdir -p build/objs
@$(JVM) org.junit.runner.JUnitCore $(test_cp)
ifneq ($(wildcard $(TST)/$(SIMPLE)/FuzzerWrap.java),)
tests: fuzzer
endif
endif
ifneq ($(wildcard $(TST)/$(SIMPLE)/FuzzerWrap.java),)
fuzzer: $(test_classes)
@$(JVM) org.junit.runner.JUnitCore com.seaofnodes.simple.FuzzerWrap
endif
ifneq ($(CUSTOM_RELEASE),1)
include $(BUILD_SUPPORT)/chapter-release.mk
endif
tags: TAGS
TAGS: $(main_javas) $(test_javas)
@$(CTAGS) -e --recurse=yes --fields=+fksaiS $(SRC) $(TST)
clean:
rm -rf build
rm -f TAGS
|