SHELL = /bin/sh

inside_nems := $(wildcard ../../../conf/configure.nems)
ifneq ($(strip $(inside_nems)),)
    include ../../../conf/configure.nems
    UTILINCS = -I../../share -I$(PHYS_INC)
else
    exist_configure_nmmb := $(wildcard ../conf/configure.nmmb)
    ifneq ($(strip $(exist_configure_nmmb)),)
        include ../conf/configure.nmmb
    else
        $(error "../conf/configure.nmmb file is missing. Run ./configure")
    endif
    $(info )
    $(info Build standalone NMMB physics ...)
    $(info )
endif

LIBNMMBPHYS  = libnmmbphys.a

#
# NMMB physics modules
#
MODULES_NMM_PHYS = module_KINDS.o                 \
                   module_CONSTANTS.o             \
                   module_BL_GFSPBL.o             \
                   module_BL_GFSPBLHUR.o          \
                   module_BL_GFSPBLEDMFHUR.o      \
                   module_BL_MYJPBL.o             \
                   module_CU_BMJ.o                \
                   module_CU_SAS.o                \
                   module_CU_SASHUR.o             \
                   module_CU_SCALE.o              \
                   module_LS_LISS.o               \
                   module_LS_NOAHLSM.o            \
                   module_MP_ETANEW.o             \
                   module_MP_FER_HIRES.o          \
                   module_mp_thompson.o           \
                   module_mp_radar.o              \
                   module_MP_GFS.o                \
                   module_MP_WSM6.o               \
                   module_RA_GFDL.o               \
                   module_RA_RRTM.o               \
                   module_sf_exchcoef.o           \
                   module_SF_JSFC.o               \
                   module_SF_GFDL.o               \
                   module_SF_URBAN.o

MODULES_NMM_RRTM = grrad_nmmb.o                   \
                   radiation_astronomy_nmmb.o     \
                   radiation_aerosols_nmmb.o      \
                   radiation_gases_nmmb.o         \
                   radiation_clouds_nmmb.o        \
                   radiation_surface_nmmb.o       \
                   rad_initialize_nmmb.o          \
                   radlw_main_nmmb.o              \
                   radsw_main_nmmb.o              \
                   precpd_nmmb.o

#
# GFS physics modules
#
MODULES_GFS      = machine.o                      \
                   physparam.o                    \
                   physcons.o                     \
                   funcphys.o

MODULES_GFSF     = iounitdef.o                    \
                   ozne_def.o                     \
                   mersenne_twister.o             \
                   radlw_param.o                  \
                   radlw_datatb.o                 \
                   radsw_param.o                  \
                   radsw_datatb.o                 \
                   mfpbl.o                        \
                   moninedmf.o                    \
                   moninq.o                       \
                   mfdeepcnv.o                    \
                   mfshalcnv.o                    \
                   sascnvn.o                      \
                   shalcnv.o                      \
                   gscond.o

ifneq ($(strip $(inside_nems)),)

    DEPEND_FILES = ${MODULES_NMM_PHYS:.o=.F90} \
                   ${MODULES_NMM_RRTM:.o=.f}

    MODULES = $(MODULES_NMM_PHYS) \
              $(MODULES_NMM_RRTM)

else

    DEPEND_FILES = ${MODULES_GFS:.o=.f} \
                   ${MODULES_GFSF:.o=.f} \
                   ${MODULES_NMM_PHYS:.o=.F90} \
                   ${MODULES_NMM_RRTM:.o=.f}

    MODULES = $(MODULES_GFS) \
              $(MODULES_GFSF) \
              $(MODULES_NMM_PHYS) \
              $(MODULES_NMM_RRTM)

endif

all default: depend $(LIBNMMBPHYS)

$(LIBNMMBPHYS): $(MODULES)
	$(AR) $(ARFLAGS) $@ $?

$(MODULES_GFS): %.o: %.f
	$(FC) $(FFLAGS_GFS) $(UTILINCS) $(FPP) $(CPPFLAGS) $(R8) -c $*.f

$(MODULES_GFSF): %.o: %.f
	$(FC) $(FFLAGS_GFSF) $(UTILINCS) $(FPP) $(CPPFLAGS) $(R8) -c $*.f

$(MODULES_NMM_PHYS): %.o: %.f90
	$(FC) $(FFLAGS_NMM) $(UTILINCS) -c $*.f90

$(MODULES_NMM_RRTM): %.o: %.f
	$(FC) $(FREE) $(FFLAGS_NMM) $(UTILINCS) $(FPP) $(CPPFLAGS) $(R8) -c $*.f

.PHONY: clean
clean:
	@echo "Cleaning nmmbphys ... "
	@echo
	$(RM) -f $(LIBRARY) $(LIBNMMBPHYS) *.f90 *.o *.mod *.lst *.i depend

ifneq ($(strip $(inside_nems)),)
    MKDEPENDS = ../../../../exe/mkDepends.pl
    include ../../../conf/make.rules
else
    MKDEPENDS = ../mkDepends.pl
    include ../conf/make.rules
endif

# do not include 'depend' file if the target contains string 'clean'
ifneq (clean,$(findstring clean,$(MAKECMDGOALS)))
    -include depend
endif