SNIFF_MAKEDIR    = .sniffdir
#       Include the list of object files
include ofiles.incl

#------------------------ platform dependencies -------------------------------------

# where is the parSA package situated?

PARSAHOME     = ..

PARSALIB_PATH = $(PARSAHOME)/lib
PARSAINC_PATH = $(PARSAHOME)/include 


# choose one of solaris, linux, linuxhome
#ARCH            = solaris
ARCH            = $(shell uname)
# number to indicate the system version
#VERS            = _2_6
RELEASE         = $(shell uname -r | awk -F- '{print "_"$$1}')
VERS            = $(subst .,_,$(RELEASE))
# set an environment variable MPI to YES to produce parallel version
MPI		= YES

ifeq ($(MPI), YES)
  MPIDEFINE       = -DMPI
endif

#---------------------------
#--------- ScaMPI ----------
#---------------------------

ifeq ($(ARCH) , ScaMPI)
MPI_HOME	= /opt/scali

MPILIB_LIST	= -ldbfork -lmpi -lsocket -lnsl
MPIINC_PATH	= $(MPI_HOME)/include

STDLIB_PATH = -L/local/gnu/lib
STDLIB_LIST = -lm #-lstdc++
STDINC_PATH = 

endif

#---------------------------
#--------- SOLARIS ---------
#---------------------------

ifeq ($(ARCH) , solaris)
MPI_HOME       = /usr/local/mpich1.2/mpi_solaris
MPI_ARCH	    = solaris
MPI_CHANELL	    = ch_p4

MPILIB_PATH = $(MPI_HOME)/lib
MPILIB_LIST = -lmpich -lsocket -lnsl 
MPIINC_PATH = $(MPI_HOME)/build/$(MPI_ARCH)/$(MPI_CHANELL)/include $(MPI_HOME)/include
# MPIINC_PATH = -I$(MPI_HOME)/include

MPE_DIR     = $(MPIR_HOME)/$(ARCH)
MPE_LIBS        = #-lmpe
MPE_GRAPH       =


STDLIB_PATH = -L/local/gnu/lib
STDLIB_LIST = -lm #-lstdc++
STDINC_PATH = 

endif

#---------------------------
#---- LINUX ----------------
#---------------------------

ifeq ($(ARCH) , Linux)
MPI_HOME       = $(MPICH_ROOT)
MPI_ARCH       = Linux
MPI_CHANELL    = ch_p4

MPILIB_PATH = $(MPI_HOME)/lib
MPILIB_LIST = -lpmpich++ -lmpich #-lsocket -lnsl 
MPIINC_PATH = $(MPI_HOME)/include # $(MPI_HOME)/build/$(MPI_ARCH)/$(MPI_CHANELL)/include


MPE_DIR     = $(MPIR_HOME)/$(ARCH)
MPE_LIBS        = -lmpe
MPE_GRAPH       =


LIBDEVPATH    = /nfs/direct/prod/lib.Linux-i686
ROOTLIBS      = $(shell root-config --libs)
STDLIB_PATH = -L/usr/local/list
STDLIB_LIST = $(ROOTLIBS) -Wl,-rpath $(LIBDEVPATH) -L$(LIBDEVPATH) -lMichelson_2_6 -lm -lMathMore -lASImage
STDINC_PATH = 

# PARSAHOME     = /home/parsa/parSA

endif

ifdef MPIDEFINE
OSLIB_PATH      = $(MPILIB_PATH) $(STDLIB_PATH) $(PARSALIB_PATH) 
OSLIB_LIST      = -lparSA_$(ARCH)$(VERS) $(MPILIB_LIST) $(STDLIB_LIST)   #SOLARIS !!!
OSINC_PATH      = $(MPIINC_PATH) $(PARSAINC_PATH)
else
OSLIB_PATH      = $(STDLIB_PATH) $(PARSALIB_PATH) 
OSLIB_LIST      = -lseqSA_$(ARCH)$(VERS) $(STDLIB_LIST) 
OSINC_PATH      = $(PARSAINC_PATH)
endif

#------------------------ platform dependencies -------------------------------------

DEFINES         = -D_GNU $(MPIDEFINE)

#
# ----- C++ compiler
ifeq ($(PURIFY) , ON)
  PURIFYCMD = purify -best-effort -cache-dir=/var/tmp/taiko
endif
PROFILE =  # -pg
CXX = $(PURIFYCMD) g++ $(PROFILE)
#CXX = CC
# ----- C++ flags
#OPTFLAGS =  -Winline -O2 -fomit-frame-pointer -g
#OPTFLAGS =  -fbounds-checking -g
#OPTFLAGS = -g 
OPTFLAGS = -O4
#CXXFLAGS = -fno-implicit-templates -DHAVE_STDLIB_H=1 $(OPTFLAGS) $(INCLUDE_DIR) $(DEFINES) -D_REENTRANT 
CXXFLAGS = -DHAVE_STDLIB_H=1 $(OPTFLAGS) $(DEFINES) -D_REENTRA -fpermissive
# program for linking an executable
LINK = $(CXX)

LIB_LIST = $(OSLIB_LIST)

# ----- the target 
TARGET       = SA_Michelson_$(ARCH)$(VERS)

INC_PATH = -I../../include -I. -I$(ROOTSYS)/include $(addprefix -I,$(OSINC_PATH))
LIB_PATH = $(addprefix -L,$(OSLIB_PATH))

$(TARGET) : $(OFILES) SA_main.cc # $(PARSALIB_PATH)/libparSA_$(ARCH)$(VERS).a # $(PARSALIBPATH)/libseqSA_$(ARCH)$(VERS).a
	$(CXX) $(LDFLAGS) $(CXXFLAGS) $(INC_PATH) $(LIB_PATH) $(LIB_LIST) $^ -o $(TARGET) 
	chmod 755 $(TARGET)

SA_test : $(OFILES) SA_test.cc
	$(CXX) $(LDFLAGS) $(CXXFLAGS) $(INC_PATH) $(LIB_PATH) $(LIB_LIST) $^ -o $@
	chmod 755 $@

.SUFFIXES : .cc .h .o

.cc.o:
	$(CXX) $(INC_PATH) $(CXXFLAGS) $(OTHER_CXXFLAGS) -c $*.cc -o $*.o

clean:
	rm -f *.o
	gmake