Apply appropriate changes from main branch to bring win0405-branch up
[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         $(MAKE) check-noclean
11
12 check-noclean:
13         for d in $(TESTS); do $(MAKE) $$d || exit 1; done
14         @echo All tests passed.
15
16 clean:
17         rm -rf $(TESTS)
18
19 define prep-threads-grading
20 endef
21
22 define prep-userprog-grading
23 $(MAKE) -C ../src/userprog -s
24 $(MAKE) -C ../grading/userprog -s
25 endef
26
27 define prep-vm-grading
28 $(MAKE) -C ../src/userprog -s
29 $(MAKE) -C ../grading/vm -s
30 endef
31
32 define prep-filesys-grading
33 $(MAKE) -C ../grading/filesys -s
34 endef
35
36 define prep-grading
37 $(prep-$(PROJECT)-grading)
38 endef
39
40 define mk-sandbox
41 rm -rf $@ && mkdir -p $@/pintos && cp -R ../src $@/pintos
42 endef
43
44 define run-tests
45 cd $@ && ../../grading/$(PROJECT)/run-tests
46 endef
47
48 define clean
49 rm -rf $@/pintos
50 endef
51
52 define apply-patch
53 (cd $@/pintos && patch -p0 -s) <
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 join.*
74         $(clean)
75
76 p1-3: PROJECT = threads
77 p1-3::
78         $(mk-sandbox)
79         $(apply-patch) ../solutions/p1-3.patch
80         $(run-tests) -d priority.*
81         $(clean)
82
83 list: PROJECT = threads
84 list stdlib::
85         $(mk-sandbox)
86         cp ../src/tests/threads/$@.c $@/pintos/src/threads/test.c
87         $(MAKE) -C $@/pintos/src/threads -s
88         -(cd $@/pintos/src/threads/build && pintos -v run -q) | tee $@/output
89         grep -q '$@: PASS' $@/output
90         $(clean)
91
92 userprog: PROJECT = userprog
93 userprog::
94         $(prep-grading)
95         $(mk-sandbox)
96         $(apply-patch) ../solutions/p1-2.patch
97         echo '#define THREAD_JOIN_IMPLEMENTED 1' > $@/pintos/src/constants.h
98         $(run-tests) null
99         $(clean)
100
101 p2: PROJECT = userprog
102 p2::
103         $(prep-grading)
104         $(mk-sandbox)
105         $(apply-patch) ../solutions/p2.patch
106         $(run-tests)
107         $(clean)
108
109 vm: PROJECT = vm
110 vm::
111         $(prep-grading)
112         $(mk-sandbox)
113         $(MAKE) -C $@/pintos/src/vm -s
114         $(clean)
115
116 filesys: PROJECT = filesys
117 filesys::
118         $(prep-grading)
119         $(mk-sandbox)
120         $(MAKE) -C $@/pintos/src/filesys -s
121         $(clean)