AMREX_HOME=null
MPI_HOME=null
HDF5_HOME=/opt/hdf5
#Uncomment next line for external ReprimAnd EOS (https://zenodo.org/record/3785075  Requires installation)
#EXTERNAL_EOS_HOME=/paht/of/RePrimAnd
CXX=g++
ifeq ($(CXX),g++)
  PERFFLAGS=-fno-math-errno -fno-signaling-nans -fomit-frame-pointer -O3 -fopenmp
  LINKFLAGS=-fopenmp
endif
ifeq ($(CXX),gcc)
  PERFFLAGS=-fno-math-errno -fno-signaling-nans -fomit-frame-pointer -O3 -fopenmp
  LINKFLAGS=-fopenmp
endif
ifeq ($(CXX),icc)
  PERFFLAGS=-O3 -xHost -ipo -fno-math-errno -fno-signaling-nans -fp-model precise -fp-model source -openmp
  LINKFLAGS=-openmp
endif
ifeq ($(CXX),icpc)
  PERFFLAGS=-O3 -xHost -ipo -fno-math-errno -fno-signaling-nans -fp-model precise -fp-model source -openmp
  LINKFLAGS=-openmp
endif
ifeq ($(CXX),nvcc)
  PERFFLAGS=-O3 -rdc=true --forward-unknown-to-host-compiler -x cu --extended-lambda --expt-relaxed-constexpr
  LINKFLAGS=--forward-unknown-to-host-compiler
  NVCC_FLAGS += -Xcudafe --diag_suppress=esa_on_defaulted_function_ignored
ifdef EXTERNAL_EOS_HOME
$(error Compilation with EXTERNAL_EOS is not allowed for Gpu)
endif
endif
ifdef EXTERNAL_EOS_HOME
  PERFFLAGS += -DEXTERNAL_EOS
  EXTERNAL_INCLUDE += -I$(EXTERNAL_EOS_HOME)/include
  EXTERNAL_LIB += -L$(EXTERNAL_EOS_HOME)/lib/x86_64-linux-gnu -lRePrimAnd
endif

CFLAGS=  -I. $(EXTERNAL_INCLUDE) -I$(MPI_HOME)/include -I$(HDF5_HOME)/include -I$(AMREX_HOME)/include
LFLAGS= $(EXTERNAL_LIB) -L$(MPI_HOME)/lib -L$(HDF5_HOME)/lib -L$(AMREX_HOME)/lib -pthread -lamrex -lmpi -lmpi_cxx -lquadmath -lhdf5 -lgsl -lgfortran

SOURCES := $(wildcard *.cpp)
OBJECTS := $(patsubst %.cpp,%.o,$(SOURCES))
DEPENDS := $(patsubst %.cpp,%.d,$(SOURCES))

.PHONY: all clean

all: main

main: $(OBJECTS)
	$(CXX) $(LINKFLAGS) $^ -o $@ $(LFLAGS)

-include $(DEPENDS)

%.o: %.cpp Makefile
	$(CXX) $(PERFFLAGS) $(CXXFLAGS) $(NVCC_FLAGS) -MMD -MP -c $< -o $@ $(CFLAGS)

clean:
	/bin/rm $(OBJECTS) $(DEPENDS) main