Globally replace "hackage.haskell.org" with "ghc.haskell.org"
[ghc.git] / compiler / ghc.mk
1 # -----------------------------------------------------------------------------
2 #
3 # (c) 2009-2012 The University of Glasgow
4 #
5 # This file is part of the GHC build system.
6 #
7 # To understand how the build system works and how to modify it, see
8 # http://ghc.haskell.org/trac/ghc/wiki/Building/Architecture
9 # http://ghc.haskell.org/trac/ghc/wiki/Building/Modifying
10 #
11 # -----------------------------------------------------------------------------
12
13 # -----------------------------------------------------------------------------
14 # Create compiler configuration
15 #
16 # The 'echo' commands simply spit the values of various make variables
17 # into Config.hs, whence they can be compiled and used by GHC itself
18
19 # This is just to avoid generating a warning when generating deps
20 # involving RtsFlags.h
21 compiler_stage1_MKDEPENDC_OPTS = -DMAKING_GHC_BUILD_SYSTEM_DEPENDENCIES
22 compiler_stage2_MKDEPENDC_OPTS = -DMAKING_GHC_BUILD_SYSTEM_DEPENDENCIES
23 compiler_stage3_MKDEPENDC_OPTS = -DMAKING_GHC_BUILD_SYSTEM_DEPENDENCIES
24
25 compiler_stage1_C_FILES_NODEPS = compiler/parser/cutils.c
26
27 # This package doesn't pass the Cabal checks because include-dirs
28 # points outside the source directory. This isn't a real problem, so
29 # we just skip the check.
30 compiler_NO_CHECK = YES
31
32 ifneq "$(BINDIST)" "YES"
33 compiler/stage1/package-data.mk : compiler/stage1/build/Config.hs
34 compiler/stage2/package-data.mk : compiler/stage2/build/Config.hs
35 compiler/stage3/package-data.mk : compiler/stage3/build/Config.hs
36
37 compiler/stage1/build/PlatformConstants.o: $(includes_GHCCONSTANTS_HASKELL_TYPE)
38 compiler/stage2/build/PlatformConstants.o: $(includes_GHCCONSTANTS_HASKELL_TYPE)
39 compiler/stage3/build/PlatformConstants.o: $(includes_GHCCONSTANTS_HASKELL_TYPE)
40 compiler/stage1/build/DynFlags.o: $(includes_GHCCONSTANTS_HASKELL_EXPORTS)
41 compiler/stage2/build/DynFlags.o: $(includes_GHCCONSTANTS_HASKELL_EXPORTS)
42 compiler/stage3/build/DynFlags.o: $(includes_GHCCONSTANTS_HASKELL_EXPORTS)
43 compiler/stage1/build/DynFlags.o: $(includes_GHCCONSTANTS_HASKELL_WRAPPERS)
44 compiler/stage2/build/DynFlags.o: $(includes_GHCCONSTANTS_HASKELL_WRAPPERS)
45 compiler/stage3/build/DynFlags.o: $(includes_GHCCONSTANTS_HASKELL_WRAPPERS)
46 endif
47
48 compiler/stage%/build/Config.hs : mk/config.mk mk/project.mk | $$(dir $$@)/.
49 $(call removeFiles,$@)
50 @echo 'Creating $@ ... '
51 @echo '{-# LANGUAGE CPP #-}' >> $@
52 @echo 'module Config where' >> $@
53 @echo >> $@
54 @echo '#include "ghc_boot_platform.h"' >> $@
55 @echo >> $@
56 @echo 'data IntegerLibrary = IntegerGMP | IntegerSimple' >> $@
57 @echo ' deriving Eq' >> $@
58 @echo >> $@
59 @echo 'cBuildPlatformString :: String' >> $@
60 @echo 'cBuildPlatformString = BuildPlatform_NAME' >> $@
61 @echo 'cHostPlatformString :: String' >> $@
62 @echo 'cHostPlatformString = HostPlatform_NAME' >> $@
63 @echo 'cTargetPlatformString :: String' >> $@
64 @echo 'cTargetPlatformString = TargetPlatform_NAME' >> $@
65 @echo >> $@
66 @echo 'cProjectName :: String' >> $@
67 @echo 'cProjectName = "$(ProjectName)"' >> $@
68 @echo 'cProjectVersion :: String' >> $@
69 @echo 'cProjectVersion = "$(ProjectVersion)"' >> $@
70 @echo 'cProjectVersionInt :: String' >> $@
71 @echo 'cProjectVersionInt = "$(ProjectVersionInt)"' >> $@
72 @echo 'cProjectPatchLevel :: String' >> $@
73 @echo 'cProjectPatchLevel = "$(ProjectPatchLevel)"' >> $@
74 @echo 'cBooterVersion :: String' >> $@
75 @echo 'cBooterVersion = "$(GhcVersion)"' >> $@
76 @echo 'cStage :: String' >> $@
77 @echo 'cStage = show (STAGE :: Int)' >> $@
78 @echo 'cIntegerLibrary :: String' >> $@
79 @echo 'cIntegerLibrary = "$(INTEGER_LIBRARY)"' >> $@
80 @echo 'cIntegerLibraryType :: IntegerLibrary' >> $@
81 ifeq "$(INTEGER_LIBRARY)" "integer-gmp"
82 @echo 'cIntegerLibraryType = IntegerGMP' >> $@
83 else ifeq "$(INTEGER_LIBRARY)" "integer-simple"
84 @echo 'cIntegerLibraryType = IntegerSimple' >> $@
85 else ifneq "$(CLEANING)" "YES"
86 $(error Unknown integer library)
87 endif
88 @echo 'cSupportsSplitObjs :: String' >> $@
89 @echo 'cSupportsSplitObjs = "$(SupportsSplitObjs)"' >> $@
90 @echo 'cGhcWithInterpreter :: String' >> $@
91 @echo 'cGhcWithInterpreter = "$(GhcWithInterpreter)"' >> $@
92 @echo 'cGhcWithNativeCodeGen :: String' >> $@
93 @echo 'cGhcWithNativeCodeGen = "$(GhcWithNativeCodeGen)"' >> $@
94 @echo 'cGhcWithSMP :: String' >> $@
95 @echo 'cGhcWithSMP = "$(GhcWithSMP)"' >> $@
96 @echo 'cGhcRTSWays :: String' >> $@
97 @echo 'cGhcRTSWays = "$(GhcRTSWays)"' >> $@
98 @echo 'cGhcEnableTablesNextToCode :: String' >> $@
99 @echo 'cGhcEnableTablesNextToCode = "$(GhcEnableTablesNextToCode)"' >> $@
100 @echo 'cLeadingUnderscore :: String' >> $@
101 @echo 'cLeadingUnderscore = "$(LeadingUnderscore)"' >> $@
102 @echo 'cRAWCPP_FLAGS :: String' >> $@
103 @echo 'cRAWCPP_FLAGS = "$(RAWCPP_FLAGS)"' >> $@
104 @echo 'cGHC_UNLIT_PGM :: String' >> $@
105 @echo 'cGHC_UNLIT_PGM = "$(utils/unlit_dist_PROG)"' >> $@
106 @echo 'cGHC_SPLIT_PGM :: String' >> $@
107 @echo 'cGHC_SPLIT_PGM = "$(driver/split_dist_PROG)"' >> $@
108 @echo 'cLibFFI :: Bool' >> $@
109 ifeq "$(UseLibFFIForAdjustors)" "YES"
110 @echo 'cLibFFI = True' >> $@
111 else
112 @echo 'cLibFFI = False' >> $@
113 endif
114 @echo 'cDYNAMIC_GHC_PROGRAMS :: Bool' >> $@
115 ifeq "$(DYNAMIC_GHC_PROGRAMS)" "YES"
116 @echo 'cDYNAMIC_GHC_PROGRAMS = True' >> $@
117 else
118 @echo 'cDYNAMIC_GHC_PROGRAMS = False' >> $@
119 endif
120 # Note that GhcThreaded just reflects the Makefile variable setting.
121 # In particular, the stage1 compiler is never actually compiled with
122 # -threaded, but it will nevertheless have cGhcThreaded = True.
123 # The "+RTS --info" output will show what RTS GHC is really using.
124 @echo 'cGhcThreaded :: Bool' >> $@
125 ifeq "$(GhcThreaded)" "YES"
126 @echo 'cGhcThreaded = True' >> $@
127 else
128 @echo 'cGhcThreaded = False' >> $@
129 endif
130 @echo 'cGhcDebugged :: Bool' >> $@
131 ifeq "$(GhcDebugged)" "YES"
132 @echo 'cGhcDebugged = True' >> $@
133 else
134 @echo 'cGhcDebugged = False' >> $@
135 endif
136 @echo done.
137
138 # -----------------------------------------------------------------------------
139 # Create platform includes
140
141 # Here we generate a little header file containing CPP symbols that GHC
142 # uses to determine which platform it is building on/for. The platforms
143 # can differ between stage1 and stage2 if we're cross-compiling, so we
144 # need one of these header files per stage.
145
146 PLATFORM_H = ghc_boot_platform.h
147
148 compiler/stage1/$(PLATFORM_H) : mk/config.mk mk/project.mk | $$(dir $$@)/.
149 $(call removeFiles,$@)
150 @echo "Creating $@..."
151 @echo "#ifndef __PLATFORM_H__" >> $@
152 @echo "#define __PLATFORM_H__" >> $@
153 @echo >> $@
154 @echo "#define BuildPlatform_NAME \"$(BUILDPLATFORM)\"" >> $@
155 @echo "#define HostPlatform_NAME \"$(HOSTPLATFORM)\"" >> $@
156 @echo "#define TargetPlatform_NAME \"$(TARGETPLATFORM)\"" >> $@
157 @echo >> $@
158 @echo "#define $(BuildPlatform_CPP)_BUILD 1" >> $@
159 @echo "#define $(HostPlatform_CPP)_HOST 1" >> $@
160 @echo "#define $(TargetPlatform_CPP)_TARGET 1" >> $@
161 @echo >> $@
162 @echo "#define $(BuildArch_CPP)_BUILD_ARCH 1" >> $@
163 @echo "#define $(HostArch_CPP)_HOST_ARCH 1" >> $@
164 @echo "#define $(TargetArch_CPP)_TARGET_ARCH 1" >> $@
165 @echo "#define BUILD_ARCH \"$(BuildArch_CPP)\"" >> $@
166 @echo "#define HOST_ARCH \"$(HostArch_CPP)\"" >> $@
167 @echo "#define TARGET_ARCH \"$(TargetArch_CPP)\"" >> $@
168 @echo >> $@
169 @echo "#define $(BuildOS_CPP)_BUILD_OS 1" >> $@
170 @echo "#define $(HostOS_CPP)_HOST_OS 1" >> $@
171 @echo "#define $(TargetOS_CPP)_TARGET_OS 1" >> $@
172 @echo "#define BUILD_OS \"$(BuildOS_CPP)\"" >> $@
173 @echo "#define HOST_OS \"$(HostOS_CPP)\"" >> $@
174 @echo "#define TARGET_OS \"$(TargetOS_CPP)\"" >> $@
175 ifeq "$(TargetOS_CPP)" "irix"
176 @echo "#ifndef $(IRIX_MAJOR)_TARGET_OS" >> $@
177 @echo "#define $(IRIX_MAJOR)_TARGET_OS 1" >> $@
178 @echo "#endif" >> $@
179 endif
180 @echo >> $@
181 @echo "#define $(BuildVendor_CPP)_BUILD_VENDOR 1" >> $@
182 @echo "#define $(HostVendor_CPP)_HOST_VENDOR 1" >> $@
183 @echo "#define $(TargetVendor_CPP)_TARGET_VENDOR 1" >> $@
184 @echo "#define BUILD_VENDOR \"$(BuildVendor_CPP)\"" >> $@
185 @echo "#define HOST_VENDOR \"$(HostVendor_CPP)\"" >> $@
186 @echo "#define TARGET_VENDOR \"$(TargetVendor_CPP)\"" >> $@
187 @echo >> $@
188 @echo "#endif /* __PLATFORM_H__ */" >> $@
189 @echo "Done."
190
191 # For stage2 and above, the BUILD platform is the HOST of stage1, and
192 # the HOST platform is the TARGET of stage1. The TARGET remains the same
193 # (stage1 is the cross-compiler, not stage2).
194 compiler/stage2/$(PLATFORM_H) : mk/config.mk mk/project.mk | $$(dir $$@)/.
195 $(call removeFiles,$@)
196 @echo "Creating $@..."
197 @echo "#ifndef __PLATFORM_H__" >> $@
198 @echo "#define __PLATFORM_H__" >> $@
199 @echo >> $@
200 @echo "#define BuildPlatform_NAME \"$(HOSTPLATFORM)\"" >> $@
201 @echo "#define HostPlatform_NAME \"$(TARGETPLATFORM)\"" >> $@
202 @echo "#define TargetPlatform_NAME \"$(TARGETPLATFORM)\"" >> $@
203 @echo >> $@
204 @echo "#define $(HostPlatform_CPP)_BUILD 1" >> $@
205 @echo "#define $(TargetPlatform_CPP)_HOST 1" >> $@
206 @echo "#define $(TargetPlatform_CPP)_TARGET 1" >> $@
207 @echo >> $@
208 @echo "#define $(HostArch_CPP)_BUILD_ARCH 1" >> $@
209 @echo "#define $(TargetArch_CPP)_HOST_ARCH 1" >> $@
210 @echo "#define $(TargetArch_CPP)_TARGET_ARCH 1" >> $@
211 @echo "#define BUILD_ARCH \"$(HostArch_CPP)\"" >> $@
212 @echo "#define HOST_ARCH \"$(TargetArch_CPP)\"" >> $@
213 @echo "#define TARGET_ARCH \"$(TargetArch_CPP)\"" >> $@
214 @echo >> $@
215 @echo "#define $(HostOS_CPP)_BUILD_OS 1" >> $@
216 @echo "#define $(TargetOS_CPP)_HOST_OS 1" >> $@
217 @echo "#define $(TargetOS_CPP)_TARGET_OS 1" >> $@
218 @echo "#define BUILD_OS \"$(HostOS_CPP)\"" >> $@
219 @echo "#define HOST_OS \"$(TargetOS_CPP)\"" >> $@
220 @echo "#define TARGET_OS \"$(TargetOS_CPP)\"" >> $@
221 ifeq "$(TargetOS_CPP)" "irix"
222 @echo "#ifndef $(IRIX_MAJOR)_TARGET_OS" >> $@
223 @echo "#define $(IRIX_MAJOR)_TARGET_OS 1" >> $@
224 @echo "#endif" >> $@
225 endif
226 @echo >> $@
227 @echo "#define $(HostVendor_CPP)_BUILD_VENDOR 1" >> $@
228 @echo "#define $(TargetVendor_CPP)_HOST_VENDOR 1" >> $@
229 @echo "#define $(TargetVendor_CPP)_TARGET_VENDOR 1" >> $@
230 @echo "#define BUILD_VENDOR \"$(HostVendor_CPP)\"" >> $@
231 @echo "#define HOST_VENDOR \"$(TargetVendor_CPP)\"" >> $@
232 @echo "#define TARGET_VENDOR \"$(TargetVendor_CPP)\"" >> $@
233 @echo >> $@
234 @echo "#endif /* __PLATFORM_H__ */" >> $@
235 @echo "Done."
236
237 compiler/stage3/$(PLATFORM_H) : compiler/stage2/$(PLATFORM_H)
238 "$(CP)" $< $@
239
240 # ----------------------------------------------------------------------------
241 # Generate supporting stuff for prelude/PrimOp.lhs
242 # from prelude/primops.txt
243
244 PRIMOP_BITS_NAMES = primop-data-decl.hs-incl \
245 primop-tag.hs-incl \
246 primop-list.hs-incl \
247 primop-has-side-effects.hs-incl \
248 primop-out-of-line.hs-incl \
249 primop-commutable.hs-incl \
250 primop-code-size.hs-incl \
251 primop-can-fail.hs-incl \
252 primop-strictness.hs-incl \
253 primop-fixity.hs-incl \
254 primop-primop-info.hs-incl \
255 primop-vector-uniques.hs-incl \
256 primop-vector-tys.hs-incl \
257 primop-vector-tys-exports.hs-incl \
258 primop-vector-tycons.hs-incl
259
260 PRIMOP_BITS_STAGE1 = $(addprefix compiler/stage1/build/,$(PRIMOP_BITS_NAMES))
261 PRIMOP_BITS_STAGE2 = $(addprefix compiler/stage2/build/,$(PRIMOP_BITS_NAMES))
262 PRIMOP_BITS_STAGE3 = $(addprefix compiler/stage3/build/,$(PRIMOP_BITS_NAMES))
263
264 compiler_CPP_OPTS += $(addprefix -I,$(GHC_INCLUDE_DIRS))
265 compiler_CPP_OPTS += ${GhcCppOpts}
266
267 define preprocessCompilerFiles
268 # $0 = stage
269 compiler/stage$1/build/Parser.y: compiler/parser/Parser.y.pp
270 $$(CPP) $$(RAWCPP_FLAGS) -P $$(compiler_CPP_OPTS) -x c $$< | grep -v '^#pragma GCC' > $$@
271
272 compiler/stage$1/build/primops.txt: compiler/prelude/primops.txt.pp compiler/stage$1/$$(PLATFORM_H)
273 $$(CPP) $$(RAWCPP_FLAGS) -P $$(compiler_CPP_OPTS) -Icompiler/stage$1 -x c $$< | grep -v '^#pragma GCC' > $$@
274
275 compiler/stage$1/build/primop-data-decl.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
276 "$$(genprimopcode_INPLACE)" --data-decl < $$< > $$@
277 compiler/stage$1/build/primop-tag.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
278 "$$(genprimopcode_INPLACE)" --primop-tag < $$< > $$@
279 compiler/stage$1/build/primop-list.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
280 "$$(genprimopcode_INPLACE)" --primop-list < $$< > $$@
281 compiler/stage$1/build/primop-has-side-effects.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
282 "$$(genprimopcode_INPLACE)" --has-side-effects < $$< > $$@
283 compiler/stage$1/build/primop-out-of-line.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
284 "$$(genprimopcode_INPLACE)" --out-of-line < $$< > $$@
285 compiler/stage$1/build/primop-commutable.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
286 "$$(genprimopcode_INPLACE)" --commutable < $$< > $$@
287 compiler/stage$1/build/primop-code-size.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
288 "$$(genprimopcode_INPLACE)" --code-size < $$< > $$@
289 compiler/stage$1/build/primop-can-fail.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
290 "$$(genprimopcode_INPLACE)" --can-fail < $$< > $$@
291 compiler/stage$1/build/primop-strictness.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
292 "$$(genprimopcode_INPLACE)" --strictness < $$< > $$@
293 compiler/stage$1/build/primop-fixity.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
294 "$$(genprimopcode_INPLACE)" --fixity < $$< > $$@
295 compiler/stage$1/build/primop-primop-info.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
296 "$$(genprimopcode_INPLACE)" --primop-primop-info < $$< > $$@
297 compiler/stage$1/build/primop-vector-uniques.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
298 "$$(genprimopcode_INPLACE)" --primop-vector-uniques < $$< > $$@
299 compiler/stage$1/build/primop-vector-tys.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
300 "$$(genprimopcode_INPLACE)" --primop-vector-tys < $$< > $$@
301 compiler/stage$1/build/primop-vector-tys-exports.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
302 "$$(genprimopcode_INPLACE)" --primop-vector-tys-exports < $$< > $$@
303 compiler/stage$1/build/primop-vector-tycons.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
304 "$$(genprimopcode_INPLACE)" --primop-vector-tycons < $$< > $$@
305
306 # Usages aren't used any more; but the generator
307 # can still generate them if we want them back
308 compiler/stage$1/build/primop-usage.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
309 "$$(genprimopcode_INPLACE)" --usage < $$< > $$@
310
311 endef
312
313 $(eval $(call preprocessCompilerFiles,1))
314 $(eval $(call preprocessCompilerFiles,2))
315 $(eval $(call preprocessCompilerFiles,3))
316
317 # -----------------------------------------------------------------------------
318 # Configuration
319
320 compiler_stage1_CONFIGURE_OPTS += --flags=stage1
321 compiler_stage2_CONFIGURE_OPTS += --flags=stage2
322 compiler_stage3_CONFIGURE_OPTS += --flags=stage3
323
324 ifeq "$(GhcThreaded)" "YES"
325 # We pass THREADED_RTS to the stage2 C files so that cbits/genSym.c will bring
326 # the threaded version of atomic_inc() into scope.
327 compiler_stage2_CONFIGURE_OPTS += --ghc-option=-optc-DTHREADED_RTS
328 endif
329
330 ifeq "$(GhcWithNativeCodeGen)" "YES"
331 compiler_stage1_CONFIGURE_OPTS += --flags=ncg
332 compiler_stage2_CONFIGURE_OPTS += --flags=ncg
333 endif
334
335 ifeq "$(GhcWithInterpreter)" "YES"
336 compiler_stage2_CONFIGURE_OPTS += --flags=ghci
337
338 ifeq "$(GhcEnableTablesNextToCode) $(GhcUnregisterised)" "YES NO"
339 # Should GHCI be building info tables in the TABLES_NEXT_TO_CODE style
340 # or not?
341 # XXX This should logically be a CPP option, but there doesn't seem to
342 # be a flag for that
343 compiler_stage2_CONFIGURE_OPTS += --ghc-option=-DGHCI_TABLES_NEXT_TO_CODE
344 endif
345
346 # Should the debugger commands be enabled?
347 ifeq "$(GhciWithDebugger)" "YES"
348 compiler_stage2_CONFIGURE_OPTS += --ghc-option=-DDEBUGGER
349 endif
350
351 endif
352
353 ifeq "$(TargetOS_CPP)" "openbsd"
354 compiler_CONFIGURE_OPTS += --ld-options=-E
355 endif
356
357 ifeq "$(GhcUnregisterised)" "NO"
358 else
359 compiler_CONFIGURE_OPTS += --ghc-option=-DNO_REGS
360 endif
361
362 # Careful optimisation of the parser: we don't want to throw everything
363 # at it, because that takes too long and doesn't buy much, but we do want
364 # to inline certain key external functions, so we instruct GHC not to
365 # throw away inlinings as it would normally do in -O0 mode.
366 compiler/stage1/build/Parser_HC_OPTS += -O0 -fno-ignore-interface-pragmas
367 # If we're bootstrapping the compiler during stage2, or we're being
368 # built by a GHC whose version is > 7.8, we need -fcmm-sink to be
369 # passed to the compiler. This is required on x86 to avoid the
370 # register allocator running out of stack slots when compiling this
371 # module with -fPIC -dynamic.
372 # See #8182 for all the details
373 ifeq "$(CMM_SINK_BOOTSTRAP_IS_NEEDED)" "YES"
374 compiler/stage1/build/Parser_HC_OPTS += -fcmm-sink
375 endif
376 # We also pass -fcmm-sink to every stage != 1
377 compiler/stage2/build/Parser_HC_OPTS += -O0 -fno-ignore-interface-pragmas -fcmm-sink
378 compiler/stage3/build/Parser_HC_OPTS += -O0 -fno-ignore-interface-pragmas -fcmm-sink
379
380
381 ifeq "$(GhcProfiled)" "YES"
382 # If we're profiling GHC then we want SCCs. However, adding -auto-all
383 # everywhere tends to give a hard-to-read profile, and adds lots of
384 # overhead. A better approach is to proceed top-down; identify the
385 # parts of the compiler of interest, and then add further cost centres
386 # as necessary. Turn on -auto-all for individual modules like this:
387
388 # compiler/main/DriverPipeline_HC_OPTS += -auto-all
389 compiler/main/GhcMake_HC_OPTS += -auto-all
390 compiler/main/GHC_HC_OPTS += -auto-all
391
392 # or alternatively add {-# OPTIONS_GHC -auto-all #-} to the top of
393 # modules you're interested in.
394
395 # We seem to still build the vanilla libraries even if we say
396 # --disable-library-vanilla, but installation then fails, as Cabal
397 # doesn't copy the vanilla .hi files, but ghc-pkg complains about
398 # their absence when we register the package. So for now, we just
399 # leave the vanilla libraries enabled.
400 # compiler_stage2_CONFIGURE_OPTS += --disable-library-vanilla
401 compiler_stage2_CONFIGURE_OPTS += --ghc-pkg-option=--force
402 endif
403
404 compiler_stage3_CONFIGURE_OPTS := $(compiler_stage2_CONFIGURE_OPTS)
405
406 compiler_stage1_CONFIGURE_OPTS += --ghc-option=-DSTAGE=1
407 compiler_stage2_CONFIGURE_OPTS += --ghc-option=-DSTAGE=2
408 compiler_stage3_CONFIGURE_OPTS += --ghc-option=-DSTAGE=3
409 compiler_stage2_HADDOCK_OPTS += --optghc=-DSTAGE=2
410
411 compiler/stage1/package-data.mk : compiler/ghc.mk
412 compiler/stage2/package-data.mk : compiler/ghc.mk
413 compiler/stage3/package-data.mk : compiler/ghc.mk
414
415 # -----------------------------------------------------------------------------
416 # And build the package
417
418 compiler_PACKAGE = ghc
419
420 # Note [fiddle-stage1-version]
421 # The version of the GHC package changes every day, since the
422 # patchlevel is the current date. We don't want to force
423 # recompilation of the entire compiler when this happens, so for stage
424 # 1 we omit the patchlevel from the version number. For stage 2 we
425 # have to include the patchlevel since this is the package we install,
426 # however.
427 #
428 # Note: we also have to tweak the version number of the package itself
429 # when it gets registered; see Note [munge-stage1-package-config]
430 # below.
431 # The ProjectPatchLevel > 20000000 iff it's a date. If it's e.g. 6.12.1
432 # then we don't want to remove it
433 ifneq "$(CLEANING)" "YES"
434 ifeq "$(shell [ $(ProjectPatchLevel) -gt 20000000 ] && echo YES)" "YES"
435 compiler_stage1_VERSION_MUNGED = YES
436 endif
437 endif
438
439 ifeq "$(compiler_stage1_VERSION_MUNGED)" "YES"
440 compiler_stage1_MUNGED_VERSION = $(subst .$(ProjectPatchLevel),,$(ProjectVersion))
441 define compiler_PACKAGE_MAGIC
442 compiler_stage1_VERSION = $(compiler_stage1_MUNGED_VERSION)
443 endef
444
445 # Don't register the non-munged package
446 compiler_stage1_REGISTER_PACKAGE = NO
447
448 endif
449
450 # Don't do splitting for the GHC package, it takes too long and
451 # there's not much benefit.
452 compiler_stage1_SplitObjs = NO
453 compiler_stage2_SplitObjs = NO
454 compiler_stage3_SplitObjs = NO
455
456 # There are too many symbols in the ghc package for a Windows DLL.
457 # We therefore need to split some of the modules off into a separate
458 # DLL. This clump are the modules reachable from DynFlags:
459 compiler_stage2_dll0_START_MODULE = DynFlags
460 compiler_stage2_dll0_MODULES = Annotations Avail Bag BasicTypes BinIface Binary Bitmap BlockId BooleanFormula BreakArray BufWrite BuildTyCl ByteCodeAsm ByteCodeInstr ByteCodeItbls CLabel Class CmdLineParser Cmm CmmCallConv CmmExpr CmmInfo CmmMachOp CmmNode CmmType CmmUtils CoAxiom CodeGen.Platform CodeGen.Platform.ARM CodeGen.Platform.NoRegs CodeGen.Platform.PPC CodeGen.Platform.PPC_Darwin CodeGen.Platform.SPARC CodeGen.Platform.X86 CodeGen.Platform.X86_64 Coercion Config Constants CoreArity CoreFVs CoreLint CoreSubst CoreSyn CoreTidy CoreUnfold CoreUtils CostCentre DataCon Demand Digraph DriverPhases DsMonad DynFlags Encoding ErrUtils Exception ExtsCompat46 FamInst FamInstEnv FastBool FastFunctions FastMutInt FastString FastTypes Finder Fingerprint FiniteMap ForeignCall Hooks Hoopl Hoopl.Dataflow HsBinds HsDecls HsDoc HsExpr HsImpExp HsLit HsPat HsSyn HsTypes HsUtils HscTypes IOEnv Id IdInfo IfaceEnv IfaceSyn IfaceType InstEnv InteractiveEvalTypes Kind ListSetOps Literal LoadIface Maybes MkCore MkGraph MkId Module MonadUtils Name NameEnv NameSet OccName OccurAnal OptCoercion OrdList Outputable PackageConfig Packages Pair Panic PipelineMonad Platform PlatformConstants PprCmm PprCmmDecl PprCmmExpr PprCore PrelInfo PrelNames PrelRules Pretty PrimOp RdrName Reg RegClass Rules SMRep Serialized SrcLoc StaticFlags StgCmmArgRep StgCmmClosure StgCmmEnv StgCmmLayout StgCmmMonad StgCmmProf StgCmmTicky StgCmmUtils StgSyn Stream StringBuffer TcEvidence TcIface TcMType TcRnMonad TcRnTypes TcType TcTypeNats TrieMap TyCon Type TypeRep TysPrim TysWiredIn Unify UniqFM UniqSet UniqSupply Unique Util Var VarEnv VarSet
461
462 compiler_stage2_dll0_HS_OBJS = \
463 $(patsubst %,compiler/stage2/build/%.$(dyn_osuf),$(subst .,/,$(compiler_stage2_dll0_MODULES)))
464
465 # if stage is set to something other than "1" or "", disable stage 1
466 ifneq "$(filter-out 1,$(stage))" ""
467 compiler_stage1_NOT_NEEDED = YES
468 endif
469 # if stage is set to something other than "2" or "", disable stage 2
470 ifneq "$(filter-out 2,$(stage))" ""
471 compiler_stage2_NOT_NEEDED = YES
472 endif
473 # stage 3 has to be requested explicitly with stage=3
474 ifneq "$(stage)" "3"
475 compiler_stage3_NOT_NEEDED = YES
476 endif
477 $(eval $(call build-package,compiler,stage1,0))
478 $(eval $(call build-package,compiler,stage2,1))
479 $(eval $(call build-package,compiler,stage3,2))
480
481 # We only want to turn keepCAFs on if we will be loading dynamic
482 # Haskell libraries with GHCi. We therefore filter the object file
483 # out for non-dynamic ways.
484 define keepCAFsForGHCiDynOnly
485 # $1 = stage
486 # $2 = way
487 ifeq "$$(findstring dyn, $1)" ""
488 compiler_stage$1_$2_C_OBJS := $$(filter-out %/keepCAFsForGHCi.o,$$(compiler_stage$1_$2_C_OBJS))
489 endif
490 endef
491 $(foreach w,$(compiler_stage1_WAYS),$(eval $(call keepCAFsForGHCiDynOnly,1,$w)))
492 $(foreach w,$(compiler_stage2_WAYS),$(eval $(call keepCAFsForGHCiDynOnly,2,$w)))
493 $(foreach w,$(compiler_stage3_WAYS),$(eval $(call keepCAFsForGHCiDynOnly,3,$w)))
494
495 # after build-package, because that adds --enable-library-for-ghci
496 # to compiler_stage*_CONFIGURE_OPTS:
497 # We don't build the GHCi library for the ghc package. We can load it
498 # the .a file instead, and as object splitting isn't on for the ghc
499 # package this isn't much slower.However, not building the package saves
500 # a significant chunk of disk space.
501 compiler_stage1_CONFIGURE_OPTS += --disable-library-for-ghci
502 compiler_stage2_CONFIGURE_OPTS += --disable-library-for-ghci
503 compiler_stage3_CONFIGURE_OPTS += --disable-library-for-ghci
504
505 # after build-package, because that sets compiler_stage1_HC_OPTS:
506 compiler_stage1_HC_OPTS += $(GhcStage1HcOpts)
507 compiler_stage2_HC_OPTS += $(GhcStage2HcOpts)
508 compiler_stage3_HC_OPTS += $(GhcStage3HcOpts)
509
510 ifneq "$(BINDIST)" "YES"
511
512 compiler_stage2_TAGS_HC_OPTS = -package ghc
513 $(eval $(call tags-package,compiler,stage2))
514
515 $(compiler_stage1_depfile_haskell) : compiler/stage1/$(PLATFORM_H)
516 $(compiler_stage2_depfile_haskell) : compiler/stage2/$(PLATFORM_H)
517 $(compiler_stage3_depfile_haskell) : compiler/stage3/$(PLATFORM_H)
518
519 COMPILER_INCLUDES_DEPS += $(includes_H_CONFIG)
520 COMPILER_INCLUDES_DEPS += $(includes_H_PLATFORM)
521 COMPILER_INCLUDES_DEPS += $(includes_GHCCONSTANTS)
522 COMPILER_INCLUDES_DEPS += $(includes_GHCCONSTANTS_HASKELL_TYPE)
523 COMPILER_INCLUDES_DEPS += $(includes_GHCCONSTANTS_HASKELL_WRAPPERS)
524 COMPILER_INCLUDES_DEPS += $(includes_GHCCONSTANTS_HASKELL_EXPORTS)
525 COMPILER_INCLUDES_DEPS += $(includes_DERIVEDCONSTANTS)
526
527 $(compiler_stage1_depfile_haskell) : $(COMPILER_INCLUDES_DEPS) $(PRIMOP_BITS_STAGE1)
528 $(compiler_stage2_depfile_haskell) : $(COMPILER_INCLUDES_DEPS) $(PRIMOP_BITS_STAGE2)
529 $(compiler_stage3_depfile_haskell) : $(COMPILER_INCLUDES_DEPS) $(PRIMOP_BITS_STAGE3)
530
531 $(foreach way,$(compiler_stage1_WAYS),\
532 compiler/stage1/build/PrimOp.$($(way)_osuf)) : $(PRIMOP_BITS_STAGE1)
533 $(foreach way,$(compiler_stage2_WAYS),\
534 compiler/stage2/build/PrimOp.$($(way)_osuf)) : $(PRIMOP_BITS_STAGE2)
535 $(foreach way,$(compiler_stage3_WAYS),\
536 compiler/stage3/build/PrimOp.$($(way)_osuf)) : $(PRIMOP_BITS_STAGE3)
537
538
539 # GHC itself doesn't know about the above dependencies, so we have to
540 # switch off the recompilation checker for that module:
541 compiler/prelude/PrimOp_HC_OPTS += -fforce-recomp
542
543 ifeq "$(DYNAMIC_GHC_PROGRAMS)" "YES"
544 compiler/utils/Util_HC_OPTS += -DDYNAMIC_GHC_PROGRAMS
545 endif
546
547 # LibFFI.hs #includes ffi.h
548 ifneq "$(UseSystemLibFFI)" "YES"
549 compiler/stage2/build/LibFFI.hs : $(libffi_HEADERS)
550 endif
551
552 # Note [munge-stage1-package-config]
553 # Strip the date/patchlevel from the version of stage1. See Note
554 # [fiddle-stage1-version] above.
555 ifeq "$(compiler_stage1_VERSION_MUNGED)" "YES"
556 compiler/stage1/inplace-pkg-config-munged: compiler/stage1/inplace-pkg-config
557 sed -e 's/^\(version: .*\)\.$(ProjectPatchLevel)$$/\1/' \
558 -e 's/^\(id: .*\)\.$(ProjectPatchLevel)$$/\1/' \
559 -e 's/^\(hs-libraries: HSghc-.*\)\.$(ProjectPatchLevel)$$/\1/' \
560 < $< > $@
561 "$(compiler_stage1_GHC_PKG)" update --force $(compiler_stage1_GHC_PKG_OPTS) $@
562
563 # We need to make sure the munged config is in the database before we
564 # try to configure ghc-bin
565 ghc/stage1/package-data.mk : compiler/stage1/inplace-pkg-config-munged
566 endif
567
568 endif
569