config.mk.in 29.6 KB
Newer Older
chak's avatar
chak committed
1
#								 -*-makefile-*-
2
3
# @configure_input@
#
4
################################################################################
5
#
6
# config.mk.in
7
#
8
9
10
# This file supplies defaults for many tweakable build configuration
# options.  Some of the defaults are filled in by the autoconf-generated
# configure script.
11
#
12
# DO NOT EDIT THIS FILE!
13
#
14
# 	- config.mk is auto-generated from config.mk.in by configure.
15
#	  If you edit config.mk your changes will be spammed.
16
#
17
#	- Settings in this file may be overridden by giving replacement
18
19
20
21
22
#	  definitions in build.mk.  See build.mk.sample for a good
#	  starting point for a build.mk file.
#
#	  If you don't have a build.mk file then you get defaults for everything.
#	  The defaults should provide a reasonable vanilla build.
23

Ian Lynagh's avatar
Ian Lynagh committed
24
25
26
# TOP: the top of the fptools hierarchy, absolute path.
# On Windows this is a c:/foo/bar style path.
TOP		= @hardtop@
sof's avatar
sof committed
27

Ian Lynagh's avatar
Ian Lynagh committed
28
include $(TOP)/mk/project.mk
sof's avatar
sof committed
29

30
31
32
# By default, be verbose
V = 1

33
34
35
36
37
38
################################################################################
#
#		Global configuration options
#
################################################################################

Ian Lynagh's avatar
Ian Lynagh committed
39
40
41
NO_INCLUDE_DEPS = NO
NO_INCLUDE_PKGDATA = NO

42
################################################################################
43
44
#
# Variables that control how the compiler itself is built
sof's avatar
sof committed
45
#
46
################################################################################
47

48
49
# The compiler used to build GHC is $(GHC).  To change the actual compiler
# used, re-configure with --with-ghc=<path-to-ghc>.
sof's avatar
sof committed
50

51
# Extra option flags to pass to the compiler that compiles the compiler
52
# (Ones that are essential are wired into compiler/Makefile)
53
# Typical options to use here:
sof's avatar
sof committed
54
#
55
56
57
#	-DDEBUG		include debugging code and assertions (will make the
#			compiler slower and produce debugging output, but useful
#			for development)
sof's avatar
sof committed
58
59
#
#	-dcore-lint	check the types after every pass of the compiler;
60
61
62
63
#			a pretty strong internal check of the compiler being
#			used to compile GHC.  Useful when bootstrapping.
GhcHcOpts=-Rghc-timing

64
65
66
# Extra options added to specific stages of the compiler bootstrap.
# These are placed later on the command line, and may therefore
# override options from $(GhcHcOpts).
67
68
#
# See Note [Stage number in build variables].
69
70
71
#
# -haddock is needed so the GHCi :doc command can find docs
#   in the .hi-files for the ghc library
72
GhcStage1HcOpts=
73
74
GhcStage2HcOpts=-O2 -haddock
GhcStage3HcOpts=-O2 -haddock
75

76

Ben Gamari's avatar
Ben Gamari committed
77
78
# Note [Stage number in build variables]
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
79
80
81
82
83
84
85
86
87
88
89
90
# There are (unfortunately) two different naming schemes for build variables
# specific to a certain stage.
#
# * GhcStage1HcOpts/GhcStage2HcOpts/GhcStage3HcOpts:
#
#   The stage number refers to the compiler stage being built (ghc library
#   and executable).
#
# * SRC_HC_OPTS_STAGE$4 and SRC_HC_WARNING_OPTS_STAGE$4:
#
#   The stage number refers to the compiler stage the options are passed to.

91
GhcDebugged=NO
simonpj@microsoft.com's avatar
simonpj@microsoft.com committed
92
93
94

# GhcProfiled=YES means compile a profiled stage-2 compiler
GhcProfiled=NO
95

96
97
98
# WITH_TERMINFO can be used to disable terminfo support throughout the compiler
# and its tools. This is handy in the case of cross-compilation, where we may
# not have an ncurses build for the target.
99
100
101
102
ifeq "$(TargetOS_CPP)" "ios"
# iOS has no terminfo support
WITH_TERMINFO=NO
else ifeq "$(Windows_Target)" "YES"
103
WITH_TERMINFO=NO
104
105
else
WITH_TERMINFO=YES
106
107
endif

108
109
110
111
112
113
114
ifeq "$(findstring $(TargetOS_CPP),linux freebsd dragonfly openbsd netbsd solaris2 kfreebsdgnu haiku linux-android)" ""
TargetElf = NO
else
TargetElf = YES
endif

# Some platforms don't support shared libraries
115
NoSharedLibsPlatformList = \
116
	powerpc-ibm-aix \
117
	x86_64-unknown-mingw32 \
118
	i386-unknown-mingw32
119
120
121

ifeq "$(SOLARIS_BROKEN_SHLD)" "YES"
NoSharedLibsPlatformList += i386-unknown-solaris2
122
123
124
endif

PlatformSupportsSharedLibs = $(if $(filter $(TARGETPLATFORM),\
125
    $(NoSharedLibsPlatformList)),NO,YES)
126

127
128
# If building both v and dyn ways, then use -dynamic-too to build them.
# This makes the build faster.
129
DYNAMIC_TOO = YES
130

131
132
133
# Use the dynamic way when building programs in the GHC tree. In
# particular, this means that GHCi will use DLLs rather than loading
# object files directly.
134
135
136
ifeq "$(TargetOS_CPP)" "mingw32"
# This doesn't work on Windows yet
DYNAMIC_GHC_PROGRAMS = NO
Austin Seipp's avatar
Austin Seipp committed
137
DYNAMIC_TOO=NO
138
139
else ifeq "$(PlatformSupportsSharedLibs)" "NO"
DYNAMIC_GHC_PROGRAMS = NO
140
else
141
DYNAMIC_GHC_PROGRAMS = YES
142
endif
143

