config.mk.in 30.2 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 overriden 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
GhcStage1HcOpts=
70 71
GhcStage2HcOpts=-O2
GhcStage3HcOpts=-O2
72

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87

# Note [Stage number in build variables].
#
# 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.

88
GhcDebugged=NO
simonpj@microsoft.com's avatar
simonpj@microsoft.com committed
89 90 91

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

93 94 95
# 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.
96 97 98 99
ifeq "$(TargetOS_CPP)" "ios"
# iOS has no terminfo support
WITH_TERMINFO=NO
else ifeq "$(Windows_Target)" "YES"
100
WITH_TERMINFO=NO
101 102
else
WITH_TERMINFO=YES
103 104
endif

105 106 107 108 109 110 111
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
112
NoSharedLibsPlatformList = \
113
	powerpc-ibm-aix \
114
	x86_64-unknown-mingw32 \
115
	i386-unknown-mingw32
116 117 118

ifeq "$(SOLARIS_BROKEN_SHLD)" "YES"
NoSharedLibsPlatformList += i386-unknown-solaris2
119 120 121
endif

PlatformSupportsSharedLibs = $(if $(filter $(TARGETPLATFORM),\
122
    $(NoSharedLibsPlatformList)),NO,YES)
123

124
# DYNAMIC_BY_DEFAULT says whether this compiler will default to
125
# building dynamic executables, i.e. -dynamic is on.  We do this for
126
# most platforms because it lets us use the system dynamic linker
127 128
# instead of our own linker for GHCi.
#
129 130
# Currently this isn't possible on Windows, and we have not yet enabled
# it on i386 while we consider the performance implications.
131
#
132 133 134 135 136 137 138
ifeq "$(TargetOS_CPP)" "mingw32"
DYNAMIC_BY_DEFAULT = NO
else ifeq "$(TargetArch_CPP)" "i386"
DYNAMIC_BY_DEFAULT = NO
else
DYNAMIC_BY_DEFAULT = YES
endif
139

140 141 142 143
# For now, we unconditionally disable dynamic-by-default, as the
# cabal-install's that are in the wild don't handle it properly.
DYNAMIC_BY_DEFAULT = NO

144 145
# If building both v and dyn ways, then use -dynamic-too to build them.
# This makes the build faster.
146
DYNAMIC_TOO = YES
147

148 149 150
# 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.
151 152 153
ifeq "$(TargetOS_CPP)" "mingw32"
# This doesn't work on Windows yet
DYNAMIC_GHC_PROGRAMS = NO
Austin Seipp's avatar
Austin Seipp committed
154
DYNAMIC_TOO=NO
155 156
else ifeq "$(PlatformSupportsSharedLibs)" "NO"
DYNAMIC_GHC_PROGRAMS = NO
157
else
158
DYNAMIC_GHC_PROGRAMS = YES
159
endif
160

161 162 163 164 165 166
# 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.
#
167 168 169
# 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.
170
#
171
GhcUnregisterised=@Unregisterised@
172

173 174 175 176
# Build a compiler with a native code generator backend
# (as well as a C backend)
#
# Target platforms supported:
177
#   i386, powerpc, powerpc64, sparc
178
#   IOS is not supported
179
ArchSupportsNCG=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 powerpc powerpc64 powerpc64le sparc)))
180
OsSupportsNCG=$(strip $(patsubst $(TargetOS_CPP), YES, $(patsubst ios,,$(TargetOS_CPP))))
181

182
GhcWithNativeCodeGen := $(strip\
183 184
    $(if $(filter YESYESNO,\
		  $(OsSupportsNCG)$(ArchSupportsNCG)$(GhcUnregisterised)),YES,NO))
185

186
# ArchSupportsSMP should be set iff there is support for that arch in
Simon Marlow's avatar
Simon Marlow committed
187
# includes/stg/SMP.h
188 189
ifeq "$(TargetArch_CPP)" "arm"
# We don't support load/store barriers pre-ARMv7. See #10433.
190
ArchSupportsSMP=$(if $(filter $(ARM_ISA),ARMv5 ARMv6),NO,YES)
191 192 193
else
ArchSupportsSMP=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 sparc powerpc powerpc64 powerpc64le aarch64)))
endif
194

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

