Check that `grade' reports are perfect.
[pintos-anon] / tests / Makefile
1 TESTS = threads p1 userprog p2 vm p3 filesys p4
2
3 PATH := $(shell pwd)/../src/utils:$(PATH)
4
5 all:
6         @echo "This Makefile has only \`check' targets."
7
8 check:
9         $(MAKE) -C .. distclean
10         for d in $(TESTS); do $(MAKE) $$d || exit 1; done
11         @echo All tests passed.
12
13 clean:
14         rm -rf $(TESTS)
15
16 SUBMAKEFLAGS = -s
17
18 define mk-sandbox
19 rm -rf $@ && mkdir $@ && cp -R ../src $@/src
20 cd $@/src && $(MAKE) clean $(SUBMAKEFLAGS)
21 endef
22
23 define run-tests
24 cd $@/src/$(PROJECT) && $(MAKE) check
25 endef
26
27 define run-tests-grade
28 cd $@/src/$(PROJECT) && $(MAKE) check
29 cd $@/src/$(PROJECT) && $(MAKE) grade && grep -q PERFECT build/grade
30 endef
31
32 define compile
33 cd $@/src/$(PROJECT) && $(MAKE)
34 endef
35
36 define clean
37 rm -rf $@
38 endef
39
40 define apply-patch
41 (cd $@ && patch -p0)
42 endef
43
44 PROJECT = $@
45
46 threads::
47         $(mk-sandbox)
48         $(compile)
49         $(run-tests) TESTS=tests/threads/alarm-single
50         $(clean)
51
52 userprog vm filesys::
53         $(mk-sandbox)
54         $(compile)
55         $(clean)
56
57 FAST_SIM := $(if $(shell which qemu),--qemu)
58 export PINTOSOPTS
59
60 p1: PROJECT = threads
61 p1::
62         $(mk-sandbox)
63         $(apply-patch) < ../solutions/p1.patch
64         $(run-tests-grade)
65         $(clean)
66
67 p2: PROJECT = userprog
68 p2: PINTOSOPTS = $(FAST_SIM)
69 p2::
70         $(mk-sandbox)
71         $(apply-patch) < ../solutions/p2.patch
72         $(run-tests-grade)
73         $(clean)
74
75 p3: PROJECT = vm
76 p3: PINTOSOPTS = $(FAST_SIM)
77 p3::
78         $(mk-sandbox)
79         $(apply-patch) < ../solutions/p3.patch
80         $(run-tests-grade)
81         $(clean)
82
83 p4: PROJECT = filesys
84 p4: PINTOSOPTS = $(FAST_SIM)
85 p4::
86         $(mk-sandbox)
87         $(apply-patch) < ../solutions/p4.patch
88         $(run-tests-grade)
89         $(clean)