suffix.mk 7.78 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#################################################################################
#
#			    suffix.mk
#
#		Suffix rules for fptools
#
#################################################################################

# 
# This file contain the default suffix rules for all the fptools projects.
#


# No need to define .SUFFIXES because we don't use any suffix rules
# Instead we use gmake's pattern rules exlusively

.SUFFIXES:

19
20
21
22
23
24
# This declaration tells GNU make to delete the target if it has
# changed and the command which created it exited with a non-zero exit
# code.

.DELETE_ON_ERROR:

25
26
27
#-----------------------------------------------------------------------------
# Haskell Suffix Rules

28
29
30
31
32
33
34
35
# The $(odir) support is for building GHC, where we need to build three
# different versions from the same sources.  See ghc/compiler/Makefile.
ifneq "$(odir)" ""
odir_ = $(odir)/
else
odir_ =
endif

36
37
38
39
40
# Turn off all the Haskell suffix rules if we're booting from .hc
# files.  The file bootstrap.mk contains alternative suffix rules in
# this case.
ifneq "$(BootingFromHc)" "YES"

41
$(odir_)%.$(way_)o : %.hs
sof's avatar
sof committed
42
	$(HC_PRE_OPTS)
43
	$(HC) $(HC_OPTS) -c $< -o $@  -ohi $(basename $@).$(way_)hi
sof's avatar
sof committed
44
	$(HC_POST_OPTS)
45

46
$(odir_)%.$(way_)o : %.lhs	 
sof's avatar
sof committed
47
	$(HC_PRE_OPTS)
48
	$(HC) $(HC_OPTS) -c $< -o $@  -ohi $(basename $@).$(way_)hi
sof's avatar
sof committed
49
	$(HC_POST_OPTS)
50

51
$(odir_)%.$(way_)hc : %.lhs	 
52
53
	$(RM) $@
	$(HC) $(HC_OPTS) -C $< -o $@
54

55
$(odir_)%.$(way_)hc : %.hs	 
sof's avatar
sof committed
56
57
	$(RM) $@
	$(HC) $(HC_OPTS) -C $< -o $@
58

59
$(odir_)%.$(way_)o : %.$(way_)hc
sof's avatar
sof committed
60
	$(HC_PRE_OPTS)
61
	$(HC) $(HC_OPTS) -c $< -o $@
sof's avatar
sof committed
62
	$(HC_POST_OPTS)
63

64
$(odir_)%.$(way_)o : %.hc
65
	$(HC_PRE_OPTS)
66
	$(HC) $(HC_OPTS) -c $< -o $@
67
68
	$(HC_POST_OPTS)

69
$(odir_)%.$(way_)s : %.$(way_)hc 
70
	$(HC_PRE_OPTS)
71
	$(HC) $(HC_OPTS) -S $< -o $@
72
73
	$(HC_POST_OPTS)

74
$(odir_)%.$(way_)hc : %.lhc
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
	@$(RM) $@
	$(UNLIT) $< $@
	@chmod 444 $@


# Here's an interesting rule!
# The .hi file depends on the .o file,
# so if the .hi file is dated earlier than the .o file (commonly the case,
# when interfaces are stable) this rule just makes sure that the .o file,
# is up to date.  Then it does nothing to generate the .hi file from the 
# .o file, because the act of making sure the .o file is up to date also
# updates the .hi file (if necessary).

%.$(way_)hi : %.$(way_)o
	@if [ ! -f $@ ] ; then \
90
	    echo Panic! $< exists, but $@ does not.; \
91
92
93
94
	    exit 1; \
	else exit 0 ; \
	fi							

95
$(odir_)%.$(way_)hi : %.$(way_)hc
96
	@if [ ! -f $@ ] ; then \
97
	    echo Panic! $< exists, but $@ does not.; \
98
99
100
101
	    exit 1; \
	else exit 0 ; \
	fi

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
else # BootingFromHc

# -----------------------------------------------------------------------------
# suffix rules for building a .o from a .hc file in bootstrap mode.

ifeq "$(BootingFromUnregisterisedHc)" "YES"

# without mangling

$(odir_)%.o : %.hc
	$(CC) -x c $< -o $@ -c -O $(HC_BOOT_CC_OPTS) -I.  `echo $(patsubst -monly-%-regs, -DSTOLEN_X86_REGS=%, $(filter -monly-%-regs, $($*_HC_OPTS))) | sed 's/^$$/-DSTOLEN_X86_REGS=4/'`

else

# with mangling