199 200
# Whether to include GHCi in the compiler.  Depends on whether the RTS linker
# has support for this OS/ARCH combination.
201

202
OsSupportsGHCi=$(strip $(patsubst $(TargetOS_CPP), YES, $(findstring $(TargetOS_CPP), mingw32 linux solaris2 freebsd dragonfly netbsd openbsd darwin kfreebsdgnu)))
203
ArchSupportsGHCi=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 powerpc powerpc64 powerpc64le sparc sparc64 arm aarch64)))
204 205

ifeq "$(OsSupportsGHCi)$(ArchSupportsGHCi)" "YESYES"
206
GhcWithInterpreter=YES
207
else
208
GhcWithInterpreter=$(if $(findstring YES,$(DYNAMIC_GHC_PROGRAMS)),YES,NO)
209
endif
210

211 212 213 214 215
# GhcEnableTablesNextToCode tells us whether the target architecture
# supports placing info tables directly before the entry code
# (see TABLES_NEXT_TO_CODE in the RTS).  Whether we actually compile for
# TABLES_NEXT_TO_CODE depends on whether we're building unregisterised
# code or not, which may be decided by options to the compiler later.
216
ifneq "$(findstring $(TargetArch_CPP)X, ia64X powerpc64X powerpc64leX)" ""
217
GhcEnableTablesNextToCode=NO
218
else
219
GhcEnableTablesNextToCode=YES
220 221
endif

222 223 224
# Whether to use libffi for adjustors (foreign import "wrapper") or
# not.  If we have built-in support (rts/Adjustor.c) then we use that,
# otherwise we fall back on libffi, which is slightly slower.
225
ArchHasAdjustorSupport = $(if $(findstring $(TargetArch_CPP),i386 x86_64),YES,NO)
226 227 228 229 230 231
ifeq "$(ArchHasAdjustorSupport)" "YES"
UseLibFFIForAdjustors=NO
else
UseLibFFIForAdjustors=YES
endif

Ian Lynagh's avatar
Ian Lynagh committed
232 233
# On Windows we normally want to make a relocatable bindist, to we
# ignore flags like libdir
234
ifeq "$(Windows_Host)" "YES"
Ian Lynagh's avatar
Ian Lynagh committed
235 236 237 238 239
RelocatableBuild = YES
else
RelocatableBuild = NO
endif

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

243 244 245 246
# When building bindists we set this to yes so that the binaries are as
# portable as possible.
BeConservative = NO

247 248
ExtraMakefileSanityChecks = NO

249
#------------------------------------------------------------------------------
250
# Options for Libraries
251

252
# Which directory (in libraries/) contains the integer library?
253
INTEGER_LIBRARY=integer-gmp
254

Ian Lynagh's avatar
Ian Lynagh committed
255
# We build the libraries at least the "vanilla" way (way "v")
256 257
# 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
258 259
GhcLibWays = v

260
# In addition to the normal sequential way, the default is to also build
261
# profiled prelude libraries
262 263 264 265 266 267 268 269
# $(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)
270

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

274 275
# In addition, the RTS is built in some further variations.  Ways that
# make sense here:
276
#
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291
#   thr           : threaded
#   thr_p         : threaded + profiled + eventlog
#   debug         : debugging + eventlog
#   thr_debug     : debugging + threaded, + eventlog
#   l             : eventlog
#   p             : profiled + eventlog
#   thr_l         : threaded + eventlog
#
# Note how there are a few cases which are handled specially (in packageHsLibs)
# to reduce the number of distinct ways,
#
#   debug     implies  eventlog
#   profiled  implies  eventlog
#
# This means, for instance, that there is no debug_l way.
292
#
Simon Marlow's avatar
Simon Marlow committed
293
GhcRTSWays=l
294 295

# Usually want the debug version
296
GhcRTSWays += debug
297

298 299 300 301
# We always have the threaded versions, but note that SMP support may be disabled
# (see GhcWithSMP).
GhcRTSWays += thr thr_debug thr_l
GhcRTSWays += $(if $(findstring p, $(GhcLibWays)),thr_p,)
302
GhcRTSWays += $(if $(findstring dyn, $(GhcLibWays)),dyn debug_dyn thr_dyn thr_debug_dyn l_dyn thr_l_dyn,)
303

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

