config.mk.in 33 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 15 16 17
# 	- config.mk is auto-generated from config.mk.in by configure.
#	  This may be triggered automatically by the build system (say
#	  if config.mk.in has changed more recently than config.mk),
#	  so if you edit config.mk your changes will be spammed.
18
#
19
#	- Settings in this file may be overriden by giving replacement
20 21 22 23 24
#	  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.
25 26 27 28 29 30 31 32 33 34
#
# This is one of only two files that configure generates (the other is config.h)
#
# There is a section below for each project within the fptools suite
#
#	PLUS
#
# a section corresponding to each of the main .mk files 
# included by boilerplate.mk (see boilerplate.mk for a list).

35
ifneq "$(findstring 3.7, $(MAKE_VERSION))" ""
36 37 38
ifeq "$(findstring 3.79.1, $(MAKE_VERSION))" ""
$(error GNU make version 3.79.1 or later is required.)
endif
39
endif
40

41
################################################################################
sof's avatar
sof committed
42 43 44
#
#		Project-wide platform variables
#
45
################################################################################
sof's avatar
sof committed
46 47 48

# A "platform" is the GNU cpu-type/manufacturer/operating-system target machine
# specifier.  E.g. sparc-sun-solaris2
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
#
# Build  platform: the platform on which we are doing this build
# Host   platform: the platform on which these binaries will run
# Target platform: the platform for which this compiler will generate code
#
# We don't support build & host being different, because the build
# process creates binaries that are run during the build, and also
# installed.
#
# If host & target are different, then we are building a compiler
# which will generate intermediate .hc files to port to the target
# architecture for bootstrapping.  The libraries and stage 2 compiler
# will be built as HC files for the target system, and likely won't
# build on this host platform.
#
64 65 66 67 68 69 70
# An important invariant is that for any piece of source code, the
# platform on which the code is going to run is the HOST platform,
# and the platform on which we are building is the BUILD platform.
# Additionally for the compiler, the platform this compiler will
# generate code for is the TARGET.  TARGET is not meaningful outside
# the compiler sources.
#
71 72 73 74 75 76 77 78 79
# Guidelines for when to use HOST vs. TARGET:
#
#  - In the build system (Makefile, foo.mk), normally we should test
#    $(HOSTPLATFORM).  There are some cases (eg. installation), where
#    we expect $(HOSTPLATFORM)==$(TARGETPLATFORM), so in those cases it
#    doesn't matter which is used.
#
#  - In the compiler itself, we should test HOST or TARGET depending
#    on whether the conditional relates to the code being generated, or
80 81
#    the platform on which the compiler is running.  See the section
#    on "Coding Style" in the commentary for more details.
82
#
83
#  - In all other code, we should be testing HOST only.
84 85 86 87
#
# NOTE: cross-compiling is not well supported by the build system.
# You have to do a lot of work by hand to cross compile: see the
# section on "Porting GHC" in the Building Guide.
sof's avatar
sof committed
88 89 90

HOSTPLATFORM			= @HostPlatform@
TARGETPLATFORM			= @TargetPlatform@
91
BUILDPLATFORM			= @BuildPlatform@
sof's avatar
sof committed
92 93

# Hack alert:
94 95 96
# in one or two places, we need to get at the OS version (major and
# perhaps even minor), HostOS_Full is the OS name reported by
# AC_CANONICAL_SYSTEM.
sof's avatar
sof committed
97 98 99 100 101 102 103
#
HostPlatform_CPP		= @HostPlatform_CPP@
HostArch_CPP			= @HostArch_CPP@
HostOS_CPP			= @HostOS_CPP@
HostOS_Full			= @HostOS_Full@
HostVendor_CPP	                = @HostVendor_CPP@

104 105 106 107 108 109 110 111 112
TargetPlatform_CPP		= @TargetPlatform_CPP@
TargetArch_CPP			= @TargetArch_CPP@
TargetOS_CPP			= @TargetOS_CPP@
TargetVendor_CPP                = @TargetVendor_CPP@

BuildPlatform_CPP		= @BuildPlatform_CPP@
BuildArch_CPP			= @BuildArch_CPP@
BuildOS_CPP			= @BuildOS_CPP@
BuildVendor_CPP                 = @BuildVendor_CPP@
sof's avatar
sof committed
113

114 115 116
@HostPlatform_CPP@_HOST           = 1
@TargetPlatform_CPP@_TARGET       = 1
@BuildPlatform_CPP@_BUILD         = 1
sof's avatar
sof committed
117

118 119 120
@HostArch_CPP@_HOST_ARCH          = 1
@TargetArch_CPP@_TARGET_ARCH      = 1
@BuildArch_CPP@_BUILD_ARCH        = 1
sof's avatar
sof committed
121

122 123 124
@HostOS_CPP@_HOST_OS              = 1
@TargetOS_CPP@_TARGET_OS          = 1
@BuildOS_CPP@_BUILD_OS            = 1
sof's avatar
sof committed
125

