CC = gcc -std=c99 -pedantic -Wall -O3

all: qed

fields.o: fields.c fields.h lattice.h linalg.h complex/complex.h rand/ranlxd.h Makefile
	$(CC) -c $< -o $@

hmc.o: hmc.c hmc.h lattice.h fields.h linalg.h complex/complex.h rand/ranlxd.h rand/gauss.h Makefile
	$(CC) -c $< -o $@

lattice.o: lattice.c lattice.h
	$(CC) -c $< -o $@

linalg.o: linalg.c linalg.h lattice.h complex/complex.h Makefile
	$(CC) -c $< -o $@

ranlxd.o: rand/ranlxd.c rand/ranlxd.h Makefile
	$(CC) -c $< -o $@ -I rand

gauss.o: rand/gauss.c rand/gauss.h Makefile
	$(CC) -c $< -o $@ -I rand

measurements.o: measurements.c measurements.h fields.h lattice.h linalg.h hmc.h complex/complex.h Makefile
	$(CC) -c $< -o $@

qed.o: qed.c measurements.h fields.h lattice.h linalg.h hmc.h complex/complex.h Makefile rand/ranlxd.h
	$(CC) -c $< -o $@

dirac.o: dirac.c dirac.h lattice.h linalg.h complex/complex.h rand/ranlxd.h Makefile
	$(CC) -c $< -o $@

leapfrog.o: leapfrog.c leapfrog.h hmc.h Makefile
	$(CC) -c $< -o $@

2MN_integrator.o: 2MN_integrator.c 2MN_integrator.h hmc.h Makefile
	$(CC) -c $< -o $@

qed: fields.o qed.o hmc.o lattice.o linalg.o measurements.o ranlxd.o gauss.o dirac.o leapfrog.o 2MN_integrator.o Makefile
	$(CC) qed.o fields.o hmc.o lattice.o linalg.o measurements.o ranlxd.o gauss.o dirac.o leapfrog.o 2MN_integrator.o -o qed -lm

clean:
	rm -f *.o qed