307 308 309 310
# 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
311
#
312
# 	-O(2) is pretty desirable, otherwise no inlining of prelude
sof's avatar
sof committed
313 314
#		things (incl "+") happens when compiling with this compiler

315
GhcLibHcOpts=-O2
rrt's avatar
rrt committed
316

317 318 319 320 321 322 323 324 325 326 327 328 329 330
# 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

# ----------------------------------------------------------------------------
# Object-file splitting
#
# 	Set SplitObjs=YES or NO in your build.mk
#
#	Don't use -split-objs in in GhcLibHcOpts, because the build
#		system needs to do other special magic if you are
#		doing object-file splitting

dobenour's avatar
dobenour committed
331 332 333 334 335 336 337
ArchSupportsSplitObjs=$(if $(filter \
  $(TargetArch_CPP),i386 x86_64 powerpc sparc),YES,NO)#

# We used to support splitting on Darwin, but there is no point, since Darwin
# uses subsections via symbols
OsSupportsSplitObjs=$(if $(filter $(TargetOS_CPP),\
   mingw32 linux solaris2 freebsd dragonfly netbsd openbsd),YES,NO)
338
SplitObjsBroken = @SplitObjsBroken@
339

dobenour's avatar
dobenour committed
340 341 342 343
SupportsSplitObjs := $(if $(and $(filter YES,$(ArchSupportsSplitObjs)),\
                                $(filter YES,$(OsSupportsSplitObjs)),\
                                $(filter NO,$(SplitObjsBroken)),\
                                $(filter YES,$(GhcWithNativeCodeGen))),YES,NO)
344

345 346
# By default, enable SplitObjs for the libraries if this build supports it.
# Unless SplitSections is enabled - then let that take precedence.
dobenour's avatar
dobenour committed
347 348
SplitObjs = $(if $(and $(filter YES,$(SupportsSplitObjs)),\
                       $(filter NO,$(SplitSections))),YES,NO)
349

350 351 352 353 354 355 356
# ----------------------------------------------------------------------------
# Section splitting
#
# Similar to -ffunction-sections -fdata-sections in GCC. Provides space saving
# like SplitObjs, but doesn't require post-processing and splitting of object
# files.
#
357 358 359
# 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
360 361 362
# instead) and Windows is disabled until we figure the linking performance
# issues related to BFD out. (See #11445, #12913 and related tickets.)
OsSupportsSplitSections=$(if $(filter $(TargetOS_CPP),mingw32 darwin),NO,YES)
363
SupportsSplitSections=$(if $(and $(filter YES,$(OsSupportsSplitSections)),\
dobenour's avatar
dobenour committed
364
                                   $(filter YES,$(LdIsGNULd))),YES,NO)
365
SplitSections ?= $(SupportsSplitSections)
366

367 368
# ----------------------------------------------------------------------------

369 370
# 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
371 372 373 374 375 376 377 378 379
# 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
380
# rebuilding is not necessary.
381 382

LAX_DEPENDENCIES = NO
383

384 385
# ----------------------------------------------------------------------------
# Options for GHC's RTS
386

387 388 389 390
# 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.
391
GhcRtsHcOpts=-O2
392
GhcRtsCcOpts=-O2 -fomit-frame-pointer -g
393

394 395 396 397 398 399
# Configuration for libffi
UseSystemLibFFI=@UseSystemLibFFI@
# Flags to go into package.conf for rts
FFILibDir=@FFILibDir@
FFIIncludeDir=@FFIIncludeDir@

400 401
# GHC needs arch-specific tweak at least in
#     rts/Libdw.c:set_initial_registers()
402
GhcRtsWithLibdw=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64),@UseLibdw@,NO))
403

404
################################################################################
405 406 407
#
#		Paths (see paths.mk)
#
408
################################################################################
409

410
BINDIST               = NO
Ian Lynagh's avatar
Ian Lynagh committed
411 412 413
BIN_DIST_NAME         = ghc-$(ProjectVersion)
BIN_DIST_PREP_DIR     = bindistprep/$(BIN_DIST_NAME)
BIN_DIST_PREP_TAR     = bindistprep/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar
Herbert Valerio Riedel's avatar
Herbert Valerio Riedel committed
414 415
BIN_DIST_PREP_TAR_COMP = $(BIN_DIST_PREP_TAR).$(TAR_COMP_EXT)
BIN_DIST_TAR_COMP     = $(BIN_DIST_NAME)-$(TARGETPLATFORM).tar.$(TAR_COMP_EXT)
416

