# Common definitions
CC = gcc

# Compiler flags, paths and libraries
CFLAGS = -std=c11 -pedantic -Wall -Wextra -O3 -ggdb -gdwarf-4
LFLAGS = $(CFLAGS)
LIBS   = -lm

OBJS = partdiff.o askparams.o
# TGTS = partdiff-seq.x partdiff-openmp.x partdiff-openmp-zeile.x partdiff-openmp-spalte.x partdiff-openmp-element.x
TGTS = partdiff-seq.x partdiff-openmp.x 



# Rule to create *.o from *.c
.c.o:
	$(CC) -c $(CFLAGS) $*.c

# Targets ...
all: $(TGTS)
partdiff-seq.x: $(OBJS) Makefile
	$(CC) $(LFLAGS) -o $@ $(OBJS) $(LIBS)

partdiff-openmp.x: partdiff-openmp.o askparams.o Makefile
	gcc $(LFLAGS) -fopenmp -o $@ partdiff-openmp.o askparams.o -lm

# partdiff-openmp-element.x: partdiff-openmp-element.o askparams.o Makefile
# 	gcc $(LFLAGS) -fopenmp -D ELEMENT -o $@ partdiff-openmp-element.o askparams.o -lm

# partdiff-openmp-spalte.x: partdiff-openmp-spalte.o askparams.o Makefile
# 	gcc $(LFLAGS) -fopenmp -D SPALTE -o $@ partdiff-openmp-spalte.o askparams.o -lm

# partdiff-openmp-zeile.x: partdiff-openmp-zeile.o askparams.o Makefile
# 	gcc $(LFLAGS) -fopenmp -D ZEILE -o $@ partdiff-openmp-zeile.o askparams.o -lm



partdiff.o: partdiff.c Makefile

partdiff-openmp.o: Makefile partdiff.c
	$(CC) -c $(CFLAGS) -fopenmp -o partdiff-openmp.o partdiff.c

# partdiff-openmp-zeile.o: Makefile partdiff.c
# 	$(CC) -c $(CFLAGS) -D ZEILE -fopenmp -o partdiff-openmp-zeile.o partdiff.c

# partdiff-openmp-spalte.o: Makefile partdiff.c
# 	$(CC) -c $(CFLAGS) -D SPALTE -fopenmp -o partdiff-openmp-spalte.o partdiff.c

# partdiff-openmp-element.o: Makefile partdiff.c
# 	$(CC) -c $(CFLAGS) -D ELEMENT -fopenmp -o partdiff-openmp-element.o partdiff.c

askparams.o: askparams.c Makefile

clean:
	$(RM) *.o *~
	$(RM) $(TGTS)

