
# 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} -UUNDERSCORE
INTEL_C_FLAGS_O0 = ${INTEL_BASE_FLAGS} -O0
INTEL_C_FLAGS_O1 = ${INTEL_BASE_FLAGS} -O1
INTEL_C_FLAGS_O2 = ${INTEL_BASE_FLAGS} -O2
INTEL_C_FLAGS_O3 = ${INTEL_BASE_FLAGS} -O3
INTEL_C_FLAGS_O4 = ${INTEL_BASE_FLAGS} -O4

PGI_COMPILER_F90 = pgf90
PGI_COMPILER_C   = pgcc
PGI_BASE_FLAGS   = -tp core2-64 -Bstatic
PGI_C_FLAGS      = -UUNDERSCORE
PGI_C_FLAGS_O0 = ${PGI_BASE_FLAGS} -O0
PGI_C_FLAGS_O1 = ${PGI_BASE_FLAGS} -O1
PGI_C_FLAGS_O2 = ${PGI_BASE_FLAGS} -O2 -fast
PGI_C_FLAGS_O3 = ${PGI_BASE_FLAGS} -O3 -fastsse
PGI_C_FLAGS_O4 = ${PGI_BASE_FLAGS} -O4 -fastsse

#NAG_COMPILER_F90 = nagf95
#NAG_COMPILER_C   = gcc
#NAG_BASE_FLAGS   = -Bstatic
#NAG_C_FLAGS      = -UUNDERSCORE
#NAG_C_FLAGS_O0 = ${NAG_BASE_FLAGS} -O0
#NAG_C_FLAGS_O1 = ${NAG_BASE_FLAGS} -O1
#NAG_C_FLAGS_O2 = ${NAG_BASE_FLAGS} -O2
#NAG_C_FLAGS_O3 = ${NAG_BASE_FLAGS} -O3
#NAG_C_FLAGS_O4 = ${NAG_BASE_FLAGS} -O4

#G95_COMPILER_F90 = g95
#G95_COMPILER_C   = gcc
#G95_BASE_FLAGS   = -r8
#G95_C_FLAGS      = -UUNDERSCORE
#G95_C_FLAGS_O0 = ${G95_BASE_FLAGS} -O0
#G95_C_FLAGS_O1 = ${G95_BASE_FLAGS} -O1
#G95_C_FLAGS_O2 = ${G95_BASE_FLAGS} -O2
#G95_C_FLAGS_O3 = ${G95_BASE_FLAGS} -O3
#G95_C_FLAGS_O4 = ${G95_BASE_FLAGS} -O4

GFORTRAN_COMPILER_F90 = gfortran
GFORTRAN_COMPILER_C   = gcc
GFORTRAN_BASE_FLAGS   = 
GFORTRAN_C_FLAGS      = -UUNDERSCORE
GFORTRAN_C_FLAGS_O0 = ${GFORTRAN_BASE_FLAGS} -O0
GFORTRAN_C_FLAGS_O1 = ${GFORTRAN_BASE_FLAGS} -O1
GFORTRAN_C_FLAGS_O2 = ${GFORTRAN_BASE_FLAGS} -O2
GFORTRAN_C_FLAGS_O3 = ${GFORTRAN_BASE_FLAGS} -O3
GFORTRAN_C_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_C_FLAGS_O0 = ${${COMPILER_TYPE}_C_FLAGS_O0}
COMPILER_C_FLAGS_O1 = ${${COMPILER_TYPE}_C_FLAGS_O1}
COMPILER_C_FLAGS_O2 = ${${COMPILER_TYPE}_C_FLAGS_O2}
COMPILER_C_FLAGS_O3 = ${${COMPILER_TYPE}_C_FLAGS_O3}
COMPILER_C_FLAGS_O4 = ${${COMPILER_TYPE}_C_FLAGS_O4}

SECOND_CPU_C = second_cpu.c
SECOND_CPU_O = second_cpu.o
CLOCKTIME_C  = clocktime.c
CLOCKTIME_O  = clocktime.o
LOOP_CARRIED_DEPENDENCIES_C = loop_carried_dependencies.c

SOURCES  = ${SECOND_CPU_C} ${LOOP_CARRIED_DEPENDENCIES_C}
LIBS     = -lm

