-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
145 lines (108 loc) · 4.96 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# =========================================================================
# Makefile : GPSE
#
# LAST TESTED
#
# Thursday, July 4th, 2019
#
# -------------------------------------------------------------------------
#
# Specify the SHELL that will interpret this Makefile. This line avoids
# issues on systems where the SHELL variable might be inherited from
# the environment.
SHELL := /bin/bash
# Get hostname of the machine the source will be compiled and run on.
HOSTNAME := $(shell hostname)
# Specify general user-defined compilation options.
MPIF90 := mpif90
COMPILER := gfortran
DEBUG := OFF
OPTIMIZATION := ON
OPENMP := OFF
# Set compiler-specific options.
ifeq ($(COMPILER),gfortran)
STANDARD_OPTIONS := -fimplicit-none -fmodule-private \
-ffree-form -ffree-line-length-none -std=gnu
INTEGER_OPTIONS := # -fdefault-integer-8 ! need to come up with
# better way to provide overall support for
# INT64; perhaps rely on MPI-3 mpi_08 module?
REAL_OPTIONS := -fdefault-real-8
OPTIMIZATION_OPTIONS := -O2 -mtune=native
OPENMP_OPTIONS := -fopenmp
CHECK_OPTIONS := -fcheck=all
DEBUG_OPTIONS := -ffpe-trap=invalid,overflow -fbacktrace \
-fdump-core -finit-real=nan
WARNING_OPTIONS := -Wall -fmax-errors=0 -Wno-array-temporaries \
-Warray-bounds -Wcharacter-truncation \
-Wline-truncation -Wconversion-extra \
-Wimplicit-interface -Wimplicit-procedure \
-Wunderflow -Wextra -Wuninitialized
endif
ifeq ($(COMPILER),ifort)
STANDARD_OPTIONS := -implicitnone -free -stand none -module build
INTEGER_OPTIONS := # -fdefault-integer-8
REAL_OPTIONS := -real-size 64
OPTIMIZATION_OPTIONS := -ipo -O3 -no-prec-div -fp-model fast=2 -xHost
OPENMP_OPTIONS := -qopenmp
CHECK_OPTIONS := -check all
DEBUG_OPTIONS := -debug all
WARNING_OPTIONS := -warn all
endif
COMPILER_OPTIONS := $(STANDARD_OPTIONS) $(INTEGER_OPTIONS) \
$(REAL_OPTIONS)
ifeq ($(DEBUG),ON)
COMPILER_OPTIONS += -O0 -C -g $(CHECK_OPTIONS) $(DEBUG_OPTIONS) \
$(WARNING_OPTIONS)
endif
ifeq ($(OPTIMIZATION),ON)
COMPILER_OPTIONS += $(OPTIMIZATION_OPTIONS)
endif
ifeq ($(OPENMP),ON)
COMPILER_OPTIONS += $(OPENMP_OPTIONS)
endif
SOURCE_DIR := source
BUILD_DIR := build
TARGET := gpse.x
SOURCES := $(shell find $(SOURCE_DIR) -type f -name *.f90)
SOURCES := $(filter-out $(SOURCE_DIR)/cli.f90, $(SOURCES))
OBJECTS := $(patsubst $(SOURCE_DIR)/%,$(BUILD_DIR)/%,$(SOURCES:.f90=.o))
SOURCES := $(filter-out $(SOURCE_DIR)/gpse.f90, $(SOURCES))
MODULES := $(patsubst $(SOURCE_DIR)/%,$(BUILD_DIR)/%,$(SOURCES:.f90=.mod))
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(MPIF90) $(COMPILER_OPTIONS) -o $@ $^
$(BUILD_DIR)/gpse.o: $(SOURCE_DIR)/gpse.f90 $(MODULES)
@mkdir -p $(BUILD_DIR)
$(MPIF90) -J$(BUILD_DIR) $(COMPILER_OPTIONS) -c $(SOURCE_DIR)/gpse.f90 -o $(BUILD_DIR)/gpse.o
$(BUILD_DIR)/evua.o $(BUILD_DIR)/evua.mod: $(SOURCE_DIR)/evua.f90 $(BUILD_DIR)/math.mod
@mkdir -p $(BUILD_DIR)
$(MPIF90) -J$(BUILD_DIR) $(COMPILER_OPTIONS) -c $(SOURCE_DIR)/evua.f90 -o $(BUILD_DIR)/evua.o
$(BUILD_DIR)/grid.o $(BUILD_DIR)/grid.mod: $(SOURCE_DIR)/grid.f90
@mkdir -p $(BUILD_DIR)
$(MPIF90) -J$(BUILD_DIR) $(COMPILER_OPTIONS) -c $(SOURCE_DIR)/grid.f90 -o $(BUILD_DIR)/grid.o
$(BUILD_DIR)/grk4.o $(BUILD_DIR)/grk4.mod: $(SOURCE_DIR)/grk4.f90
@mkdir -p $(BUILD_DIR)
$(MPIF90) -J$(BUILD_DIR) $(COMPILER_OPTIONS) -c $(SOURCE_DIR)/grk4.f90 -o $(BUILD_DIR)/grk4.o
$(BUILD_DIR)/io.o $(BUILD_DIR)/io.mod: $(SOURCE_DIR)/io.f90
@mkdir -p $(BUILD_DIR)
$(MPIF90) -J$(BUILD_DIR) $(COMPILER_OPTIONS) -c $(SOURCE_DIR)/io.f90 -o $(BUILD_DIR)/io.o
$(BUILD_DIR)/math.o $(BUILD_DIR)/math.mod: $(SOURCE_DIR)/math.f90
@mkdir -p $(BUILD_DIR)
$(MPIF90) -J$(BUILD_DIR) $(COMPILER_OPTIONS) -c $(SOURCE_DIR)/math.f90 -o $(BUILD_DIR)/math.o
$(BUILD_DIR)/pmca.o $(BUILD_DIR)/pmca.mod: $(SOURCE_DIR)/pmca.f90 $(BUILD_DIR)/grid.mod
@mkdir -p $(BUILD_DIR)
$(MPIF90) -J$(BUILD_DIR) $(COMPILER_OPTIONS) -c $(SOURCE_DIR)/pmca.f90 -o $(BUILD_DIR)/pmca.o
$(BUILD_DIR)/psi.o $(BUILD_DIR)/psi.mod: $(SOURCE_DIR)/psi.f90 $(BUILD_DIR)/math.mod
@mkdir -p $(BUILD_DIR)
$(MPIF90) -J$(BUILD_DIR) $(COMPILER_OPTIONS) -c $(SOURCE_DIR)/psi.f90 -o $(BUILD_DIR)/psi.o
$(BUILD_DIR)/rot.o $(BUILD_DIR)/rot.mod: $(SOURCE_DIR)/rot.f90
@mkdir -p $(BUILD_DIR)
$(MPIF90) -J$(BUILD_DIR) $(COMPILER_OPTIONS) -c $(SOURCE_DIR)/rot.f90 -o $(BUILD_DIR)/rot.o
$(BUILD_DIR)/vex.o $(BUILD_DIR)/vex.mod: $(SOURCE_DIR)/vex.f90
@mkdir -p $(BUILD_DIR)
$(MPIF90) -J$(BUILD_DIR) $(COMPILER_OPTIONS) -c $(SOURCE_DIR)/vex.f90 -o $(BUILD_DIR)/vex.o
.PHONY: clean
clean:
@echo " Cleaning...";
$(RM) -r $(BUILD_DIR) $(TARGET) *.output *.vtk
# =========================================================================