
# You can change this.

COMPILER_TYPE = INTEL

# You shouldn't change these.

INTEL_COMPILER_F90 = ifort
INTEL_COMPILER_C   = icc
INTEL_BASE_FLAGS   = -xS -Bstatic
INTEL_C_FLAGS      = ${INTEL_BASE_FLAGS} -DUNDERSCORE
INTEL_F90_FLAGS_O0 = ${INTEL_BASE_FLAGS} -r8 -O0
INTEL_F90_FLAGS_O1 = ${INTEL_BASE_FLAGS} -r8 -O1
INTEL_F90_FLAGS_O2 = ${INTEL_BASE_FLAGS} -r8 -O2
INTEL_F90_FLAGS_O3 = ${INTEL_BASE_FLAGS} -r8 -O3
INTEL_F90_FLAGS_O4 = ${INTEL_BASE_FLAGS} -r8 -O4

PGI_COMPILER_F90 = pgf90
PGI_COMPILER_C   = pgcc
PGI_BASE_FLAGS   = -tp core2-64 -r8 -Bstatic
PGI_C_FLAGS      = -DUNDERSCORE
PGI_F90_FLAGS_O0 = ${PGI_BASE_FLAGS} -O0
PGI_F90_FLAGS_O1 = ${PGI_BASE_FLAGS} -O1
PGI_F90_FLAGS_O2 = ${PGI_BASE_FLAGS} -O2 -fast
PGI_F90_FLAGS_O3 = ${PGI_BASE_FLAGS} -O3 -fastsse
PGI_F90_FLAGS_O4 = ${PGI_BASE_FLAGS} -O4 -fastsse

#NAG_COMPILER_F90 = nagf95
#NAG_COMPILER_C   = gcc
#NAG_BASE_FLAGS   = -r8 -Bstatic
#NAG_C_FLAGS      = -DUNDERSCORE
#NAG_F90_FLAGS_O0 = ${NAG_BASE_FLAGS} -O0
#NAG_F90_FLAGS_O1 = ${NAG_BASE_FLAGS} -O1
#NAG_F90_FLAGS_O2 = ${NAG_BASE_FLAGS} -O2
#NAG_F90_FLAGS_O3 = ${NAG_BASE_FLAGS} -O3
#NAG_F90_FLAGS_O4 = ${NAG_BASE_FLAGS} -O4

#G95_COMPILER_F90 = g95
#G95_COMPILER_C   = gcc
#G95_BASE_FLAGS   = -r8
#G95_C_FLAGS      = -DUNDERSCORE
#G95_F90_FLAGS_O0 = ${G95_BASE_FLAGS} -O0
#G95_F90_FLAGS_O1 = ${G95_BASE_FLAGS} -O1
#G95_F90_FLAGS_O2 = ${G95_BASE_FLAGS} -O2
#G95_F90_FLAGS_O3 = ${G95_BASE_FLAGS} -O3
#G95_F90_FLAGS_O4 = ${G95_BASE_FLAGS} -O4

GFORTRAN_COMPILER_F90 = gfortran
GFORTRAN_COMPILER_C   = gcc
GFORTRAN_BASE_FLAGS   = -fdefault-real-8
GFORTRAN_C_FLAGS      = -DUNDERSCORE
GFORTRAN_F90_FLAGS_O0 = ${GFORTRAN_BASE_FLAGS} -O0
GFORTRAN_F90_FLAGS_O1 = ${GFORTRAN_BASE_FLAGS} -O1
GFORTRAN_F90_FLAGS_O2 = ${GFORTRAN_BASE_FLAGS} -O2
GFORTRAN_F90_FLAGS_O3 = ${GFORTRAN_BASE_FLAGS} -O3
GFORTRAN_F90_FLAGS_O4 = ${GFORTRAN_BASE_FLAGS} -O4

COMPILER_F90          = ${${COMPILER_TYPE}_COMPILER_F90}
COMPILER_C            = ${${COMPILER_TYPE}_COMPILER_C}
COMPILER_C_FLAGS      = ${${COMPILER_TYPE}_C_FLAGS}
COMPILER_F90_FLAGS_O0 = ${${COMPILER_TYPE}_F90_FLAGS_O0}
COMPILER_F90_FLAGS_O1 = ${${COMPILER_TYPE}_F90_FLAGS_O1}
COMPILER_F90_FLAGS_O2 = ${${COMPILER_TYPE}_F90_FLAGS_O2}
COMPILER_F90_FLAGS_O3 = ${${COMPILER_TYPE}_F90_FLAGS_O3}
COMPILER_F90_FLAGS_O4 = ${${COMPILER_TYPE}_F90_FLAGS_O4}

