CIVL=civl
VERIFY=${CIVL} verify -enablePrintf=false
COMPARE=${CIVL} compare -enablePrintf=false
CLOC=cloc --csv --quiet

all: arrayloops dotprod_mutex condvar detached dotprod_mutex hello \
 hello_arg1 hello_arg2 join bugs compares

arrayloops: arrayloops.c
	@lessecho "NAME: arrayloops.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=4, ASIZE=16}}"
	@$(CLOC) arrayloops.c
	${VERIFY} -inputNTHREADS=4 -inputARRAYSIZE=16 arrayloops.c

condvar: condvar.c
	@lessecho "NAME: condvar.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=3, TC=10, CLIMIT=12}}"
	@$(CLOC) condvar.c
	${VERIFY} -inputTCOUNT=10 -inputCOUNT_LIMIT=15 condvar.c

detached: detached.c
	@lessecho "NAME: detached.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=4, NSTEPS=10}}"
	@$(CLOC) condvar.c
	${VERIFY} -inputNSTEPS=10 detached.c

dotprod_mutex: dotprod_mutex.c
	@lessecho "NAME: dotProd_mutex.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=4, VSIZE=40}}"
	@$(CLOC) condvar.c
	${VERIFY} -inputNUMTHRDS=4 -inputVSIZE=40 dotprod_mutex.c

hello: hello.c
	@lessecho "NAME: hello.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=5}}"
	@$(CLOC) hello.c
	${VERIFY} hello.c

hello32: hello32.c
	@lessecho "NAME: hello32.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=5, NSTEPS=10}}"
	@$(CLOC) hello32.c
	${VERIFY} -inputNTHREADS=5 -inputNSTEPS=10 hello32.c

hello_arg1: hello_arg1.c
	@lessecho "NAME: hello_arg1.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=8}}"
	@$(CLOC) hello_arg1.c
	${VERIFY} -inputNUM_THREADS=8 hello_arg1.c

hello_arg2: hello_arg2.c
	@lessecho "NAME: hello_arg2.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=8}}"
	@$(CLOC) hello_arg2.c
	${VERIFY} hello_arg2.c

join: join.c
	@lessecho "NAME: join.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=4, NSTEPS=10}}"
	@$(CLOC) join.c
	${VERIFY} -inputNSTEPS=10 join.c

bugs: bug1 bug1fix bug2 bug2fix bug3 \
 bug4 bug4fix bug5 bug6 bug6fix

bug1: bug1.c
	@lessecho "NAME: bug1.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=6, TC=10, CLIMIT=12}}"
	@$(CLOC) bug1.c
	${VERIFY} bug1.c

bug1fix: bug1fix.c
	@lessecho "NAME: bug1fix.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=6, TC=5, CLIMIT=7}}"
	@$(CLOC) bug1fix.c
	${VERIFY} -inputTCOUNT=5 -inputCOUNT_LIMIT=7 bug1fix.c

bug2: bug2.c
	@lessecho "NAME: bug2.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=5, ASIZE=10}}"
	@$(CLOC) bug2.c
	${VERIFY} -inputNTHREADS=5 -inputARRAY_SIZE=10 bug2.c

bug2fix: bug2fix.c
	@lessecho "NAME: bug2fix.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=6, TC=10, CLIMIT=12}}"
	@$(CLOC) bug2fix.c
	${VERIFY} -inputNTHREADS=5 -inputARRAY_SIZE=10 bug2fix.c

bug3: bug3.c
	@lessecho "NAME: bug3.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=8}}"
	@$(CLOC) bug3.c
	${VERIFY} bug3.c

bug4: bug4.c
	@lessecho "NAME: bug4.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=3, ITR=5, THD=7, NSTEPS=10}}"
	@$(CLOC) bug4.c
	${VERIFY} -inputITERATIONS=5 -inputTHRESHOLD=7 -inputNSTEPS=10 bug4.c

bug4fix: bug4fix.c
	@lessecho "NAME: bug4.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=3, ITR=10, THD=12, NSTEPS=10}}"
	@$(CLOC) bug4fix.c
	${VERIFY} -inputITERATIONS=10 -inputTHRESHOLD=12 -inputNSTEPS=10 bug4fix.c	

bug5: bug5.c
	@lessecho "NAME: bug5.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=5, NSTEPS=10}}"
	@$(CLOC) bug5.c
	${VERIFY} -inputNSTEPS=10 bug5.c

bug6: bug6.c
	@lessecho "NAME: bug6.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=3, VECLEN=5}}"
	@$(CLOC) bug6.c
	${VERIFY} -inputNUMTHRDS=3 -inputVECLEN=5 bug6.c

bug6fix: bug6fix.c
	@lessecho "NAME: bug6fix.c"
	@lessecho "CITE: \\cite{LLNL:Pthreads:URL}"	
	@lessecho "TYPE: $$\\text{P}$$"
	@lessecho "SCALE: {\\texttt{NT=3, VECLEN=5}}"
	@$(CLOC) bug6.c
	${VERIFY} -inputNUMTHRDS=3 -inputVECLEN=5 bug6fix.c

compares: mpiSerDot pthreadSerDot mpiThreadsDot hybridSerDot mpiHybridDot pthreadsHybridDot

mpiSerDot: mpithreads_mpi.c mpithreads_serial.c
	${COMPARE} -inputVSIZE=8 -spec mpithreads_serial.c -impl -input_mpi_nprocs=2 mpithreads_mpi.c

pthreadSerDot: mpithreads_threads.c mpithreads_serial.c
	${COMPARE} -inputVSIZE=8 -spec mpithreads_serial.c -impl -inputNPROCS=2 mpithreads_threads.c

mpiThreadsDot: mpithreads_mpi.c mpithreads_threads.c
	${COMPARE} -inputVSIZE=8 -spec -input_mpi_nprocs=2 mpithreads_threads.c -impl -inputNPROCS=2 mpithreads_mpi.c

hybridSerDot: mpithreads_serial.c mpithreads_both.c
	${COMPARE} -inputVSIZE=8 -spec mpithreads_serial.c -impl -inputNPROCS=4 -input_mpi_nprocs=2 mpithreads_both.c

mpiHybridDot: mpithreads_mpi.c mpithreads_both.c
	${COMPARE} -inputVSIZE=8 -inputNPROCS=4 -spec mpithreads_mpi.c -impl -input_mpi_nprocs=2 mpithreads_both.c

pthreadsHybridDot: mpithreads_threads.c mpithreads_both.c
	${COMPARE} -inputVSIZE=8 -inputNPROCS=4 -spec mpithreads_threads.c -impl -input_mpi_nprocs=2 mpithreads_both.c


clean: 
	rm -f -r CIVLREP
	rm -f *~
