#
# Hit v1.0
#
# Makefile Rev.3
#
# Internal library for C + MPI driver
# (c) 2010, Arturo Gonzalez Escribano
#           Javier Fresno Bausela
#           Carlos de Blas Carton
#
# NOTE: Default values are tuned for GNU/Linux using gcc, and Mpich2
# 		See targets for other specific machines at the end of the file
# 

# LOCAL COMPILERS
CC=gcc
MPICC=mpicc

# FILES AND DIRS
INCLUDE_DIR=../../include
LIB_DIR=../../lib
LIBNAME=hit
LIB=$(LIB_DIR)/lib$(LIBNAME).a

INCLUDEDIRS=-I../../metis/Lib


# DEFAULT FLAGS (GNU/Linux AND Mpich2)
# (they may be changed by other compilation targets, like debug)
WARNINGS=-Wall -W -Wconversion -Wcast-qual -Wshadow -Wwrite-strings
OPTIMIZATION=-O3
DEBUG=
VAMPIR_FLAGS=

# BUILD FULL COMPILERS FLAGS
CFLAGS=$(WARNINGS) $(VAMPIR_FLAGS) $(DEBUG) $(OPTIMIZATION) -I$(INCLUDE_DIR) $(INCLUDEDIRS) -L$(LIB_DIR)
LIBS= -l$(LIBNAME) -lm


# LIB TARGETS
TILES=testTiles
TOPOLOGY=testTopology
LAYOUT=testLayout
LAYOUTG=testLayoutGroup
STRIDES=testStrides
COMM=testCom
REDUCE=testReduce
RANKS=testRanks
DIMBC=testDimBroadCast
PAT=testPat
COMMHIER=testComHier
SPARSE=testSparseShape
OBJS=$(TILES) $(SPARSE) $(TOPOLOGY) $(LAYOUT) $(LAYOUTG) $(COMM) $(STRIDES) $(REDUCE) $(RANKS) $(DIMBC) $(COMMHIER) $(PAT)

#
# MAIN TARGET: LIBRARY
#
all: $(OBJS)

$(STRIDES): $(STRIDES).c $(LIB)
		$(CC) $(CFLAGS) -o $(STRIDES) $(STRIDES).c $(LIBS)

$(TILES): $(TILES).c $(LIB)
		$(CC) $(CFLAGS) -o $(TILES) $(TILES).c $(LIBS)

$(TOPOLOGY): $(TOPOLOGY).c $(LIB)
		$(MPICC) $(CFLAGS) -o $(TOPOLOGY) $(TOPOLOGY).c $(LIBS)
		
$(LAYOUT): $(LAYOUT).c $(LIB)
		$(MPICC) $(CFLAGS) -o $(LAYOUT) $(LAYOUT).c $(LIBS)

$(LAYOUTG): $(LAYOUTG).c $(LIB)
		$(MPICC) $(CFLAGS) -o $(LAYOUTG) $(LAYOUTG).c $(LIBS)
		
$(COMM): $(COMM).c $(LIB)
		$(MPICC) $(CFLAGS) -o $(COMM) $(COMM).c $(LIBS)

$(REDUCE): $(REDUCE).c $(LIB)
		$(MPICC) $(CFLAGS) -o $(REDUCE) $(REDUCE).c $(LIBS)
		
$(RANKS): $(RANKS).c $(LIB)
		$(MPICC) $(CFLAGS) -o $(RANKS) $(RANKS).c $(LIBS)
		
$(DIMBC): $(DIMBC).c $(LIB)
		$(MPICC) $(CFLAGS) -o $(DIMBC) $(DIMBC).c $(LIBS)		
				
$(PAT): $(PAT).c $(LIB)
		$(MPICC) $(CFLAGS) -o $(PAT) $(PAT).c $(LIBS)

$(COMMHIER): $(COMMHIER).c $(LIB)
		$(MPICC) $(CFLAGS) -o $(COMMHIER) $(COMMHIER).c $(LIBS)

$(SPARSE): $(SPARSE).c $(LIB)
		$(MPICC) $(CFLAGS) -o $(SPARSE) $(SPARSE).c $(LIBS)

#
# DEBUG
#
debug:
	make DEBUG="-DDEBUG -g" OPTIMIZATION=""

#
# OPTIMIZED: DEFINITIVE
#
optimize:
	make OPTIMIZATION="-O3"

#
# EXTRA DEFINITIONS TO USE Vampir PROFILING TOOL
#
vampir:
	make PAL_ROOT="/home/vampir/vampir/" VAMPIR_FLAGS="-g" OPTIMIZATION=""

#
# CLEAN
#
clean:
	rm -f $(OBJS)


#
# COMPILING FOR bluegene (EPCC)
#
bluegene:
	make CC="mpixlCC" MPICC="mpixlCC" OPTIMIZATION="-O4"

#
# COMPILING FOR hpcx (EPCC)
#
hpcx:
	make OBJECT_MODE=64 CC="cc -q64" MPICC="mpcc_r -q64" OPTIMIZATION="-O4"

#
# COMPILING FOR geopar (UVa)
#
geopar:
	make CC="cc" MPICC="mpicc" OPTIMIZATION="-O5" WARNINGS=""