144
145
146
147
148
149
# Build a compiler that will build *unregisterised* libraries and
# binaries by default.  Unregisterised code is supposed to compile and
# run without any support for architecture-specific assembly mangling,
# register assignment or tail-calls, and is therefore a good way to get
# started when porting GHC to new architectures.
#
150
151
152
# NOTE: the stage1 compiler will be a registerised binary (assuming
# the compiler you build with is generating registerised binaries), but
# the stage2 compiler will be an unregisterised binary.
153
#
154
GhcUnregisterised=@Unregisterised@
155

156
# ArchSupportsSMP should be set iff there is support for that arch in
157
# rts/include/stg/SMP.h
158
159
ifeq "$(TargetArch_CPP)" "arm"
# We don't support load/store barriers pre-ARMv7. See #10433.
160
ArchSupportsSMP=$(if $(filter $(ARM_ISA),ARMv5 ARMv6),NO,YES)
161
else
162
ArchSupportsSMP=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 sparc powerpc powerpc64 powerpc64le s390x aarch64 riscv64)))
163
endif
164

165
# The THREADED_RTS requires `BaseReg` to be in a register and the
Erik de Castro Lopo's avatar
Erik de Castro Lopo committed
166
# `GhcUnregisterised` mode doesn't allow that.
167
GhcWithSMP := $(strip $(if $(filter YESNO, $(ArchSupportsSMP)$(GhcUnregisterised)),YES,NO))
168

169
170
171
# Whether or not the bootstrapping GHC supplies a threaded RTS.
GhcThreadedRts = @GhcThreadedRts@

172
173
# Whether to include GHCi in the compiler.  Depends on whether the RTS linker
# has support for this OS/ARCH combination.
174

175
OsSupportsGHCi=$(strip $(patsubst $(TargetOS_CPP), YES, $(findstring $(TargetOS_CPP), mingw32 linux solaris2 freebsd dragonfly netbsd openbsd darwin kfreebsdgnu)))
176
ArchSupportsGHCi=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 powerpc powerpc64 powerpc64le sparc sparc64 arm aarch64)))
177
178

ifeq "$(OsSupportsGHCi)$(ArchSupportsGHCi)" "YESYES"
179
GhcWithInterpreter=YES
180
else
181
GhcWithInterpreter=$(if $(findstring YES,$(DYNAMIC_GHC_PROGRAMS)),YES,NO)
182
endif
183

Ian Lynagh's avatar
Ian Lynagh committed
184
185
# On Windows we normally want to make a relocatable bindist, to we
# ignore flags like libdir
186
ifeq "$(Windows_Host)" "YES"
Ian Lynagh's avatar
Ian Lynagh committed
187
188
189
190
191
RelocatableBuild = YES
else
RelocatableBuild = NO
endif

Simon Marlow's avatar
Simon Marlow committed
192
193
194
# needs to be after $(RelocatableBuild) is set above
include $(TOP)/mk/install.mk

195
196
197
198
# When building bindists we set this to yes so that the binaries are as
# portable as possible.
BeConservative = NO

199
200
ExtraMakefileSanityChecks = NO

201
#------------------------------------------------------------------------------
202
# Options for Libraries
203

204
205
# Backend to use in ghc-bignum (gmp, native, etc.)
BIGNUM_BACKEND=gmp
206

Ian Lynagh's avatar
Ian Lynagh committed
207
# We build the libraries at least the "vanilla" way (way "v")
208
209
# Technically we don't need the v way if DYNAMIC_GHC_PROGRAMS is YES,
# but with -dynamic-too it's cheap, and makes life easier.
Ian Lynagh's avatar
Ian Lynagh committed
210
211
GhcLibWays = v

212
# In addition to the normal sequential way, the default is to also build
213
# profiled prelude libraries
214
215
216
217
218
219
220
221
# $(if $(filter ...)) allows controlling this expression from build.mk.
GhcLibWays += $(if $(filter $(BUILD_PROF_LIBS),NO),,p)

# Backward compatibility: although it would be cleaner to test for
# PlatformSupportsSharedLibs, or perhaps a new variable BUILD_SHARED_LIBS,
# some users currently expect that DYNAMIC_GHC_PROGRAMS=NO in build.mk implies
# that dyn is not added to GhcLibWays.
GhcLibWays += $(if $(filter $(DYNAMIC_GHC_PROGRAMS),NO),,dyn)
222

223
224
225
# Handy way to test whether we're building shared libs or not.
BuildSharedLibs=$(strip $(if $(findstring dyn,$(GhcLibWays)),YES,NO))

226
227
# In addition, the RTS is built in some further variations.  Ways that
# make sense here:
228
#
229
#   thr           : threaded
230
231
232
233
#   thr_p         : threaded + profiled
#   debug         : debugging
#   thr_debug     : debugging + threaded
#   p             : profiled
234
#
235
236
# While the eventlog used to be enabled in only a subset of ways, we now always
# enable it.
237
238

# Usually want the debug version
239
GhcRTSWays = debug
240

241
242
# We always have the threaded versions, but note that SMP support may be disabled
# (see GhcWithSMP).
243
GhcRTSWays += thr thr_debug
244
GhcRTSWays += $(if $(findstring p, $(GhcLibWays)),thr_p,)
245
GhcRTSWays += $(if $(findstring dyn, $(GhcLibWays)),dyn debug_dyn thr_dyn thr_debug_dyn,)
246
GhcRTSWays += $(if $(findstring p, $(GhcLibWays)),thr_debug_p debug_p,)
247

