summaryrefslogtreecommitdiff
path: root/lib/make/make.config.rules.in
blob: 80c9bfb7a7b41b5ee254015e44683ff756ed2466 (plain)
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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
# /*@@
#   @file      make.config.rules.in
#   @date      Sun Jan 17 22:31:16 1999
#   @author    Tom Goodale
#   @desc 
#   Rules to generate object files from source files in another directory.
#
#   Note that, due to the (IMHO) rather bizarre way in which Make
#   deals with directories in the target names, this will
#   not work if the target is in a subdirectory.
#
#   In order to accomodate Fortran 90 modules, the working directory
#   for each compilation is set to a scratch directory, so that
#   all module files end up there.  
#   
#   @enddesc 
#   @version $Header$
# @@*/

# Dividers to make the screen output slightly nicer
DIVEL   =  __________________
DIVIDER =  $(DIVEL)$(DIVEL)$(DIVEL)$(DIVEL)

#####################################################################
# Define how to do dependencies

ifeq ($(strip $(PERL_BACKUP_NECESSARY)),)
define DEPENDENCY_FIXER
	$(PERL) -pi -e "s,([^:]*),$(basename $@).o $(basename $@).d, if(m/: /);\
	 s:\s[^\s]*[/\\\]($(DEP_EXCLUDE_FILES))\b::g" $@ 
endef
else
define DEPENDENCY_FIXER
	$(PERL) -pi.bak -e "s,([^:]*),$(basename $@).o $(basename $@).d, if(m/: /)" $@ 
	rm $@.bak
endef
endif

