## ====================================================================
## File: $modelutils/include/Makefile.local.mk
##

## General/Common definitions for models (excluding Etagere added ones)

OPTIL  = 2
OMP    = -openmp
MPI    = -mpi

LCLPO   = malib$(EC_ARCH)

RCOMPIL = s.compile $(MPI) $(OMP) -includes ./ $(INCLUDE_PATH) $(INCLUDE_MOD) $(DEBUGCOMPFLAGS)
RBUILD  = s.compile $(DEBUGLINKFLAGS)

RBUILD2Oa = \
	makemodelbidon $@ > bidon.f90 ; $(MAKE) bidon.o ; rm -f bidon.f90 ;\
	if [[ x$(LCLPO) != x ]] ; then cd $(LCLPO) ; fi ;\
	$(RBUILD) -obj *.o -o $@.Abs $(OMP) $(MPI) \
		-libpath $(LIBPATH) \
		-libappl $(LIBAPPL) \
		-librmn $(RMN_VERSION) \
		-libsys $(LIBSYS) \
		-codebeta $(CODEBETA) \
		-optf "=$(LFLAGS)" ;\
	rm -f bidon.o 2>/dev/null || true

RBUILD2OaNOMPI = \
	makemodelbidon $@ > bidon.f90 ; $(MAKE) bidon.o ; rm -f bidon.f90 ;\
	if [[ x$(LCLPO) != x ]] ; then cd $(LCLPO) ; fi ;\
	$(RBUILD) -obj *.o -o $@.Abs \
		-libpath $(LIBPATH) \
		-libappl $(LIBAPPL) \
		-librmn $(RMN_VERSION) \
		-libsys $(LIBSYS) \
		-codebeta $(CODEBETA) \
		-optf "=$(LFLAGS)" ;\
	rm -f bidon.o 2>/dev/null || true

RBUILD2O = \
	$(RBUILD2Oa) ;\
	if [[ x$(BINDIR) == x ]] ; then \
		mv $@.Abs $(PWD)/$@.Abs || true;\
	else \
		mv $@.Abs $(BINDIR)/$@.Abs || true;\
	fi ;\

RBUILD2ONOMPI = \
	$(RBUILD2OaNOMPI) ;\
	if [[ x$(BINDIR) == x ]] ; then \
		mv $@.Abs $(PWD)/$@.Abs || true;\
	else \
		mv $@.Abs $(BINDIR)/$@.Abs || true;\
	fi ;\

RBUILD2a = \
	makemodelbidon $@ > bidon.f90 ; $(MAKE) bidon.o ; rm -f bidon.f90 ;\
	if [[ x$(LCLPO) != x ]] ; then cd $(LCLPO) ; fi ;\
	$(RBUILD) -obj bidon.o -o $@.Abs $(OMP) $(MPI) \
		-libpath $(LIBPATH) \
		-libappl $(LIBAPPL) \
		-librmn $(RMN_VERSION) \
		-libsys $(LIBSYS) \
		-codebeta $(CODEBETA) \
		-optf "=$(LFLAGS)" ;\
	rm -f bidon.o 2>/dev/null || true

RBUILD2 = \
	$(RBUILD2a) ;\
	if [[ x$(BINDIR) == x ]] ; then \
		mv $@.Abs $(PWD)/$@.Abs 2>/dev/null || true;\
	else \
		mv $@.Abs $(BINDIR)/$@.Abs 2>/dev/null || true;\
	fi ;\

RBUILD2MPIa = \
	makemodelbidon $* > bidon.f90 ; $(MAKE) bidon.o ; rm -f bidon.f90 ;\
	if [[ x$(LCLPO) != x ]] ; then cd $(LCLPO) ; fi ;\
	$(RBUILD) -obj bidon.o -o $@.mpiAbs $(OMP) -mpi \
		-libpath $(LIBPATH) \
		-libappl $(LIBAPPL) \
		-librmn $(RMN_VERSION) \
		-libsys $(LIBSYS) \
		-codebeta $(CODEBETA) \
		-optf "=$(LFLAGS)" ;\
	rm -f bidon.o 2>/dev/null || true

RBUILD2MPI = \
	$(RBUILD2MPIa) ;\
	if [[ x$(BINDIR) == x ]] ; then \
		mv $@.Abs $(PWD)/$@.Abs 2>/dev/null || true;\
	else \
		mv $@.Abs $(BINDIR)/$@.Abs 2>/dev/null || true;\
	fi ;\