LOOP_CARRIED_DEPENDENCIES_INTEL_O0 = loop_carried_dependencies_icc_O0
LOOP_CARRIED_DEPENDENCIES_INTEL_O1 = loop_carried_dependencies_icc_O1
LOOP_CARRIED_DEPENDENCIES_INTEL_O2 = loop_carried_dependencies_icc_O2
LOOP_CARRIED_DEPENDENCIES_INTEL_O3 = loop_carried_dependencies_icc_O3
LOOP_CARRIED_DEPENDENCIES_INTEL_O4 = loop_carried_dependencies_icc_O4
LOOP_CARRIED_DEPENDENCIES_INTEL_EXES = \
  ${LOOP_CARRIED_DEPENDENCIES_INTEL_O0} \
  ${LOOP_CARRIED_DEPENDENCIES_INTEL_O1} \
  ${LOOP_CARRIED_DEPENDENCIES_INTEL_O2} \
  ${LOOP_CARRIED_DEPENDENCIES_INTEL_O3} \
  ${LOOP_CARRIED_DEPENDENCIES_INTEL_O4}

LOOP_CARRIED_DEPENDENCIES_PGI_O0 = loop_carried_dependencies_pgcc_O0
LOOP_CARRIED_DEPENDENCIES_PGI_O1 = loop_carried_dependencies_pgcc_O1
LOOP_CARRIED_DEPENDENCIES_PGI_O2 = loop_carried_dependencies_pgcc_O2
LOOP_CARRIED_DEPENDENCIES_PGI_O3 = loop_carried_dependencies_pgcc_O3
LOOP_CARRIED_DEPENDENCIES_PGI_O4 = loop_carried_dependencies_pgcc_O4
LOOP_CARRIED_DEPENDENCIES_PGI_EXES = \
  ${LOOP_CARRIED_DEPENDENCIES_PGI_O0} \
  ${LOOP_CARRIED_DEPENDENCIES_PGI_O1} \
  ${LOOP_CARRIED_DEPENDENCIES_PGI_O2} \
  ${LOOP_CARRIED_DEPENDENCIES_PGI_O3} \
  ${LOOP_CARRIED_DEPENDENCIES_PGI_O4}

#LOOP_CARRIED_DEPENDENCIES_NAG_O0 = loop_carried_dependencies_nagf95_O0
#LOOP_CARRIED_DEPENDENCIES_NAG_O1 = loop_carried_dependencies_nagf95_O1
#LOOP_CARRIED_DEPENDENCIES_NAG_O2 = loop_carried_dependencies_nagf95_O2
#LOOP_CARRIED_DEPENDENCIES_NAG_O3 = loop_carried_dependencies_nagf95_O3
#LOOP_CARRIED_DEPENDENCIES_NAG_O4 = loop_carried_dependencies_nagf95_O4
#LOOP_CARRIED_DEPENDENCIES_NAG_EXES = /
#  ${LOOP_CARRIED_DEPENDENCIES_NAG_O0} /
#  ${LOOP_CARRIED_DEPENDENCIES_NAG_O1} /
#  ${LOOP_CARRIED_DEPENDENCIES_NAG_O2} /
#  ${LOOP_CARRIED_DEPENDENCIES_NAG_O3} /
#  ${LOOP_CARRIED_DEPENDENCIES_NAG_O4}

LOOP_CARRIED_DEPENDENCIES_GFORTRAN_O0 = loop_carried_dependencies_gcc_O0
LOOP_CARRIED_DEPENDENCIES_GFORTRAN_O1 = loop_carried_dependencies_gcc_O1
LOOP_CARRIED_DEPENDENCIES_GFORTRAN_O2 = loop_carried_dependencies_gcc_O2
LOOP_CARRIED_DEPENDENCIES_GFORTRAN_O3 = loop_carried_dependencies_gcc_O3
LOOP_CARRIED_DEPENDENCIES_GFORTRAN_O4 = loop_carried_dependencies_gcc_O4
LOOP_CARRIED_DEPENDENCIES_GFORTRAN_EXES = \
  ${LOOP_CARRIED_DEPENDENCIES_GFORTRAN_O0} \
  ${LOOP_CARRIED_DEPENDENCIES_GFORTRAN_O1} \
  ${LOOP_CARRIED_DEPENDENCIES_GFORTRAN_O2} \
  ${LOOP_CARRIED_DEPENDENCIES_GFORTRAN_O3} \
  ${LOOP_CARRIED_DEPENDENCIES_GFORTRAN_O4}

