# known to compile with gfortran version 7, ifort version 17, pgfortran version 18
# Examples
# F90=ifort FFLAGS=-fast make clean all
# F90=gfortran F90FLAGS=-ffree-line-length-none make clean all
# F90=pgfortran F90FLAGS="-fast -Minfo=loop" make clean all

# if XCodeML F_Front is installed, set FFRONT=F_Front to parse code into XML
FFRONT ?= true

F90 ?= gfortran
F90FLAGS ?= -ffree-line-length-none

NAMES = $(basename $(notdir $(wildcard physics/*.F90)))
OBJECTS = $(addprefix obj/, $(addsuffix .o, $(NAMES)))

all : obj $(OBJECTS) lib/libphyparam.so

py : clean all
	bash/extract_cython.sh
	cd python ; rm -rf build *.c ; python setup.py build_ext --inplace
obj :
	@rm -rf obj include lib xml tmp *~ */*~
	@mkdir obj include lib xml tmp

clean : nice
	@rm -rf obj include lib xml tmp *~ */*~
	@mkdir obj include lib xml tmp
	@bash/concatenate_all_code.sh $(NAMES) > tmp/all_code
	@bash/makedeps.sh tmp/all_code >  Makefile.inc

nice:
	bash/beautify.sh physics/*.F90

%.so : $(OBJECTS)
	$(F90) -shared $^ -o $@ 

SRC = $(basename $(notdir $@))
obj/%.o: physics/%.F90
	$(F90) -I include -fPIC $(F90FLAGS) -c $<
	@mv $(SRC).mod include
	@mv $(SRC).o obj
	@cpp -DXCODEML $< > tmp/$(SRC).f90
	@$(FFRONT) -M tmp tmp/$(SRC).f90 > xml/$(SRC).xml

# dependencies between modules

$(OBJECTS) : obj/logging.o
-include Makefile.inc
