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