# compiler
F90 = gfortran

# compiler options
## debug
OPT = -Wall -Wextra -Wno-compare-reals -Wimplicit-interface -fPIC \
-fmax-errors=1 -g -fbacktrace -ffpe-trap=invalid,zero,overflow \
-Jbuild -fbounds-check -fcheck=all
# old 4.7 gfortran does not have -fcheck=all so remove if needed

## optimized
#OPT = -Wall -Wextra -Wno-compare-reals -Wimplicit-interface -Jbuild \
#-O3 -march=native -funroll-loops -ffpe-trap=invalid,zero,overflow

# Put .o and .mod files here:
VPATH = build

# make automatic variables reminder:
# $@ the target
# $+ names of all the prerequisites, with spaces between them, duplicates removed
# $< name of first prerequisite

main: model.exe
test1: test.exe

model.exe: bubble_main.o bubble_parameters.o bubble_geometry.o \
bubble_output.o
	$(F90) -o $@ $+

build/bubble_parameters.o: src/bubble_parameters.f90
	$(F90) $(OPT) -c $< -o $@

build/bubble_geometry.o: src/bubble_geometry.f90 bubble_parameters.o
	$(F90) $(OPT) -c $< -o $@

build/bubble_output.o: src/bubble_output.f90 bubble_parameters.o bubble_geometry.o
	$(F90) $(OPT) -c $< -o $@

build/bubble_main.o: src/bubble_main.f90 bubble_parameters.o bubble_geometry.o \
bubble_output.o
	$(F90) $(OPT) -c $< -o $@


build/test.o: tests/test.f90 bubble_parameters.o bubble_geometry.o
	$(F90) $(OPT) -c $< -o $@

test.exe: test.o bubble_parameters.o bubble_geometry.o
	$(F90) -o $@ $+

clean:
	rm model.exe build/*.o build/*.mod

.PHONY: clean