417
# -----------------------------------------------------------------------------
418
# Utilities programs: flags
419 420 421 422 423 424 425

# 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
426
# compilations,
427 428 429
#
#	SRC_HC_OPTS += -O

Simon Marlow's avatar
Simon Marlow committed
430 431 432 433

# 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>).
434
#
Simon Marlow's avatar
Simon Marlow committed
435 436 437 438 439 440 441 442 443 444 445 446
# SRC_HC_OPTS is *not* for adding flags that are required to make your
# build work.  Examples:
#
#  - instead of using -pgmc/-pgma-/-pgml, use the --with-gcc option to configure
#
#  - 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.
#
447
SRC_HC_OPTS += -H32m -O
448

449 450 451 452 453 454

# 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
455
# Warning suppression flags. See mk/warnings.mk.
456 457 458 459 460 461 462
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 =
463

464 465
# -----------------------------------------------------------------------------
# Names of programs in the GHC tree
Ian Lynagh's avatar
Ian Lynagh committed
466

467
MKDIRHIER           = $(INPLACE_BIN)/mkdirhier
Ian Lynagh's avatar
Ian Lynagh committed
468

469
GENERATED_FILE  = chmod a-w
Ian Lynagh's avatar
Ian Lynagh committed
470
EXECUTABLE_FILE = chmod +x
471

472
#-----------------------------------------------------------------------------
473
# Installed GHC
474

475
# $(GHC) points to installed version of the compiler.
476 477 478
#
# NOTE: Don't override $(GHC) in build.mk, use configure --with-ghc instead
# (because the version numbers have to be calculated).
479

Ian Lynagh's avatar
Ian Lynagh committed
480 481 482 483 484 485 486 487 488
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)
489 490 491
GHC_STAGE1  = $(ghc-stage1_INPLACE)
GHC_STAGE2  = $(ghc-stage2_INPLACE)
GHC_STAGE3  = $(ghc-stage3_INPLACE)
492

Ian Lynagh's avatar
Ian Lynagh committed
493
BOOTSTRAPPING_CONF = libraries/bootstrapping.conf
494

495
INPLACE_PACKAGE_CONF = $(INPLACE_LIB)/package.conf.d
496 497 498 499 500 501 502 503 504 505 506 507 508

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)
509
endif
510

511 512
GHC_PACKAGE_DB_FLAG = @GHC_PACKAGE_DB_FLAG@

513 514 515
#-----------------------------------------------------------------------------
# C compiler
#
516 517
# NB. Don't override $(CC) using build.mk,  re-configure using
# the flag CC=<blah> instead.  The reason is that the configure script
518 519
# needs to know which gcc you're using in order to perform its tests.

520
GccVersion            = @GccVersion@
521

522 523 524
# TargetPlatformFull retains the string passed to configure so we have it in
# the necessary format to pass to libffi's configure.
TargetPlatformFull    = @TargetPlatformFull@
Ian Lynagh's avatar
Ian Lynagh committed
525
GccLT34         = @GccLT34@
526
GccLT44         = @GccLT44@
Ian Lynagh's avatar
Ian Lynagh committed
527
GccLT46         = @GccLT46@
528
GccIsClang      = @GccIsClang@
Simon Marlow's avatar
Simon Marlow committed
529

530
CC              = @CC@
531
CC_STAGE0       = @CC_STAGE0@
Ian Lynagh's avatar
Ian Lynagh committed
532 533 534
CC_STAGE1       = $(CC)
CC_STAGE2       = $(CC)
CC_STAGE3       = $(CC)
Simon Marlow's avatar
Simon Marlow committed
535

536
AS              = @CC@
537 538 539 540
AS_STAGE0       = @CC_STAGE0@
AS_STAGE1       = $(AS)
AS_STAGE2       = $(AS)
AS_STAGE3       = $(AS)
541

