#
#  Makefile for building CIAO (M.Okamoto)
#

#
#  Target
#
TARGET = ciao

#
#  Objects
#
OBJ_CC_OPT =
OBJ_CC_NOPT =
OBJ_F77_OPT =
OBJ_F77_NOPT =

OBJ_F90_OPT = \
parameters.o defaults.o \
dion_analysis.o version.o \
args.o file.o init_state.o spin_orbit.o \
potential.o charge.o fermi_level.o total_energy.o \
boundstate.o unboundstate.o pc_adams.o \
scf.o mixing.o convergence.o rel_correction.o \
pp.o pp_bhs.o pp_tm.o pp_us.o pp_tmso.o \
pcc.o core_hole.o \
hubbard.o dipole.o ghost_state.o logderi.o fourier.o \
xc_momo.o pao.o \
sol_init_state.o sol_scf.o sol_boundstate.o \
sol_fermi_level.o sol_charge.o sol_pp.o \
sol_pcc.o sol_total_energy.o sol_logderi.o \
sol_xc_momo.o \
lib_atom_table.o lib_mesh.o lib_kohn_sham.o \
lib_int_deri.o lib_polynomial.o lib_time.o \
lib_gamma.o lib_bessel.o lib_linalg.o \
lib_integer.o lib_real.o lib_string.o \
lib_momo_xc_lda.o lib_momo_xc_gga.o lib_momo_xc_special.o

OBJ_F90_NOPT = \
main_ciao.o \
reading.o writing.o

OBJECTS  = \
$(OBJ_CC_OPT) $(OBJ_CC_NOPT) \
$(OBJ_F77_OPT) $(OBJ_F77_NOPT) \
$(OBJ_F90_OPT) $(OBJ_F90_NOPT)

#
#  Default
#
default : help

#
#  Help
#
help :
	@echo "make: Please specify a compiler."
	@echo "+---------------------------------------------------------------------+"
	@echo "|  Usage: make [compiler]                                             |"
	@echo "|                                                                     |"
	@echo "|     compiler = generic ... Generic compiler                         |"
	@echo "|                absoft  ... Absoft Pro Fortran                       |"
	@echo "|                intel   ... Intel Fortran Compiler (ifc)             |"
	@echo "|                intel2  ... Intel Fortran Compiler (ifort)           |"
	@echo "|                gnu     ... GNU Fortran Compiler (gfortran)          |"
	@echo "|                hitachi ... Hitachi SR8000                           |"
	@echo "|                altix   ... SGI LX3700 (efc)                         |"
	@echo "|                win     ... Intel Visual Fortran (ifort) for Windows |"
	@echo "|                help    ... shows this massage [default]             |"
	@echo "+---------------------------------------------------------------------+"

#
#  Generic compiler options
#
Generic generic General general :
	@echo Building "$(TARGET)" using generic compiler options for `uname -s`.
	make -f Makefile.Generic \
		TARGET="$(TARGET)" \
		OBJ_CC_OPT="$(OBJ_CC_OPT)" OBJ_CC_NOPT="$(OBJ_CC_NOPT)" \
		OBJ_F77_OPT="$(OBJ_F77_OPT)" OBJ_F77_NOPT="$(OBJ_F77_NOPT)" \
		OBJ_F90_OPT="$(OBJ_F90_OPT)" OBJ_F90_NOPT="$(OBJ_F90_NOPT)"

#
#  Absoft Pro Fortran (f90)
#
Absoft absoft :
	@echo Building "$(TARGET)" by the Absoft Pro Fortran \(f90\) for `uname -s`.
	make -f Makefile.Absoft \
		TARGET="$(TARGET)" \
		OBJ_CC_OPT="$(OBJ_CC_OPT)" OBJ_CC_NOPT="$(OBJ_CC_NOPT)" \
		OBJ_F77_OPT="$(OBJ_F77_OPT)" OBJ_F77_NOPT="$(OBJ_F77_NOPT)" \
		OBJ_F90_OPT="$(OBJ_F90_OPT)" OBJ_F90_NOPT="$(OBJ_F90_NOPT)"

