# Targets 
TARGET=noresm2cmor3_dev

# Objects
OBJ=json_kinds.o json_parameters.o json_string_utilities.o json_value_module.o json_file_module.o json_module.o m_namelists.o m_utilities.o m_modelsice.o m_modelslnd.o m_modelsatm.o m_modelsocn.o noresm2cmor.o

# Paths 
SRCDIR=../source
BINDIR=../bin

# Fortran compiler
FC=ifort

# Linker
LD=$(FC)

# Libraries
CMORLIB=/projects/NS9560K/cmor/cmorlib/nird_intel
CMOR=$(CMORLIB)/cmor-3.5.0
UUID=$(CMORLIB)/libuuid-1.0.3
HDF5=/opt/hdf5-1.10.2-intel
NETCDF=/opt/netcdf-4.6.1-intel
NETCDFF=/opt/netcdf-4.6.1-intel
UDUNITS=$(CMORLIB)/udunits-2.2.25
JSON=/projects/NS9560K/cmor/cmorlib/nird_intel/json-c-json-c-0.13.1-20180305

# Directory list to search for library files
LIBS=-L$(CMOR)/lib -Wl,-rpath=$(CMOR)/lib -L$(UUID)/lib -Wl,-rpath=$(UUID)/lib -L$(NETCDF)/lib -Wl,-rpath=$(NETCDF)/lib -L$(NETCDFF)/lib -Wl,-rpath=$(NETCDFF)/lib -L$(HDF5)/lib -Wl,-rpath=$(HDF5)/lib -L$(UDUNITS)/lib -Wl,-rpath=$(UDUNITS)/lib -L$(JSON)/lib -Wl,-rpath=$(JSON)/lib  -lcmor -lnetcdff -lnetcdf -luuid -ludunits2 -ljson-c -l:libexpat.so.1

# Compiler flags
FFLAGS=-g -O0 -traceback -r8 -I$(SRCDIR) -I$(CMOR)/include -I$(NETCDF)/include -I$(NETCDFF)/include -DCMOR3 -DDEFLATE
#FFLAGS=-O2 -r8 -I$(SRCDIR) -I$(CMOR)/include -I$(NETCDF)/include -I$(NETCDFF)/include -DCMOR3 -DDEFLATE

# Linker flags
LDFLAGS=$(LIBS) -g 

.PHONY: all clean

all: $(TARGET)

clean:
	rm -f *.o *.f *.h *.inc *.mod *2cmor* 

$(TARGET): $(OBJ)
	$(LD) -o $(TARGET) $(OBJ) $(LDFLAGS)
	mkdir -p $(BINDIR) 
	mv $(TARGET) $(BINDIR)
	rm -f *.o *.f *.h *.inc *.mod *2cmor*

noresm2cmor.o: $(SRCDIR)/noresm2cmor.F
	$(FC) $(FFLAGS) -c $(SRCDIR)/noresm2cmor.F

m_modelsatm.o: $(SRCDIR)/m_modelsatm.F
	$(FC) $(FFLAGS) -c $(SRCDIR)/m_modelsatm.F

m_modelsice.o: $(SRCDIR)/m_modelsice.F
	$(FC) $(FFLAGS) -c $(SRCDIR)/m_modelsice.F

m_modelslnd.o: $(SRCDIR)/m_modelslnd.F
	$(FC) $(FFLAGS) -c $(SRCDIR)/m_modelslnd.F

m_modelsocn.o: $(SRCDIR)/m_modelsocn.F
	$(FC) $(FFLAGS) -c $(SRCDIR)/m_modelsocn.F

m_namelists.o: $(SRCDIR)/m_namelists.F
	$(FC) $(FFLAGS) -c $(SRCDIR)/m_namelists.F

m_utilities.o: $(SRCDIR)/m_utilities.F
	$(FC) $(FFLAGS) -c $(SRCDIR)/m_utilities.F

json_module.o: $(SRCDIR)/json_module.F90
	$(FC) $(FFLAGS) -c $(SRCDIR)/json_module.F90

json_file_module.o: $(SRCDIR)/json_file_module.F90
	$(FC) $(FFLAGS) -c $(SRCDIR)/json_file_module.F90

json_value_module.o: $(SRCDIR)/json_value_module.F90
	$(FC) $(FFLAGS) -c $(SRCDIR)/json_value_module.F90

json_string_utilities.o: $(SRCDIR)/json_string_utilities.F90
	$(FC) $(FFLAGS) -c $(SRCDIR)/json_string_utilities.F90

json_parameters.o: $(SRCDIR)/json_parameters.F90
	$(FC) $(FFLAGS) -c $(SRCDIR)/json_parameters.F90

json_kinds.o: $(SRCDIR)/json_kinds.F90
	$(FC) $(FFLAGS) -c $(SRCDIR)/json_kinds.F90