542
# why no LD=@LD@ ?
543
LD_STAGE0       = @LD_STAGE0@
Simon Marlow's avatar
Simon Marlow committed
544 545 546 547
LD_STAGE1       = $(LD)
LD_STAGE2       = $(LD)
LD_STAGE3       = $(LD)

548
# Cross-compiling options
549
# See Note [CrossCompiling vs Stage1Only]
550 551
CrossCompiling        = @CrossCompiling@

Simon Marlow's avatar
Simon Marlow committed
552 553
# Change this to YES if you're building a cross-compiler and don't
# want to build stage 2.
554 555
# See Note [CrossCompiling vs Stage1Only]
# See Note [Stage1Only vs stage=1]
Simon Marlow's avatar
Simon Marlow committed
556 557
Stage1Only = NO

558 559 560 561 562
# 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
563 564 565
# 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)
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 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616
# Note [CrossCompiling vs Stage1Only]
#
# 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].
#
# [1] https://ghc.haskell.org/trac/ghc/wiki/Building/CrossCompiling

# Note [Stage1Only vs stage=1]
#
# 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."

617
# C compiler and linker flags from configure (e.g. -m<blah> to select
618 619
# correct C compiler backend). The stage number is the stage of GHC
# that is being used to compile with.
620 621 622
CONF_CC_OPTS_STAGE0 = @CONF_CC_OPTS_STAGE0@
CONF_CC_OPTS_STAGE1 = @CONF_CC_OPTS_STAGE1@
CONF_CC_OPTS_STAGE2 = @CONF_CC_OPTS_STAGE2@
623 624 625 626 627 628
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@
629 630 631
CONF_CPP_OPTS_STAGE0 = @CONF_CPP_OPTS_STAGE0@
CONF_CPP_OPTS_STAGE1 = @CONF_CPP_OPTS_STAGE1@
CONF_CPP_OPTS_STAGE2 = @CONF_CPP_OPTS_STAGE2@
632 633 634
CONF_HC_OPTS_STAGE0 = @CONF_HC_OPTS_STAGE0@
CONF_HC_OPTS_STAGE1 = @CONF_HC_OPTS_STAGE1@
CONF_HC_OPTS_STAGE2 = @CONF_HC_OPTS_STAGE2@
635

636 637 638
# 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
639
ifneq "$(Windows_Host)" "YES"
640
SRC_HSC2HS_OPTS += --cross-safe
641
endif
642
SRC_HSC2HS_OPTS += $(foreach d,$(GMP_INCLUDE_DIRS),-I$(d))
643 644 645 646 647

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))
648
SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --lflag=,$$(CONF_GCC_LINKER_OPTS_STAGE$1))
649 650 651 652
endef
$(eval $(call set_stage_HSC2HS_OPTS,0))
$(eval $(call set_stage_HSC2HS_OPTS,1))
$(eval $(call set_stage_HSC2HS_OPTS,2))
653
ifeq "$(CrossCompiling)" "YES"
654 655
SRC_HSC2HS_OPTS_STAGE1 += --cross-compile
SRC_HSC2HS_OPTS_STAGE2 += --cross-compile
656
endif
657 658 659
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
660

Ian Lynagh's avatar
Ian Lynagh committed
661 662 663
ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
WINDRES = $(INPLACE_MINGW)/bin/windres
else ifeq "$(TARGETPLATFORM)" "x86_64-unknown-mingw32"
664
WINDRES = $(INPLACE_MINGW)/bin/windres
Ian Lynagh's avatar
Ian Lynagh committed
665 666
endif

667
#-----------------------------------------------------------------------------
668
# Mingwex Library
669
#
670
HaveLibMingwEx	= @HaveLibMingwEx@
671
ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
672
DLLTOOL			= inplace/mingw/bin/dlltool.exe
673
else ifeq "$(TARGETPLATFORM)" "x86_64-unknown-mingw32"
674
DLLTOOL			= inplace/mingw/bin/dlltool.exe
675
endif
676

677 678 679 680
#-----------------------------------------------------------------------------
# Other standard (ha!) Unix utilities

AR			= @ArCmd@
681
AR_OPTS			= @ArArgs@
682
ArSupportsAtFile = @ArSupportsAtFile@
683