248
# We can only build GHCi threaded if we have a threaded RTS:
249
GhcThreaded = $(if $(findstring thr,$(GhcRTSWays)),YES,NO)
250

251
252
253
254
# Option flags to pass to GHC when it's compiling modules in
# fptools/libraries.  Typically these are things like -O or
# -dcore-lint or -H32m.  The ones that are *essential* are wired into
# the build system.
sof's avatar
sof committed
255
#
256
# 	-O(2) is pretty desirable, otherwise no inlining of prelude
sof's avatar
sof committed
257
#		things (incl "+") happens when compiling with this compiler
258
259
260
#
#       -haddock is needed so the GHCi :doc command can find the boot
#               library docs in the respective .hi-files
sof's avatar
sof committed
261

262
GhcLibHcOpts=-O2 -haddock
rrt's avatar
rrt committed
263

264
265
266
267
268
# Strip local symbols from libraries?  This can make the libraries smaller,
# but makes debugging somewhat more difficult.  Doesn't work with all ld's.
#
StripLibraries=NO

269
270
271
# ----------------------------------------------------------------------------
# Section splitting
#
Ben Gamari's avatar
Ben Gamari committed
272
# Similar to -ffunction-sections -fdata-sections in GCC.
273
#
274
275
276
# Set SplitSections=YES or NO in your build.mk to override the default.
#
# This is not supported on Darwin (where you can use subsections-via-symbols
277
278
# instead) and Windows is disabled until we figure the linking performance
# issues related to BFD out. (See #11445, #12913 and related tickets.)
279
OsSupportsSplitSections=$(if $(filter $(TargetOS_CPP),darwin),NO,YES)
280
SupportsSplitSections=$(if $(and $(filter YES,$(OsSupportsSplitSections)),\
dobenour's avatar
dobenour committed
281
                                   $(filter YES,$(LdIsGNULd))),YES,NO)
282
SplitSections ?= $(SupportsSplitSections)
283

284
285
# ----------------------------------------------------------------------------

286
287
# There are a number of things which technically depend on GHC (e.g. if
# ghc changes then Haskell files may be compiled differently, or Cabal
288
289
290
291
292
293
294
295
296
# packages may be configured differently). By default we therefore
# have dependencies on the compiler executable.

# However, in practice, having a dependency on GHC is just a pain: We
# normally don't want to spend time recompiling other things while
# we're working on the compiler, and even if we did, GHC will normally
# decide compilation isn't needed anyway. So by setting LAX_DEPENDENCIES
# to YES you can turn these dependencies into order-only dependencies,
# i.e. GHC must exist, but if it's newer than other targets then
297
# rebuilding is not necessary.
298
299

LAX_DEPENDENCIES = NO
300

301
302
# ----------------------------------------------------------------------------
# Options for GHC's RTS
303

304
305
306
307
# Build an optimised RTS.  Remember that we need to turn on
# optimisation both for C code (-optc-O2) and .cmm code (-O2).  For
# the debugging RTS flavour, rts/ghc.mk overrides these to turn off
# optimisation.
308
GhcRtsHcOpts=-O2
309
GhcRtsCcOpts=-O2 -fomit-frame-pointer -g
310

311
312
313
314
315
316
# Configuration for libffi
UseSystemLibFFI=@UseSystemLibFFI@
# Flags to go into package.conf for rts
FFILibDir=@FFILibDir@
FFIIncludeDir=@FFIIncludeDir@

Ben Gamari's avatar
Ben Gamari committed
317
318
UseLibffiForAdjustors=@UseLibffiForAdjustors@

319
UseLibdw=@UseLibdw@
320
321
322
LibdwLibDir=@LibdwLibDir@
LibdwIncludeDir=@LibdwIncludeDir@

323
324
# GHC needs arch-specific tweak at least in
#     rts/Libdw.c:set_initial_registers()
325
GhcRtsWithLibdw=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64 s390x),@UseLibdw@,NO))
326

327
################################################################################
328
329
330
#
#		Paths (see paths.mk)
#
331
################################################################################
332

333
334
335
336
337
338
BINDIST                 = NO
BIN_DIST_NAME           = ghc-$(ProjectVersion)
BIN_DIST_PREP_DIR       = bindistprep/$(BIN_DIST_NAME)
BIN_DIST_PREP_TAR       = bindistprep/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar
BIN_DIST_PREP_TAR_COMP ?= $(BIN_DIST_PREP_TAR).$(TAR_COMP_EXT)
BIN_DIST_TAR_COMP       = $(BIN_DIST_NAME)-$(TARGETPLATFORM).tar.$(TAR_COMP_EXT)
339

340
# -----------------------------------------------------------------------------
341
# Utilities programs: flags
342
343
344
345
346
347
348

# If you want to give any standard flags to pretty much any utility
# (see utils.mk for a complete list), by adding a line here
#
# 	SRC_P_OPTS += ...
#
# where P is the utility. For example, to add -O to all Haskell
349
# compilations,
350
351
352
#
#	SRC_HC_OPTS += -O

Simon Marlow's avatar
Simon Marlow committed
353
354
355
356