126 127 128
@HostVendor_CPP@_HOST_VENDOR      = 1
@TargetVendor_CPP@_TARGET_VENDOR  = 1
@BuildVendor_CPP@_BUILD_VENDOR    = 1
sof's avatar
sof committed
129 130 131 132 133 134

# Leading underscores on symbol names in object files
# Valid options: YES/NO
#
LeadingUnderscore=@LeadingUnderscore@

rrt's avatar
rrt committed
135
# Pin a suffix on executables? If so, what (Windows only).
sof's avatar
sof committed
136
exeext=@exeext@
137

138 139 140 141 142 143 144
# Windows=YES if on a Windows platform
ifneq "$(findstring $(HostOS_CPP), mingw32 cygwin32)" ""
Windows=YES
else
Windows=NO
endif

145
################################################################################
146 147 148 149 150
#
#		project-wide flags
#
# 	Set of options applicable to all fptools projects
#
151
################################################################################
152

153 154 155
# BootingFromHc - build GHC and the libraries from .hc files?
BootingFromHc = @BootingFromHc@

ken's avatar
ken committed
156 157 158 159
# BootingFromUnregisterisedHc - treat .hc files as containing unregisterised
# rather than registerised code, i.e., disable the mangler?
BootingFromUnregisterisedHc = @BootingFromUnregisterisedHc@

160 161 162 163 164
# Build Order: we build Happy, Haddock and Alex before GHC if they are
# in this source tree, just in case our GHC build depends on these
# local builds rather than installed versions of the tools.
#
# Build the libs first if we're bootstrapping from .hc files.
165
ifeq "$(BootingFromHc)" "YES"
166
AllProjects = glafp-utils happy alex haddock libraries hslibs ghc greencard hdirect hood nofib docs
167
else
168
AllProjects = glafp-utils happy alex haddock ghc libraries hslibs greencard hdirect hood nofib docs
169
endif
170 171 172 173 174 175 176

#
# (OPTIONAL) set ProjectsToBuild to a list of projects to be built.  If this
# list is empty, then all projects present in the source tree will be built.
#
ProjectsToBuild =

sof's avatar
sof committed
177
#
178 179
# set ProjectsDontInstall to a list of projects which are normally built but
# not installed.
sof's avatar
sof committed
180
#
181
ProjectsDontInstall = glafp-utils nofib
182 183 184 185 186 187

#
# Should the various project tests directories be built?
#
IncludeTestDirsInBuild=NO

188 189 190 191 192
#
# Should the various project example directories be built?
#
IncludeExampleDirsInBuild=NO

193 194
#
# Which ways should DocBook XML documents be built?
195
# options are: dvi ps pdf html chm HxS
196 197 198
#
XMLDocWays=

199
################################################################################
200 201 202 203 204 205
#
#		GHC project
# 
# 	Set of (configurable) options needed by the ghc tree
#	plus their default options (if any).
#
206
################################################################################
207 208 209 210

#---------------------------------------------------------------
#
# Variables that control how the compiler itself is built
sof's avatar
sof committed
211 212
#
#---------------------------------------------------------------
213

214 215
# 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
216

217 218 219 220 221 222
# Extra ways in which to build the compiler (for example, you might want to
# build a profiled compiler so you can see where it spends its time)
GhcCompilerWays=

# Extra option flags to pass to the compiler that compiles the compiler
# (Ones that are essential are wired into ghc/compiler/Makefile)
223
# Typical options to use here:
sof's avatar
sof committed
224
#
225 226 227
#	-DDEBUG		include debugging code and assertions (will make the
#			compiler slower and produce debugging output, but useful
#			for development)
sof's avatar
sof committed
228 229
#
#	-dcore-lint	check the types after every pass of the compiler;
230 231 232 233
#			a pretty strong internal check of the compiler being
#			used to compile GHC.  Useful when bootstrapping.
GhcHcOpts=-Rghc-timing

234 235 236 237 238 239 240
# 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).
GhcStage1HcOpts=
GhcStage2HcOpts=
GhcStage3HcOpts=

241 242 243 244 245 246 247 248 249 250
# 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.
#
# If this is set to NO, you can still use the unregisterised way
# (way 'u') to get unregisterised code, but the default way will be
# registerised.
#
251 252 253
# 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.
254
#
255 256 257
ifneq "$(findstring $(HostArch_CPP), alpha hppa)" ""
GhcUnregisterised=YES
else
258
GhcUnregisterised=NO
259
endif
260

261 262 263 264
# Build a compiler with a native code generator backend
# (as well as a C backend)
#
# Target platforms supported:
265 266
#   i386, powerpc
#   sparc has bitrotted
267 268 269 270
#   AIX is not supported 
ArchSupportsNCG=$(strip $(patsubst $(HostArch_CPP), YES, $(findstring $(HostArch_CPP), i386 x86_64 powerpc)))
OsSupportsNCG=$(strip $(patsubst $(HostOS_CPP), YES, $(patsubst aix,,$(HostOS_CPP))))

