# Makefile
#
# Written: January 1st 2019
# Last Update: January 1st 2019
# Author: Eric C. Dykeman
# Copyright (c) 2019 (Please Refer to LICENCE)

F90 = f95
FFLAGS = -O4

# ---------------------------------------------------------------------
# OBJECTS
# ---------------------------------------------------------------------

MAIN = prosyn.o

CLASS = class_mrna.o

MODULES = module_constants.o module_folding.o module_ribosome.o \
          module_rnadata.o module_protein.o

MISC = ssa.o sd_deltag.o convert.o v2ct.o random.o quicksort.o \
       getloops.o cell_reac.o cell_fire.o

FOLD = trace_ct.o fill_ct.o edangle.o ebulge.o ehair.o deltag.o \
       check_ene.o barrier_mh.o

SETUP = getoptions.o setup_folding.o setup_ribosome.o setup_rna.o \
        tstack.o tint.o tmisc.o tribo.o

OBJECTS = $(MAIN) $(CLASS) $(MODULES) $(MISC) $(FOLD) $(SETUP)

# ---------------------------------------------------------------------
# MAKE COMMANDS
# ---------------------------------------------------------------------

all: prosyn clean

prosyn: $(OBJECTS)
	$(F90) $(FFLAGS) -o Prosyn.x $(OBJECTS)

clean:
	rm -f *.o *.mod

veryclean:
	rm -f *.o *.mod *.x

# ---------------------------------------------------------------------
# COMPILE COMMANDS
# ---------------------------------------------------------------------

# --------- MAIN ------------

prosyn.o: prosyn.f90 $(MODULES) $(CLASS)
	$(F90) $(FFLAGS) -c prosyn.f90

# --------- CLASSES -----------

class_mrna.o: $(MODULES) CLASS/class_mrna.f90
	$(F90) $(FFLAGS) -c CLASS/class_mrna.f90

# --------- MODULES -----------

module_constants.o: MODULES/module_constants.f90
	$(F90) $(FFLAGS) -c MODULES/module_constants.f90
module_folding.o: MODULES/module_folding.f90
	$(F90) $(FFLAGS) -c MODULES/module_folding.f90
module_ribosome.o: MODULES/module_ribosome.f90
	$(F90) $(FFLAGS) -c MODULES/module_ribosome.f90
module_rnadata.o: MODULES/module_rnadata.f90 module_constants.o
	$(F90) $(FFLAGS) -c MODULES/module_rnadata.f90
module_protein.o: MODULES/module_protein.f90 module_constants.o
	$(F90) $(FFLAGS) -c MODULES/module_protein.f90

# --------- MISC ------------

ssa.o: $(MODULES) $(CLASS) MISC/ssa.f90
	$(F90) $(FFLAGS) -c MISC/ssa.f90
sd_deltag.o: $(MODULES) MISC/sd_deltag.f90
	$(F90) $(FFLAGS) -c MISC/sd_deltag.f90
convert.o: MISC/convert.f90
	$(F90) $(FFLAGS) -c MISC/convert.f90
v2ct.o: MISC/v2ct.f90
	$(F90) $(FFLAGS) -c MISC/v2ct.f90
random.o: MISC/random.f90
	$(F90) $(FFLAGS) -c MISC/random.f90
quicksort.o: MISC/quicksort.f90
	$(F90) $(FFLAGS) -c MISC/quicksort.f90
getloops.o: MISC/getloops.f90
	$(F90) $(FFLAGS) -c MISC/getloops.f90
cell_reac.o: $(MODULES) MISC/cell_reac.f90
	$(F90) $(FFLAGS) -c MISC/cell_reac.f90
cell_fire.o: $(MODULES) MISC/cell_fire.f90
	$(F90) $(FFLAGS) -c MISC/cell_fire.f90

# --------- FOLD ------------

trace_ct.o: $(MODULES) FOLD/trace_ct.f90
	$(F90) $(FFLAGS) -c FOLD/trace_ct.f90
fill_ct.o: $(MODULES) FOLD/fill_ct.f90
	$(F90) $(FFLAGS) -c FOLD/fill_ct.f90
edangle.o: $(MODULES) FOLD/edangle.f90
	$(F90) $(FFLAGS) -c FOLD/edangle.f90
ebulge.o: $(MODULES) FOLD/ebulge.f90
	$(F90) $(FFLAGS) -c FOLD/ebulge.f90
ehair.o: $(MODULES) FOLD/ehair.f90
	$(F90) $(FFLAGS) -c FOLD/ehair.f90
deltag.o: $(MODULES) FOLD/deltag.f90
	$(F90) $(FFLAGS) -c FOLD/deltag.f90
check_ene.o: $(MODULES) FOLD/check_ene.f90
	$(F90) $(FFLAGS) -c FOLD/check_ene.f90
barrier_mh.o: FOLD/barrier_mh.f90
	$(F90) $(FFLAGS) -c FOLD/barrier_mh.f90

# --------- SETUP ------------

getoptions.o: $(MODULES) SETUP/getoptions.f90
	$(F90) $(FFLAGS) -c SETUP/getoptions.f90
setup_folding.o: $(MODULES) SETUP/setup_folding.f90
	$(F90) $(FFLAGS) -c SETUP/setup_folding.f90
setup_ribosome.o: $(MODULES) SETUP/setup_ribosome.f90
	$(F90) $(FFLAGS) -c SETUP/setup_ribosome.f90
setup_rna.o: $(MODULES) SETUP/setup_rna.f90
	$(F90) $(FFLAGS) -c SETUP/setup_rna.f90
tstack.o: $(MODULES) SETUP/tstack.f90
	$(F90) $(FFLAGS) -c SETUP/tstack.f90
tint.o: $(MODULES) SETUP/tint.f90
	$(F90) $(FFLAGS) -c SETUP/tint.f90
tmisc.o: $(MODULES) SETUP/tmisc.f90
	$(F90) $(FFLAGS) -c SETUP/tmisc.f90
tribo.o: $(MODULES) SETUP/tribo.f90
	$(F90) $(FFLAGS) -c SETUP/tribo.f90
