config.mk.in 30.1 KB
Newer Older
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
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
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

232 233
# On Windows we normally want to make a relocatable bindist, to we
# ignore flags like libdir
234
ifeq "$(Windows_Host)" "YES"
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
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

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
#
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@
525
GccLT46         = @GccLT46@
526
GccIsClang      = @GccIsClang@
Simon Marlow's avatar
Simon Marlow committed
527

528
CC              = @CC@
529
CC_STAGE0       = @CC_STAGE0@
530 531 532
CC_STAGE1       = $(CC)
CC_STAGE2       = $(CC)
CC_STAGE3       = $(CC)
Simon Marlow's avatar
Simon Marlow committed
533

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

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

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

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

556 557 558 559 560
# 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
561 562 563
# 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)
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 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614
# 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."

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

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

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

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

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

675 676 677 678
#-----------------------------------------------------------------------------
# Other standard (ha!) Unix utilities

AR			= @ArCmd@
679
AR_OPTS			= @ArArgs@
680
ArSupportsAtFile = @ArSupportsAtFile@
681

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

699 700
CONTEXT_DIFF		= @ContextDiffCmd@
CP			= cp
thomie's avatar
thomie committed
701

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

rrt's avatar
rrt committed
707
FIND			= @FindCmd@
708

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

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

726
HaveDtrace		= @HaveDtrace@
727
USE_DTRACE = $(HaveDtrace)
728 729
DTRACE			= @DtraceCmd@

730 731
LD = @LdCmd@
NM = @NmCmd@
732
AR = @ArCmd@
733
OBJDUMP = @ObjdumpCmd@
734

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

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

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

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

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

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

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

# 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
800

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

809
HSCOLOUR_CMD   = @HSCOLOUR@
810

811
TIME_CMD       = @TimeCmd@
812

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

823 824 825
#-----------------------------------------------------------------------------
# 		FPtools support software

826 827 828 829 830
#
# ghc-pkg
#
GHC_PKG		        = @GhcPkgCmd@

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

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

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

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

871 872 873 874 875 876 877 878
################################################################################
#
#    Library configure arguments
#
################################################################################

CONFIGURE_ARGS = @CONFIGURE_ARGS@

879 880 881 882 883 884 885 886 887
################################################################################
#
#    To be passed to sub-builds
#
################################################################################

ICONV_INCLUDE_DIRS = @ICONV_INCLUDE_DIRS@
ICONV_LIB_DIRS = @ICONV_LIB_DIRS@

888 889
GMP_INCLUDE_DIRS = @GMP_INCLUDE_DIRS@
GMP_LIB_DIRS = @GMP_LIB_DIRS@
890 891

CURSES_LIB_DIRS = @CURSES_LIB_DIRS@
892

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

GhcLibHcOpts=
endif

903 904
# Note [Disable -O2 in unregisterised mode]
# Disable -O2 optimization in unregisterised mode. Otherwise amount
905 906 907 908
# 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'