################################################################################
# CheckOffGen: tool to build checkoff files for 6.004 labs     - 9/11 Steve Ward
################################################################################

# NB: To make a change to installed (on Athena machines) setup:
#   - edit files here
#   - make all_checkoffs
#       to get preliminary versions of checkoff files
#   - make test_all
#   - make all_checkoffs
#       AGAIN, to get proper checksums.

JSIM=6004lib/jsim.jar

# Hand-coded jsim files, to simulate student submissions:
STUDENT_JSIM_FILES=lab3_empty.jsim lab3_b.jsim lab3_a.jsim lab3_c.jsim \
		lab3_m.jsim lab3_10.jsim

# Some useful stuff is in separate library files:
SUPPORT_JSIM_FILES=lib.jsim mult.jsim

# Source code:
SOURCE=alu.py checkoffgen.py

# Our emulation of the Athena 6.004 lib (/mit/6.004/jsim):
MIT=6004lib

# (generated) checkoff files: stored in 6004lib
CHECKOFF_FILES=$(MIT)/lab3checkoff_10.jsim $(MIT)/lab3checkoff_6.jsim \
		$(MIT)/lab3_test_adder.jsim $(MIT)/lab3_test_cmp.jsim \
		$(MIT)/lab3_test_bool.jsim $(MIT)/lab3_test_shift.jsim \
		$(MIT)/lab3_test_mult.jsim

#doit:	all_checkoffs
doit:	test_all

# These are here to manually test individual test jigs.
#doit:	test_b
#doit:	test_a
#doit:	test_c
#doit:	test_s
#doit:	test_6
#doit:	test_m
#doit:	test_10

################################################################################
### Export this directory & upload to 6004.csail.mit.edu:
################################################################################

upload:
	svn export . tmp_export
	scp -r tmp_export 6004.csail.mit.edu:Fall11/Labs/new_lab_3
	rm -fr tmp_export

################################################################################
### Lab 3 test implementation:
### NB: We have to do ALL of these, to generate the .cksm files (that need to
###   be edited into server xml files, as well as final checkoff files)
################################################################################

# Test part B: Boolean
test_b:		lab3_b.jsim $(MIT)/lab3_test_adder.jsim alu.jsim lib.jsim
		java -jar $(JSIM) -Xms8m -Xmx32m -reporterrors $< >cksms/lab3_test_bool.cksm

test_a:		lab3_a.jsim $(MIT)/lab3_test_adder.jsim alu.jsim lib.jsim
		java -jar $(JSIM) -Xms8m -Xmx32m -reporterrors $< >cksms/lab3_test_adder.cksm

test_c:		lab3_c.jsim $(MIT)/lab3_test_cmp.jsim alu.jsim lib.jsim
		java -jar $(JSIM) -Xms8m -Xmx32m -reporterrors $< >cksms/lab3_test_cmp.cksm

test_s:		lab3_s.jsim $(MIT)/lab3_test_cmp.jsim alu.jsim lib.jsim
		java -jar $(JSIM) -Xms8m -Xmx32m -reporterrors $< >cksms/lab3_test_shift.cksm

test_6:		lab3_6.jsim alu.jsim $(MIT)/lab3checkoff_6.jsim lib.jsim mult32.jsim
		java -jar $(JSIM) -Xms8m -Xmx32m -reporterrors $< >cksms/lab3checkoff_6.cksm

test_m:		lab3_m.jsim $(MIT)/lab3_test_mult.jsim alu.jsim lib.jsim
		java -jar $(JSIM) -Xms8m -Xmx32m -reporterrors $< >cksms/lab3_test_mult.cksm

test_10:	lab3_10.jsim alu.jsim $(MIT)/lab3checkoff_10.jsim lib.jsim mult32.jsim
		java -jar $(JSIM) -Xms8m -Xmx32m -reporterrors $< >cksms/lab3checkoff_10.cksm

test_all:	test_b test_a test_c test_s test_6 test_m test_10


################################################################################
### Generate checkoff files
################################################################################


$(MIT)/lab3checkoff_10.jsim:	alu.py checkoffgen.py cksms/lab3checkoff_10.cksm
			python alu.py lab3checkoff_10 ACBSM

$(MIT)/lab3checkoff_6.jsim:	alu.py checkoffgen.py cksms/lab3checkoff_6.cksm
			python alu.py lab3checkoff_6 ACBS

$(MIT)/lab3_test_adder.jsim:	alu.py checkoffgen.py cksms/lab3_test_adder.cksm
			python alu.py lab3_test_adder A adder

$(MIT)/lab3_test_cmp.jsim:	alu.py checkoffgen.py cksms/lab3_test_cmp.cksm
			python alu.py lab3_test_cmp C compare

$(MIT)/lab3_test_bool.jsim:	alu.py checkoffgen.py cksms/lab3_test_bool.cksm
			python alu.py lab3_test_bool B boolean

$(MIT)/lab3_test_shift.jsim:	alu.py checkoffgen.py cksms/lab3_test_shift.cksm
			python alu.py lab3_test_shift S shifter

$(MIT)/lab3_test_mult.jsim:	alu.py checkoffgen.py cksms/lab3_test_mult.cksm
			python alu.py lab3_test_mult M multiplier

all_checkoffs:	$(CHECKOFF_FILES)


################################################################################
### checkoffgen.py: pgm to generate a checkoff file from test cases
### (simple sanity tests)
################################################################################

test_checkoffgen:	checkoffgen.py
	python checkoffgen.py

################################################################################
### work in progress:
################################################################################

clean:
		- rm -f *~ *.pyc $(CHECKOFF_FILES)

