-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
115 lines (90 loc) · 2.16 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
#===============================================================================
# Author: Tche L., USTC, [email protected]
# Created at: Wed 30 Dec 2020 09:32:34 PM CST
#-------------------------------------------------------------------------------
FC := gfortran
CLFS := -fopenmp
FFTWPATH := /opt/fftw3-gnu
CFLAGS :=
LFLAGS :=
SRCDIR := src
OBJDIR := obj
BINDIR := bin
STATIC :=
DEBUG :=
DOUBLETYPE := ON
FFTW := ON
IEEE := ON
PeiDHS := ON
SH := ON
PS := ON
COLORPRINT := ON
PROGBAR := ON
DFLAG_LIST := DEBUG DOUBLETYPE FFTW IEEE PeiDHS SH PS COLORPRINT PROGBAR
DFLAGS := $(foreach f, $(DFLAG_LIST), $(if $($(f)), -D$(f), ))
FCEXE := $(notdir $(FC))
CFLAGS += $(DFLAGS) -I$(OBJDIR)
ifeq ($(FCEXE), gfortran)
CFLAGS += -J$(OBJDIR)
else ifeq ($(FCEXE), ifort)
CFLAGS += -module $(OBJDIR)
else
$(error "Unrecognized compiler <"$(FCEXE)">")
endif
ifdef DOUBLETYPE
FFTWLIB = fftw3
else
FFTWLIB = fftw3f
endif
ifdef STATIC
CLFS += -fPIC
ifeq ($(FCEXE), gfortran)
LFLAGS += -static-libgfortran
else ifeq ($(FCEXE), ifort)
LFLAGS += -static-intel -qopenmp-link=static
endif
endif
ifdef DEBUG
CLFS += -O0
CFLAGS += -g
ifeq ($(FCEXE), gfortran)
CLFS += -Wall -Wno-unused-variable \
-fcheck=all #-ffpe-trap=invalid,zero,overflow
else ifeq ($(FCEXE), ifort)
CLFS += -warn all -warn nounused \
-check all #-fpe:0
endif
else
CLFS += -O2
endif
ifdef FFTW
CFLAGS += -I$(FFTWPATH)/include
ifdef STATIC
LFLAGS += $(FFTWPATH)/lib/lib$(FFTWLIB).a
else
LFLAGS += -L$(FFTWPATH)/lib -l$(FFTWLIB)
endif
endif
CLFS := $(strip $(CLFS))
CFLAGS := $(strip $(CFLAGS))
LFLAGS := $(strip $(LFLAGS))
SRC_MOD := common.F90 math.F90 parameter.F90 grtc.F90 dwim.F90
SRC_GRT := main.F90
EXE_GRT := grtcsgram
OBJ_MOD := $(foreach f, $(SRC_MOD), $(OBJDIR)/$(f:.F90=.o))
OBJ_GRT := $(OBJDIR)/$(SRC_GRT:.F90=.o)
all : prep link
prep:
@mkdir -p $(BINDIR) $(OBJDIR)
link: $(BINDIR)/$(EXE_GRT)
$(BINDIR)/$(EXE_GRT): $(OBJ_MOD) $(OBJ_GRT)
$(FC) $(CLFS) $^ $(LFLAGS) -o $@
clear: clean
-rm -f $(BINDIR)/*
clean:
-rm -f $(OBJDIR)/*
vpath %.F90 $(SRCDIR)
.SUFFIXES: .F90 .o
$(OBJDIR)/%.o : %.F90
$(FC) $(CLFS) $(CFLAGS) $(SRCDIR)/$(<F) -c -o $@
# vim:ft=make noet