# SRC_HC_OPTS includes flags to be added to *every* Haskell
# compilation.  Setting SRC_HC_OPTS is a good way to set the default
# optimisation level (-O) and heap size (-H<size>).
357
#
Simon Marlow's avatar
Simon Marlow committed
358
359
360
# SRC_HC_OPTS is *not* for adding flags that are required to make your
# build work.  Examples:
#
Ben Gamari's avatar
Ben Gamari committed
361
#  - instead of using -pgmc/-pgmcxx/-pgma-/-pgml, use the --with-gcc option to configure
Simon Marlow's avatar
Simon Marlow committed
362
363
364
365
366
367
368
369
#
#  - if you need -optc, -opta, or -optl flags, the CONF_CC_* and CONF_LD_*
#    variables are more appropriate (set via configure)
#
# Note that SRC_HC_OPTS are added to every Haskell compilation,
# including when using the bootstrapping compiler (stage 0), So don't
# put options here that are only supported by very recent GHCs.
#
370
SRC_HC_OPTS += -H32m -O
371

372
373
374
375
376
377

# See Note [Stage number in build variables].
SRC_HC_OPTS_STAGE0 =
SRC_HC_OPTS_STAGE1 =
SRC_HC_OPTS_STAGE2 =

Gabor Greif's avatar
Gabor Greif committed
378
# Warning suppression flags. See mk/warnings.mk.
379
380
381
382
383
384
385
SRC_CC_WARNING_OPTS =
SRC_HC_WARNING_OPTS =

# See Note [Stage number in build variables].
SRC_HC_WARNING_OPTS_STAGE0 =
SRC_HC_WARNING_OPTS_STAGE1 =
SRC_HC_WARNING_OPTS_STAGE2 =
386

387
388
# -----------------------------------------------------------------------------
# Names of programs in the GHC tree
Ian Lynagh's avatar
Ian Lynagh committed
389

390
MKDIRHIER           = $(INPLACE_BIN)/mkdirhier
Ian Lynagh's avatar
Ian Lynagh committed
391

392
GENERATED_FILE  = chmod a-w
Ian Lynagh's avatar
Ian Lynagh committed
393
EXECUTABLE_FILE = chmod +x
394

395
#-----------------------------------------------------------------------------
396
# Installed GHC
397

398
# $(GHC) points to installed version of the compiler.
399
#
400
401
# NOTE: Don't override $(GHC) in build.mk, use
# `./configure GHC=...` instead
402
# (because the version numbers have to be calculated).
403

Ian Lynagh's avatar
Ian Lynagh committed
404
405
406
407
408
409
410
411
412
GHC := @WithGhc@
# If we have a make dependency on c:/ghc/ghc, and the file is actually
# called c:/ghc/ghc.exe, then make will think that ghc doesn't exist
# and that it doesn't know how to create it.
ifneq "$(wildcard $(GHC).exe)" ""
GHC := $(GHC).exe
endif

GHC_STAGE0  = $(GHC)
413
414
415
GHC_STAGE1  = $(ghc-stage1_INPLACE)
GHC_STAGE2  = $(ghc-stage2_INPLACE)
GHC_STAGE3  = $(ghc-stage3_INPLACE)
416

Ian Lynagh's avatar
Ian Lynagh committed
417
BOOTSTRAPPING_CONF = libraries/bootstrapping.conf
418

419
INPLACE_PACKAGE_CONF = $(INPLACE_LIB)/package.conf.d
420
421
422
423
424
425
426
427
428
429
430
431
432

GhcVersion	= @GhcVersion@
GhcPatchLevel	= @GhcPatchLevel@
GhcMajVersion	= @GhcMajVersion@
GhcMinVersion	= @GhcMinVersion@

# Canonicalised ghc version number, used for easy (integer) version
# comparisons.  We must expand $(GhcMinVersion) to two digits by
# adding a leading zero if necessary:
ifneq "$(findstring $(GhcMinVersion), 0 1 2 3 4 5 6 7 8 9)" ""
GhcCanonVersion = $(GhcMajVersion)0$(GhcMinVersion)
else
GhcCanonVersion = $(GhcMajVersion)$(GhcMinVersion)
433
endif
434

435
436
437
438
439
440
#-----------------------------------------------------------------------------
# Settings

# We are in the process of moving the settings file from being entirely
# generated by configure, to generated being by the build system. Many of these
# might become redundant.
441
# See Note [tooldir: How GHC finds mingw on Windows]
442
443
444
445

GccExtraViaCOpts = @GccExtraViaCOpts@
LdHasFilelist = @LdHasFilelist@
ArArgs = @ArArgs@
446
447
HaskellHostOs = @HaskellHostOs@
HaskellHostArch = @HaskellHostArch@
448
449
450
HaskellTargetOs = @HaskellTargetOs@
HaskellTargetArch = @HaskellTargetArch@
TargetWordSize = @TargetWordSize@
451
TargetWordBigEndian = @TargetWordBigEndian@
452
453
454
455
TargetHasGnuNonexecStack = @TargetHasGnuNonexecStack@
TargetHasIdentDirective = @TargetHasIdentDirective@
TargetHasSubsectionsViaSymbols = @TargetHasSubsectionsViaSymbols@
TargetHasRTSLinker = @TargetHasRTSLinker@
456
TargetHasLibm = @TargetHasLibm@
457
TablesNextToCode = @TablesNextToCode@
458
459