271
ifeq "$(OsSupportsNCG)$(ArchSupportsNCG)$(GhcUnregisterised)" "YESYESNO"
272 273 274 275
GhcWithNativeCodeGen=YES
else
GhcWithNativeCodeGen=NO
endif
276

277 278 279
# Include support for generating Java
GhcWithJavaGen=NO

280 281
HaveLibDL = @HaveLibDL@

282 283
# Whether to include GHCi in the compiler.  Depends on whether the RTS linker
# has support for this OS/ARCH combination.
284

285
OsSupportsGHCi=$(strip $(patsubst $(HostOS_CPP), YES, $(findstring $(HostOS_CPP), mingw32 cygwin32 linux solaris2 freebsd netbsd openbsd darwin)))
286
ArchSupportsGHCi=$(strip $(patsubst $(HostArch_CPP), YES, $(findstring $(HostArch_CPP), i386 x86_64 powerpc powerpc64 sparc sparc64)))
287 288

ifeq "$(OsSupportsGHCi)$(ArchSupportsGHCi)" "YESYES"
289 290
GhcWithInterpreter=YES
else 
291
GhcWithInterpreter=NO
292
endif
293

sof's avatar
sof committed
294 295 296 297 298
#
# Building various ways?
# (right now, empty if not).
BuildingParallel=$(subst mp,YES,$(filter mp,$(WAYS)))
BuildingGranSim=$(subst mg,YES,$(filter mg,$(WAYS)))
299

300
#------------------------------------------------------------------------------
301
# Options for Libraries
302 303 304 305

# What extra ways to build the libraries in
# In addition to the normal sequential way, the default is to also build
# profiled prelude libraries.
sof's avatar
sof committed
306
# When booting from .hc files, turn this off.
307
ifeq "$(BootingFromHc)" "YES"
sof's avatar
sof committed
308
GhcLibWays=
sof's avatar
sof committed
309
else
sof's avatar
sof committed
310
GhcLibWays=p
sof's avatar
sof committed
311
endif
312

313 314 315 316 317 318 319
# In addition, the RTS is built in some further variations.  Ways that
# make sense here:
# 
#   thr         : threaded
#   thr_p       : threaded profiled
#   debug       : debugging (compile with -g for the C compiler, and -DDEBUG)
#   debug_p     : debugging profiled
320
#   debug_u     : debugging unregisterised
321 322
#   thr_debug   : debugging threaded
#   thr_debug_p : debugging threaded profiled
323 324 325 326
#
ifeq "$(BootingFromHc)" "YES"
GhcRTSWays=
else
327
GhcRTSWays=thr thr_p debug thr_debug
328 329
endif

330 331 332 333
# 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
334 335 336
#
# 	-O is pretty desirable, otherwise no inlining of prelude
#		things (incl "+") happens when compiling with this compiler
337 338 339 340 341
#
#	-fgenerics switches on generation of support code for 
#		derivable type classes.  This is now off by default,
#		but we switch it on for the libraries so that we generate
#		the code in case someone importing wants it
sof's avatar
sof committed
342

343
GhcLibHcOpts=-O -Rghc-timing -fgenerics
rrt's avatar
rrt committed
344

345
# Win32 only: Enable the RTS and libraries to be built as DLLs
346
DLLized=@EnableWin32DLLs@
347

348 349 350 351 352 353 354 355 356 357 358 359 360 361
# 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
362
ifneq "$(findstring $(HostArch_CPP), i386 x86_64 powerpc sparc)" ""
dons's avatar
dons committed
363 364 365 366
SplitObjs=YES
else
SplitObjs=NO
endif
367

368 369
# Don't split object files for libs if we're building DLLs, or booting from
# .hc files.
370
ifeq "$(DLLized)" "YES"
rrt's avatar
rrt committed
371 372
SplitObjs=NO
endif
373 374 375
ifeq "$(BootingFromHc)" "YES"
SplitObjs=NO
endif
376 377 378
ifeq "$(GhcUnregisterised)" "YES"
SplitObjs=NO
endif
379 380 381
ifeq "$(TargetArch_CPP)" "ia64"
SplitObjs=NO
endif
382 383 384 385

# ----------------------------------------------------------------------------
# Options for GHC's RTS

386
# For an optimised RTS (you probably don't want to change these; we build
387
# a debugging RTS by default now.  Use -debug to get it).
388
GhcRtsHcOpts=-optc-O2
389
GhcRtsCcOpts=-fomit-frame-pointer
390

391 392 393
# Include the front panel code?  Needs GTK+.
GhcRtsWithFrontPanel = NO

394 395
################################################################################
#
396
# libraries project
397 398 399
#
################################################################################

400 401
# Build the Haskell Readline bindings?
#
402
GhcLibsWithReadline=@GhcLibsWithReadline@
403 404 405 406

# Libraries needed for linking with readline
LibsReadline=@LibsReadline@

407 408 409 410
# Include path to readline.h
# (no path == in standard include path)
#
ReadlineIncludePath=
411