RBUILD2NOMPIa = \
	makemodelbidon $* > bidon.f90 ; $(MAKE) bidon.o ; rm -f bidon.f90 ;\
	if [[ x$(LCLPO) != x ]] ; then cd $(LCLPO) ; fi ;\
	$(RBUILD) -obj bidon.o -o $@.Abs $(OMP) \
		-libpath $(LIBPATH) \
		-libappl $(LIBAPPL) \
		-librmn $(RMN_VERSION) \
		-libsys $(LIBSYS) \
		-codebeta $(CODEBETA) \
		-optf "=$(LFLAGS)" ;\
	rm -f bidon.o 2>/dev/null || true

RBUILD2NOMPI = \
	$(RBUILD2NOMPIa) ;\
	if [[ x$(BINDIR) == x ]] ; then \
		mv $@.Abs $(PWD)/$@.Abs 2>/dev/null || true;\
	else \
		mv $@.Abs $(BINDIR)/$@.Abs 2>/dev/null || true;\
	fi ;\


## Some Shortcut/Alias to Lib Names
BLAS           = blas
COMM           = rpn_comm$(COMM_VERSION) $(COMM_stubs)
VGRID          = descrip modelutils_base
#EZSCINT        = ezscint
EZSCINT        = 
MODELUTILSLIBS = modelutils_main modelutils_driver modelutils modelutils_base
HPCSPERF       = hpcsperf
CODEBETA       = 

#MODELUTILSLIBPATH  = $(modelutils)
#INCLUDE_PATH = ./ $(MODLIBPATH)/include $(PHYLIBPATH)/include
#INCLUDE_MOD  = $(MODLIBPATH)/lib/$(EC_ARCH)/mod $(PHYLIBPATH)/lib/$(EC_ARCH)/mod

## Base Libpath and libs with placeholders for abs specific libs
LIBPATH = $(PWD) $(LIBPATH_PRE) $(LIBPATHEXTRA) $(LIBSYSPATHEXTRA) $(LIBPATHOTHER) $(LIBPATH_POST)

OTHERS  = $(COMM) $(VGRID) $(EZSCINT) $(UTIL) $(LLAPI) $(IBM_LD)
LIBAPPL = $(LIBS_PRE) $(MODELUTILSLIBS) $(OTHERS) $(LIBS_POST)
LIBSYS  = $(LIBSYS_PRE) $(LIBSYSEXTRA) $(LIBSYS_POST)

BINDIR  = $(PWD)

RMN_VERSION   = rmnbeta_014$(FORCE_RMN_VERSION_RC)
COMM_VERSION  = _40400


## General/Common targets/rules for models (excluding Etagere added ones)
rmpo:
	if [[ x$(LCLPO) != x ]] ; then rm -f $(LCLPO)/*.o 2>/dev/null || true ; fi

.SUFFIXES: .c .h .hf .inc .f .f90 .ftn .ftn90 .cdk .cdk90 .tmpl .tmpl90 .F .F90 .itf90 .inc .o .Abs .mpiAbs
.o.Abs: $<
	$(RBUILD2NOMPI)
.o.mpiAbs: $<
	$(RBUILD2MPI)

# .ftn90.itf90:
# 	$(FTNC) $< -defines =-DAPI_ONLY ; mv -f $*.f90 $*.itf90
# 	#r.gppf -lang-f90+ -chop_bang -gpp -F -D__FILE__=\"#file\" -D__LINE__=#line ${vincludes[@]} -DAPI_ONLY $< > $@


## Modelutils Targets
.PHONY: yyencode yydecode yy2global
yyencode:
	$(RBUILD2ONOMPI)
	ls -l $(BINDIR)/yyencode.Abs
yydecode:
	$(RBUILD2ONOMPI)
	ls -l $(BINDIR)/yydecode.Abs
yy2global:
	$(RBUILD2ONOMPI)
	ls -l $(BINDIR)/yy2global.Abs

.PHONY: allbin_modelutils allbincheck_modelutils
allbin_modelutils: yyencode yydecode yy2global
allbincheck_modelutils:
	if [[ -x $(BINDIR)/yyencode.Abs && \
			-x $(BINDIR)/yydecode.Abs && \
			-x $(BINDIR)/yy2global.Abs ]] ; then \
		exit 0 ;\
	fi ;\
	exit 1


##
include $(modelutils)/include/Makefile_$(BASE_ARCH)

## ====================================================================
