1 include ../../../lib/std/Makefile.src
3 # These settings are if you use a visual studio build
9 ifeq ($(HOSTNAME),msrc-hilda)
10 CORENV_DEBUG="call devvsnearerb1gen.bat"
11 CORENV_RETAIL="call devvsnearerb1gen.bat retail"
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
22 $(MAKE) -C ../.. ilxGen/IlxGen.o hsc
25 $(MAKE) -C $(ILXASM_HOME) bin/ilxasm.exe
28 $(MAKE) -C $(ILXASM_HOME) bin/ilxasmx.exe
31 $(MAKE) -C $(ILXASM_HOME) bin/ilvalid.exe
34 $(MAKE) -C $(ILXASM_HOME) bin/ilvalidx.exe
37 $(MAKE) -C ../../../lib/std ilxasm std.Onot.nongeneric.boxed.dll
38 $(MAKE) -C $(ILXASM_HOME) bin/msilxlib.nongeneric.boxed.dll
41 $(MAKE) -C ../../../lib/std ilxasm std.Onot.nongeneric.boxed.trial.dll
42 $(MAKE) -C $(ILXASM_HOME) bin/msilxlib.nongeneric.boxed.trial.dll
45 $(MAKE) -C ../../../lib/std ilxasm std.O.nongeneric.boxed.dll
46 $(MAKE) -C $(ILXASM_HOME) bin/msilxlib.nongeneric.boxed.dll
49 $(MAKE) -C ../../../lib/std ilxasm std.O.nongeneric.boxed.trial.dll
50 $(MAKE) -C $(ILXASM_HOME) bin/msilxlib.nongeneric.boxed.trial.dll
53 $(MAKE) -C ../../../lib/std ilxasm std.Onot.nongeneric.boxed.traced.dll
54 $(MAKE) -C $(ILXASM_HOME) bin/msilxlib.nongeneric.boxed.traced.dll
57 $(MAKE) -C ../../../lib/std ilxasm std.O.nongeneric.boxed.traced.dll
58 $(MAKE) -C $(ILXASM_HOME) bin/msilxlib.nongeneric.boxed.traced.dll
61 # $(MAKE) -C ../../../lib/std ilxasm std.Onot.generic.dll
62 # $(MAKE) -C $(ILXASM_HOME) bin/msilxlib.generic.dll
65 # $(MAKE) -C ../../../lib/std ilxasm std.O.generic.dll
66 # $(MAKE) -C $(ILXASM_HOME) bin/msilxlib.generic.dll
69 # $(MAKE) -C ../../../lib/std ilxasm std.Onot.generic.traced.dll
70 # $(MAKE) -C $(ILXASM_HOME) bin/msilxlib.generic.traced.dll
73 $(MAKE) -C ../../../lib/std ilxasm std.Onot.vmeth-erased.generic.dll
74 $(MAKE) -C $(ILXASM_HOME) bin/msilxlib.vmeth-erased.generic.dll
77 $(MAKE) -C ../../../lib/std ilxasm std.O.vmeth-erased.generic.dll
78 $(MAKE) -C $(ILXASM_HOME) bin/msilxlib.vmeth-erased.generic.dll
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
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
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
92 %.o: %.hs ../../hsc.exe
93 ../../../driver/ghc-inplace -o $@ -c $*.hs
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
98 #========================================================================
99 # 1. From Haskell to ILX
101 %.Onot.ilx: %.hs ../../hsc.exe
102 ../../../driver/ghc-inplace -fglasgow-exts -o $@ -i../../../lib/std/.Onot -Onot --ilx $*.hs
104 %.O.ilx: %.hs ../../hsc.exe
105 ../../../driver/ghc-inplace -fglasgow-exts -o $@ -i../../../lib/std/.O -O --ilx $*.hs
107 ../Entry.Onot.ilx: ../Entry.ilx
108 sed -e "s|ilx std|ilx std.Onot|g" ../Entry.ilx > $@.tmp
111 %.Onot.dlllib.ilx: %.Onot.ilx ../Entry.Onot.ilx
112 cat ../Entry.Onot.ilx $*.Onot.ilx > $@.tmp
115 ../Entry.O.ilx: ../Entry.ilx
116 sed -e "s|ilx std|ilx std.O|g" ../Entry.ilx > $@.tmp
119 %.O.dlllib.ilx: %.O.ilx ../Entry.O.ilx
120 cat ../Entry.O.ilx $*.O.ilx > $@.tmp
123 HSstd_cbits.dll: ../../../lib/std/cbits/HSstd_cbits.dll
127 #========================================================================
130 #------------------------------------------------------------------------
131 # Compile for a vanilla VM against a vanilla library organised as a
132 # seperate assembly/DLL.
134 %.nongeneric.boxed.dlllib.il: $(ILXASM) %.dlllib.ilx
135 $(ILXASM) --box-everything --no-stdlib $(ILXASM_FLAGS) -o $@.tmp $*.dlllib.ilx
138 #------------------------------------------------------------------------
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
146 %.nongeneric.boxed.traced.dlllib.il: $(ILXASM) %.dlllib.ilx
147 $(ILXASM) --box-everything --trace-il --no-stdlib $(ILXASM_FLAGS) -o $@.tmp $*.dlllib.ilx
150 #------------------------------------------------------------------------
151 # Same, for a generic library and generic VM
153 %.generic.dlllib.il: $(ILXASM) %.dlllib.ilx
154 $(ILXASM) --no-pp --no-stdlib $(ILXASM_FLAGS) -o $@.tmp $*.dlllib.ilx
157 %.generic.trial.dlllib.il: $(ILXASM) %.dlllib.ilx
158 $(ILXASM) --trial-opt --no-pp --no-stdlib $(ILXASM_FLAGS) -o $@.tmp $*.dlllib.ilx
161 %.generic.traced.dlllib.il: $(ILXASM) %.dlllib.ilx
162 $(ILXASM) --trace-il --no-pp --no-stdlib $(ILXASM_FLAGS) -o $@.tmp $*.dlllib.ilx
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
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
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
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.
185 %.staticlib.ilx: %.ilx ../Entry.ilx
186 cat ../Entry.ilx $*.ilx | \
187 sed -e "sQ\[std\]QQg" | \
188 sed -e "sQ\['std'\]QQg" > $@.tmp
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
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
208 #------------------------------------------------------------------------
209 # For compiling test cases that don't use the standard library at all.
211 %.nolib.ilx: %.ilx PrelBase.test.ilx ../PrelGHC.ilx ../Entry.ilx
212 cat ../PrelGHC.ilx PrelBase.test.ilx ../Entry.ilx $*.ilx > $@.tmp
215 %.nolib.il: $(ILXASM) $(ILXASM_HOME)/ilxasm/stdlib-func-by-mcalli.ilx %.nolib.ilx
216 $(ILXASM) $(ILXASM_FLAGS) -o $@.tmp $*.nolib.ilx
219 %.nolib.traced.il: $(ILXASM) $(ILXASM_HOME)/ilxasm/stdlib-func-by-mcalli.ilx %.nolib.ilx
220 $(ILXASM) --trace-il $(ILXASM_FLAGS) $*.nolib.ilx > $@.tmp
224 #------------------------------------------------------------------------
228 echo "$(CORENV_RETAIL)" > $@.bat
229 echo "ilasm -exe -quiet -out=$(subst /,\\,$@) $(subst /,\\,$<)" >> $@.bat
230 time -p cmd /c $(subst /,\\,$@).bat
234 echo "$(CORENV_RETAIL)" > $@.bat
235 echo "ilasm -exe -quiet -debug -out=$(subst /,\\,$@) $(subst /,\\,$<)" >> $@.bat
236 time -p cmd /c $(subst /,\\,$@).bat
238 #------------------------------------------------------------------------
239 # From .HS to .EXE without using ILX
249 #------------------------------------------------------------------------
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
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
272 #--------------------
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
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
285 ILVALID_HOME=$(ILXASM_HOME) $(ILVALID) $*.nolib.il
288 (cd $(ILXASM_HOME); $(CVS) ci -m "")
289 (cd ../..; cvs ci -m "")
290 (cd ../../../lib/std; $(CVS) ci -m "")
293 (cd $(ILXASM_HOME); $(CVS) up)
294 (cd ../..; $(CVS) up)
295 (cd ../../../lib/std; $(CVS) up)
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