CC=g++
CFLAGS= -Wall -std=c++17
OBJECTS= Main.o ScopedTimer.o FileIO.o MatrixInverse.o ComputationEngine.o SetA.o SetB.o SetCD.o SetE.o MatrixInvert.o
LDLIBS = -lstdc++fs -pthread

dcc: $(OBJECTS)
	$(CC) -o dcc $(OBJECTS) $(LDLIBS) -L /usr/local/cuda/lib64/ -lcudart

Main.o : Main.cpp
	$(CC) -c $(CFLAGS) Main.cpp

ScopedTimer.o : ScopedTimer.cpp ScopedTimer.h
	$(CC) -c $(CFLAGS) ScopedTimer.cpp

FileIO.o : FileIO.cpp FileIO.h
	$(CC) -c $(CFLAGS) FileIO.cpp

MatrixInverse.o : MatrixInverse.cpp MatrixInverse.h
	$(CC) -c $(CFLAGS) MatrixInverse.cpp

ComputationEngine.o : ComputationEngine.cpp ComputationEngine.h
	$(CC) -c $(CFLAGS) ComputationEngine.cpp

SetA.o : SetA.cu
	nvcc -c SetA.cu

SetB.o : SetB.cu
	nvcc -c SetB.cu

SetCD.o : SetCD.cu
	nvcc -c SetCD.cu

SetE.o : SetE.cu
	nvcc -c SetE.cu

MatrixInvert.o : MatrixInvert.cu
	nvcc -c MatrixInvert.cu

clean :
	rm dcc Main.o ScopedTimer.o FileIO.o MatrixInverse.o ComputationEngine.o