$(odir_)%.raw_s : %.hc
	$(CC) -x c $< -o $@ -S -O $(HC_BOOT_CC_OPTS) -I.  `echo $(patsubst -monly-%-regs, -DSTOLEN_X86_REGS=%, $(filter -monly-%-regs, $($*_HC_OPTS))) | sed 's/^$$/-DSTOLEN_X86_REGS=4/'`

$(odir_)%.s : %.raw_s
	$(GHC_MANGLER) $< $@ $(patsubst -monly-%-regs, %, $(filter -monly-%-regs, $($*_HC_OPTS)))

$(odir_)%.o : %.s
	$(CC) -c -o $@ $<

endif # not BootingFromUnregisterisedHc

endif # BootingFromHc
130

131
132
133
#-----------------------------------------------------------------------------
# Happy Suffix Rules
#
134
.SECONDARY: %.hs
135
136

%.hs : %.ly
sof's avatar
sof committed
137
	$(HAPPY) $(HAPPY_OPTS) $<
138

139
140
141
%.hs : %.y
	$(HAPPY) $(HAPPY_OPTS) $<

142
143
144
145
146
147
148
#-----------------------------------------------------------------------------
# Alex Suffix Rules
#

%.hs : %.x
	$(ALEX) $(ALEX_OPTS) $<

149
150
151
#-----------------------------------------------------------------------------
# hsc2hs Suffix Rules
#
152
ifneq "$(BootingFromHc)" "YES"
153
%_hsc.c %_hsc.h %.hs : %.hsc
154
	$(HSC2HS) $(HSC2HS_OPTS) $<
155
	@touch $(patsubst %.hsc,%_hsc.c,$<)
156
endif
157

158
159
160
161
162
163
164
#-----------------------------------------------------------------------------
# Lx Suffix Rules
#

%.hs : %.lx
	$(LX) $(LX_OPTS) $<

reid's avatar
reid committed
165
166
167
168
#-----------------------------------------------------------------------------
# Green-card Suffix Rules
#

rrt's avatar
rrt committed
169
170
.PRECIOUS: %.gc

reid's avatar
reid committed
171
%.hs %_stub_ffi.c %_stub_ffi.h : %.gc
reid's avatar
reid committed
172
	$(GREENCARD) $(GC_OPTS) $<
sof's avatar
sof committed
173
174

%.lhs : %.gc
rrt's avatar
rrt committed
175
	$(GREENCARD) $(GC_OPTS) $< -o $@
reid's avatar
reid committed
176

rrt's avatar
rrt committed
177
178
179
%.gc : %.pgc
	$(CPP) $(GC_CPP_OPTS) $< | perl -pe 's#\\n#\n#g' > $@

180
181
182
#-----------------------------------------------------------------------------
# C-related suffix rules

183
# UseGhcForCc is only relevant when not booting from HC files.
184
ifeq "$(UseGhcForCc) $(BootingFromHc)" "YES NO"
185

reid's avatar
reid committed
186
$(odir_)%.$(way_)o : %.c
187
	@$(RM) $@
188
	$(HC) $(GHC_CC_OPTS) -c $< -o $@
189

reid's avatar
reid committed
190
$(odir_)%.$(way_)o : %.$(way_)s
191
	@$(RM) $@
192
	$(HC) $(GHC_CC_OPTS) -c $< -o $@
193

194
$(odir_)%.$(way_)o : %.S
195
	@$(RM) $@
196
	$(HC) $(GHC_CC_OPTS) -c $< -o $@
197

198
$(odir_)%.$(way_)s : %.c
199
	@$(RM) $@
200
	$(HC) $(GHC_CC_OPTS) -S $< -o $@
201
202

else
203

204
$(odir_)%.$(way_)o : %.c
sof's avatar
sof committed
205
	@$(RM) $@
206
	$(CC) $(CC_OPTS) -c $< -o $@
207

reid's avatar
reid committed
208
209
210
211
$(odir_)%.$(way_)o : %.$(way_)s
	@$(RM) $@
	$(AS) $(AS_OPTS) -o $@ $<

212
$(odir_)%.$(way_)o : %.S
213
	@$(RM) $@
214
	$(CC) $(CC_OPTS) -c $< -o $@
215

216
$(odir_)%.$(way_)s : %.c
217
	@$(RM) $@
218
	$(CC) $(CC_OPTS) -S $< -o $@
219
220

endif
221

222
223
224
225
# stubs are automatically generated and compiled by GHC
%_stub.$(way_)o: %.o
	@:

226
227
228
229
230
# -----------------------------------------------------------------------------
# Flex/lex

%.c : %.flex
	@$(RM) $@
231
	$(FLEX) -t $(FLEX_OPTS) $< > $@
232
233
%.c : %.lex
	@$(RM) $@
