### makefile for "Raga" Monte Carlo stellar-dynamical code ###

CXX       = g++
# uncomment the following lines if you have UNSIO library
DEFINES  += -DHAVE_UNSIO
INCPATH  += -I./unsio/src -I./unsio/3rdparty/nemolight/src -I./unsio/3rdparty/nemolight/src/inc
LIBS     += -L./unsio -lunsio -lnemo
# uncomment the line if you have Odeint library (part of Boost)
DEFINES  += -DHAVE_ODEINT
# uncomment to have tons of debugging info printed
#DEFINES  += -DDEBUGPRINT
# for Mac OS, add -arch x86_64
CXXFLAGS += -arch x86_64
LFLAGS   += -arch x86_64
# add paths to any libraries that you may be using
CXXFLAGS += -fopenmp -Wall -O3 $(DEFINES) $(INCPATH)
LINK      = g++
LFLAGS   += -fopenmp
LIBS     += -lgsl -lgslcblas
SOURCES_SMILE = \
	configfile.cpp \
	icgenerator.cpp \
	iosnapshot.cpp \
	managepotential.cpp \
	massmodel.cpp \
	odeint.cpp \
	orbitan.cpp \
	orbitint.cpp \
	potential.cpp \
	utils.cpp
SOURCES_RAGA  = \
	raga_core.cpp \
	raga_fp.cpp \
	raga_tasks.cpp \
	raga_main.cpp
SOURCES_SCATTER = \
	raga_scatter.cpp \
	raga_tasks.cpp
OBJECTS_SMILE   = $(SOURCES_SMILE:.cpp=.o)
OBJECTS_RAGA    = $(SOURCES_RAGA:.cpp=.o)
OBJECTS_SCATTER = $(SOURCES_SCATTER:.cpp=.o)

# main program
TARGET = raga
# program for simulating the scattering of stars by a binary BH
TARGET_SCATTER = raga_scatter
# program for computing binary BH coalescence time due to stellar-dynamical and gravitational-wave energy losses
TARGET_TCOAL = tcoal
# program for creating initial conditions for an arbitrary spherical density profile (and a lot more, see SMILE docs)
TARGET_MKSPHERICAL = mkspherical

%.o:    $(SMILEDIR)/%.cpp $(SMILEDIR)/%.h
	$(CXX) -c $(CXXFLAGS) -o "$@" "$<"

all: $(TARGET) $(TARGET_MKSPHERICAL) CREATE_INITIAL_CONDITIONS

$(TARGET):  $(OBJECTS_SMILE) $(OBJECTS_RAGA)
	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS_SMILE) $(OBJECTS_RAGA) $(LIBS)

$(TARGET_SCATTER):  $(OBJECTS_SMILE) $(OBJECTS_SCATTER)
	$(LINK) $(LFLAGS) -o $(TARGET_SCATTER) $(OBJECTS_SMILE) $(OBJECTS_SCATTER) $(LIBS)

$(TARGET_TCOAL):  $(OBJECTS_SMILE) tcoal.o
	$(LINK) $(LFLAGS) -o $(TARGET_TCOAL) $(OBJECTS_SMILE) tcoal.o $(LIBS)

$(TARGET_MKSPHERICAL):  $(OBJECTS_SMILE) mkspherical.o
	$(LINK) $(LFLAGS) -o $(TARGET_MKSPHERICAL) $(OBJECTS_SMILE) mkspherical.o $(LIBS)

CREATE_INITIAL_CONDITIONS:
	./mkspherical density=plummer nbody=16384 outsnap=test_input_plummer16k outformat=text scalerad=0.59

clean:
	rm -f *.o $(TARGET) $(TARGET_SCATTER) $(TARGET_TCOAL) $(TARGET_MKSPHERICAL)

.PHONY: clean CREATE_INITIAL_CONDITIONS