Clean better.
[pintos-anon] / tests / Makefile
1 TESTS = threads p1-1 p1-2 list stdlib stdio userprog p2 vm filesys
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 prep-threads-grading
19 endef
20
21 define prep-userprog-grading
22 $(MAKE) -C ../src/userprog $(SUBMAKEFLAGS)
23 $(MAKE) -C ../grading/userprog $(SUBMAKEFLAGS)
24 endef
25
26 define prep-vm-grading
27 $(MAKE) -C ../src/userprog $(SUBMAKEFLAGS)
28 $(MAKE) -C ../grading/vm $(SUBMAKEFLAGS)
29 endef
30
31 define prep-filesys-grading
32 $(MAKE) -C ../grading/filesys $(SUBMAKEFLAGS)
33 endef
34
35 define prep-grading
36 $(prep-$(PROJECT)-grading)
37 endef
38
39 define mk-sandbox
40 rm -rf $@ && mkdir -p $@/pintos && cp -R ../src $@/pintos
41 cd $@/pintos/src && $(MAKE) clean $(SUBMAKEFLAGS)
42 endef
43
44 define run-tests
45 cd $@ && ../../grading/$(PROJECT)/run-tests
46 endef
47
48 define clean
49 rm -rf $@
50 endef
51
52 define apply-patch
53 (cd $@/pintos && patch -p0)
54 endef
55
56 threads: PROJECT = threads
57 threads::
58         $(mk-sandbox)
59         $(run-tests) -d alarm-single
60         $(clean)
61
62 p1-1: PROJECT = threads
63 p1-1::
64         $(mk-sandbox)
65         $(apply-patch) < ../solutions/p1-1.patch
66         $(run-tests) -d alarm.*
67         $(clean)
68
69 p1-2: PROJECT = threads
70 p1-2::
71         $(mk-sandbox)
72         $(apply-patch) < ../solutions/p1-2.patch
73         $(run-tests) -d priority.*
74         $(clean)
75
76 list: PROJECT = threads
77 list stdlib stdio::
78         $(mk-sandbox)
79         cp ../src/tests/threads/$@.c $@/pintos/src/threads/test.c
80         $(MAKE) -C $@/pintos/src/threads $(SUBMAKEFLAGS)
81         -(cd $@/pintos/src/threads/build && pintos -v run -q) | tee $@/output
82         grep -q '$@: PASS' $@/output
83         $(clean)
84
85 userprog: PROJECT = userprog
86 userprog::
87         $(prep-grading) null.dsk
88         $(mk-sandbox)
89         $(apply-patch) < ../solutions/p2-null.patch
90         $(run-tests) null
91         $(clean)
92
93 p2: PROJECT = userprog
94 p2::
95         $(prep-grading)
96         $(mk-sandbox)
97         $(apply-patch) < ../solutions/p2.patch
98         $(run-tests)
99         $(clean)
100
101 vm: PROJECT = vm
102 vm::
103         $(prep-grading)
104         $(mk-sandbox)
105         $(MAKE) -C $@/pintos/src/vm $(SUBMAKEFLAGS)
106         $(clean)
107
108 filesys: PROJECT = filesys
109 filesys::
110         $(prep-grading)
111         $(mk-sandbox)
112         $(MAKE) -C $@/pintos/src/filesys $(SUBMAKEFLAGS)
113         $(clean)