# Add the names of all source files including the sub directory.

SOURCES = \
\
Main.cpp \
\
Framework/Solver.cpp \
Framework/Modules.cpp \
\
Utilities/Utilities.cpp \
Utilities/ParameterSet.cpp \
Utilities/TemplateParameterSet.cpp \
Utilities/Operator.cpp \
Utilities/OperatorVector.cpp \
Utilities/DiagonalOperator.cpp \
Utilities/OperatorDescription.cpp \
\
Interface/GlobalConfiguration.cpp \
Interface/ModelProperties.cpp \
Interface/LatticeProperties.cpp \
Interface/GlobalProperties.cpp \
Interface/StatePair.cpp \
Interface/Bond.cpp \
\
Modules/TemplateModuleType/TemplateModuleType.cpp \
Modules/TemplateModuleType/TemplateModuleImplementation/TemplateModuleImplementation.cpp \
\
Modules/ModelProvider/ModelProvider.cpp \
Modules/ModelProvider/TemplateModelProvider/TemplateModelProvider.cpp \
\
Modules/ModelProvider/GeneralLatticeModel/GeneralLatticeModel.cpp \
Modules/ModelProvider/GeneralLatticeModel/Configuration.cpp \
Modules/ModelProvider/LWLowField/LWLowField.cpp \
Modules/ModelProvider/LWLowField/Configuration.cpp \
Modules/ModelProvider/ExampleSpecialLatticeModel/ExampleSpecialLatticeModel.cpp \
Modules/ModelProvider/GeneralGraphModel/GeneralGraphModel.cpp \
Modules/ModelProvider/ToricCode/ToricCode.cpp \
Modules/ModelProvider/FermionicHubbard/FermionicHubbard.cpp \
\
Modules/LatticeProvider/LatticeProvider.cpp \
Modules/LatticeProvider/TemplateLatticeProvider/TemplateLatticeProvider.cpp \
\
Modules/LatticeProvider/LatticeFileLoader/LatticeFileLoader.cpp \
Modules/LatticeProvider/LatticeFileLoader/Configuration.cpp \
Modules/LatticeProvider/IsingChainGroundEnergyClusterDecomposition/IsingChainGroundEnergyClusterDecomposition.cpp \
Modules/LatticeProvider/RotatedClusterDispersion/RotatedClusterDispersion.cpp \
Modules/LatticeProvider/RotatedClusterDispersion/Configuration.cpp \
Modules/LatticeProvider/RotatedClusterGapAndGroundState/RotatedClusterGapAndGroundState.cpp \
Modules/LatticeProvider/ClusterInFieldGapAndGroundState/ClusterInFieldGapAndGroundState.cpp\
\
Modules/LatticeProvider/ClusterInFieldDispersion/ClusterInFieldDispersion.cpp \
Modules/LatticeProvider/ClusterInFieldDispersion/Configuration.cpp \
\
Modules/DataProcessor/DataProcessor.cpp \
Modules/DataProcessor/TemplateDataProcessor/TemplateDataProcessor.cpp \
\
Modules/DataProcessor/Loewdin/Common/Term.cpp \
Modules/DataProcessor/Loewdin/Common/Configuration.cpp \
Modules/DataProcessor/Loewdin/DirectSolver/DirectSolver.cpp \
Modules/DataProcessor/Loewdin/DirectSolver/ListedOperator.cpp \
Modules/DataProcessor/Loewdin/DirectSolver/Coefficients.cpp \
Modules/DataProcessor/Loewdin/TwoSideSolver/TwoSideSolver.cpp \
Modules/DataProcessor/Loewdin/TwoSideSolver/ListedOperator.cpp \
Modules/DataProcessor/Loewdin/TwoSideSolver/Coefficients.cpp \
Modules/DataProcessor/Loewdin/TwoSideCommonSolver/TwoSideCommonSolver.cpp \
Modules/DataProcessor/Loewdin/TwoSideCommonSolver/ListedOperator.cpp \
Modules/DataProcessor/Loewdin/TwoSideCommonSolver/Coefficients.cpp \
Modules/DataProcessor/Loewdin/TwoSideFirstApplicationSolver/TwoSideFirstApplicationSolver.cpp \
Modules/DataProcessor/Loewdin/TwoSideFirstApplicationSolver/ListedOperator.cpp \
Modules/DataProcessor/Loewdin/TwoSideFirstApplicationSolver/Coefficients.cpp \
Modules/DataProcessor/BondfilePlotter/BondfilePlotter.cpp \
Modules/DataProcessor/BondfilePlotter/dot.cpp \
Modules/DataProcessor/BondfilePlotter/Configuration.cpp \
\
Modules/DataProcessor/Takahashi/Common/Term.cpp \
Modules/DataProcessor/Takahashi/DirectSolver/DirectSolver.cpp \
Modules/DataProcessor/Takahashi/DirectSolver/ListedTerm.cpp \
Modules/DataProcessor/Takahashi/DirectSolver/Coefficients.cpp \
Modules/DataProcessor/Takahashi/DirectFirstApplicationSolver/DirectFirstApplicationSolver.cpp \
Modules/DataProcessor/Takahashi/DirectFirstApplicationSolver/ListedTerm.cpp \
Modules/DataProcessor/Takahashi/DirectFirstApplicationSolver/Coefficients.cpp \
Modules/DataProcessor/Takahashi/TreeSolver/TreeSolver.cpp \
Modules/DataProcessor/Takahashi/TreeSolver/TreeNode.cpp \
Modules/DataProcessor/Takahashi/TreeSolver/Coefficients.cpp \
Modules/DataProcessor/Takahashi/TwoSideSolver/TwoSideSolver.cpp \
Modules/DataProcessor/Takahashi/TwoSideSolver/ListedTerm.cpp \
Modules/DataProcessor/Takahashi/TwoSideSolver/Coefficients.cpp \
Modules/DataProcessor/Takahashi/TwoSideFirstApplicationSolver/TwoSideFirstApplicationSolver.cpp \
Modules/DataProcessor/Takahashi/TwoSideFirstApplicationSolver/ListedTerm.cpp \
Modules/DataProcessor/Takahashi/TwoSideFirstApplicationSolver/Coefficients.cpp \
\
Modules/DataProcessor/PCUT/Common/Term.cpp \
Modules/DataProcessor/PCUT/Common/Configuration.cpp \
Modules/DataProcessor/PCUT/DirectSolver/DirectSolver.cpp \
Modules/DataProcessor/PCUT/DirectSolver/Coefficients.cpp \
Modules/DataProcessor/PCUT/TreeSolver/TreeSolver.cpp \
Modules/DataProcessor/PCUT/TreeSolver/TreeNode.cpp \
Modules/DataProcessor/PCUT/TreeSolver/Coefficients.cpp \
Modules/DataProcessor/PCUT/TwoSideSolver/TwoSideSolver.cpp \
Modules/DataProcessor/PCUT/TwoSideSolver/Coefficients.cpp \
\
Modules/DataWriter/DataWriter.cpp \
Modules/DataWriter/TemplateDataWriter/TemplateDataWriter.cpp \
\
Modules/DataWriter/DefaultWriter/DefaultWriter.cpp \
Modules/DataWriter/DefaultWriter/Configuration.cpp \
Modules/DataWriter/TCHFWriter/TCHFWriter.cpp\
Modules/DataWriter/TCLFWriter/TCLFWriter.cpp\