sebc's avatar
sebc committed
412 413 414
# Math library
LIBM=@LIBM@

415 416 417 418
# Build the ObjectIO ?
#
GhcLibsWithObjectIO=@GhcLibsWithObjectIO@

sof's avatar
sof committed
419 420 421 422
# .NET interop support?
#
DotnetSupport=@DotnetSupport@

423 424 425 426
# Build unix package?
#
GhcLibsWithUnix=@GhcLibsWithUnix@

427
################################################################################
428 429 430 431 432
#
#		happy project
#
# 	Happy specific options
#
433
################################################################################
434

435
# The compiler you'd like to use to compile Happy
436
WithHappyHc = @WithHc@
437

sof's avatar
sof committed
438
# HappyHcOpts gives the flags to pass to the Haskell compiler used
sof's avatar
sof committed
439 440
# 	      to compile the Happy sources with.
#
441
HappyHcOpts = -O
442

443
################################################################################
444 445 446 447 448
#
#		haggis project
#
# 	Haggis specific options
#
449
################################################################################
450

451
################################################################################
452
#
453
#		greencard project
454
#
455
# 	GreenCard specific options
456
#
457
################################################################################
458

459
################################################################################
460 461 462 463 464
#
#		nofib project
#
# 	nofib specific options
#
465
################################################################################
466

467
WithNofibHc = $(GHC_INPLACE)
468 469 470 471 472 473 474 475 476 477

# NoFibSubDirs controls which set of tests should be run
# You can run one or more of
#	imaginary 
#	spectral
#	real
#	parallel
#	PRIVATE
#	PENDING
#	UNUSED
478
NoFibSubDirs = imaginary spectral real
479 480 481 482

# The different ways to build nofib. Default is just to mirror
# what is done for the ghc prelude libraries.
#
483
NoFibWays = $(GhcLibWays)
484 485

# Haskell compiler options for nofib
486
NoFibHcOpts = -O
487

488 489 490
# Number of times to run each program
NoFibRuns = 5

491 492 493 494 495 496 497 498
# ==============================================================================
#
#			END OF PROJECT-SPECIFIC STUFF
#
#		Now come the generic configuration options
#
# ==============================================================================

499
################################################################################
500 501 502
#
#		Paths (see paths.mk)
#
503
################################################################################
504

505
# Directory used by GHC (and possibly other tools) for storing
rrt's avatar
rrt committed
506
# temporary files.  If your TMPDIR isn't big enough, either override
507 508 509
# this in build.mk or set your environment variable "TMPDIR" to point
# to somewhere with more space.  (TMPDIR=. is a good choice).

510
# DEFAULT_TMPDIR isn't called TMPDIR because GNU make tends to
511 512 513
# override an environment variable with the value of the make variable
# of the same name (if it exists) when executing sub-processes, so
# setting the TMPDIR env var would have no effect in the build tree.
514 515

DEFAULT_TMPDIR		= /tmp
rrt's avatar
rrt committed
516 517 518 519 520 521
ifeq "$(TARGETPLATFORM)" "i386-unknown-cygwin32"
DEFAULT_TMPDIR		= C:/TEMP
endif
ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
DEFAULT_TMPDIR		= C:/TEMP
endif
522

sof's avatar
sof committed
523 524 525 526
# FPTOOLS_TOP: the top of the fptools hierarchy, absolute path. (POSIX / unix-style path).
FPTOOLS_TOP_ABS		= @hardtop@
# The platform specific version of 'hardtop'.
FPTOOLS_TOP_ABS_PLATFORM = @hardtop_plat@
527 528 529 530 531 532

#
# Installation directories, we don't use half of these,
# but since the configure script has them on offer while
# passing through, we might as well set them.

533 534 535
prefix			= @prefix@
exec_prefix		= @exec_prefix@
bindir			= @bindir@
536 537
datadir0		= @datadir@
libdir0			= @libdir@
538 539
includedir		= @includedir@
oldincludedir		= @oldincludedir@
540
mandir			= @mandir@
541

542 543
ifeq "$(Windows)" "YES"

544 545 546 547
ifeq "$(strip $(prefix))" ""
prefix		= c:/ghc
endif

548 549 550
# Hack: our directory layouts tend to be different on Windows, so
# hack around configure's bogus assumptions here.
datadir 	= $(prefix)
551 552 553 554
libdir		= $(prefix)

else

555
#
556
# Unix: override libdir and datadir to put project-specific stuff in
557 558
# a subdirectory with the version number included.
#
559 560
libdir     = $(if $(ProjectNameShort),$(libdir0)/$(ProjectNameShort)-$(ProjectVersion),$(libdir0))
datadir    = $(if $(ProjectNameShort),$(datadir0)/$(ProjectNameShort)-$(ProjectVersion),$(datadir0))
561

562 563
endif # Windows

564 565
# Default place for putting interface files is $(libdir)
# (overriden for packages in package.mk)
566
ifacedir		= $(libdir)
567