234
	$(FLEX) -t $(FLEX_OPTS) $< > $@
235

236
237
238
#-----------------------------------------------------------------------------
# Runtest rules for calling $(HC) on a single-file Haskell program

239
240
%.runtest : %.hs
	$(TIME) $(RUNTEST) $(HC) $(RUNTEST_OPTS) $<
241
242
243

#-----------------------------------------------------------------------------
# Doc processing suffix rules
sof's avatar
sof committed
244
245
246
#
# ToDo: make these more robust
#
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
%.ps : %.dvi
	@$(RM) $@
	dvips $< -o $@

%.tex : %.tib
	@$(RM) $*.tex $*.verb-t.tex
	$(TIB) $*.tib
	expand $*.tib-t.tex | $(VERBATIM) > $*.tex
	@$(RM) $*.tib-t.tex

%.ps : %.fig
	@$(RM) $@
	fig2dev -L ps $< $@

%.tex : %.fig
	@$(RM) $@
	fig2dev -L latex $< $@

265
266
267
268
269
#-----------------------------------------------------------------------------
# SGML suffix rules
#
%.dvi : %.sgml
	@$(RM) $@
rrt's avatar
rrt committed
270
	$(SGML2DVI) $(SGML2DVI_OPTS) $<
271

sof's avatar
sof committed
272
%.ps : %.sgml
273
	@$(RM) $@
rrt's avatar
rrt committed
274
	$(SGML2PS) $(SGML2PS_OPTS) $<
275

276
277
%.html : %.sgml
	@$(RM) $@
278
279
280
#	$(PERL) $(COLLATEINDEX) -N -o index.sgml
#	$(JADE) -t sgml -V html-index -d $(SGMLSTYLESHEET) -c $(DOCBOOK_CATALOG) $<
#	$(PERL) $(COLLATEINDEX) -N -o index.sgml
sof's avatar
sof committed
281
	$(SGML2HTML) $(SGML2HTML_OPTS) $<
rrt's avatar
rrt committed
282
283
# touch the .html file so that it is seen to be built
	@touch $@
284

rrt's avatar
rrt committed
285
%.html : %.tex
286
	@$(RM) $@
rrt's avatar
rrt committed
287
288
289
290
	$(HEVEA) $(HEVEA_OPTS) $(patsubst %.tex,%.hva,$<) $<
	$(HEVEA) $(HEVEA_OPTS) $(patsubst %.tex,%.hva,$<) $<
	$(HACHA) $(HACHA_OPTS) $(patsubst %.tex,%.html,$<)
# Run HeVeA twice to resolve labels
291

rrt's avatar
rrt committed
292
%.rtf : %.sgml
293
	@$(RM) $@
rrt's avatar
rrt committed
294
	$(SGML2RTF) $(SGML2RTF_OPTS) $<
295

sof's avatar
sof committed
296
297
298
299
%.pdf : %.sgml
	@$(RM) $@
	$(SGML2PDF) $(SGML2PDF_OPTS) $<

300
301
302
303
304
305
306
307
308
309
#-----------------------------------------------------------------------------
# Literate suffix rules

%.prl : %.lprl
	@$(RM) $@
	$(UNLIT) $(UNLIT_OPTS) $< $@
	@chmod 444 $@

%.c : %.lc
	@$(RM) $@
sof's avatar
sof committed
310
	$(UNLIT) $(UNLIT_OPTS) $< $@
311
312
313
314
	@chmod 444 $@

%.h : %.lh
	@$(RM) $@
sof's avatar
sof committed
315
	$(UNLIT) $(UNLIT_OPTS) $< $@
316
	@chmod 444 $@
sof's avatar
sof committed
317
318
319
320
321
322
323

#-----------------------------------------------------------------------------
# Win32 resource files
#
# The default is to use the GNU resource compiler.
#

324
%.$(way_)o : %.$(way_)rc
sof's avatar
sof committed
325
326
	@$(RM) $@
	windres $< $@
ken's avatar
ken committed
327
328
329
330

#-----------------------------------------------------------------------------
# Preprocessor suffix rule

331
332
333
334
335
# We're careful to remove cpp-droppings from the generated file; things like
# '#line' pragmas.  But we also leave in #include directives, because these
# are likely to be intentional (perhaps the file is going to be CPP'd again -
# this is used by ghc/compiler/parser/Parser.y.pp).

ken's avatar
ken committed
336
% : %.pp
337
	@$(RM) $@
338
	$(CPP) $(RAWCPP_FLAGS) $(CPP_OPTS) -x c $< | $(SED) -e '/^#[^i]/d' > $@