-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathMakefile
177 lines (154 loc) · 6.12 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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# Makefile to create shared objects out of the modules in this folder
# Need the $(CURDIR) so that when link against the libraries, dyld knows where they are.
L = $(CURDIR)/lib
O = objs
M = mods
FC = gfortran
PIC = -fpic
FCOPTS = -O3 -fcheck=all -fbacktrace -g -ggdb
FCOPTS += $(PIC)
CC = gcc
CCOPTS = -O2
LOPTS = $(PIC)
AR = ar
AROPTS = cru
RANLIB = ranlib
# Get host for machine-specific build instructions
host = $(shell hostname | awk '{if (/typhon/) print "typhon"; \
else if (/eslogin/) print "archer"; \
else if (/uan/) print "archer2"; \
else print "other"}')
# Need to link FFFTW against FFTW3
# Flags which work using MacPorts on OS X:
ifeq ($(host),other)
FFFTWOPTS = -I/opt/local/include -L/opt/local/lib -lfftw3 -lfftw3f
SPLINEOPTS = -framework Accelerate -llapack
endif
# Flags which work on Typhon:
ifeq ($(host),typhon)
FFFTWOPTS = -I/share/apps/local/include -L/share/apps/local/lib -lfftw3 -lfftw3f
SPLINEOPTS = -L/share/apps/local/lib -llapack
endif
# Flags which work on ARCHER (must `module load fftw`)
ifeq ($(host),archer)
FFFTWOPTS = -I${FFTW_INC} -L${FFTW_DIR} -lfftw3 -lfftw3f
endif
ifeq ($(host),archer2)
FFFTWOPTS = -I${FFTW_INC} -L${FFTW_DIR} -lfftw3 -lfftw3f
endif
SPLITWAVEOPTS = -L${L} -lFFFTW -lf90sac -lanisotropy_ajn
F90SACOPTS = -DFORCE_BIGENDIAN_SACFILES
F90SACLIBS =
# Options if using the f90sac filtering routines: edit these to point to libxapiir
XAPIIR_DEFS = -DUSE_XAPIIR
XAPIIR_LIBS = -L/usr/local/lib -lxapiir
# Options for sphere_tesselate
TESSOPTS = -L$(L) -lspherical_geometry
MODS = $(O)/constants.o \
$(O)/density_1d.o \
$(O)/EC_grid_assumed_int.o \
$(O)/EC_grid.o \
$(O)/f90sac.o \
$(O)/FFFTW.o \
$(O)/global_1d_models.o \
$(O)/mod_raypaths.o \
$(O)/moment_tensor.o \
$(O)/sphere_tesselate.o \
$(O)/spherical_geometry.o \
$(O)/splitwave.o \
$(O)/statistical.o \
$(O)/timing.o
all: ${MODS} \
$(O)/anisotropy_ajn.o \
$(O)/get_args.o \
$(O)/plate_motion.o \
$(O)/spherical_splines.o
progs: all
$(MAKE) -C progs
installprogs: all
$(MAKE) -C progs install
# Automatic macro which defines the name of the module from the object file
nm = $(patsubst $(O)/%,%,$(patsubst %.o,%,$@))
# Add rules to build filtering routines into f90sac if we select the target 'xapiir'
xapiir filt: F90SACOPTS += $(XAPIIR_DEFS)
xapiir filt: F90SACLIBS += $(XAPIIR_LIBS)
xapiir filt: all
$(O)/f90sac.o: f90sac.F90
$(FC) $(FCOPTS) $(F90SACOPTS) -c -J$(M) -o $(O)/$(nm).o $^
$(FC) -I$(M) $(F90SACLIBS) -o $(L)/lib$(nm).so.1 -shared $(O)/$(nm).o
ln -sf $(L)/lib$(nm).so.1 $(L)/lib$(nm).so
rm -f $(O)/lib$(nm).a
$(AR) $(AROPTS) $(L)/lib$(nm).a $(O)/$(nm).o
$(RANLIB) $(L)/lib$(nm).a
$(O)/anisotropy_ajn.o: anisotropy_ajn/anisotropy_ajn.f90
$(FC) ${FCOPTS} -c -J$(M) -o $(O)/$(nm).o $^
$(FC) -I$(M) -o $(L)/lib$(nm).so.1 -shared $(O)/$(nm).o
ln -sf $(L)/lib$(nm).so.1 $(L)/lib$(nm).so
rm -f $(O)/lib$(nm).a
$(AR) $(AROPTS) $(L)/lib$(nm).a $(O)/$(nm).o
$(RANLIB) $(L)/lib$(nm).a
$(O)/FFFTW.o: FFFTW/FFFTW.f03
$(FC) ${FCOPTS} ${FFFTWOPTS} -c -J$(M) -o $(O)/FFFTW.o FFFTW/FFFTW.f03
$(FC) -I$(M) ${FFFTWOPTS} -o $(L)/libFFFTW.so.1 -shared $(O)/FFFTW.o
ln -sf $(L)/libFFFTW.so.1 $(L)/libFFFTW.so
rm -f $(O)/lib$(nm).a
$(AR) $(AROPTS) $(L)/lib$(nm).a $(O)/$(nm).o
$(RANLIB) $(L)/lib$(nm).a
$(O)/get_args.o: get_args/get_args.f90
$(FC) ${FCOPTS} -c -J$(M) -o $(O)/get_args.o get_args/get_args.f90
$(FC) -I$(M) -o $(L)/libget_args.so.1 -shared $(O)/get_args.o
ln -sf $(L)/libget_args.so.1 $(L)/libget_args.so
rm -f $(O)/lib$(nm).a
$(AR) $(AROPTS) $(L)/lib$(nm).a $(O)/$(nm).o
$(RANLIB) $(L)/lib$(nm).a
$(O)/plate_motion.o: plate_motion/plate_motion.f90
$(FC) ${FCOPTS} -c -J$(M) -o $(O)/plate_motion.o plate_motion/plate_motion.f90
$(FC) -I$(M) -o $(L)/libplate_motion.so.1 -shared $(O)/plate_motion.o
ln -sf $(L)/libplate_motion.so.1 $(L)/libplate_motion.so
rm -f $(O)/lib$(nm).a
$(AR) $(AROPTS) $(L)/lib$(nm).a $(O)/$(nm).o
$(RANLIB) $(L)/lib$(nm).a
$(O)/sphere_tesselate.o: $(O)/spherical_geometry.o sphere_tesselate.f90
$(FC) ${FCOPTS} -c -J$(M) -o $(O)/sphere_tesselate.o sphere_tesselate.f90
$(FC) -I$(M) ${TESSOPTS} -o $(L)/libsphere_tesselate.so.1 -shared $(O)/sphere_tesselate.o
ln -sf $(L)/libsphere_tesselate.so.1 $(L)/libsphere_tesselate.so
rm -f $(O)/lib$(nm).a
$(AR) $(AROPTS) $(L)/lib$(nm).a $(O)/$(nm).o $(O)/spherical_geometry.o
$(RANLIB) $(L)/lib$(nm).a
@[ "${SEISMO_FORTRAN_DATA}" ] || { \
echo ""; echo "==== NOTICE ===="; \
echo "sphere_tesselate: export the following environment variable for caching to work:"; \
echo " SEISMO_FORTRAN_DATA=$(CURDIR)/data"; \
echo "================"; }
$(O)/spherical_splines.o: spherical_splines/spherical_splines.f90
$(FC) ${FCOPTS} -c -J$(M) -o $(O)/spherical_splines.o spherical_splines/spherical_splines.f90
$(FC) -I$(M) ${SPLINEOPTS} -o $(L)/libspherical_splines.so.1 -shared $(O)/spherical_splines.o
ln -sf $(L)/libspherical_splines.so.1 $(L)/libspherical_splines.so
rm -f $(O)/lib$(nm).a
$(AR) $(AROPTS) $(L)/lib$(nm).a $(O)/$(nm).o
$(RANLIB) $(L)/lib$(nm).a
$(O)/splitwave.o: $(O)/f90sac.o $(O)/anisotropy_ajn.o $(O)/FFFTW.o splitwave.f90
$(FC) ${FCOPTS} -c -J$(M) -o $(O)/splitwave.o splitwave.f90
$(FC) -I$(M) ${SPLITWAVEOPTS} -o $(L)/libsplitwave.so.1 -shared $(O)/splitwave.o
ln -sf $(L)/libsplitwave.so.1 $(L)/libsplitwave.so
rm -f $(O)/lib$(nm).a
$(AR) $(AROPTS) $(L)/lib$(nm).a $(O)/$(nm).o $(O)/f90sac.o $(O)/anisotropy_ajn.o $(O)/FFFTW.o
$(RANLIB) $(L)/lib$(nm).a
# General compilation rules
$(O)/%.o: %.f90
$(FC) ${FCOPTS} -c $*.f90 -J$(M) -o $(O)/$*.o
$(FC) -I$(M) -o $(L)/lib$*.so.1 -shared $(O)/$*.o
ln -sf $(L)/lib$*.so.1 $(L)/lib$*.so
rm -f $(L)/lib$*.a
$(AR) ${AROPTS} $(L)/lib$*.a $(O)/$*.o
$(RANLIB) $(L)/lib$*.a
$(O)/%.o: %.F90
$(FC) ${FCOPTS} $(DEFINES) -c $*.F90 -J$(M) -o $(O)/$*.o
$(FC) -I$(M) -o $(L)/lib$*.so.1 -shared $(O)/$*.o
ln -sf $(L)/lib$*.so.1 $(L)/lib$*.so
rm -f $(L)/lib$*.a
$(AR) ${AROPTS} $(L)/lib$*.a $(O)/$*.o
$(RANLIB) $(L)/lib$*.a
.PHONY: progs installprogs
clean:
/bin/rm -f $(M)/*.mod $(O)/*.o