define C_DEPENDENCIES
	$(C_DEPEND) $< $(INC_DIRS:%=-I%) $(SYS_INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DCCODE $(C_DEPEND_OUT)
	$(DEPENDENCY_FIXER)
endef

define CXX_DEPENDENCIES
	$(CXX_DEPEND) $< $(INC_DIRS:%=-I%) $(SYS_INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DCCODE $(CXX_DEPEND_OUT)
	$(DEPENDENCY_FIXER)
endef

define F77_DEPENDENCIES
	$(F77_DEPEND) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DFCODE $< $(F77_DEPEND_OUT)
	$(DEPENDENCY_FIXER)
endef

define F_DEPENDENCIES
	$(F_DEPEND) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DFCODE $< $(F_DEPEND_OUT)
	$(DEPENDENCY_FIXER)
endef

define F90_DEPENDENCIES
	$(F_DEPEND) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DFCODE $< $(F_DEPEND_OUT)
	$(DEPENDENCY_FIXER)
endef

#####################################################################
# Define how to do a C compilation
define PREPROCESS_C
cat $< | $(PERL) $(C_FILE_PROCESSOR) $(CONFIG) > $(notdir $<)
endef

define COMPILE_C 
current_wd=`$(GET_WD)` ; cd $(SCRATCH_BUILD) ; $(CC) $(DEBUG_C) $(CFLAGS) $(CCOMPILEONLY)$(OPTIONSEP)$$current_wd$(DIRSEP)$@ $$current_wd$(DIRSEP)$(notdir $<) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DCCODE
endef

define POSTPROCESS_C
endef

# Define how to do a C++ compilation
define PREPROCESS_CXX
cat $< | $(PERL) $(C_FILE_PROCESSOR) $(CONFIG) > $(notdir $<)
endef

define COMPILE_CXX
current_wd=`$(GET_WD)` ; cd $(SCRATCH_BUILD) ; $(CXX) $(DEBUG_CXX) $(CXXFLAGS) $(CCOMPILEONLY)$(OPTIONSEP)$$current_wd$(DIRSEP)$@ $$current_wd$(DIRSEP)$(notdir $<) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DCCODE
endef

define POSTPROCESS_CXX
endef

# Define how to do a F77 compilation
define PREPROCESS_F77
cat $< | sed 's.//.AUTOMATICALLY_GENERATED_CONCATONATION_PROTECTION_STRING.g' | $(CPP) $(CPPFLAGS) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DFCODE - |  $(PERL) -p -e 's/__FORTRANFILE__/\"$(basename $(notdir $<)).F\"/g; s.AUTOMATICALLY_GENERATED_CONCATONATION_PROTECTION_STRING.//.g' - | $(PERL) $(F_FILE_PROCESSOR) > $(basename $(notdir $<)).f
endef

define COMPILE_F77
current_wd=`$(GET_WD)` ; cd $(SCRATCH_BUILD) ; $(F77) $(DEBUG_F77) $(F77FLAGS) $(FCOMPILEONLY)$(OPTIONSEP)$$current_wd$(DIRSEP)$@ $$current_wd$(DIRSEP)$(basename $(notdir $<)).f 
endef

define POSTPROCESS_F77
endef

# Define how to do a fixed-format F90 compilation
define PREPROCESS_F
cat $< | sed 's.//.AUTOMATICALLY_GENERATED_CONCATONATION_PROTECTION_STRING.g' | $(CPP) $(CPPFLAGS) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DFCODE - |  $(PERL) -p -e 's/__FORTRANFILE__/\"$(basename $(notdir $<)).F\"/g; s.AUTOMATICALLY_GENERATED_CONCATONATION_PROTECTION_STRING.//.g' - | $(PERL) $(F_FILE_PROCESSOR) > $(basename $(notdir $<)).f
endef

define COMPILE_F
current_wd=`$(GET_WD)` ; cd $(SCRATCH_BUILD) ; $(F90) $(DEBUG_F90) $(F90FLAGS) $(FCOMPILEONLY)$(OPTIONSEP)$$current_wd$(DIRSEP)$@ $$current_wd$(DIRSEP)$(basename $(notdir $<)).f  
endef

define POSTPROCESS_F
endef

# Define how to do a free-format F90 compilation
define PREPROCESS_F90
cat $< | sed 's.//.AUTOMATICALLY_GENERATED_CONCATONATION_PROTECTION_STRING.g' | $(CPP) $(CPPFLAGS) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DFCODE - |  $(PERL) -p -e 's/__FORTRANFILE__/\"$(basename $(notdir $<)).F\"/g; s.AUTOMATICALLY_GENERATED_CONCATONATION_PROTECTION_STRING.//.g' - | $(PERL) -s $(F_FILE_PROCESSOR) -free_format > $(basename $(notdir $<)).f90
endef

define COMPILE_F90
current_wd=`$(GET_WD)` ; cd $(SCRATCH_BUILD) ; $(F90) $(DEBUG_F90) $(F90FLAGS) $(FCOMPILEONLY)$(OPTIONSEP)$$current_wd$(DIRSEP)$@ $$current_wd$(DIRSEP)$(basename $(notdir $<)).f90  
endef

define POSTPROCESS_F90
endef


# Define how to do a f77 compilation
define PREPROCESS_f77
cat $< > $(basename $(notdir $<)).f
endef

# Define how to do a f compilation
define PREPROCESS_f
cat $< > $(basename $(notdir $<)).f
endef

# Define how to do a f90 compilation
define PREPROCESS_f90
cat $< > $(basename $(notdir $<)).f90
endef


# Build rules for C

%.c.o: $(SRCDIR)/%.c
	@echo $(DIVIDER)
	@echo Preprocessing $<
	$(PREPROCESS_C)
	@echo Compiling $(DEBUG_C) $<
	$(COMPILE_C)
	@echo Postprocessing $<
	$(POSTPROCESS_C)

%.c.d: $(SRCDIR)/%.c
	$(C_DEPENDENCIES)

# Build rules for C++

%.cc.o: $(SRCDIR)/%.cc 
	@echo $(DIVIDER)
	@echo Preprocessing $<
	$(PREPROCESS_CXX)
	@echo Compiling $(DEBUG_CXX) $<
	$(COMPILE_CXX)
	@echo Postprocessing $<
	$(POSTPROCESS_CXX)

%.cc.d: $(SRCDIR)/%.cc
	$(CXX_DEPENDENCIES)

%.C.o: $(SRCDIR)/%.C 
	@echo $(DIVIDER)
	@echo Preprocessing $<
	$(PREPROCESS_CXX)
	@echo Compiling $(DEBUG_CXX) $<
	$(COMPILE_CXX)
	@echo Postprocessing $<
	$(POSTPROCESS_CXX)


%.C.d: $(SRCDIR)/%.C
	$(CXX_DEPENDENCIES)

%.cpp.o: $(SRCDIR)/%.cpp 
	@echo $(DIVIDER)
	@echo Preprocessing $<
	$(PREPROCESS_CXX)
	@echo Compiling $(DEBUG_CXX) $<
	$(COMPILE_CXX)
	@echo Postprocessing $<
	$(POSTPROCESS_CXX)


%.cpp.d: $(SRCDIR)/%.cpp
	$(CXX_DEPENDENCIES)

%.cxx.o: $(SRCDIR)/%.cxx 
	@echo $(DIVIDER)
	@echo Preprocessing $<
	$(PREPROCESS_CXX)
	@echo Compiling $(DEBUG_CXX) $<
	$(COMPILE_CXX)
	@echo Postprocessing $<
	$(POSTPROCESS_CXX)


%.cxx.d: $(SRCDIR)/%.cxx
	$(CXX_DEPENDENCIES)

# Build rules for F77

%.F77.o: $(SRCDIR)/%.F77
	@echo $(DIVIDER)
	@echo Preprocessing $<
	$(PREPROCESS_F77)
	@echo Compiling $(DEBUG_F77) $<
	$(COMPILE_F77)
	@echo Postprocessing $<
	$(POSTPROCESS_F77)

%.f77.o: $(SRCDIR)/%.f77
	@echo $(DIVIDER)
	@echo Copying $<
	$(PREPROCESS_f77)
	@echo Compiling $(DEBUG_F77) $<
	$(COMPILE_F77)
	@echo Postprocessing $<
	$(POSTPROCESS_F77)

%.F77.d: $(SRCDIR)/%.F77
	$(F77_DEPENDENCIES)

%.f77.d: $(SRCDIR)/%.f77
	$(F77_DEPENDENCIES)

# Build rules for F90

%.F.o: $(SRCDIR)/%.F
	@echo $(DIVIDER)
	@echo Preprocessing $<
	$(PREPROCESS_F)
	@echo Compiling $(DEBUG_F90) $<
	$(COMPILE_F)
	@echo Postprocessing $<
	$(POSTPROCESS_F)

%.f.o: $(SRCDIR)/%.f
	@echo $(DIVIDER)
	@echo Copying $<
	$(PREPROCESS_f)
	@echo Compiling $(DEBUG_F90) $<
	$(COMPILE_F)
	@echo Postprocessing $<
	$(POSTPROCESS_F)

%.F.d: $(SRCDIR)/%.F
	$(F_DEPENDENCIES)

%.f.d: $(SRCDIR)/%.f
	$(F_DEPENDENCIES)

# Build rules for free-format F90

%.F90.o: $(SRCDIR)/%.F90
	@echo $(DIVIDER)
	@echo Preprocessing $<
	$(PREPROCESS_F90)
	@echo Compiling $(DEBUG_F90) $<
	$(COMPILE_F90)
	@echo Postprocessing $<
	$(POSTPROCESS_F90)

%.f90.o: $(SRCDIR)/%.f90
	@echo $(DIVIDER)
	@echo Copying $<
	$(PREPROCESS_f90)
	@echo Compiling $(DEBUG_F90) $<
	$(COMPILE_F90)
	@echo Postprocessing $<
	$(POSTPROCESS_F90)

%.F90.d: $(SRCDIR)/%.F90
	$(F90_DEPENDENCIES)

%.f90.d: $(SRCDIR)/%.f90
	$(F90_DEPENDENCIES)