sof's avatar
sof committed
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
# 
# Default values for most of the above are only set if
# they weren't configured to anything in particular
# via the configure script. (i.e., we make no assumption
# that the autoconf-generated script will assign defaults
# to all of the above).
#
ifeq "$(strip $(exec_prefix))" ""
exec_prefix		= $(prefix)
endif
ifeq "$(strip $(bindir))" ""
bindir			= $(exec_prefix)/bin
endif

#
# NOTE: by intention, libexecdir and libdir point to 
# the same place.
#  => Only way to override this is to set libexecdir= on the command line.
#     (NOTE: configure script setting is ignored).
libexecdir		= $(libdir)

ifeq "$(strip $(datadir))" ""
datadir		= $(prefix)/share
endif
ifeq "$(strip $(libdir))" ""
libdir		= $(exec_prefix)/lib
endif
ifeq "$(strip $(includedir))" ""
includedir	= $(prefix)/include
endif
ifeq "$(strip $(oldincludedir))" ""
oldincludedir	= /usr/include
endif
ifeq "$(strip $(mandir))" ""
mandir		= $(prefix)/man
endif
604

605 606
#-----------------------------------------------------------------------------
# install configuration
607

608
#
609
# Set this to have files installed with a specific owner
610
#
611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629
INSTALL_OWNER =

# 
# Set this to have files installed with a specific group
#
INSTALL_GROUP =

#
# Invocations of `install' for the four different classes
# of targets:
#
INSTALL_PROGRAM = $(INSTALL) -m 755
INSTALL_SCRIPT  = $(INSTALL) -m 755
INSTALL_SHLIB   = $(INSTALL) -m 755
INSTALL_DATA    = $(INSTALL) -m 644
INSTALL_DIR     = $(MKDIRHIER)

# -----------------------------------------------------------------------------
# Utilities programs: flags 
630 631 632 633 634 635 636 637 638 639 640

# 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
# compilations, 
#
#	SRC_HC_OPTS += -O

641
SRC_HC_OPTS += -H16m -O
642

rrt's avatar
rrt committed
643 644 645 646 647 648 649 650 651 652 653 654 655 656 657
# These flags make flex 8-bit
SRC_FLEX_OPTS	+= -8

SRC_INSTALL_BIN_OPTS	+= -s

# lint gets all CPP's flags too
SRC_LINT_OPTS		+= -axz -DLINT $(SRC_CPP_OPTS)
WAY$(_way)_LINT_OPTS	+= WAY$(_way)_CPP_OPTS

# Default fptools options for dllwrap.
SRC_BLD_DLL_OPTS += -mno-cygwin --target=i386-mingw32

# Flags for CPP when running GreenCard on .pgc files
GC_CPP_OPTS += -P -E -x c -traditional -D__GLASGOW_HASKELL__

658

659
################################################################################
660 661 662
#
#		Utilities programs: where to find them
#
663
################################################################################
664 665 666 667 668 669 670 671 672 673 674 675 676 677 678

#-----------------------------------------------------------------------------
# FPtools Utility locations

# By default, the various utils needed to be build ghc and chums
# is set up to point to the utils/ directory. Define here the
# path prefix for the utilities. Notice that it's a prefix with
# a trailing slash, so that it can be concatenated directly on
# front of a program name; if it's not set then we just look
# along the shell's $(PATH)
#
# If instead you want to use installed or your own versions of these,
# override the various *_PREFIX in build.mk, i.e., having the following
# in build.mk:
#
679
#   MKDEPENDC_PREFIX=
680
#
681
# will force `make' to rummage around in your PATH to find `mkdependC' (not
682 683 684 685 686 687 688 689 690
# sure it would need it in the first place, but still).
#
GLAFP_UTILS  		= $(FPTOOLS_TOP)/glafp-utils

SCRIPT_PREFIX 		= $(GLAFP_UTILS)/scripts/
MKDEPENDC_PREFIX	= $(GLAFP_UTILS)/mkdependC/
LTX_PREFIX		= $(GLAFP_UTILS)/ltx/
RUNTEST_PREFIX		= $(GLAFP_UTILS)/runstdtest/
VERBATIM_PREFIX		= $(GLAFP_UTILS)/verbatim/
691
SGMLVERB_PREFIX		= $(GLAFP_UTILS)/sgmlverb/
692 693 694
ETAGS_PREFIX		= $(GLAFP_UTILS)/etags/
LNDIR_PREFIX		= $(GLAFP_UTILS)/lndir/
MKDIRHIER_PREFIX	= $(GLAFP_UTILS)/mkdirhier/
rrt's avatar
rrt committed
695
DOCBOOK_PREFIX		= $(GLAFP_UTILS)/docbook/
696

697
HADDOCK_PREFIX		= $(FPTOOLS_TOP)/haddock/
698

699
LITERATE_PREFIX    	= $(FPTOOLS_TOP)/literate/
700 701 702