# Modules/ModelProvider/ClusterInField/ClusterInField.cpp \

# All librarys that need to be included

LIBS = -lgmpxx -lgmp -lpthread\
\



# The name of the target binary

TARGET = Solver



CXXFLAGS = -O0 -g -pg -Wall -fmessage-length=0 -ISource -std=c++0x

SRCS = $(addprefix Source/,$(SOURCES))

OBJS = $(addprefix Build/,$(SOURCES:.cpp=.o))

DIRS = $(sort $(dir $(OBJS))) 


$(TARGET):	$(OBJS)
	$(CXX) $^ $(CXXFLAGS) -o $@ $(LIBS)

-include $(OBJS:.o=.d)

Build/%.o: Source/%.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@
	@$(CXX) -MM $(CXXFLAGS) $< -MF $(@:.o=.d) -MT $@
	

.PHONY : clean release builddirs doc all profile

all: builddirs
all: $(TARGET)
 
clean:
	rm -f $(OBJS) $(OBJS:.o=.d) $(TARGET)

release: CXXFLAGS=-O3 -Wall -fmessage-length=0 -ISource -std=c++0x
release: builddirs
release: $(TARGET)

builddirs :
	@mkdir -p $(DIRS)

doc :
	doxygen solver.dox
	
profile :
	gprof $(TARGET) > profile.out
