# --------------------------------------------------------------#
# Makefile for GMCT                                             #
# --------------------------------------------------------------#

# This Makefile was tested under Linux. Other systems may require changes

ZLIBPATH   =  "/home/thomas/lib/zlib-1.2.11"
CFLAGS    = -O3 -I$(ZLIBPATH)  \
	    -pedantic -W -Wall
CXXFLAGS  =  $(CFLAGS)
# check for the standard C++ compiler set usually via the shell
# environment variable CXX, if not present try the alias c++, if
# also not present try g++
CXX ?= c++
CXX ?= g++
# set a specific compiler or compiler version
#CXX = g++-9
#CXX = clang++-9
#CXX = icpc
$(info "compiler used: $(CXX) definition origin: $(origin CXX)")

# ---------------------------------------------
LIBRARY  =  -L$(ZLIBPATH) -lz
# ---------------------------------------------
AR = ar rv
# ---------------------------------------------
GMCT     = main-gmct.o io-gmct.o titration.o mct.o substate-util.o random.o
SMT      = main-smt.o io-gmct.o smt.o titration.o substate-util.o
SMTE     = main-smt-entropies.o io-gmct.o smt-entropies.o titration.o
TRAJ     = main-traj-analysis.o substate-util.o io-gmct.o traj-analysis.o titration.o
TRAJC    = main-traj-analysis-coop.o substate-util.o free-energy-util.o io-gmct.o titration.o traj-analysis-coop.o random.o
SMTC     = main-smt-coop.o io-gmct.o smt-coop.o titration.o substate-util.o free-energy-util.o random.o
MCTC     = main-mct-coop.o io-gmct.o titration.o mct-coop.o mct.o fep-mct.o biased-mct.o jarzynski-mct.o ti-mct.o substate-util.o free-energy-util.o random.o
MSMTC    = main-macro-smt-coop.o io-gmct.o titration.o macro-smt-coop.o mct.o wang-landau-mct.o substate-util.o random.o
MMCTC    = main-macro-mct-coop.o io-gmct.o titration.o macro-mct-coop.o mct.o wang-landau-mct.o wang-landau-mct-original.o substate-util.o random.o
TRA      = main-tanford-roxby-analysis.o io-gmct.o titration.o
RTIT     = main-reduce-titration.cpp substate-util.o io-gmct.o smt.o titration.o
STEN     = main-state-energy.o io-gmct.o titration.o substate-util.o state-energy.o
HYBRID   = main-hybrid.o hybrid.o io-gmct.o titration.o substate-util.o clustering-util.o
HYBRIDC  = main-hybrid-coop.o hybrid-coop.o io-gmct.o titration.o mct.o substate-util.o clustering-util.o free-energy-util.o random.o
#MEX      = matrix-example.o io-gmct.o
# ---------------------------------------------
all:	gmct smt traj-analysis-coop traj-analysis \
        tanford-roxby-analysis smt-coop mct-coop reduce-titra \
        macro-smt-coop macro-mct-coop state-energy hybrid hybrid-coop
extra:	gmct smt traj-analysis-coop traj-analysis \
        tanford-roxby-analysis smt-coop mct-coop reduce-titra \
        macro-smt-coop macro-mct-coop state-energy hybrid hybrid-coop smt-entropies
traj-analysis:	$(TRAJ)
	$(CXX) $(CFLAGS) $(TRAJ) $(LIBRARY) -o traj-analysis
traj-analysis-coop:	$(TRAJC)
	$(CXX) $(CFLAGS) $(TRAJC) $(LIBRARY) -o traj-analysis-coop
smt-coop: $(SMTC)
	$(CXX) $(CFLAGS) $(SMTC) $(LIBRARY) -o smt-coop
mct-coop: $(MCTC)
	$(CXX) $(CFLAGS) $(MCTC) $(LIBRARY) -o mct-coop
macro-smt-coop: $(MSMTC)
	$(CXX) $(CFLAGS) $(MSMTC) $(LIBRARY) -o macro-smt-coop