UNLIT_PREFIX    	= $(FPTOOLS_TOP)/ghc/utils/unlit/
HP2PS_PREFIX            = $(FPTOOLS_TOP)/ghc/utils/hp2ps/
703
HSTAGS_PREFIX           = $(FPTOOLS_TOP)/ghc/utils/hasktags/
704
HSC2HS_PREFIX		= $(FPTOOLS_TOP)/ghc/utils/hsc2hs/
705 706

#-----------------------------------------------------------------------------
707 708 709 710 711 712 713
# Haskell compilers and mkdependHS

# $(GHC), $(HBC) and $(NHC) point to installed versions of the relevant
# compilers, if available.
#
# $(HC) is a generic Haskell 98 compiler, set to $(GHC) by default.
# $(MKDEPENDHS) is the Haskell dependency generator (ghc -M).
714 715 716
#
# NOTE: Don't override $(GHC) in build.mk, use configure --with-ghc instead
# (because the version numbers have to be calculated).
717

718
GHC		= @WithGhc@
719
GhcDir          = $(dir $(GHC))
720 721 722 723
GhcVersion	= @GhcVersion@
GhcMajVersion	= @GhcMajVersion@
GhcMinVersion	= @GhcMinVersion@
GhcPatchLevel	= @GhcPatchLevel@
724 725 726 727 728 729 730

# 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
sof's avatar
sof committed
731
GhcCanonVersion = $(GhcMajVersion)$(GhcMinVersion)
732
endif
733

734 735
HBC		= @HBC@
NHC		= @NHC@
736

737
HC	        = @WithHc@
738
MKDEPENDHS	= $(GHC)
739

740 741
# Sometimes we want to invoke ghc from the build tree in different
# projects (eg. it's handy to have a nofib & a ghc build in the same
rrt's avatar
rrt committed
742
# tree).  We can refer to "this ghc" as $(GHC_INPLACE):
743

744
GHC_INPLACE 	= $(FPTOOLS_TOP)/ghc/compiler/ghc-inplace
745 746 747
GHC_STAGE1 	= $(FPTOOLS_TOP)/ghc/compiler/stage1/ghc-inplace
GHC_STAGE2 	= $(FPTOOLS_TOP)/ghc/compiler/stage2/ghc-inplace
GHC_STAGE3 	= $(FPTOOLS_TOP)/ghc/compiler/stage3/ghc-inplace
748

749 750 751
#-----------------------------------------------------------------------------
# C compiler
#
752 753 754 755
# NB. Don't override $(WhatGccIsCalled) using build.mk,  re-configure using
# the flag --with-gcc=<blah> instead.  The reason is that the configure script
# needs to know which gcc you're using in order to perform its tests.

756 757
HaveGcc 	= @HaveGcc@
UseGcc  	= YES
sof's avatar
sof committed
758
WhatGccIsCalled = @WhatGccIsCalled@
759
GccVersion      = @GccVersion@
760 761 762 763 764
ifeq "$(strip $(HaveGcc))" "YES"
ifneq "$(strip $(UseGcc))"  "YES"
  CC	= cc
else
  CC	= $(WhatGccIsCalled)
765
  GccDir = $(dir $(WhatGccIsCalled))
766 767 768
endif
endif

769
# default C compiler flags
sof's avatar
sof committed
770
SRC_CC_OPTS = @SRC_CC_OPTS@
771

772 773 774 775
ifeq "$(TARGETPLATFORM)" "ia64-unknown-linux"
SRC_CC_OPTS += -G0
endif

776
#-----------------------------------------------------------------------------
777
# GMP Library (version 2.0.x or above)
778 779
#
HaveLibGmp	= @HaveLibGmp@
780
LibGmp		= @LibGmp@
781

782
#-----------------------------------------------------------------------------
783
# GMP framework (Mac OS X)
784
#
785
HaveFrameworkGMP = @HaveFrameworkGMP@
786

787
#-----------------------------------------------------------------------------
788
# Mingwex Library
789
#
790
HaveLibMingwEx	= @HaveLibMingwEx@
791

792
#-----------------------------------------------------------------------------
793
# Flex (currently unused, could be moved to glafp-utils)
794

795
# FLEX			= @LEX@
sof's avatar
sof committed
796
# Don't bother with -lfl, we define our own yywrap()s anyway.
797
# FLEX_LIB		= 
sof's avatar
sof committed
798
#WAS:FLEX_LIB		= @LEXLIB@
799 800 801 802 803

#-----------------------------------------------------------------------------
# Other standard (ha!) Unix utilities

AR			= @ArCmd@
ken's avatar
ken committed
804
ArSupportsInput		= @ArSupportsInput@
805 806 807 808 809
# Yuckage: for ghc/utils/parallel -- todo: nuke this dependency!!
BASH                    = /usr/local/bin/bash

