24aa4de71e4c0cf0e1db858c4709ab75e5e16c07
[ghc-hetmet.git] / ghc / compiler / ilxGen / tests / Makefile
1 include ../../../lib/std/Makefile.src
2
3 # These settings are if you use a visual studio build
4 CVS=/cvs/cvs
5 CORENV_DEBUG=
6 CORENV_RETAIL=
7 LOCALRUN=./
8 ILX_FAST=x
9 ifeq ($(HOSTNAME),msrc-hilda)
10 CORENV_DEBUG="call devvsnearerb1gen.bat"
11 CORENV_RETAIL="call devvsnearerb1gen.bat retail"
12 LOCALRUN=.\\
13 ILX_FAST=
14 endif    
15
16 ILXASM_HOME=/devel/fcom/src
17 ILXASM=$(ILXASM_HOME)/bin/ilxasm$(ILX_FAST).exe 
18 ILVALID=$(ILXASM_HOME)/bin/ilvalid$(ILX_FAST).exe 
19 ILXASM_FLAGS=-l $(ILXASM_HOME)/ilxasm --no-ilasm  --tailcall-indirect
20
21 ghc:
22         $(MAKE) -C ../.. ilxGen/IlxGen.o hsc
23
24 ilxasm:
25         $(MAKE) -C $(ILXASM_HOME) bin/ilxasm.exe
26
27 ilxasmx:
28         $(MAKE) -C $(ILXASM_HOME) bin/ilxasmx.exe
29
30 ilvalid:
31         $(MAKE) -C $(ILXASM_HOME) bin/ilvalid.exe
32
33 ilvalidx:
34         $(MAKE) -C $(ILXASM_HOME) bin/ilvalidx.exe
35
36 prel:
37         $(MAKE) -C ../../../lib/std ilxasm std.Onot.nongeneric.boxed.dll
38         $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.nongeneric.boxed.dll
39
40 prelq:
41         $(MAKE) -C ../../../lib/std ilxasm std.Onot.nongeneric.boxed.trial.dll
42         $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.nongeneric.boxed.trial.dll
43
44 oprel:
45         $(MAKE) -C ../../../lib/std ilxasm std.O.nongeneric.boxed.dll
46         $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.nongeneric.boxed.dll
47
48 oprelq:
49         $(MAKE) -C ../../../lib/std ilxasm std.O.nongeneric.boxed.trial.dll
50         $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.nongeneric.boxed.trial.dll
51
52 tprel:
53         $(MAKE) -C ../../../lib/std ilxasm std.Onot.nongeneric.boxed.traced.dll
54         $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.nongeneric.boxed.traced.dll
55
56 otprel:
57         $(MAKE) -C ../../../lib/std ilxasm std.O.nongeneric.boxed.traced.dll
58         $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.nongeneric.boxed.traced.dll
59
60 #gprel:
61 #       $(MAKE) -C ../../../lib/std ilxasm std.Onot.generic.dll
62 #       $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.generic.dll
63 #
64 #ogprel:
65 #       $(MAKE) -C ../../../lib/std ilxasm std.O.generic.dll
66 #       $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.generic.dll
67 #
68 #gtprel:
69 #       $(MAKE) -C ../../../lib/std ilxasm std.Onot.generic.traced.dll
70 #       $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.generic.traced.dll
71
72 vgprel:
73         $(MAKE) -C ../../../lib/std ilxasm std.Onot.vmeth-erased.generic.dll
74         $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.vmeth-erased.generic.dll
75
76 ovgprel:
77         $(MAKE) -C ../../../lib/std ilxasm std.O.vmeth-erased.generic.dll
78         $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.vmeth-erased.generic.dll
79
80 ovgprelq:
81         $(MAKE) -C ../../../lib/std ilxasm std.O.vmeth-erased.generic.trial.dll
82         $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.vmeth-erased.generic.trial.dll
83
84 vgtprel:
85         $(MAKE) -C ../../../lib/std ilxasm std.Onot.vmeth-erased.generic.traced.dll
86         $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.vmeth-erased.generic.traced.dll
87
88 ovgtprel:
89         $(MAKE) -C ../../../lib/std ilxasm std.O.vmeth-erased.generic.traced.dll
90         $(MAKE) -C $(ILXASM_HOME)  bin/msilxlib.vmeth-erased.generic.traced.dll
91
92 %.o: %.hs ../../hsc.exe
93         ../../../driver/ghc-inplace -o $@ -c $*.hs
94
95 std_NONGENERIC_STATIC_IL=$(patsubst %.lhs,../../../lib/std/%.nongeneric.boxed.static.il,$(std_SRC)) ../../../lib/std/PrelGHC.nongeneric.boxed.static.il
96 std_GENERIC_STATIC_IL=$(patsubst %.lhs,../../../lib/std/%.generic.static.il,$(std_SRC)) ../../../lib/std/PrelGHC.generic.static.il
97
98 #========================================================================
99 # 1. From Haskell to ILX 
100
101 %.Onot.ilx: %.hs ../../hsc.exe
102         ../../../driver/ghc-inplace  -fglasgow-exts -o $@ -i../../../lib/std/.Onot -Onot --ilx $*.hs
103
104 %.O.ilx: %.hs ../../hsc.exe
105         ../../../driver/ghc-inplace  -fglasgow-exts -o $@ -i../../../lib/std/.O -O --ilx $*.hs
106
107 ../Entry.Onot.ilx: ../Entry.ilx
108         sed -e "s|ilx std|ilx std.Onot|g" ../Entry.ilx > $@.tmp
109         mv $@.tmp $@
110
111 %.Onot.dlllib.ilx: %.Onot.ilx ../Entry.Onot.ilx 
112         cat ../Entry.Onot.ilx  $*.Onot.ilx > $@.tmp
113         mv $@.tmp $@
114
115 ../Entry.O.ilx: ../Entry.ilx
116         sed -e "s|ilx std|ilx std.O|g" ../Entry.ilx > $@.tmp
117         mv $@.tmp $@
118
119 %.O.dlllib.ilx: %.O.ilx ../Entry.O.ilx 
120         cat ../Entry.O.ilx  $*.O.ilx > $@.tmp
121         mv $@.tmp $@
122
123 HSstd_cbits.dll: ../../../lib/std/cbits/HSstd_cbits.dll
124         cp $< $@
125
126
127 #========================================================================
128 # 2. From ILX to IL
129
130 #------------------------------------------------------------------------
131 # Compile for a vanilla VM against a vanilla library organised as a
132 # seperate assembly/DLL.
133
134 %.nongeneric.boxed.dlllib.il: $(ILXASM) %.dlllib.ilx
135         $(ILXASM) --box-everything --no-stdlib $(ILXASM_FLAGS) -o $@.tmp $*.dlllib.ilx
136         mv $@.tmp $@
137
138 #------------------------------------------------------------------------
139 # Same
140 #       - running a trial optimization 
141 #       - for traced code on a vanilla VM
142 %.nongeneric.boxed.trial.dlllib.il: $(ILXASM) %.dlllib.ilx
143         $(ILXASM) --trial-opt --box-everything --no-stdlib $(ILXASM_FLAGS) -o $@.tmp $*.dlllib.ilx
144         mv $@.tmp $@
145
146 %.nongeneric.boxed.traced.dlllib.il: $(ILXASM) %.dlllib.ilx
147         $(ILXASM) --box-everything --trace-il --no-stdlib $(ILXASM_FLAGS) -o $@.tmp $*.dlllib.ilx
148         mv $@.tmp $@
149
150 #------------------------------------------------------------------------
151 # Same, for a generic library and generic VM
152
153 %.generic.dlllib.il: $(ILXASM) %.dlllib.ilx
154         $(ILXASM) --no-pp --no-stdlib $(ILXASM_FLAGS) -o  $@.tmp $*.dlllib.ilx  
155         mv $@.tmp $@
156
157 %.generic.trial.dlllib.il: $(ILXASM) %.dlllib.ilx
158         $(ILXASM) --trial-opt --no-pp --no-stdlib $(ILXASM_FLAGS) -o  $@.tmp $*.dlllib.ilx  
159         mv $@.tmp $@
160
161 %.generic.traced.dlllib.il: $(ILXASM) %.dlllib.ilx
162         $(ILXASM) --trace-il --no-pp --no-stdlib $(ILXASM_FLAGS) -o  $@.tmp $*.dlllib.ilx  
163         mv $@.tmp $@
164
165 %.vmeth-erased.generic.dlllib.il: $(ILXASM) %.dlllib.ilx
166         $(ILXASM) --poly-virtual-method-erase --no-pp --no-stdlib $(ILXASM_FLAGS) -o  $@.tmp $*.dlllib.ilx  
167         mv $@.tmp $@
168
169 %.vmeth-erased.generic.trial.dlllib.il: $(ILXASM) %.dlllib.ilx
170         $(ILXASM) --trial-opt --poly-virtual-method-erase --no-pp --no-stdlib $(ILXASM_FLAGS) -o  $@.tmp $*.dlllib.ilx  
171         mv $@.tmp $@
172
173 %.vmeth-erased.generic.traced.dlllib.il: $(ILXASM) %.dlllib.ilx
174         $(ILXASM) --poly-virtual-method-erase --trace-il --no-pp --no-stdlib $(ILXASM_FLAGS) -o  $@.tmp $*.dlllib.ilx  
175         mv $@.tmp $@
176
177
178 #------------------------------------------------------------------------
179 # Compile for a vanilla VM against a vanilla library compiled to IL code
180 # to be statically linked as one big module.  We hack this up by textually
181 # stripping out all the assembly qualifications (apart from mscorlib) 
182 # from the ILX forward files and IL code itself.  We then just 
183 # concatenate all the IL code together and compile it as a single .EXE.
184
185 %.staticlib.ilx: %.ilx ../Entry.ilx 
186         cat  ../Entry.ilx  $*.ilx | \
187                 sed -e "sQ\[std\]QQg" |   \
188                 sed -e "sQ\['std'\]QQg" > $@.tmp
189         cat $@.tmp > $@.tmp2
190         mv $@.tmp2 $@
191         rm $@.tmp
192
193
194 %.generic.staticlib.il: $(ILXASM) %.staticlib.ilx
195         $(ILXASM) --static --no-pp $(ILXASM_FLAGS) -o $@.tmp $*.staticlib.ilx  
196         cat $(std_GENERIC_STATIC_IL) $@.tmp > $@.tmp2
197         mv $@.tmp2 $@
198         rm $@.tmp
199
200
201 %.nongeneric.boxed.staticlib.il: $(ILXASM) %.staticlib.ilx
202         $(ILXASM) --box-everything --static $(ILXASM_FLAGS) -o $@.tmp $*.staticlib.ilx
203         cat $(std_NONGENERIC_STATIC_IL) $@.tmp > $@.tmp2
204         mv $@.tmp2 $@
205         rm $@.tmp
206
207
208 #------------------------------------------------------------------------
209 # For compiling test cases that don't use the standard library at all.
210
211 %.nolib.ilx: %.ilx PrelBase.test.ilx   ../PrelGHC.ilx ../Entry.ilx 
212         cat ../PrelGHC.ilx   PrelBase.test.ilx ../Entry.ilx  $*.ilx > $@.tmp
213         mv $@.tmp $@
214
215 %.nolib.il: $(ILXASM) $(ILXASM_HOME)/ilxasm/stdlib-func-by-mcalli.ilx %.nolib.ilx
216         $(ILXASM) $(ILXASM_FLAGS) -o $@.tmp $*.nolib.ilx 
217         mv $@.tmp $@
218
219 %.nolib.traced.il: $(ILXASM) $(ILXASM_HOME)/ilxasm/stdlib-func-by-mcalli.ilx %.nolib.ilx
220         $(ILXASM) --trace-il $(ILXASM_FLAGS) $*.nolib.ilx > $@.tmp
221         mv $@.tmp $@
222
223
224 #------------------------------------------------------------------------
225 # From IL to .EXE
226
227 %.retail.exe: %.il
228         echo "$(CORENV_RETAIL)" > $@.bat
229         echo "ilasm -exe -quiet -out=$(subst /,\\,$@) $(subst /,\\,$<)" >> $@.bat
230         time -p cmd /c $(subst /,\\,$@).bat
231         rm $@.bat
232
233 %.debug.exe: %.il
234         echo "$(CORENV_RETAIL)" > $@.bat
235         echo "ilasm -exe -quiet -debug -out=$(subst /,\\,$@) $(subst /,\\,$<)" >> $@.bat
236         time -p cmd /c $(subst /,\\,$@).bat
237         rm $@.bat
238 #------------------------------------------------------------------------
239 # From .HS to .EXE without using ILX
240
241 %.Onot.exe: %.hs
242         ghc -Onot -o $@ $<
243
244 %.O.exe: %.hs
245         ghc -O -o $@ $<
246
247
248
249 #------------------------------------------------------------------------
250 # Running:
251
252 %.debug.run: HSstd_cbits.dll %.debug.exe
253         echo "$(CORENV_DEBUG)" > $@.bat
254         echo "set CORPATH=$(subst /,\\,$(ILXASM_HOME))\\bin;\\GHC\\fptools\\ghc\\lib\\std;%CORPATH%" >> $@.bat
255         echo "$(LOCALRUN)$(subst /,\\,$*).debug.exe 2>&1" >> $@.bat
256         time -p cmd /c $(subst /,\\,$@).bat
257         rm $@.bat
258
259 %.retail.run: HSstd_cbits.dll %.retail.exe
260         echo "$(CORENV_RETAIL)" > $@.bat
261         echo "set CORPATH=$(subst /,\\,$(ILXASM_HOME))\\bin;\\GHC\\fptools\\ghc\\lib\\std;%CORPATH%" >> $@.bat
262         echo "$(LOCALRUN)$(subst /,\\,$*).retail.exe 2>&1" >> $@.bat
263         time -p cmd /c $(subst /,\\,$@).bat
264         rm $@.bat
265
266
267 %.run: %.exe
268         time -p $<
269
270
271
272 #--------------------
273
274 %.debug.exe: %.nolib.il
275         echo "$(CORENV_RETAIL)" > $@.bat
276         echo "$(CORENV_RETAIL)ilasm /DEBUG /OUT=$(subst /,\\,$@) $(subst /,\\,$<)" >> $@.bat
277         time -p cmd /c $(subst /,\\,$@).bat
278         rm $@.bat
279
280 %.trace-il.nolib.il: $(ILXASM) $(ILXASM_HOME)/ilxasm/stdlib-func-by-mcalli.ilx %.nolib.ilx
281         $(ILXASM) $(ILXASM_FLAGS) --trace-il  $*.nolib.ilx > $@.tmp
282         mv $@.tmp $@
283
284 %.mvl: %.nolib.il
285         ILVALID_HOME=$(ILXASM_HOME) $(ILVALID) $*.nolib.il
286
287 ci:
288         (cd $(ILXASM_HOME); $(CVS) ci -m "")
289         (cd ../..; cvs ci -m "")
290         (cd ../../../lib/std; $(CVS) ci -m "")
291
292 upd:
293         (cd $(ILXASM_HOME); $(CVS) up)
294         (cd ../..; $(CVS) up)
295         (cd ../../../lib/std; $(CVS) up)
296
297 .PRECIOUS: %.nongeneric.boxed.dlllib.il  %.generic.dlllib.il  %.generic.il %.nolib.il %.Onot.ilx %.O.ilx %.nolib.ilx %.dlllib.ilx %.exe  %.debug.exe %.dll %.O.exe
298
299 .PHONY: %.run