.SUFFIXES: .f .F .F90 .f90 .o .mod
.SHELL: /bin/sh

# PATH options
objdir = obj
srcdir = src

# Command-line options at make call
debug  ?= 0  
openmp ?= 1
climate_only ?= 0

## COMPILER CONFIGURATION ##
# (should be loaded from config directory)

<COMPILER_CONFIGURATION>

# Determine whether to use normal flags (default), 
# debugging flags (debug=1) or profiling flags (debug=2)
DFLAGS   = $(DFLAGS_NODEBUG)
ifeq ($(debug), 1)
	DFLAGS   = $(DFLAGS_DEBUG)
endif
ifeq ($(debug), 2)
	DFLAGS   = $(DFLAGS_PROFILE)
endif

# Determine whether to use full model (default) or 
# climate only setupt (climate_only=1)
ifeq ($(climate_only), 0)
	climber_obj = $(climber_full_obj)
	FFLAGS = $(FFLAGS_FULL)
	LFLAGS = $(LFLAGS_FULL)
endif
ifeq ($(climate_only), 1)
	climber_obj = $(climber_clim_obj)
	FFLAGS = $(FFLAGS_CLIMATE)
	LFLAGS = $(LFLAGS_CLIMATE)
endif

# Determine whether to use openmp flags 
ifeq ($(openmp), 1)
	FFLAGS := $(FFLAGS) $(FFLAGS_OPENMP)
endif

# Compilation shortcut
LDFLAGS = $(FFLAGS) $(DFLAGS) $(CPPFLAGS)

###############################################
##							
## List of rules and source files
##
###############################################

include config/Makefile_climber.mk

###############################################
##
## Compilation of complete programs
##
###############################################

climber: $(climber_obj)
	$(FC) $(LDFLAGS) -o climber.x $^ $(LFLAGS)
	@echo " "
	@echo "    climber.x is ready."
	@echo " "

check-args: 
	@echo $(openmp) $(debug)
	@echo $(FFLAGS)
	@echo $(CPPFLAGS)
	@echo $(DFLAGS)

check: $(climber_obj)
	@echo $(climber_obj)
	@echo ""

docs: 
	ford ford.md

.PHONY : files
files:
	@echo $(climber_obj)

.PHONY : usage
usage:
	@echo ""
	@echo "    * USAGE * "
	@echo ""
	@echo " make climber    : compiles the main program climber.x"
	@echo " make clean      : clean object files"
	@echo " make module     : show required modules to load on PIK cluster"
	@echo " make config     : indicate current makefile configuration"
	@echo " make docs       : create automatic documentation with FORD"
	@echo ""
	
config:
	@echo "----------------------"
	@echo "Makefile configuration"
	@echo "----------------------"
	@echo "compiler 		: $(FC)"
	@echo "host 			: $(shell hostname)"
	@echo "machine  		: $(machine)"
	@echo "required modules 	: $(modules)"
	@echo "debug 			: $(debug)"
module:
	@echo module load $(modules)

clean_atm:
	rm -f  $(obj_atm)

clean_ocn:
	rm -f  $(obj_ocn)

clean_sic:
	rm -f  $(obj_sic)

clean_lnd:
	rm -f  $(obj_lnd)

clean_bgc:
	rm -f  $(obj_bgc) $(obj_bgc_dummy)

clean_ice:
	rm -f  $(obj_ice) $(obj_ice_sico)

clean_smb:
	rm -f  $(obj_smb) $(obj_smb_dummy)

clean_imo:
	rm -f  $(obj_imo) $(obj_imo_dummy)

clean:
	rm -f $(bindir)/*.x
	rm -f  *.x gmon.out $(objdir)/*.o $(objdir)/.*.o $(objdir)/*.mod $(objdir)/*.a $(objdir)/*.so
	rm -rf *.x.dSYM