SECOND_CPU_C = second_cpu.c
SECOND_CPU_O = second_cpu.o
TIMINGS_H    = timings.h
TIMINGS_F    = timings.f
TIMINGS_O    = timings.o
CLOCKTIME_HS = ${TIMINGS_H}
CLOCKTIME_C  = clocktime.c
CLOCKTIME_O  = clocktime.o
ARITHMETIC_OPERATIONS_F90 = arithmetic_operations.f90

SOURCES  = ${TIMINGS_F} ${ARITHMETIC_OPERATIONS_F90}

ARITHMETIC_OPERATIONS_INTEL_O0 = arithmetic_operations_ifort_O0
ARITHMETIC_OPERATIONS_INTEL_O1 = arithmetic_operations_ifort_O1
ARITHMETIC_OPERATIONS_INTEL_O2 = arithmetic_operations_ifort_O2
ARITHMETIC_OPERATIONS_INTEL_O3 = arithmetic_operations_ifort_O3
ARITHMETIC_OPERATIONS_INTEL_O4 = arithmetic_operations_ifort_O4
ARITHMETIC_OPERATIONS_INTEL_EXES = \
  ${ARITHMETIC_OPERATIONS_INTEL_O0} \
  ${ARITHMETIC_OPERATIONS_INTEL_O1} \
  ${ARITHMETIC_OPERATIONS_INTEL_O2} \
  ${ARITHMETIC_OPERATIONS_INTEL_O3} \
  ${ARITHMETIC_OPERATIONS_INTEL_O4}

ARITHMETIC_OPERATIONS_PGI_O0 = arithmetic_operations_pgf90_O0
ARITHMETIC_OPERATIONS_PGI_O1 = arithmetic_operations_pgf90_O1
ARITHMETIC_OPERATIONS_PGI_O2 = arithmetic_operations_pgf90_O2
ARITHMETIC_OPERATIONS_PGI_O3 = arithmetic_operations_pgf90_O3
ARITHMETIC_OPERATIONS_PGI_O4 = arithmetic_operations_pgf90_O4
ARITHMETIC_OPERATIONS_PGI_EXES = \
  ${ARITHMETIC_OPERATIONS_PGI_O0} \
  ${ARITHMETIC_OPERATIONS_PGI_O1} \
  ${ARITHMETIC_OPERATIONS_PGI_O2} \
  ${ARITHMETIC_OPERATIONS_PGI_O3} \
  ${ARITHMETIC_OPERATIONS_PGI_O4}

#ARITHMETIC_OPERATIONS_NAG_O0 = arithmetic_operations_nagf95_O0
#ARITHMETIC_OPERATIONS_NAG_O1 = arithmetic_operations_nagf95_O1
#ARITHMETIC_OPERATIONS_NAG_O2 = arithmetic_operations_nagf95_O2
#ARITHMETIC_OPERATIONS_NAG_O3 = arithmetic_operations_nagf95_O3
#ARITHMETIC_OPERATIONS_NAG_O4 = arithmetic_operations_nagf95_O4
#ARITHMETIC_OPERATIONS_NAG_EXES = /
#  ${ARITHMETIC_OPERATIONS_NAG_O0} /
#  ${ARITHMETIC_OPERATIONS_NAG_O1} /
#  ${ARITHMETIC_OPERATIONS_NAG_O2} /
#  ${ARITHMETIC_OPERATIONS_NAG_O3} /
#  ${ARITHMETIC_OPERATIONS_NAG_O4}

ARITHMETIC_OPERATIONS_GFORTRAN_O0 = arithmetic_operations_gfortran_O0
ARITHMETIC_OPERATIONS_GFORTRAN_O1 = arithmetic_operations_gfortran_O1
ARITHMETIC_OPERATIONS_GFORTRAN_O2 = arithmetic_operations_gfortran_O2
ARITHMETIC_OPERATIONS_GFORTRAN_O3 = arithmetic_operations_gfortran_O3
ARITHMETIC_OPERATIONS_GFORTRAN_O4 = arithmetic_operations_gfortran_O4
ARITHMETIC_OPERATIONS_GFORTRAN_EXES = \
  ${ARITHMETIC_OPERATIONS_GFORTRAN_O0} \
  ${ARITHMETIC_OPERATIONS_GFORTRAN_O1} \
  ${ARITHMETIC_OPERATIONS_GFORTRAN_O2} \
  ${ARITHMETIC_OPERATIONS_GFORTRAN_O3} \
  ${ARITHMETIC_OPERATIONS_GFORTRAN_O4}