CONTEXT_DIFF		= @ContextDiffCmd@
CP			= cp
sof's avatar
sof committed
810
CPP			= @CPP@ @CPPFLAGS@
811
CTAGS 			= $(ETAGS)
812 813 814 815 816
#
# RAWCPP_FLAGS are the flags to give to cpp (viz, gcc -E) to persuade it to
# behave plausibly on Haskell sources.
#
RAWCPP_FLAGS            = -undef -traditional
rrt's avatar
rrt committed
817
FIND			= @FindCmd@
sof's avatar
sof committed
818
SORT		        = @SortCmd@
819
INSTALL			= @INSTALL@
sof's avatar
sof committed
820 821 822 823 824
#
# 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.
# 
sof's avatar
sof committed
825
INSTALL			:= $(subst .././install-sh,$(FPTOOLS_TOP_ABS)/install-sh,$(INSTALL))
826
LATEX			= latex
rrt's avatar
rrt committed
827 828
HEVEA			= hevea
HACHA			= hacha
829 830 831 832 833 834
LN_S			= @LN_S@
MANMACROS		= -man
MSMACROS 		= -ms
MV			= mv
NROFF			= nroff
PERL 			= @PerlCmd@
835
PYTHON			= @PythonCmd@
836 837 838 839 840 841
PIC			= pic
PREPROCESSCMD		= $(CC) -E
RANLIB			= @RANLIB@
RM			= rm -f
SED			= @SedCmd@
SHELL			= /bin/sh
842

843 844
LD			= @LdCmd@

845 846 847 848 849
# Some ld's support the -x flag and some don't, so the configure
# script detects which we have and sets LdXFlag to "-x" or ""
# respectively.
LD_X			= @LdXFlag@

850 851 852 853
# GNU ld supports input via a linker script, which is useful to avoid
# overflowing command-line length limits.
LdIsGNULd		= @LdIsGNULd@

sof's avatar
sof committed
854 855 856 857 858 859 860 861 862 863 864 865 866 867
#
# In emergency situations, REAL_SHELL is used to perform shell commands
# from within the ghc driver script, by scribbling the command line to
# a temp file and then having $(REAL_SHELL) execute it. 
#
# The reason for having to do this is that overly long command lines
# cause unnecessary trouble with some shells (e.g., /bin/sh on Solaris
# 2.5.1), which is why this backdoor is provided. The situation of overly
# long command lines is either encountered while doing `make boot' in ghc/compiler, 
# or when linking the compiler binary (`hsc'). 
#
# We do not use SHELL to execute long commands, as `make' will more than likely
# override whatever setting you have in your environment while executing. 

rrt's avatar
rrt committed
868
# By default, REAL_SHELL is set equal to SHELL, which is not really a smart move
869
# as it is SHELL that will show up the bogosity in the first place, but setting
sof's avatar
sof committed
870 871 872 873 874 875 876
# it to anything else isn't really portable.
#
#  ====> If long command lines cause you trouble, invoke `ghc' (via `make' or otherwise)
# with REAL_SHELL set to something else than /bin/sh, for instance, your favourite
# command shell.
#
REAL_SHELL=$(SHELL)
877 878 879
SIZE			= size
STRIP			= strip
TAR			= @TarCmd@
sof's avatar
sof committed
880
ZIP			= zip
sof's avatar
sof committed
881

882 883 884 885 886 887 888 889 890 891 892 893 894 895
#
# This is special to literate/, ToDo: add literate-specific
# configure setup to literate/.
#
TBL 			= tbl
TEX			= tex
TGRIND 			= tgrind
TGRIND_HELPER 		= /usr/local/lib/tgrind/tfontedpr # XXX
TIB			= tib

TIME			= @TimeCmd@
TROFF			= troff
UNAME			= uname

896 897 898 899 900 901 902 903 904 905 906 907
#-----------------------------------------------------------------------------
# DocBook XML stuff

XSLTPROC		= @XsltprocCmd@
XMLLINT			= @XmllintCmd@
FOP			= @FopCmd@
XMLTEX			= @XmltexCmd@
PDFXMLTEX		= @PdfxmltexCmd@
DVIPS			= @DvipsCmd@

DIR_DOCBOOK_XSL		= @DIR_DOCBOOK_XSL@

908 909 910 911
XSLTPROC_LABEL_OPTS	= --stringparam toc.section.depth 3 \
			  --stringparam section.autolabel 1 \
			  --stringparam section.label.includes.component.label 1

912 913 914 915 916 917 918 919 920 921
#-----------------------------------------------------------------------------
# 		FPtools support software

# Stuff from fptools/glafp-utils
MKDEPENDC 		= $(MKDEPENDC_PREFIX)mkdependC
LTX 			= $(LTX_PREFIX)ltx
MKDIRHIER		= $(MKDIRHIER_PREFIX)mkdirhier
LNDIR			= $(LNDIR_PREFIX)lndir
ETAGS			= $(ETAGS_PREFIX)etags
VERBATIM		= $(VERBATIM_PREFIX)verbatim
922
SGMLVERB		= $(SGMLVERB_PREFIX)sgmlverb
923 924
RUNTEST			= $(RUNTEST_PREFIX)runstdtest

