
help:
	@echo 'Makefile for Pomme-3'
	@echo '+-------------+------------+---------------------------------------+'
	@echo '| TARGETS:    | BUILD      | DESCRIPTION/SINGLE TARGETS            |'
	@echo '+-------------+------------+---------------------------------------+'
	@echo '| sol-1       | example1   | solaris, no debug info                |'
	@echo '| sol-deb-1   | example1   | solaris, with debug info              |'
	@echo '| gcc-deb-1   | example1   | gcc, with debug info                  |'
	@echo '| sol-2       | example2   | solaris, no debug info                |'
	@echo '| sol-2-deb   | example2   | solaris, with debug info              |'
	@echo '| gcc-2-deb   | example2   | gcc, with debug info                  |'
	@echo '| gcc-2-prof  | example2   | gcc, for profiler                     |'
	@echo '| gcc-2-opt   | example2   | gcc, optimized                        |'
	@echo '| sol-3       | example3   | solaris, no debug info                |'
	@echo '| gcc-3-perf  | example3   | solaris, with debug info              |'
	@echo '| gcc-3-p-deb | example3   | solaris, debug and profiler           |'
	@echo '| gcc-3-opt   | example3   | gcc, optimized                        |'
	@echo '+-------------+------------+---------------------------------------+'
	@echo '| mex         | (mex)      | create matlab interface in sub M      |'
	@echo '| idl-gcc     | (idl)      | create IDL call_external interface    |'
	@echo '| idl-gcc-lin | (idl/linux)| create IDL call_external interface    |'
	@echo '+-------------+------------+---------------------------------------+'
	@echo '|        tags | -none-     | create fortran tag-file               |'
	@echo '|       clean | -none-     | erase obj and some other stuff        |'
	@echo '|        help | -none-     | this short list (is default target)   |'
	@echo '+-------------+------------+---------------------------------------+'
	@echo '2006-Jan-23 (rother@gfz-potsdam).'

#==============================================================================
#
#  Some explanation should be added here... 
#
#  
#  All code is still in a kind of test by the GFZ ME group. You may
#  want to look for updates/bug-fixes from time to time.
#
#  2004-Dec-18.
#  2006-Jan-23. minor modification, mostly renaming to move from 2.5 to 3.1.
#==============================================================================

#------------------------------------------------------------------------------
#  SUFFIXES
#------------------------------------------------------------------------------

.SUFFIXES:  .c .f .o .h

#------------------------------------------------------------------------------
#
#  MACROS
#
#------------------------------------------------------------------------------

SUB_C             = ./C
SUB_F             = ./F
SUB_M             = ./M/Lib

MAKE              = make
IDL_PAR           = -fPIC -I/usr/local/rsi/idl/external/include

POMME_SRC         = $(SUB_C)/pomme3d1.c                  \
                    $(SUB_C)/sm2geo.c                    \
                    $(SUB_C)/gsm2geo.c                   \
                    $(SUB_F)/plmbar.c                    \
                    $(SUB_F)/magfdz.c

POMME_OBJ         = $(SUB_C)/pomme3d1.o                  \
                    $(SUB_C)/sm2geo.o                    \
                    $(SUB_C)/gsm2geo.o                   \
                    $(SUB_F)/plmbar.o                    \
                    $(SUB_F)/magfdz.o

EXAMPLE_OBJ       = ${POMME_OBJ}

EXAMPLE_DEP       = ${SUB_C}/tmodel.h                    \
                    ${SUB_C}/pomme3d1.h                  \
                    ${EXAMPLE_OBJ}

#------------------------------------------------------------------------------
#
#  GCC COMPILER SETTINGS 
#
#------------------------------------------------------------------------------

GCC_DEBUG         = -g
GCC_PROFILER      = '-g -pg'
GCC_OPTIMIZED     = '-O3 -ffast-math'

GCC               = gcc
GCC_FTN           = g77
GCC_LINK          = gcc
GCC_LINK_PAR      = -lm
GCC_PAR           =