SettingsCCompilerCommand = @SettingsCCompilerCommand@
Ben Gamari's avatar
Ben Gamari committed
460
SettingsCxxCompilerCommand = @SettingsCxxCompilerCommand@
461
462
463
SettingsHaskellCPPCommand = @SettingsHaskellCPPCommand@
SettingsHaskellCPPFlags = @SettingsHaskellCPPFlags@
SettingsCCompilerFlags = @SettingsCCompilerFlags@
464
SettingsCxxCompilerFlags = @SettingsCxxCompilerFlags@
465
466
467
468
SettingsCCompilerLinkFlags = @SettingsCCompilerLinkFlags@
SettingsCCompilerSupportsNoPie = @SettingsCCompilerSupportsNoPie@
SettingsLdCommand = @SettingsLdCommand@
SettingsLdFlags = @SettingsLdFlags@
469
470
SettingsMergeObjectsCommand = @SettingsMergeObjectsCommand@
SettingsMergeObjectsFlags = @SettingsMergeObjectsFlags@
471
SettingsArCommand = @SettingsArCommand@
472
473
SettingsOtoolCommand = @SettingsOtoolCommand@
SettingsInstallNameToolCommand = @SettingsInstallNameToolCommand@
474
475
476
477
478
479
480
SettingsRanlibCommand = @SettingsRanlibCommand@
SettingsDllWrapCommand = @SettingsDllWrapCommand@
SettingsWindresCommand = @SettingsWindresCommand@
SettingsTouchCommand = @SettingsTouchCommand@
SettingsClangCommand = @SettingsClangCommand@
SettingsLlcCommand = @SettingsLlcCommand@
SettingsOptCommand = @SettingsOptCommand@
481
SettingsUseDistroMINGW = @SettingsUseDistroMINGW@
482

483
484
485
#-----------------------------------------------------------------------------
# C compiler
#
486
487
# NB. Don't override $(CC) using build.mk,  re-configure using
# the flag CC=<blah> instead.  The reason is that the configure script
488
489
# needs to know which gcc you're using in order to perform its tests.

490
491
492
# TargetPlatformFull retains the string passed to configure so we have it in
# the necessary format to pass to libffi's configure.
TargetPlatformFull    = @TargetPlatformFull@
493
494
495

# Do we have a C compiler using an LLVM back end?
CcLlvmBackend   = @CcLlvmBackend@
Simon Marlow's avatar
Simon Marlow committed
496

497
CC              = @CC@
498
CC_STAGE0       = @CC_STAGE0@
Ian Lynagh's avatar
Ian Lynagh committed
499
500
501
CC_STAGE1       = $(CC)
CC_STAGE2       = $(CC)
CC_STAGE3       = $(CC)
Simon Marlow's avatar
Simon Marlow committed
502

503
AS              = @CC@
504
505
506
507
AS_STAGE0       = @CC_STAGE0@
AS_STAGE1       = $(AS)
AS_STAGE2       = $(AS)
AS_STAGE3       = $(AS)
508

509
# why no LD=@LD@ ?
510
LD_STAGE0       = @LD_STAGE0@
Simon Marlow's avatar
Simon Marlow committed
511
512
513
514
LD_STAGE1       = $(LD)
LD_STAGE2       = $(LD)
LD_STAGE3       = $(LD)

515
516
517
518
519
520
521
522
523
524
MERGE_OBJS_STAGE0 = @MergeObjsCmd@
MERGE_OBJS_STAGE1 = @MergeObjsCmd@
MERGE_OBJS_STAGE2 = @MergeObjsCmd@
MERGE_OBJS_STAGE3 = @MergeObjsCmd@

MERGE_OBJS_STAGE0_FLAGS = @MergeObjsArgs@
MERGE_OBJS_STAGE1_FLAGS = @MergeObjsArgs@
MERGE_OBJS_STAGE2_FLAGS = @MergeObjsArgs@
MERGE_OBJS_STAGE3_FLAGS = @MergeObjsArgs@

525
# Cross-compiling options
526
# See Note [CrossCompiling vs Stage1Only]
527
528
CrossCompiling        = @CrossCompiling@

Simon Marlow's avatar
Simon Marlow committed
529
530
# Change this to YES if you're building a cross-compiler and don't
# want to build stage 2.
531
532
# See Note [CrossCompiling vs Stage1Only]
# See Note [Stage1Only vs stage=1]
Simon Marlow's avatar
Simon Marlow committed
533
534
Stage1Only = NO

535
536
537
538
539
# Installed tools prefix:
#    we add prefix to crosscompiler GHC only (ghc-stage1),
#    not cross-built GHC (not ghc-stage2).
CrossCompilePrefix    = $(if $(filter YES,$(Stage1Only)),@CrossCompilePrefix@,)

Simon Marlow's avatar
Simon Marlow committed
540
541
542
# Install stage 2 by default, or stage 1 in the cross compiler
# case. Can be changed to 3
INSTALL_GHC_STAGE= $(if $(filter YES,$(Stage1Only)),1,2)
543

544
# Note [CrossCompiling vs Stage1Only]
Ben Gamari's avatar
Ben Gamari committed
545
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
# There are 4 possible settings:
#
# 1 CrossCompiling=NO Stage1Only=NO
#   The default.
#
# 2 CrossCompiling=NO Stage1Only=YES
#   Don't build ghc-stage2. See Note [Stage1Only vs stage=1].
#
# 3 CrossCompiling=YES Stage1Only=YES
#   Building a cross-compiler (ghc-stage1). See [1] and
#   Note [Stage1Only vs stage=1].
#
# 4 CrossCompiling=YES Stage1Only=NO
#   Cross-compiling GHC itself. See [1].
#
561
# [1] https://gitlab.haskell.org/ghc/ghc/wikis/building/cross-compiling
562
563