macro-mct-coop: $(MMCTC)
	$(CXX) $(CFLAGS) $(MMCTC) $(LIBRARY) -o macro-mct-coop
gmct:	$(GMCT)
	$(CXX) $(CFLAGS) $(GMCT) $(LIBRARY) -o gmct
smt:	$(SMT)
	$(CXX) $(CFLAGS) $(SMT) $(LIBRARY) -o smt
smt-entropies:	$(SMTE)
	$(CXX) $(CFLAGS) $(SMTE) $(LIBRARY) -o smt-entropies
reduce-titra:	$(RTIT)
	$(CXX) $(CFLAGS) $(RTIT) $(LIBRARY) -o reduce-titra
tanford-roxby-analysis:	$(TRA)
	$(CXX) $(CFLAGS) $(TRA) $(LIBRARY) -o tanford-roxby-analysis
state-energy:	$(STEN)
	$(CXX) $(CFLAGS) $(STEN) $(LIBRARY) -o state-energy
hybrid:	$(HYBRID)
	$(CXX) $(CFLAGS) $(HYBRID) $(LIBRARY) -o hybrid
hybrid-coop:	$(HYBRIDC)
	$(CXX) $(CFLAGS) $(HYBRIDC) $(LIBRARY) -o hybrid-coop
matrix-example:	$(MEX)
	$(CXX) $(CXXFLAGS) $(MEX) $(LIBRARY) -o matrix-example
clean:
	rm -f *.o *~ *.a
install :
	if test ! -d "bin"; then mkdir bin; fi
	if test -f "smt"; then mv smt ./bin/; fi
	if test -f "gmct"; then mv gmct ./bin/; fi
	if test -f "smt-coop"; then mv smt-coop ./bin/; fi
	if test -f "mct-coop"; then mv mct-coop ./bin/; fi
	if test -f "traj-analysis-coop"; then mv traj-analysis-coop ./bin/; fi
	if test -f "macro-smt-coop"; then mv macro-smt-coop ./bin/; fi
	if test -f "macro-mct-coop"; then mv macro-mct-coop ./bin/; fi
	if test -f "smt-entropies"; then mv smt-entropies ./bin/; fi
	if test -f "state-energy"; then mv state-energy ./bin/; fi
	if test -f "tanford-roxby-analysis"; then mv tanford-roxby-analysis ./bin/; fi
	if test -f "reduce-titra"; then mv reduce-titra ./bin/; fi
	if test -f "traj-analysis"; then mv traj-analysis ./bin/; fi
	if test -f "hybrid"; then mv hybrid ./bin/; fi
	if test -f "hybrid-coop"; then mv hybrid-coop ./bin/; fi
new:
	makedepend -fMakefile \
        main-gmct.cpp main-smt.cpp io-gmct.cpp titration.cpp mct.cpp \
        biased-mct.o fep-mct.o jarzynski-mct.o                       \
        mct-wang-landau.cpp mct-wang-landau-original.cpp             \
        main-reduce-titra.cpp main-tanford-roxby-analysis.cpp        \
        main-traj-analysis.cpp traj-analysis.cpp                     \
	main-traj-analysis-coop.cpp traj-analysis-coop.cpp           \
	main-smt.cpp smt.cpp                                         \
	main-smt-entropies.cpp smt-entropies.cpp                     \
	main-smt-coop.cpp smt-coop.cpp                               \
	main-mct-coop.cpp mct-coop.cpp                               \
	main-macro-smt-coop.cpp macro-smt-coop.cpp                   \
	main-macro-mct-coop.cpp macro-mct-coop.cpp                   \
        main-state-energy.cpp state-energy.cpp                       \
        main-hybrid.cpp hybrid.cpp                                   \
        main-hybrid-coop.cpp hybrid-coop.cpp                         \
        free-energy-util.cpp clustering-util.cpp substate-util.cpp
#        matrix-example.cpp