#------------------------------------------------------------------------------
#
#  SOLARIS COMPILER SETTINGS (MAY NEED CUSTOMIZATION)
#
#------------------------------------------------------------------------------

SOL_DEBUG         = -g          
SOL_PROFILER      = '-p -g'
SOL_OPTIMIZED     = '-xO3 -fast -xlic_lib=sunperf'

SOL_PAR_ARCH_64   = '-xtarget=ultra3cu -xarch=v9b     -dalign'      #64 bit
SOL_PAR_ARCH_32   = '-xtarget=ultra3cu -xarch=v8plusb -dalign'      #32 bit

SOL_CC            = cc
SOL_CC_PAR        =
SOL_CC_LINK       = cc
SOL_CC_LINK_PAR   = '-lsunmath -xlic_lib=sunperf'

SOL_FTN_PAR       = "${ARCH} ${DEBUG} -c -stackvar"
SOL_FTN_LINK_MP   = "f90  -mt  ${ARCH} ${DEBUG} -mp=openmp  -stackvar -lm  "\
                    "-stackvar -mp=openmp -explicitpar -xlic_lib=sunperf"

#------------------------------------------------------------------------------
#
#  IMPLICIT RULES
#
#------------------------------------------------------------------------------

.f.o:
	$(FTN) $(FFLAGS)  ${DEBUG}            -c $< -o $@

.c.o:
	$(CC)  $(CCFLAGS) ${DEBUG} -I${SUB_C} -c $< -o $@

#------------------------------------------------------------------------------
#
#  EXPLICIT TARGETS
#
#------------------------------------------------------------------------------

sol-1:         
	@echo    example 1 solaris cc
	${MAKE}  DEBUG=${SOL_OPTIMIZED}                  \
	         CC=${SOL_CC}                            \
	         LDCMD=${SOL_CC_LINK}                    \
	         CFLAGS=${SOL_CC_PAR}                    \
	         LDPAR=${SOL_CC_LINK_PAR}                \
	         SRCNAME='example1'                      \
	         OUTNAME='example1-sol'                  \
	         example

sol-deb-1:         
	@echo    example 1 solaris cc with debug
	${MAKE}  DEBUG=${SOL_DEBUG}                      \
	         CC=${SOL_CC}                            \
	         LDCMD=${SOL_CC_LINK}                    \
	         CFLAGS=${SOL_CC_PAR}                    \
	         LDPAR=${SOL_CC_LINK_PAR}                \
	         SRCNAME='example1'                      \
	         OUTNAME='example1-sol-deb'              \
	         example

gcc-deb-1:    
	echo     example 1 gcc with debug
	${MAKE}  DEBUG=${GCC_DEBUG}                      \
	         CC=${GCC}                               \
	         FTN=${GCC_FTN}                          \
	         LDCMD=${GCC_LINK}                       \
	         CCFLAGS=${GCC_PAR}                      \
	         FFLAGS=${GCC_FTN_PAR}                   \
	         LDPAR=${GCC_LINK_PAR}                   \
	         SRCNAME='example1'                      \
	         OUTNAME='example1-gcc-deb'              \
	         example

sol-2:         
	@echo    example 2 solaris cc
	${MAKE}  DEBUG=${SOL_OPTIMIZED}                  \
	         CC=${SOL_CC}                            \
	         LDCMD=${SOL_CC_LINK}                    \
	         CFLAGS=${SOL_CC_PAR}                    \
	         LDPAR=${SOL_CC_LINK_PAR}                \
	         SRCNAME='example2'                      \
	         OUTNAME='example2-sol'                  \
	         example

