#GNU Makefile to build nubeam_comp_exec 
#
#01/07/09 C. Ludescher-Furth : created


ifneq ($(MAKELEVEL),0)
# if OBJ was defined for main Makefile one level down
ifeq ("${OBJ}",".")
	override OBJ=..
endif
endif

# define system dependent flags, etc.
-include  ../share/Make.local
include ../share/Make.flags

OBJDIR = $(OBJ)/obj/nubeam_comp_exec

ifdef MPI_ACTIVATE
  ARC = $(OBJ)/lib/libmpi_nubeam.a
  PORTLIB=-lmpi_portlib
  NEXEC = $(OBJ)/test/mpi_nubeam_comp_exec
  NOBJ = mpi_nubeam_comp_exec.o
  NLIB = mpi_nubeam
  MDIR = $(OBJ)/mpi_mod
  MODFLAGS := $(MFLAGS)$(MDIR) $(MODFLAGS)
  FC   = $(MPI_FC)
  FC90 = $(MPI_FC)
  CC   = $(MPI_CC)
  CXX  = $(MPI_CXX)
  FFLAGS = $(MPI_FFLAGS)
  DFFLAGS = $(MPI_DFFLAGS)
  CFLAGS = $(MPI_CFLAGS)
  CXXFLAGS = $(MPI_CXXFLAGS)
  DCFLAGS = $(MPI_DCFLAGS)
  DCXXFLAGS = $(MPI_DCXXFLAGS)
  LDFLAGS = $(MPI_LDFLAGS)
  DEFS  := $(DEFS) -D__MPI
  CDEFS := $(CDEFS) -D__MPI
  INCMPI = $(OPENMPI_PATH)/include
  INCFLAGS := $(INCFLAGS) $(IOPT)$(INCMPI)
else
  PORTLIB=-lportlib
  ARC = $(OBJ)/lib/libnubeam.a
  NEXEC = $(OBJ)/test/nubeam_comp_exec
  NOBJ = nubeam_comp_exec.o
  NLIB = nubeam
endif

ifdef DEBUG
	FFLAGS = $(DFFLAGS)
	CFLAGS = $(DCFLAGS)
	CXXFLAGS = $(DCXXFLAGS)
	LDFLAGS  := $(LDFLAGS) -g
endif
# do not rebuild library if using installed one in $PREFIX
ifeq ($(MAKELEVEL),0)
	THISLIB=$(ARC)
endif


ifeq ($(MACHINE),RS6000)
   PREACT = -lfpreact -lpreact -lsigsub -ladas310_fortran_driver \
     -laladdinsub -ladpak -lcppsub
else
   PREACT = -lfpreact -lpreact -lsigsub -ladas310_fortran_driver -laladdinsub
endif

FALL  = $(subst .f90,.o, $(wildcard *.f90))
FOBJ  = $(filter-out nubeam_comp_exec.o,$(FALL))
OBJS  = $(foreach file, $(FOBJ), $(OBJDIR)/$(file))

LDLIBS = -L$(PSPLINE_HOME)/lib -lpspline \
	 -L$(OBJ)/lib -lphysconst -lps_frantic -l$(NLIB) -lget_fbm_kernel \
	 -lkdsaw  -lxstraln -lfrantic -lfpreact \
	 $(LLOC) -lpreact -lsigsub \
	 -L$(OBJ)/lib -ladas310_fortran_driver \
	  $(LLOC) -laladdinsub \
	 -L$(OBJ)/lib -lrfxqlo_helper \
	 -lrfxqlo  -lplasma_state \
 	 -lps_xplasma2 -lplasma_state_kernel \
	 $(LLOC) -lold_xplasma \
	 -lxplasma2 \
	 -lfluxav -lsmlib \
	 $(LLOC) -lnscrunch -lr8bloat -lezcdf \
	 -L$(OBJ)/lib -lrandom \
         $(LLOC) -llsode -llsode_linpack \
	 $(LLOC) -lcomput \
	 -L$(OBJ)/lib  $(PORTLIB)

srcdir  = $(shell pwd)
testdir = $(shell cd $(OBJ)/test; pwd)


.PHONY: clean realclean checkdirs all exec


libs: FORCE  
 
all:  libs exec 
	@echo done  


FORCE: chkdirs

chkdirs:
	@test -d $(OBJ)/test || mkdir -p $(OBJ)/test
	@test -d $(OBJDIR)   || mkdir -p $(OBJDIR)


#
#---------------------------------------------------
#
# Build Test Programs
#=====================
# pre-pocess / compile .F


$(OBJDIR)/mpi_nubeam_comp_exec.o: nubeam_comp_exec.F90
	$(proc_F90)

$(OBJDIR)/nubeam_comp_exec.o: nubeam_comp_exec.F90
	$(proc_F90)

$(OBJDIR)/%.o: %.f90
	$(FC90) $(FFLAGS) $(MODFLAGS) -I./ $(INCFLAGS) $(OUT) $@ $<

$(OBJDIR)/%.o: %.F90
	$(F90_proc)

exec: chkdirs $(OBJS) $(NEXEC)

#chktest:

#Note: Some sites (NCCS) need BLAS

$(NEXEC): $(OBJDIR)/$(NOBJ) $(THISLIB) 
	$(FC) $(LDFLAGS) -o $@ $< $(OBJS) $(LDLIBS) $(LUSRLIB) $(NETCDF) $(LAPACK) $(BLAS) $(XFLIB) $(XLIBS) $(EDITLIBS) $(CLIBS)


#-------------------------------------------------------------------------
install:
	@test -d $(BINDIR) || mkdir -p $(BINDIR)
	umask 022; cp $(NEXEC) $(BINDIR)/

clean: 
	@rm -f $(OBJDIR)/*
	@rm -f $(NEXEC)

realclean: clean