684
AR_STAGE0 = @AR_STAGE0@
685 686 687
AR_STAGE1 = $(AR)
AR_STAGE2 = $(AR)
AR_STAGE3 = $(AR)
688
AR_OPTS_STAGE0 = @AR_OPTS_STAGE0@
689 690 691 692 693 694 695
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)
696
ArSupportsAtFile_STAGE0 = @ArSupportsAtFile_STAGE0@
697 698 699
ArSupportsAtFile_STAGE1 = $(ArSupportsAtFile)
ArSupportsAtFile_STAGE2 = $(ArSupportsAtFile)
ArSupportsAtFile_STAGE3 = $(ArSupportsAtFile)
700

701 702
CONTEXT_DIFF		= @ContextDiffCmd@
CP			= cp
thomie's avatar
thomie committed
703

704 705
# 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
706
CPP			= @CPP@ @CPPFLAGS@
thomie's avatar
thomie committed
707
HS_CPP			= @HaskellCPPCmd@ @HaskellCPPArgs@
708

rrt's avatar
rrt committed
709
FIND			= @FindCmd@
710

sof's avatar
sof committed
711 712 713 714
#
# 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.
715
#
716
INSTALL			= @INSTALL@
Ian Lynagh's avatar
Ian Lynagh committed
717
INSTALL			:= $(subst .././install-sh,$(TOP)/install-sh,$(INSTALL))
718

719 720 721 722
LN_S			= @LN_S@
MV			= mv
PERL 			= @PerlCmd@
PIC			= pic
723 724
RANLIB_CMD = @RANLIB_CMD@
REAL_RANLIB_CMD = @REAL_RANLIB_CMD@
725
SED			= @SedCmd@
726
SHELL			= @SHELL@
727

728
HaveDtrace		= @HaveDtrace@
729
USE_DTRACE = $(HaveDtrace)
730 731
DTRACE			= @DtraceCmd@

732 733
LD = @LdCmd@
NM = @NmCmd@
734
AR = @ArCmd@
735
OBJDUMP = @ObjdumpCmd@
736

Moritz Angermann's avatar
Moritz Angermann committed
737
CLANG = @ClangCmd@
738 739 740
LLC = @LlcCmd@
OPT = @OptCmd@

741 742 743 744
# GNU ld supports input via a linker script, which is useful to avoid
# overflowing command-line length limits.
LdIsGNULd		= @LdIsGNULd@

745 746 747 748
# Set to YES if ld has the --build-id flag.  Sometimes we need to
# disable it with --build-id=none.
LdHasBuildId	        = @LdHasBuildId@

749 750 751 752
# Set to YES if ld has the --no_compact_unwind flag. See #5019
# and compiler/main/DriverPipeline.hs.
LdHasNoCompactUnwind	= @LdHasNoCompactUnwind@

753
# On MSYS, building with SplitObjs=YES fails with
754 755
#   ar: Bad file number
# see #3201.  We need to specify a smaller max command-line size
756 757 758
# 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
759
XARGS = xargs
760
ifeq "$(Windows_Host)" "YES"
761
XARGS_OPTS = -s 20000
762 763
endif

Ian Lynagh's avatar
Ian Lynagh committed
764
ifeq "$(TARGETPLATFORM)" "x86_64-unknown-mingw32"
765
STRIP_CMD      = $(TOP)/inplace/mingw/bin/strip.exe
766 767 768 769 770 771 772 773 774 775 776
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
777
else
778
STRIP_CMD      = @StripCmd@
Ian Lynagh's avatar
Ian Lynagh committed
779
endif
780 781
PATCH_CMD      = @PatchCmd@
TAR_CMD        = @TarCmd@
782 783 784
BZIP2_CMD      = @Bzip2Cmd@
GZIP_CMD       = @GzipCmd@
XZ_CMD         = @XzCmd@
785

Ben Gamari's avatar
Ben Gamari committed
786
# xz is default compression
787
TAR_COMP      ?= xz
788 789 790 791 792 793 794 795 796 797 798 799 800 801

