# library build -*- makefile -*-
SHELL = /bin/sh

# ------ FILES ------

SRC = ATC_HardyKernel.cpp \
ATC_Transfer.cpp \
ATC_TransferHardy.cpp \
ATC_TransferThermal.cpp \
ATC_TransferUtility.cpp \
AtomicRegulator.cpp \
ElasticTimeIntegrator.cpp \
ElectronFlux.cpp \
ElectronHeatCapacity.cpp \
ElectronHeatFlux.cpp \
ElectronPhononExchange.cpp \
ExtrinsicModel.cpp \
ExtrinsicModelTwoTemperature.cpp \
FE_Element.cpp \
FE_Engine.cpp \
FE_Mesh.cpp \
FieldEulerIntegrator.cpp \
ImplicitSolveOperator.cpp \
Kinetostat.cpp \
LammpsInterface.cpp \
Material.cpp \
Matrix.cpp \
OutputManager.cpp \
PhysicsModelThermal.cpp \
PhysicsModelTwoTemperature.cpp \
PrescribedDataManager.cpp \
Solver.cpp \
Thermostat.cpp \
TimeFilter.cpp \
TimeIntegrator.cpp \
Vector.cpp \
XT_Function.cpp

INC = Array2D.h \
Array.h \
ATC_Error.h \
ATC_HardyKernel.h \
ATC_Transfer.h \
ATC_TransferHardy.h \
ATC_TransferThermal.h \
ATC_TypeDefs.h \ \
AtomicRegulator.h \
CG.h \
CloneVector.h \
DenseMatrix.h \
DenseVector.h \
DiagonalMatrix.h \
ElasticTimeIntegrator.h \
ElectronFlux.h \
ElectronHeatCapacity.h \
ElectronHeatFlux.h \
ElectronPhononExchange.h \
ExtrinsicModel.h \
ExtrinsicModelTwoTemperature.h \
FE_Element.h \
FE_Engine.h \
FE_Mesh.h \
FieldEulerIntegrator.h \
GMRES.h \
ImplicitSolveOperator.h \
Kinetostat.h \
LammpsInterface.h \
Material.h \
MatrixDef.h \
Matrix.h \
MatrixLibrary.h \
OutputManager.h \
PhysicsModel.h \
PhysicsModelThermal.h \
PhysicsModelTwoTemperature.h \
PrescribedDataManager.h \
Quadrature.h \
Solver.h \
SparseMatrix.h \
SparseMatrix-inl.h \
SparseVector.h \
SparseVector-inl.h \
StringManip.h \
Thermostat.h \
TimeFilter.h \
TimeIntegrator.h \
Utility.h \
Vector.h \
XT_Function.h

# ------ DEFINITIONS ------
# which file will be copied to Makefile.lammps

EXTRAMAKE = Makefile.lammps.linalg

DIR = Obj_mingw32-mpi/
LIB = $(DIR)libatc.a
OBJ = $(SRC:%.cpp=$(DIR)%.o)

# ------ SETTINGS ------

# include any MPI settings needed for the ATC library to build with
# the same MPI library that LAMMPS is built with

CC =		i686-w64-mingw32-g++
CCFLAGS =	-I../../tools/mingw-cross/mpich2-win32/include/		\
		-I../../src -I../../src/STUBS -DMPICH_IGNORE_CXX_SEEK	\
		-O3 -march=i686 -mtune=generic -mfpmath=387 -mpc64	\
                -ffast-math -funroll-loops -fstrict-aliasing 	\
		-DLAMMPS_SMALLSMALL -Wno-uninitialized
ARCHIVE =	i686-w64-mingw32-ar
ARCHFLAG =	-rcs
DEPFLAGS =      -M
LINK =         	i686-w64-mingw32-g++
LINKFLAGS =	-O
USRLIB =
SYSLIB =

# ------ MAKE PROCEDURE ------

default: $(DIR) $(LIB) Makefile.lammps

$(DIR):
	mkdir $(DIR)

Makefile.lammps:
	@cp $(EXTRAMAKE) Makefile.lammps

$(LIB): 	$(OBJ)
	$(ARCHIVE) $(ARFLAGS) $(LIB) $(OBJ)
	@cp $(EXTRAMAKE) Makefile.lammps

# ------ COMPILE RULES ------

$(DIR)%.o:%.cpp
	$(CC) $(CCFLAGS) -c $< -o $@
$(DIR)%.d:%.cpp
	$(CC) $(CCFLAGS) $(DEPFLAGS) $< > $@		

# ------ DEPENDENCIES ------

DEPENDS = $(OBJ:.o=.d)

# ------ CLEAN ------

clean:
	rm $(DIR)*.o $(DIR)*.d *~ $(LIB)

$(DEPENDS) : $(DIR)
sinclude $(DEPENDS)