#LOOP_CARRIED_DEPENDENCIES_G95_O0 = loop_carried_dependencies_g95_O0
#LOOP_CARRIED_DEPENDENCIES_G95_O1 = loop_carried_dependencies_g95_O1
#LOOP_CARRIED_DEPENDENCIES_G95_O2 = loop_carried_dependencies_g95_O2
#LOOP_CARRIED_DEPENDENCIES_G95_O3 = loop_carried_dependencies_g95_O3
#LOOP_CARRIED_DEPENDENCIES_G95_O4 = loop_carried_dependencies_g95_O4
#LOOP_CARRIED_DEPENDENCIES_G95_EXES = /
#  ${LOOP_CARRIED_DEPENDENCIES_G95_O0} /
#  ${LOOP_CARRIED_DEPENDENCIES_G95_O1} /
#  ${LOOP_CARRIED_DEPENDENCIES_G95_O2} /
#  ${LOOP_CARRIED_DEPENDENCIES_G95_O3} /
#  ${LOOP_CARRIED_DEPENDENCIES_G95_O4}

EXECUTABLES = ${LOOP_CARRIED_DEPENDENCIES_${COMPILER_TYPE}_EXES}

all:	${EXECUTABLES}

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

${LOOP_CARRIED_DEPENDENCIES_${COMPILER_TYPE}_O0}:	${LOOP_CARRIED_DEPENDENCIES_C} ${CLOCKTIME_O} ${SECOND_CPU_O} ${LIBS}
	${COMPILER_C} ${COMPILER_C_FLAGS_O0} \
	  -o ${LOOP_CARRIED_DEPENDENCIES_${COMPILER_TYPE}_O0}   \
	  ${LOOP_CARRIED_DEPENDENCIES_C}           \
	  ${CLOCKTIME_O} ${SECOND_CPU_O} ${LIBS}

${LOOP_CARRIED_DEPENDENCIES_${COMPILER_TYPE}_O1}:	${LOOP_CARRIED_DEPENDENCIES_C} ${CLOCKTIME_O} ${SECOND_CPU_O} ${LIBS}
	${COMPILER_C} ${COMPILER_C_FLAGS_O1} \
	  -o ${LOOP_CARRIED_DEPENDENCIES_${COMPILER_TYPE}_O1}   \
	  ${LOOP_CARRIED_DEPENDENCIES_C}           \
	  ${CLOCKTIME_O} ${SECOND_CPU_O} ${LIBS}

${LOOP_CARRIED_DEPENDENCIES_${COMPILER_TYPE}_O2}:	${LOOP_CARRIED_DEPENDENCIES_C} ${CLOCKTIME_O} ${SECOND_CPU_O} ${LIBS}
	${COMPILER_C} ${COMPILER_C_FLAGS_O2} \
	  -o ${LOOP_CARRIED_DEPENDENCIES_${COMPILER_TYPE}_O2}   \
	  ${LOOP_CARRIED_DEPENDENCIES_C}           \
	  ${CLOCKTIME_O} ${SECOND_CPU_O} ${LIBS}

${LOOP_CARRIED_DEPENDENCIES_${COMPILER_TYPE}_O3}:	${LOOP_CARRIED_DEPENDENCIES_C} ${CLOCKTIME_O} ${SECOND_CPU_O} ${LIBS}
	${COMPILER_C} ${COMPILER_C_FLAGS_O3} \
	  -o ${LOOP_CARRIED_DEPENDENCIES_${COMPILER_TYPE}_O3}   \
	  ${LOOP_CARRIED_DEPENDENCIES_C}           \
	  ${CLOCKTIME_O} ${SECOND_CPU_O} ${LIBS}

${LOOP_CARRIED_DEPENDENCIES_${COMPILER_TYPE}_O4}:	${LOOP_CARRIED_DEPENDENCIES_C} ${CLOCKTIME_O} ${SECOND_CPU_O} ${LIBS}
	${COMPILER_C} ${COMPILER_C_FLAGS_O4} \
	  -o ${LOOP_CARRIED_DEPENDENCIES_${COMPILER_TYPE}_O4}   \
	  ${LOOP_CARRIED_DEPENDENCIES_C}           \
	  ${CLOCKTIME_O} ${SECOND_CPU_O} ${LIBS}

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

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

