# standard
FC = mpif90
LD = mpif90
#IBM
#FC = mpxlf90_r
#LD = mpxlf90_r
#FFLAGS += -O3 -qstrict -qrealsize=4 -bmaxdata:0x40000000 -qmaxmem=-1 -cpp -DPREFIX=\"$(PREFIX)\"
#SUN
#FC = mpf90
#LD = mpf90
#FFLAGS += -fast -xarch=v9b -ftrap=%none -lmpi -cpp -DPREFIX=\"$(PREFIX)\"
#SGI
#FC = f90
#LD = f90
#FFLAGS += -64 -C -mpio -OPT:Olimit=3495 -O3 -lmpi -cpp -DPREFIX=\"$(PREFIX)\"
# set prefix depending on OS
OS := $(shell uname)
ifeq ($(OS),Darwin)
PREFIX=/usr/local
else
PREFIX=/usr
endif
# get version from changelog if debian package, or git log otherwise
VERSION := $(shell if [ -e debian/ ]; then dpkg-parsechangelog -S version; elif [ "`command -v git`" != "" ]; then git describe --always --tags --dirty; else echo "2.0.73"; fi)
# set flags
ifeq ($(FC),ifort)
FFLAGS += -cpp -DPREFIX=\"$(PREFIX)\" -DVERSION=\"$(VERSION)\" -module source/
else
FFLAGS += -cpp -Jsource/ -ffree-line-length-0 -lm -DPREFIX=\"$(PREFIX)\" -DVERSION=\"$(VERSION)\" -I/usr/local/include
endif
MANDIR=$(DESTDIR)$(PREFIX)/share/man/man1
SOURCES = source/constants_mod.o source/vector_mod.o source/common_mod.o source/interpolation_mod.o \
source/set_input_mod.o source/hydro_mod.o source/ph_mod.o source/composition_mod.o \
source/continuum_mod.o source/ionization_mod.o source/pathIntegration_mod.o \
source/grid_mod.o source/dust_mod.o source/emission_mod.o source/photon_mod.o \
source/update_mod.o source/output_mod.o source/iteration_mod.o source/readdata_mod.o
ifeq ($(CO),debug) #to show all compiler warnings
FFLAGS += -fbounds-check -Wall -Wuninitialized -g -pg #-ffpe-trap=zero,overflow,invalid,underflow,denormal -fbacktrace -fcheck=all
else ifeq ($(CO),valgrind)
FFLAGS += -g
else ifeq ($(CO),gprof)
FFLAGS += -pg
else
FFLAGS += -O2
endif
.PHONY: all clean new install uninstall
all: mocassin mocassinWarm mocassinOutput mocassinPlot
new: clean all
%.o: %.f90
$(FC) $(FFLAGS) $< -c -o $@
mocassin: $(SOURCES) source/mocassin.o
$(LD) $(LDFLAGS) $(FFLAGS) -o $@ $^
mocassinWarm: $(SOURCES) source/mocassinWarm.o
$(LD) $(LDFLAGS) $(FFLAGS) -o $@ $^
mocassinOutput: $(SOURCES) source/mocassinOutput.o
$(LD) $(LDFLAGS) $(FFLAGS) -o $@ $^
mocassinPlot: $(SOURCES) source/mocassinPlot.o
$(LD) $(LDFLAGS) $(FFLAGS) -o $@ $^
clean:
/bin/rm -f source/*.o *~ source/*.mod mocassin mocassinWarm mocassinOutput mocassinPlot
install: mocassin mocassinWarm mocassinOutput mocassinPlot
test -e $(DESTDIR)$(PREFIX)/share/mocassin || mkdir -p $(DESTDIR)$(PREFIX)/share/mocassin
test -e $(DESTDIR)$(PREFIX)/share/doc/mocassin || mkdir -p $(DESTDIR)$(PREFIX)/share/doc/mocassin
test -e $(DESTDIR)$(PREFIX)/bin || mkdir -p $(DESTDIR)$(PREFIX)/bin
test -e $(MANDIR) || mkdir -p $(MANDIR)
cp -R data $(DESTDIR)$(PREFIX)/share/mocassin
cp -R dustData $(DESTDIR)$(PREFIX)/share/mocassin
cp -R benchmarks $(DESTDIR)$(PREFIX)/share/mocassin
cp -R examples $(DESTDIR)$(PREFIX)/share/doc/mocassin
install -m 644 man/mocassin.1 $(MANDIR)
gzip -f $(MANDIR)/mocassin.1
ln -s -f mocassin.1.gz $(MANDIR)/mocassinWarm.1.gz
ln -s -f mocassin.1.gz $(MANDIR)/mocassinOutput.1.gz
ln -s -f mocassin.1.gz $(MANDIR)/mocassinPlot.1.gz
install mocassin $(DESTDIR)$(PREFIX)/bin
install mocassinWarm $(DESTDIR)$(PREFIX)/bin
install mocassinPlot $(DESTDIR)$(PREFIX)/bin
install mocassinOutput $(DESTDIR)$(PREFIX)/bin
uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/mocassin
rm -f $(DESTDIR)$(PREFIX)/bin/mocassinOutput
rm -f $(DESTDIR)$(PREFIX)/bin/mocassinPlot
rm -f $(DESTDIR)$(PREFIX)/bin/mocassinWarm
rm -f $(MANDIR)/mocassin.1.gz
rm -f $(MANDIR)/mocassinOutput.1.gz
rm -f $(MANDIR)/mocassinPlot.1.gz
rm -f $(MANDIR)/mocassinWarm.1.gz
rm -rf $(DESTDIR)$(PREFIX)/share/mocassin
rm -rf $(DESTDIR)$(PREFIX)/share/doc/mocassin