#ARITHMETIC_OPERATIONS_G95_O0 = arithmetic_operations_g95_O0
#ARITHMETIC_OPERATIONS_G95_O1 = arithmetic_operations_g95_O1
#ARITHMETIC_OPERATIONS_G95_O2 = arithmetic_operations_g95_O2
#ARITHMETIC_OPERATIONS_G95_O3 = arithmetic_operations_g95_O3
#ARITHMETIC_OPERATIONS_G95_O4 = arithmetic_operations_g95_O4
#ARITHMETIC_OPERATIONS_G95_EXES = /
#  ${ARITHMETIC_OPERATIONS_G95_O0} /
#  ${ARITHMETIC_OPERATIONS_G95_O1} /
#  ${ARITHMETIC_OPERATIONS_G95_O2} /
#  ${ARITHMETIC_OPERATIONS_G95_O3} /
#  ${ARITHMETIC_OPERATIONS_G95_O4}

EXECUTABLES = ${ARITHMETIC_OPERATIONS_${COMPILER_TYPE}_EXES}

all:	${EXECUTABLES}

clean:
	rm -f *.[oadD] *.[mM][oO][dD]
	rm -f ${EXECUTABLES}

${ARITHMETIC_OPERATIONS_${COMPILER_TYPE}_O0}:	${ARITHMETIC_OPERATIONS_F90} ${CLOCKTIME_O} ${TIMINGS_O} ${SECOND_CPU_O}
	${COMPILER_F90} ${COMPILER_F90_FLAGS_O0} \
	  -o ${ARITHMETIC_OPERATIONS_${COMPILER_TYPE}_O0}   \
	  ${ARITHMETIC_OPERATIONS_F90}           \
	  ${CLOCKTIME_O} ${TIMINGS_O} ${SECOND_CPU_O}

${ARITHMETIC_OPERATIONS_${COMPILER_TYPE}_O1}:	${ARITHMETIC_OPERATIONS_F90} ${CLOCKTIME_O} ${TIMINGS_O} ${SECOND_CPU_O}
	${COMPILER_F90} ${COMPILER_F90_FLAGS_O1} \
	  -o ${ARITHMETIC_OPERATIONS_${COMPILER_TYPE}_O1}   \
	  ${ARITHMETIC_OPERATIONS_F90}           \
	  ${CLOCKTIME_O} ${TIMINGS_O} ${SECOND_CPU_O}

${ARITHMETIC_OPERATIONS_${COMPILER_TYPE}_O2}:	${ARITHMETIC_OPERATIONS_F90} ${CLOCKTIME_O} ${TIMINGS_O} ${SECOND_CPU_O}
	${COMPILER_F90} ${COMPILER_F90_FLAGS_O2} \
	  -o ${ARITHMETIC_OPERATIONS_${COMPILER_TYPE}_O2}   \
	  ${ARITHMETIC_OPERATIONS_F90}           \
	  ${CLOCKTIME_O} ${TIMINGS_O} ${SECOND_CPU_O}

${ARITHMETIC_OPERATIONS_${COMPILER_TYPE}_O3}:	${ARITHMETIC_OPERATIONS_F90} ${CLOCKTIME_O} ${TIMINGS_O} ${SECOND_CPU_O}
	${COMPILER_F90} ${COMPILER_F90_FLAGS_O3} \
	  -o ${ARITHMETIC_OPERATIONS_${COMPILER_TYPE}_O3}   \
	  ${ARITHMETIC_OPERATIONS_F90}           \
	  ${CLOCKTIME_O} ${TIMINGS_O} ${SECOND_CPU_O}

${ARITHMETIC_OPERATIONS_${COMPILER_TYPE}_O4}:	${ARITHMETIC_OPERATIONS_F90} ${CLOCKTIME_O} ${TIMINGS_O} ${SECOND_CPU_O}
	${COMPILER_F90} ${COMPILER_F90_FLAGS_O4} \
	  -o ${ARITHMETIC_OPERATIONS_${COMPILER_TYPE}_O4}   \
	  ${ARITHMETIC_OPERATIONS_F90}           \
	  ${CLOCKTIME_O} ${TIMINGS_O} ${SECOND_CPU_O}

${CLOCKTIME_O}:	${CLOCKTIME_C} ${CLOCKTIME_HS}
	${COMPILER_C} ${COMPILER_C_FLAGS} -I. -c ${CLOCKTIME_C}

${TIMINGS_O}:	${TIMINGS_F}
	${COMPILER_F90} ${COMPILER_F90_FLAGS_O0} -c ${TIMINGS_F}

${SECOND_CPU_O}:	${SECOND_CPU_C}
	${COMPILER_C} ${COMPILER_C_FLAGS} -I. -c ${SECOND_CPU_C}

