#
# Hit v1.0
#
# Makefile Rev.3
#
# Internal library for C + MPI driver
# (c) 2010, Arturo González-Escribano
#
# 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

# 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= -g
VAMPIR_FLAGS=

# BUILD FULL COMPILERS FLAGS
INCLUDEDIRS=-I../../../metis/Lib -I../../../iohb1.0 -L../../../metis/ -L../../../iohb1.0
CFLAGS=$(WARNINGS) $(VAMPIR_FLAGS) $(DEBUG) $(OPTIMIZATION) $(INCLUDEDIRS) -I$(INCLUDE_DIR) -L$(LIB_DIR)
LIBS= -l$(LIBNAME) -lm -lmetis  -liohb


# LIB TARGETS
TOPODIM=testTopologyArrayDims
GROUPLAY=testGroupLayout
BLOCKSL=testLayoutBlocksL
BROADDIM=testBroadCastDim
ACTRANKS=testActiveRanks
SHPUTILS=testShapeUtils
ALL2ALL=testAlltoAll
PATTERN=testPattern
LAYOUTS=testLayouts
SPARSE=testSparse
OBJS=$(TOPODIM) $(GROUPLAY) $(BLOCKSL) $(SHPUTILS) $(ACTRANKS) $(BROADDIM) $(ALL2ALL) $(PATTERN) $(LAYOUTS) $(SPARSE)

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

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

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

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

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

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

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

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

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


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

$(SPARSE): $(SPARSE).c $(LIB) debug.c
		$(MPICC) $(CFLAGS) -o $(SPARSE) debug.c $(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=""

