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