# Note [Stage1Only vs stage=1]
Ben Gamari's avatar
Ben Gamari committed
564
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
# Stage1Only=YES means:
#   - don't build ghc-stage2 (the executable)
#   - don't build utils that rely on ghc-stage2
#     See Note [No stage2 packages when CrossCompiling or Stage1Only] in
#     ./ghc.mk.
#   - install ghc-stage1 instead of ghc-stage2
#   - install the ghc-pkg that was built with the stage0 compiler
#   - (*do* still build compiler/stage2 (i.e. the ghc library))
#   - (*do* still build all other libraries)
#
# stage=1 means:
#   - don't build compiler/stage2 (i.e. the ghc library)
#   - don't build ghc-stage2 (the executable)
#   Note: these are the only two things it does. If you want to exclude more
#   stuff, combine it with Stage1Only=YES, or run make in the ghc or compiler
#   directory.
#
# running make in the ghc or compiler directory means:
#   - don't build any packages in the libraries/ directory, except the ones
#     listed in PACKAGES_STAGE0 (i.e. the boot libraries)
#
# You may wonder why Stage1Only=YES still builds compiler/stage2. Quoting
# simonmar in #7639:
#
#     "strictly speaking building compiler/stage2 is correct, because it is
#     the ghc package that can be used with [ghc-stage1]. If you don't
#     want to build it, then setting stage=1 in your mk/build.mk should
#     disable it."

594
# C compiler and linker flags from configure (e.g. -m<blah> to select
595
596
# correct C compiler backend). The stage number is the stage of GHC
# that is being used to compile with.
597
598
599
CONF_CC_OPTS_STAGE0 = @CONF_CC_OPTS_STAGE0@
CONF_CC_OPTS_STAGE1 = @CONF_CC_OPTS_STAGE1@
CONF_CC_OPTS_STAGE2 = @CONF_CC_OPTS_STAGE2@
600
601
602
603
604
605
CONF_GCC_LINKER_OPTS_STAGE0 = @CONF_GCC_LINKER_OPTS_STAGE0@
CONF_GCC_LINKER_OPTS_STAGE1 = @CONF_GCC_LINKER_OPTS_STAGE1@
CONF_GCC_LINKER_OPTS_STAGE2 = @CONF_GCC_LINKER_OPTS_STAGE2@
CONF_LD_LINKER_OPTS_STAGE0 = @CONF_LD_LINKER_OPTS_STAGE0@
CONF_LD_LINKER_OPTS_STAGE1 = @CONF_LD_LINKER_OPTS_STAGE1@
CONF_LD_LINKER_OPTS_STAGE2 = @CONF_LD_LINKER_OPTS_STAGE2@
606
607
608
CONF_CPP_OPTS_STAGE0 = @CONF_CPP_OPTS_STAGE0@
CONF_CPP_OPTS_STAGE1 = @CONF_CPP_OPTS_STAGE1@
CONF_CPP_OPTS_STAGE2 = @CONF_CPP_OPTS_STAGE2@
609
610
611
CONF_HC_OPTS_STAGE0 = @CONF_HC_OPTS_STAGE0@
CONF_HC_OPTS_STAGE1 = @CONF_HC_OPTS_STAGE1@
CONF_HC_OPTS_STAGE2 = @CONF_HC_OPTS_STAGE2@
612

613
614
615
# The .hsc files aren't currently safe for cross-compilation on Windows:
#     libraries\haskeline\.\System\Console\Haskeline\Backend\Win32.hsc:160
#     directive "let" is not safe for cross-compilation
616
ifneq "$(Windows_Host)" "YES"
617
SRC_HSC2HS_OPTS += --cross-safe
618
endif
619
SRC_HSC2HS_OPTS += $(foreach d,$(GMP_INCLUDE_DIRS),-I$(d))
620
621
622
623
624

define set_stage_HSC2HS_OPTS
# $1 = stage
SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --cflag=,$$(filter-out -O,$$(SRC_CC_OPTS) $$(CONF_CC_OPTS_STAGE$1)))
SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --cflag=,$$(CONF_CPP_OPTS_STAGE$1))
625
SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --lflag=,$$(CONF_GCC_LINKER_OPTS_STAGE$1))
626
627
628
629
endef
$(eval $(call set_stage_HSC2HS_OPTS,0))
$(eval $(call set_stage_HSC2HS_OPTS,1))
$(eval $(call set_stage_HSC2HS_OPTS,2))
630
ifeq "$(CrossCompiling)" "YES"
631
632
633
SRC_HSC2HS_OPTS_STAGE1 += --cross-compile
SRC_HSC2HS_OPTS_STAGE2 += --cross-compile
ifeq "$(Windows_Target)" "YES"
634
635
636
637
# We'll assume we compile with gcc or clang, and both support `-S` and can as such use the
# --via-asm pass, which should be faster and is required for cross compiling to windows, as
# the c compiler complains about non-constant expressions even though they are constant and
# end up as constants in the assembly.
638
639
640
SRC_HSC2HS_OPTS_STAGE1 += --via-asm
SRC_HSC2HS_OPTS_STAGE2 += --via-asm
endif
641
endif
642
643
644
SRC_HSC2HS_OPTS_STAGE0 += --cflag=-D$(HostArch_CPP)_HOST_ARCH --cflag=-D$(HostOS_CPP)_HOST_OS
SRC_HSC2HS_OPTS_STAGE1 += --cflag=-D$(TargetArch_CPP)_HOST_ARCH --cflag=-D$(TargetOS_CPP)_HOST_OS
SRC_HSC2HS_OPTS_STAGE2 += --cflag=-D$(TargetArch_CPP)_HOST_ARCH --cflag=-D$(TargetOS_CPP)_HOST_OS
Ian Lynagh's avatar
Ian Lynagh committed
645

646
WINDRES=@WindresCmd@
Ian Lynagh's avatar
Ian Lynagh committed
647