#
#  Intel Fortran Compiler (ifc)
#
Intel intel ifc :
	@echo Building "$(TARGET)" by the Intel Fortran Compiler \(ifc\) for `uname -s`.
	make -f Makefile.Intel \
		TARGET="$(TARGET)" \
		OBJ_CC_OPT="$(OBJ_CC_OPT)" OBJ_CC_NOPT="$(OBJ_CC_NOPT)" \
		OBJ_F77_OPT="$(OBJ_F77_OPT)" OBJ_F77_NOPT="$(OBJ_F77_NOPT)" \
		OBJ_F90_OPT="$(OBJ_F90_OPT)" OBJ_F90_NOPT="$(OBJ_F90_NOPT)"

#
#  Intel Fortran Compiler (ifort)
#
Intel2 intel2 ifort :
	@echo Building "$(TARGET)" by the Intel Fortran Compiler \(ifort\) for `uname -s`.
	make -f Makefile.Intel2 \
		TARGET="$(TARGET)" \
		OBJ_CC_OPT="$(OBJ_CC_OPT)" OBJ_CC_NOPT="$(OBJ_CC_NOPT)" \
		OBJ_F77_OPT="$(OBJ_F77_OPT)" OBJ_F77_NOPT="$(OBJ_F77_NOPT)" \
		OBJ_F90_OPT="$(OBJ_F90_OPT)" OBJ_F90_NOPT="$(OBJ_F90_NOPT)"

#
#  GNU Fortran Compiler (gfortran)
#
GNU gnu g95 g90 g77 gfort gfortran :
	@echo Building "$(TARGET)" by the GNU Fortran Compiler \(gfortran\) for `uname -s`.
	make -f Makefile.GNU \
		TARGET="$(TARGET)" \
		OBJ_CC_OPT="$(OBJ_CC_OPT)" OBJ_CC_NOPT="$(OBJ_CC_NOPT)" \
		OBJ_F77_OPT="$(OBJ_F77_OPT)" OBJ_F77_NOPT="$(OBJ_F77_NOPT)" \
		OBJ_F90_OPT="$(OBJ_F90_OPT)" OBJ_F90_NOPT="$(OBJ_F90_NOPT)"

#
#  Hitachi SR8000
#
Hitachi hitachi hiux SR8000 sr8000 :
	@echo Building "$(TARGET)" by the Hitachi Fortran Compiler for `uname -s`.
	make -f Makefile.Hitachi \
		TARGET="$(TARGET)" \
		OBJ_CC_OPT="$(OBJ_CC_OPT)" OBJ_CC_NOPT="$(OBJ_CC_NOPT)" \
		OBJ_F77_OPT="$(OBJ_F77_OPT)" OBJ_F77_NOPT="$(OBJ_F77_NOPT)" \
		OBJ_F90_OPT="$(OBJ_F90_OPT)" OBJ_F90_NOPT="$(OBJ_F90_NOPT)"

#
#  SGI LX3700 (= Altix 3000) (efc)
#
SGI sgi LX lx LX3700 lx3700 Altix altix efc :
	@echo Building "$(TARGET)" by the SGI Fortran Compiler \(efc\) for `uname -s`.
	make -f Makefile.Altix \
		TARGET="$(TARGET)" \
		OBJ_CC_OPT="$(OBJ_CC_OPT)" OBJ_CC_NOPT="$(OBJ_CC_NOPT)" \
		OBJ_F77_OPT="$(OBJ_F77_OPT)" OBJ_F77_NOPT="$(OBJ_F77_NOPT)" \
		OBJ_F90_OPT="$(OBJ_F90_OPT)" OBJ_F90_NOPT="$(OBJ_F90_NOPT)"

#
#  Intel Visual Fortran (ifort) for Windows
#
Windows windows Win win :
	@echo Building "$(TARGET)" by the Intel Visual Fortran \(ifort\) for `uname -s`.
	make -f Makefile.Windows \
		TARGET="$(TARGET)" \
		OBJ_CC_OPT="$(OBJ_CC_OPT)" OBJ_CC_NOPT="$(OBJ_CC_NOPT)" \
		OBJ_F77_OPT="$(OBJ_F77_OPT)" OBJ_F77_NOPT="$(OBJ_F77_NOPT)" \
		OBJ_F90_OPT="$(OBJ_F90_OPT)" OBJ_F90_NOPT="$(OBJ_F90_NOPT)"

#
#  Install
#
install :
	@strip $(TARGET)
	\mv $(TARGET) ../bin

#
#  Clean
#
clean :
	rm -f $(OBJECTS) $(TARGET) *.mod _*_.*