sof's avatar
sof committed
925 926
BLD_DLL			= dllwrap

rrt's avatar
rrt committed
927 928 929 930 931 932
#
# .NET support software
#
ILX2IL                  = ilx2il
ILASM                   = ilasm

reid's avatar
reid committed
933 934 935 936 937 938
#
# ghc-pkg
#
GHC_PKG		        = @GhcPkgCmd@

#
939
# GreenCard
reid's avatar
reid committed
940
#
941 942
GREENCARD	        = @GreenCardCmd@
GREENCARD_VERSION	= @GreenCardVersion@		
reid's avatar
reid committed
943

944 945 946 947 948 949 950 951
#
# Happy
#
HAPPY			= @HappyCmd@
HAPPY_VERSION		= @HappyVersion@		
#
# Options to pass to Happy when we're going to compile the output with GHC
#
952
GHC_HAPPY_OPTS		= -agc
953

954 955 956 957
# Temp. to work around performance problems in the HEAD around 8/12/2003,
# A Happy compiled with this compiler needs more stack.
SRC_HAPPY_OPTS		= +RTS -K2m -RTS

958 959 960 961 962 963 964 965 966 967
#
# Alex
#
ALEX			= @AlexCmd@
ALEX_VERSION		= @AlexVersion@		
#
# Options to pass to Happy when we're going to compile the output with GHC
#
GHC_ALEX_OPTS		= -g

968 969 970
#
# Haddock
# 
971
HADDOCK			= @HaddockCmd@
972 973
HADDOCK_INPLACE		= $(HADDOCK_PREFIX)/src/haddock-inplace

974 975 976 977 978 979 980 981 982 983 984 985 986
#
# Stuff from fptools/literate
#
LIT2PGM 		= $(LITERATE_PREFIX)lit2pgm
LIT2HTML      		= $(LITERATE_PREFIX)lit2html
LIT2LATEX     		= $(LITERATE_PREFIX)lit2latex
MKDEPENDLIT   		= $(LITERATE_PREFIX)mkdependlit
LIT2CHANGELOG 		= $(LITERATE_PREFIX)lit2changelog
LIT2TEXT 		= $(LITERATE_PREFIX)lit2text

#
# Stuff from fptools/ghc/utils
#
987 988
UNLIT	 		= $(UNLIT_PREFIX)unlit$(exeext)
HP2PS			= $(HP2PS_PREFIX)hp2ps$(exeext)
989
HSTAGS			= $(HSTAGS_PREFIX)hasktags
990
HSC2HS			= $(HSC2HS_PREFIX)hsc2hs-inplace
991 992 993 994 995

#
# Options for the compiling different `ways'. Various projects within
# the glorious fptools tree support building in various user-configured
# ways. For instance, you could set up one `way' such that the prelude
996
# libraries all were built with the option -ffoldr-build-on.
997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027
# 
# To configure up your own way, have a look at some of the standard ways
# such as profiling, and create your own set of WAY_*_OPTS defs below.
# After having done that, add your way string to WAYS, and after having
# run the configure script, the different projects will add the new way
# to the list of ways they support.
#

#
# IMPORTANT! The WAYS variable configures the different `ways'
# you want to build a project (or maybe just parts of it, as is
# the case for ghc/). This variable is intended set inside the
# project mk setup, enforcing a global fptools WAYS is a bit too
# much (do you *really* want to build glafp-utils the profiled-concurrent 
# way?)
#

#
# Definitions of the different ways:
#   
#   * their name:
#          - tag, e.g., p
#          - description, e.g., profiling
#   * what they mean to the driver:
#          - WAY_p_HC_OPTS gives the list of command-line options
#            to the driver.
#

#
# The ways currently defined.
#
1028
ALL_WAYS=p t u s mp mg a b c d e f g h i j k l m n o A B
rrt's avatar
rrt committed
1029
USER_WAYS=a b c d e f g h j k l m n o A B
1030 1031

#
1032
# The following ways currently have treated specially, p u t mg,
1033 1034 1035 1036 1037
# as the driver script treats these guys specially and needs to carefully be told
# about the options for these. Hence, we hide the required command line options
# for these in the ghc/driver, as this is the only place they are needed.
# 
# If you want to add to these default options, fill in the variables below:
1038

rrt's avatar
rrt committed
1039 1040
# Way 'i':
WAY_i_NAME=ILX
rrt's avatar
rrt committed
1041
WAY_i_HC_OPTS= -filx -fruntime-types
rrt's avatar
rrt committed
1042

1043
# Way 'p':
1044 1045 1046
WAY_p_NAME=profiling
WAY_p_HC_OPTS= -prof

1047
# Way 't':
1048 1049 1050 1051 1052
WAY_t_NAME=ticky-ticky profiling
WAY_t_HC_OPTS= -ticky

# Way `u':
WAY_u_NAME=unregisterized (using portable C only)
1053
WAY_u_HC_OPTS=-unreg
1054 1055 1056