# select compression command and .tar extension based on TAR_COMP value
ifeq "$(TAR_COMP)" "bzip2"
TAR_COMP_CMD  = $(BZIP2_CMD)
TAR_COMP_EXT  = bz2
else ifeq "$(TAR_COMP)" "gzip"
TAR_COMP_CMD  = $(GZIP_CMD)
TAR_COMP_EXT  = gz
else ifeq "$(TAR_COMP)" "xz"
TAR_COMP_CMD  = $(XZ_CMD)
TAR_COMP_EXT  = xz
else
$(error $$(TAR_COMP) set to unknown value "$(TAR_COMP)" (supported: "bzip2", "gzip", "xz"))
endif
sof's avatar
sof committed
802

803
ifeq "$(Windows_Host)" "YES"
804 805 806 807 808 809 810
TOUCH_CMD      = $(utils/touchy_dist_INPLACE)
TOUCH_DEP      = $(TOUCH_CMD)
else
TOUCH_CMD      = touch
TOUCH_DEP      =
endif

811
HSCOLOUR_CMD   = @HSCOLOUR@
812

813
TIME_CMD       = @TimeCmd@
814

815
#-----------------------------------------------------------------------------
816 817 818 819 820 821 822 823
# 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@
824

825 826 827
#-----------------------------------------------------------------------------
# 		FPtools support software

reid's avatar
reid committed
828 829 830 831 832
#
# ghc-pkg
#
GHC_PKG		        = @GhcPkgCmd@

833 834 835 836
#
# Happy
#
HAPPY			= @HappyCmd@
837
HAPPY_VERSION		= @HappyVersion@
838 839 840
#
# Options to pass to Happy when we're going to compile the output with GHC
#
Ian Lynagh's avatar
Ian Lynagh committed
841
SRC_HAPPY_OPTS		= -agc --strict
842

843 844 845 846
#
# Alex
#
ALEX			= @AlexCmd@
847
ALEX_VERSION		= @AlexVersion@
848
Alex3			= @Alex3@
849
#
850
# Options to pass to Alex when we're going to compile the output with GHC
851
#
852
SRC_ALEX_OPTS = -g
853
ifeq "$(Alex3)" "YES"
854
# The compiler isn't using the Unicode support in Alex 3.0 yet, in fact we do our own
855
# Unicode handling, so diable Alex's.
856
compiler_ALEX_OPTS = --latin1
857
endif
858

859
# Should we build haddock docs?
Ian Lynagh's avatar
Ian Lynagh committed
860
HADDOCK_DOCS = YES
861
# And HsColour the sources?
862
ifeq "$(HSCOLOUR_CMD)" ""
863 864 865 866 867
HSCOLOUR_SRCS = NO
else
HSCOLOUR_SRCS = YES
endif

868
# Build and install DPH?
869
BUILD_DPH = NO
870
# Build and install the "extra" packages (see ./packages)?
871
BUILD_EXTRA_PKGS = NO
872

873 874 875 876 877 878 879 880
################################################################################
#
#    Library configure arguments
#
################################################################################

CONFIGURE_ARGS = @CONFIGURE_ARGS@

881 882 883 884 885 886 887 888 889
################################################################################
#
#    To be passed to sub-builds
#
################################################################################

ICONV_INCLUDE_DIRS = @ICONV_INCLUDE_DIRS@
ICONV_LIB_DIRS = @ICONV_LIB_DIRS@

890 891
GMP_INCLUDE_DIRS = @GMP_INCLUDE_DIRS@
GMP_LIB_DIRS = @GMP_LIB_DIRS@
892 893

CURSES_LIB_DIRS = @CURSES_LIB_DIRS@
894

895
# See Note [Disable -O2 in unregisterised mode]
896 897 898 899 900 901 902 903 904
# Be careful: 'GhcUnregisterised' should be defined earlier in this file.
ifeq "$(GhcUnregisterised)" "YES"
GhcStage1HcOpts=
GhcStage2HcOpts=
GhcStage3HcOpts=

GhcLibHcOpts=
endif

905 906
# Note [Disable -O2 in unregisterised mode]
# Disable -O2 optimization in unregisterised mode. Otherwise amount
907 908 909 910
# of generated C code # makes things very slow to compile (~5 minutes
# on core-i7 for 'compiler/hsSyn/HsExpr.hs') and sometimes not compile
# at all: powerpc64 overflows TOC section on 'compiler/hsSyn/HsExpr.hs'
#         ia64 overflows short data section on 'compiler/main/DynFlags.hs'