gcc-2-deb:    
	echo     example 2 gcc with debug
	${MAKE}  DEBUG=${GCC_DEBUG}                      \
	         CC=${GCC}                               \
	         FTN=${GCC_FTN}                          \
	         LDCMD=${GCC_LINK}                       \
	         CCFLAGS=${GCC_PAR}                      \
	         FFLAGS=${GCC_FTN_PAR}                   \
	         LDPAR=${GCC_LINK_PAR}                   \
	         SRCNAME='example2'                      \
	         OUTNAME='example2-gcc-perf'             \
	         example

gcc-2-prof:    
	echo     example 2 gcc with debug
	${MAKE}  DEBUG=${GCC_PROFILER}                   \
	         CC=${GCC}                               \
	         FTN=${GCC_FTN}                          \
	         LDCMD=${GCC_LINK}                       \
	         CCFLAGS=${GCC_PAR}                      \
	         FFLAGS=${GCC_FTN_PAR}                   \
	         LDPAR=${GCC_LINK_PAR}                   \
	         SRCNAME='example2'                      \
	         OUTNAME='example2-gcc-perf-deb'         \
	         example

gcc-2-opt:    
	echo     example 2 gcc with OPT
	${MAKE}  DEBUG=${GCC_OPTIMIZED}                  \
	         CC=${GCC}                               \
	         FTN=${GCC_FTN}                          \
	         LDCMD=${GCC_LINK}                       \
	         CCFLAGS=${GCC_PAR}                      \
	         FFLAGS=${GCC_FTN_PAR}                   \
	         LDPAR=${GCC_LINK_PAR}                   \
	         SRCNAME='example2'                      \
	         OUTNAME='example2-gcc-opt'              \
	         example
sol-3:         
	@echo    example 3 solaris cc
	${MAKE}  DEBUG=${SOL_OPTIMIZED}                  \
	         CC=${SOL_CC}                            \
	         LDCMD=${SOL_CC_LINK}                    \
	         CFLAGS=${SOL_CC_PAR}                    \
	         LDPAR=${SOL_CC_LINK_PAR}                \
	         SRCNAME='example3'                      \
	         OUTNAME='example3-sol'                  \
	         example

gcc-3-perf:    
	echo     example 3 gcc with debug
	${MAKE}  DEBUG=${GCC_PROF}                       \
	         CC=${GCC}                               \
	         FTN=${GCC_FTN}                          \
	         LDCMD=${GCC_LINK}                       \
	         CCFLAGS=${GCC_PAR}                      \
	         FFLAGS=${GCC_FTN_PAR}                   \
	         LDPAR=${GCC_LINK_PAR}                   \
	         SRCNAME='example3'                      \
	         OUTNAME='example3-gcc-3-perf'           \
	         example

gcc-3-p-deb:    
	echo     example 3 gcc with debug
	${MAKE}  DEBUG=${GCC_DEBUG}                      \
	         CC=${GCC}                               \
	         FTN=${GCC_FTN}                          \
	         LDCMD=${GCC_LINK}                       \
	         CCFLAGS=${GCC_PAR}                      \
	         FFLAGS=${GCC_FTN_PAR}                   \
	         LDPAR=${GCC_LINK_PAR}                   \
	         SRCNAME='example3'                      \
	         OUTNAME='example3-gcc-perf-deb'         \
	         example

gcc-3-opt:    
	echo     example 3 gcc with OPT
	${MAKE}  DEBUG=${GCC_OPTIMIZED}                  \
	         CC=${GCC}                               \
	         FTN=${GCC_FTN}                          \
	         LDCMD=${GCC_LINK}                       \
	         CCFLAGS=${GCC_PAR}                      \
	         FFLAGS=${GCC_FTN_PAR}                   \
	         LDPAR=${GCC_LINK_PAR}                   \
	         SRCNAME='example3'                      \
	         OUTNAME='example3-gcc-opt'              \
	         example