648
649
650
651
652
#-----------------------------------------------------------------------------
# Python for testsuite driver and code generators
#
PYTHON=@PythonCmd@

653
#-----------------------------------------------------------------------------
654
# Mingwex Library
655
#
656
HaveLibMingwEx	= @HaveLibMingwEx@
657
DLLTOOL			= @DlltoolCmd@
658

659
660
661
662
#-----------------------------------------------------------------------------
# Other standard (ha!) Unix utilities

AR			= @ArCmd@
663
AR_OPTS			= @ArArgs@
664
ArSupportsAtFile = @ArSupportsAtFile@
665
ArSupportsDashL  = @ArSupportsDashL@
666

667
AR_STAGE0 = @AR_STAGE0@
668
669
670
AR_STAGE1 = $(AR)
AR_STAGE2 = $(AR)
AR_STAGE3 = $(AR)
671
AR_OPTS_STAGE0 = @AR_OPTS_STAGE0@
672
673
674
675
676
677
678
AR_OPTS_STAGE1 = $(AR_OPTS)
AR_OPTS_STAGE2 = $(AR_OPTS)
AR_OPTS_STAGE3 = $(AR_OPTS)
EXTRA_AR_ARGS_STAGE0 = $(EXTRA_AR_ARGS)
EXTRA_AR_ARGS_STAGE1 = $(EXTRA_AR_ARGS)
EXTRA_AR_ARGS_STAGE2 = $(EXTRA_AR_ARGS)
EXTRA_AR_ARGS_STAGE3 = $(EXTRA_AR_ARGS)
679
ArSupportsAtFile_STAGE0 = @ArSupportsAtFile_STAGE0@
680
681
682
ArSupportsAtFile_STAGE1 = $(ArSupportsAtFile)
ArSupportsAtFile_STAGE2 = $(ArSupportsAtFile)
ArSupportsAtFile_STAGE3 = $(ArSupportsAtFile)
683

684
685
CONTEXT_DIFF		= @ContextDiffCmd@
CP			= cp
686

687
688
# It's not easy to separate the CPP program from its flags, as
# AC_PROG_CPP defines CPP as "/usr/bin/gcc -E"
sof's avatar
sof committed
689
CPP			= @CPP@ @CPPFLAGS@
690
HS_CPP			= @HaskellCPPCmd@ @HaskellCPPArgs@
691

rrt's avatar
rrt committed
692
FIND			= @FindCmd@
693

sof's avatar
sof committed
694
695
696
697
#
# Sigh - the autoconf macro for INSTALL will subst a relative path to the fallback
# install-sh script (if chosen). This not terribly useful to us, so we convert
# it into an abs. path.
698
#
699
INSTALL			= @INSTALL@
Ian Lynagh's avatar
Ian Lynagh committed
700
INSTALL			:= $(subst .././install-sh,$(TOP)/install-sh,$(INSTALL))
701

702
703
704
LN_S			= @LN_S@
MV			= mv
PIC			= pic
705
706
RANLIB_CMD = @RANLIB_CMD@
REAL_RANLIB_CMD = @REAL_RANLIB_CMD@
707
SED			= @SedCmd@
708
SHELL			= @SHELL@
709

710
HaveDtrace		= @HaveDtrace@
711
USE_DTRACE = $(HaveDtrace)
712
713
DTRACE			= @DtraceCmd@

714
715
LD = @LdCmd@
NM = @NmCmd@
716
AR = @ArCmd@
717
OBJDUMP = @ObjdumpCmd@
718

Moritz Angermann's avatar
Moritz Angermann committed
719
CLANG = @ClangCmd@
720
721
722
LLC = @LlcCmd@
OPT = @OptCmd@

723
724
725
726
# GNU ld supports input via a linker script, which is useful to avoid
# overflowing command-line length limits.
LdIsGNULd		= @LdIsGNULd@

727
728
729
730
# Set to YES if ld has the --build-id flag.  Sometimes we need to
# disable it with --build-id=none.
LdHasBuildId	        = @LdHasBuildId@

731
# Set to YES if ld has the --no_compact_unwind flag. See #5019
Sylvain Henry's avatar
Sylvain Henry committed
732
# and GHC.Driver.Pipeline.
733
734
LdHasNoCompactUnwind	= @LdHasNoCompactUnwind@

735
# On MSYS, building with SplitObjs=YES fails with
736
737
#   ar: Bad file number
# see #3201.  We need to specify a smaller max command-line size
738
739
740
# to work around it.  32767 doesn't work; 30000 does, but says
#     xargs: value for -s option should be < 28153
# so we now use 20000 to be comfortably below this bound
741
XARGS = xargs
742
ifeq "$(Windows_Host)" "YES"
743
XARGS_OPTS = -s 20000
744
745
endif

Ian Lynagh's avatar
Ian Lynagh committed
746
ifeq "$(TARGETPLATFORM)" "x86_64-unknown-mingw32"
747
STRIP_CMD      = $(TOP)/inplace/mingw/bin/strip.exe
748
749
750
751
752
753
754
755
756
757
758
else ifeq "$(TARGETPLATFORM)" "arm-unknown-linux"
# The Cortex A8 hardware apparently has a bug which ld.gold will check for;
# however in order to do so it must have unstripped executables lest we
# see warnings of the form (see #10376, #10464),
#
#     /usr/bin/ld.gold: warning: cannot scan executable section 1 of ... for
#     Cortex-A8 erratum because it has no mapping symbols.
#
# Consequently we disabling stripping by default on this architecture.
# The hack of using `:` to disable stripping is implemented by ghc-cabal.
STRIP_CMD      = :
Ian Lynagh's avatar
Ian Lynagh committed
759
else
760
STRIP_CMD      = @StripCmd@
Ian Lynagh's avatar
Ian Lynagh committed
761
endif
762
763
PATCH_CMD      = @PatchCmd@
TAR_CMD        = @TarCmd@
764
765
766
BZIP2_CMD      = @Bzip2Cmd@
GZIP_CMD       = @GzipCmd@
XZ_CMD         = @XzCmd@
767