gcc-4-deb:    
	echo     example 4 gcc with debug
	${MAKE}  DEBUG=${GCC_DEBUG}                      \
	         CC=${GCC}                               \
	         FTN=${GCC_FTN}                          \
	         LDCMD=${GCC_LINK}                       \
	         CCFLAGS=${GCC_PAR}                      \
	         FFLAGS=${GCC_FTN_PAR}                   \
	         LDPAR=${GCC_LINK_PAR}                   \
	         SRCNAME='example4'                      \
	         OUTNAME='example4-gcc-deb'              \
	         example

idl-gcc-sol:
	@echo    ----------------------------------------------------------
	@echo    'create idl/call-external interface for pomme-3 (solaris)'
	@echo    ----------------------------------------------------------
	${MAKE}  DEBUG=${GCC_DEBUG}                          \
	         CC=${GCC}                                   \
	         FTN=${GCC_FTN}                              \
	         LDCMD=${GCC_LINK}                           \
	         CCFLAGS="${GCC_PAR} ${IDL_PAR}"             \
	         FFLAGS=${GCC_FTN_PAR}                       \
	         LDPAR=${GCC_LINK_PAR}                       \
	         OUTNAME='I/Interface/pomme_idl_sol.so'      \
	         EXTNAME='I/Interface/pomme_idl_sol'         \
	         idl-sol

idl-gcc-linux:
	@echo    ---------------------------------------------------------
	@echo    'create idl/call-external interface for pomme-3  (linux!)'
	@echo    ---------------------------------------------------------
	${MAKE}  DEBUG=${GCC_DEBUG}                          \
	         CC=${GCC}                                   \
	         FTN=${GCC_FTN}                              \
	         LDCMD=${GCC_LINK}                           \
	         CCFLAGS="${GCC_PAR} ${IDL_PAR}"             \
	         FFLAGS=${GCC_FTN_PAR}                       \
	         LDPAR=${GCC_LINK_PAR}                       \
	         OUTNAME='I/Interface/pomme_idl_linux.so'    \
	         EXTNAME='I/Interface/pomme_idl_linux'       \
	         idl-linux

mex:
	@echo    ---------------------------------------
	@echo    create matlab/mex interface
	@echo    ---------------------------------------
	@${MAKE} SRC='pomme3_init.c' OUT='pomme_init'    createmex
	@${MAKE} SRC='pomme3_calc.c' OUT='pomme_calc'    createmex
	@${MAKE} SRC='pomme3_cntr.c' OUT='pomme_control' createmex

tags:
	- etags *.f* F/*.f* *.c C/*.c I/*.h

clean:
	- rm -f *.o
	- rm -f C/*.o
	- rm -f F/*.o
	- rm -f *.*~
	- rm -f *.mod
	- rm -f I/Interface/pomme_idl_sol.so

#------------------------------------------------------------------------------
#
#  SECOND ORDER TARGETS (DO NOT USE DIRECTLY)
#
#------------------------------------------------------------------------------

example:      ${EXAMPLE_DEP} ${SRCNAME}.o
	${LDCMD} ${DEBUG} ${EXAMPLE_OBJ} ${SRCNAME}.o    \
            -o ${OUTNAME} ${LDPAR} 

createmex:
	@echo    ---------------------------------------
	@echo    create matlab/mex interface: ${OUT}
	@echo    ---------------------------------------
	mex      ${SUB_M}/${SRC} ${POMME_SRC} -I${SUB_C} \
	         -outdir ${SUB_M}                        \
	         -output ${OUT}

idl-sol:    ${POMME_OBJ} I/Interface/pomme_idl.o
	${LDCMD} -shared -fPIC ${DEBUG} ${POMME_OBJ}       \
				I/Interface/pomme_idl.o							\
	         -o ${OUTNAME} ${LDPAR}

idl-linux:  ${POMME_OBJ} I/Interface/pomme_idl.o
	${LDCMD} -shared -fPIC ${DEBUG} ${POMME_OBJ}       \
				I/Interface/pomme_idl.o							\
	         -o ${OUTNAME} ${LDPAR}

#==============================================================================
#  EOF Makefile
#==============================================================================