Ben Gamari's avatar
Ben Gamari committed
768
# xz is default compression
769
TAR_COMP      ?= xz
770
771
772

# select compression command and .tar extension based on TAR_COMP value
ifeq "$(TAR_COMP)" "bzip2"
773
TAR_COMP_CMD  = $(BZIP2_CMD) $(TAR_COMP_OPTS)
774
775
TAR_COMP_EXT  = bz2
else ifeq "$(TAR_COMP)" "gzip"
776
TAR_COMP_CMD  = $(GZIP_CMD) $(TAR_COMP_OPTS)
777
778
TAR_COMP_EXT  = gz
else ifeq "$(TAR_COMP)" "xz"
779
TAR_COMP_CMD  = $(XZ_CMD) $(TAR_COMP_OPTS)
780
781
782
783
TAR_COMP_EXT  = xz
else
$(error $$(TAR_COMP) set to unknown value "$(TAR_COMP)" (supported: "bzip2", "gzip", "xz"))
endif
sof's avatar
sof committed
784

785
ifeq "$(Windows_Host)" "YES"
786
787
788
789
790
791
792
TOUCH_CMD      = $(utils/touchy_dist_INPLACE)
TOUCH_DEP      = $(TOUCH_CMD)
else
TOUCH_CMD      = touch
TOUCH_DEP      =
endif

793
HSCOLOUR_CMD   = @HSCOLOUR@
794

795
TIME_CMD       = @TimeCmd@
796

797
#-----------------------------------------------------------------------------
798
799
800
801
802
803
804
805
# Sphinx stuff

SPHINXBUILD              = @SPHINXBUILD@
BUILD_MAN                = @BUILD_MAN@
BUILD_SPHINX_HTML        = @BUILD_SPHINX_HTML@
BUILD_SPHINX_PDF         = @BUILD_SPHINX_PDF@
SPHINXOPTS               = -D latex_paper_size=letter
XELATEX                  = @XELATEX@
Ben Gamari's avatar
Ben Gamari committed
806
MAKEINDEX                = @MAKEINDEX@
807

808
809
810
#-----------------------------------------------------------------------------
# 		FPtools support software

reid's avatar
reid committed
811
812
813
814
815
#
# ghc-pkg
#
GHC_PKG		        = @GhcPkgCmd@

816
817
818
819
#
# Happy
#
HAPPY			= @HappyCmd@
820
HAPPY_VERSION		= @HappyVersion@
821
822
823
#
# Options to pass to Happy when we're going to compile the output with GHC
#
824
SRC_HAPPY_OPTS		= -agc --strict
825

826
827
828
829
#
# Alex
#
ALEX			= @AlexCmd@
830
ALEX_VERSION		= @AlexVersion@
831
#
832
# Options to pass to Alex when we're going to compile the output with GHC
833
#
834
835
SRC_ALEX_OPTS = -g
# The compiler isn't using the Unicode support in Alex 3.0 yet, in fact we do our own
836
# Unicode handling, so diable Alex's.
837
compiler_ALEX_OPTS = --latin1
838

839
# Should we build haddock docs?
Ian Lynagh's avatar
Ian Lynagh committed
840
HADDOCK_DOCS = YES
841
# And HsColour the sources?
842
ifeq "$(HSCOLOUR_CMD)" ""
843
844
845
846
847
HSCOLOUR_SRCS = NO
else
HSCOLOUR_SRCS = YES
endif

848
# Build and install the "extra" packages (see ./packages)?
849
BUILD_EXTRA_PKGS = NO
850

851
################################################################################
852
853
854
855
856
857
858
859
#
#    To be passed to sub-builds
#
################################################################################

ICONV_INCLUDE_DIRS = @ICONV_INCLUDE_DIRS@
ICONV_LIB_DIRS = @ICONV_LIB_DIRS@

860
861
GMP_INCLUDE_DIRS = @GMP_INCLUDE_DIRS@
GMP_LIB_DIRS = @GMP_LIB_DIRS@
Alec Theriault's avatar
Alec Theriault committed
862
863
GMP_PREFER_FRAMEWORK = @GMP_PREFER_FRAMEWORK@
GMP_FORCE_INTREE = @GMP_FORCE_INTREE@
864
865

CURSES_LIB_DIRS = @CURSES_LIB_DIRS@
866

867
# See Note [Disable -O2 in unregisterised mode]
868
869
870
871
872
873
874
875
876
# Be careful: 'GhcUnregisterised' should be defined earlier in this file.
ifeq "$(GhcUnregisterised)" "YES"
GhcStage1HcOpts=
GhcStage2HcOpts=
GhcStage3HcOpts=

GhcLibHcOpts=
endif

877
# Note [Disable -O2 in unregisterised mode]
Ben Gamari's avatar
Ben Gamari committed
878
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
879
# Disable -O2 optimization in unregisterised mode. Otherwise amount
880
# of generated C code # makes things very slow to compile (~5 minutes
881
882
883
# on core-i7 for 'compiler/GHC/Hs/Expr.hs') and sometimes not compile
# at all: powerpc64 overflows TOC section on 'compiler/GHC/Hs/Expr.hs'
#         ia64 overflows short data section on 'compiler/GHC/Driver/Session.hs'