#
XMLDocWays=
+# Should we build haddock docs?
+HADDOCK_DOCS = YES
+
+# Should we build latex docs?
+LATEX_DOCS = NO
+
+# Mac OS X deployment target (to cross-compile for older OS versions)
+#
+MACOSX_DEPLOYMENT_VERSION = @MACOSX_DEPLOYMENT_VERSION@
+MACOSX_DEPLOYMENT_SDK = @MACOSX_DEPLOYMENT_SDK@
+
+ifneq "$(MACOSX_DEPLOYMENT_VERSION)" ""
+MACOSX_DEPLOYMENT_CC_OPTS = -mmacosx-version-min=$(MACOSX_DEPLOYMENT_VERSION) \
+ -isysroot $(MACOSX_DEPLOYMENT_SDK) \
+ --no-builtin-fprintf
+MACOSX_DEPLOYMENT_LD_OPTS = -mmacosx-version-min=$(MACOSX_DEPLOYMENT_VERSION) \
+ -Wl,-syslibroot,$(MACOSX_DEPLOYMENT_SDK)
+# We don't extend SRC_CC_OPTS and friends here directly, as (a) they may get
+# overwritten in build.mk and (b) we must not use the deployment options in
+# stage 1 or we get a linker error if the bootstrap compiler is for a more
+# recent OS version.
+#
+# We need --no-builtin-fprintf, as the use of the builtin function optimisation
+# for fprintf together with #include "PosixSource" in the RTS leads to the
+# use of fwrite$UNIX2003 (with GCC 4.0.1 on Mac OS X 10.5.2).
+endif
+
################################################################################
#
# Variables that control how the compiler itself is built
# These are placed later on the command line, and may therefore
# override options from $(GhcHcOpts).
GhcStage1HcOpts=
-GhcStage2HcOpts=
-GhcStage3HcOpts=
+GhcStage2HcOpts=-O2
+GhcStage3HcOpts=-O2
GhcProfiled=NO
GhcDebugged=NO
+GhcLibProfiled=NO
+
+# Build shared and/or static libs?
+BuildSharedLibs=@BuildSharedLibs@
+# ToDo later:
+# BuildStaticLibs=@BuildStaticLibs@
# Build a compiler that will build *unregisterised* libraries and
# binaries by default. Unregisterised code is supposed to compile and
$(if $(filter YESYESNO,\
$(OsSupportsNCG)$(ArchSupportsNCG)$(GhcUnregisterised)),YES,NO))
-# Include support for generating Java
-GhcWithJavaGen=NO
-
HaveLibDL = @HaveLibDL@
# ArchSupportsSMP should be set iff there is support for that arch in
HscIfaceFileVersion=6
-MakefileDeps=YES
-
#------------------------------------------------------------------------------
# Options for Libraries
+# Which directory (in libraries/) contains the integer library?
+INTEGER_LIBRARY=integer-gmp
+
# What extra ways to build the libraries in
# In addition to the normal sequential way, the default is to also build
# profiled prelude libraries.
GhcLibWays=p
endif
+ifeq "$(BuildSharedLibs)" "YES"
+GhcLibWays += dyn
+endif
+
# In addition, the RTS is built in some further variations. Ways that
# make sense here:
#
GhcRTSWays += debug
endif
+ifeq "$(BuildSharedLibs)" "YES"
+GhcRTSWays += debug_dyn thr_dyn thr_debug_dyn
+endif
+
# Want the threaded versions unless we're unregisterised
# Defer the check until later by using $(if..), because GhcUnregisterised might
# be set in build.mk, which hasn't been read yet.
# -dcore-lint or -H32m. The ones that are *essential* are wired into
# the build system.
#
-# -O is pretty desirable, otherwise no inlining of prelude
+# -O(2) is pretty desirable, otherwise no inlining of prelude
# things (incl "+") happens when compiling with this compiler
#
-# -fgenerics switches on generation of support code for
+# -XGenerics 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
-GhcLibHcOpts=-O -Rghc-timing -fgenerics
+GhcLibHcOpts=-O2 -Rghc-timing -XGenerics
# Win32 only: Enable the RTS and libraries to be built as DLLs
DLLized=@EnableWin32DLLs@
# Math library
LIBM=@LIBM@
-# Build the ObjectIO ?
-#
-GhcLibsWithObjectIO=@GhcLibsWithObjectIO@
-
# .NET interop support?
#
DotnetSupport=@DotnetSupport@
# Include support for CPU performance counters via the PAPI library in the RTS?
# (PAPI: http://icl.cs.utk.edu/papi/)
GhcRtsWithPapi = NO
-HavePapi = @HavePapi@
+PapiLibDir=
+PapiIncludeDir=
################################################################################
#
DEFAULT_TMPDIR = /C/TEMP
endif
-# FPTOOLS_TOP: the top of the fptools hierarchy, absolute path.
+# FPTOOLS_TOP_ABS: the top of the fptools hierarchy, absolute path.
# On Windows this is a c:/foo/bar style path.
FPTOOLS_TOP_ABS = @hardtop@
-BIN_DIST_NAME=ghc-$(ProjectVersion)
BIN_DIST_TOPDIR_ABS=$(FPTOOLS_TOP_ABS)
BIN_DIST_DIR=$(BIN_DIST_TOPDIR_ABS)/$(BIN_DIST_NAME)
-BIN_DIST_TARBALL=$(FPTOOLS_TOP_ABS)/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar.bz2
+
+BIN_DIST_NAME=ghc-$(ProjectVersion)
+BIN_DIST_TAR=$(FPTOOLS_TOP_ABS)/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar
+BIN_DIST_TAR_BZ2=$(BIN_DIST_TAR).bz2
+BIN_DIST_PREP_DIR=$(FPTOOLS_TOP_ABS)/bindist-prep
+BIN_DIST_PREP=$(BIN_DIST_PREP_DIR)/$(BIN_DIST_NAME)
+BIN_DIST_LIST=$(FPTOOLS_TOP_ABS)/bindist-list
# Definition of 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
# Unix: override libdir and datadir to put ghc-specific stuff in
# a subdirectory with the version number included.
+#
+# datadir is set to libdir here as GHC needs package.conf and unlit
+# to be in the same place (and things like ghc-pkg need to agree on
+# where package.conf is, so we just set it globally).
+#
datarootdir := $(datadir0)
-datadir := $(datadir0)/ghc-$(ProjectVersion)
libdir := $(libdir0)/ghc-$(ProjectVersion)
+datadir := $(libdir)
# New autoconf (>= 2.60?) make a configure with --docdir=DIR etc flags.
# However, in order to support older autoconf's we don't use them.
# (NOTE: configure script setting is ignored).
libexecdir = $(libdir)
-# This is a bit of a lie, as this is a wrapper rather than the program
-# itself. However, it means that we don't have to worry about Windows
-# and non-Windows having different extensions.
-GHC_PKG_PROG = $(FPTOOLS_TOP_ABS)/$(GHC_PKG_DIR_REL)/ghc-pkg-inplace
+GHC_PKG_PROG = $(FPTOOLS_TOP_ABS)/$(GHC_PKG_DIR_REL)/install-inplace/bin/ghc-pkg
#-----------------------------------------------------------------------------
# install configuration
#
# SRC_HC_OPTS += -O
-SRC_HC_OPTS += -H16m -O
+SRC_HC_OPTS += -H32m -O
# These flags make flex 8-bit
SRC_FLEX_OPTS += -8
WAY$(_way)_LINT_OPTS += WAY$(_way)_CPP_OPTS
# Default fptools options for dllwrap.
-SRC_BLD_DLL_OPTS += -mno-cygwin --target=i386-mingw32
+SRC_BLD_DLL_OPTS += --target=i386-mingw32
# Flags for CPP when running GreenCard on .pgc files
GC_CPP_OPTS += -P -E -x c -traditional -D__GLASGOW_HASKELL__
GHC_UTILS_DIR_REL = utils
GHC_INCLUDE_DIR_REL = includes
-GHC_COMPILER_DIR_REL = compiler
+GHC_COMPILER_DIR_REL = ghc
GHC_RTS_DIR_REL = rts
GHC_UTILS_DIR_REL = utils
GHC_DRIVER_DIR_REL = driver
GHC_SPLIT_DIR_REL = $(GHC_DRIVER_DIR_REL)/split
GHC_SYSMAN_DIR_REL = $(GHC_RTS_DIR_REL)/parallel
+INPLACE_DATA_DIR = $(FPTOOLS_TOP_ABS)/inplace-datadir
+
GHC_UTILS_DIR = $(FPTOOLS_TOP)/$(GHC_UTILS_DIR_REL)
GHC_INCLUDE_DIR = $(FPTOOLS_TOP)/$(GHC_INCLUDE_DIR_REL)
GHC_COMPILER_DIR = $(FPTOOLS_TOP)/$(GHC_COMPILER_DIR_REL)
GHC_HP2PS_DIR = $(FPTOOLS_TOP)/$(GHC_HP2PS_DIR_REL)
GHC_HSTAGS_DIR = $(FPTOOLS_TOP)/$(GHC_HSTAGS_DIR_REL)
GHC_GHCTAGS_DIR = $(FPTOOLS_TOP)/$(GHC_GHCTAGS_DIR_REL)
-GHC_HSC2HS_DIR = $(FPTOOLS_TOP)/$(GHC_HSC2HS_DIR_REL)
+GHC_HSC2HS_DIR = $(FPTOOLS_TOP_ABS)/$(GHC_HSC2HS_DIR_REL)
GHC_TOUCHY_DIR = $(FPTOOLS_TOP)/$(GHC_TOUCHY_DIR_REL)
GHC_PKG_DIR = $(FPTOOLS_TOP)/$(GHC_PKG_DIR_REL)
GHC_GENPRIMOP_DIR = $(FPTOOLS_TOP)/$(GHC_GENPRIMOP_DIR_REL)
GHC_PKG_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_PKG_DIR_REL)
GHC_GENPRIMOP_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_GENPRIMOP_DIR_REL)
GHC_GENAPPLY_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_GENAPPLY_DIR_REL)
+GHC_COMPILER_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_COMPILER_DIR_REL)
GHC_MANGLER_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_MANGLER_DIR_REL)
GHC_SYSMAN_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_SYSMAN_DIR_REL)
GHC_HP2PS_PGM = hp2ps
GHC_HSTAGS_PGM = hasktags
GHC_GHCTAGS_INPLACE_PGM = ghctags-inplace
-GHC_HSC2HS_INPLACE_PGM = hsc2hs-inplace
+GHC_HSC2HS_INPLACE_PGM = hsc2hs
GHC_TOUCHY_PGM = touchy$(exeext)
GHC_MANGLER_PGM = ghc-asm
GHC_SPLIT_PGM = ghc-split
GHC_SYSMAN_PGM = SysMan
-GHC_PKG_INPLACE_PGM = ghc-pkg-inplace
GHC_GENPRIMOP_PGM = genprimopcode
GHC_GENAPPLY_PGM = genapply
GHC_MKDEPENDC_PGM = mkdependC
HP2PS = $(GHC_HP2PS_DIR)/$(GHC_HP2PS_PGM)
HSTAGS = $(GHC_HSTAGS_DIR)/$(GHC_HSTAGS_PGM)
GHCTAGS_INPLACE = $(GHC_GHCTAGS_DIR)/$(GHC_GHCTAGS_INPLACE_PGM)
-HSC2HS_INPLACE = $(GHC_HSC2HS_DIR)/$(GHC_HSC2HS_INPLACE_PGM)
+HSC2HS_INPLACE = $(GHC_HSC2HS_DIR)/install-inplace/bin/$(GHC_HSC2HS_INPLACE_PGM)
MANGLER = $(GHC_MANGLER_DIR)/$(GHC_MANGLER_PGM)
SPLIT = $(GHC_SPLIT_DIR)/$(GHC_SPLIT_PGM)
SYSMAN = $(GHC_SYSMAN_DIR)/$(GHC_SYSMAN_PGM)
-GHC_PKG_INPLACE = $(GHC_PKG_DIR)/$(GHC_PKG_INPLACE_PGM)
+GHC_PKG_INPLACE = $(GHC_PKG_PROG)
GENPRIMOP = $(GHC_GENPRIMOP_DIR)/$(GHC_GENPRIMOP_PGM)
GENAPPLY = $(GHC_GENAPPLY_DIR)/$(GHC_GENAPPLY_PGM)
MKDEPENDC = $(GHC_MKDEPENDC_DIR)/$(GHC_MKDEPENDC_PGM)
GHC = @WithGhc@
GhcDir = $(dir $(GHC))
-# Set to YES if $(GHC) has the readline package installed
-GhcHasReadline = @GhcHasReadline@
+# Set to YES if $(GHC) has the editline package installed
+GhcHasEditline = @GhcHasEditline@
HBC = @HBC@
NHC = @NHC@
# places (eg. it's handy to have a nofib & a ghc build in the same
# tree). We can refer to "this ghc" as $(GHC_INPLACE):
-GHC_INPLACE = $(GHC_COMPILER_DIR)/ghc-inplace
-GHC_STAGE1 = $(GHC_COMPILER_DIR)/stage1/ghc-inplace -no-user-package-conf
-GHC_STAGE2 = $(GHC_COMPILER_DIR)/stage2/ghc-inplace -no-user-package-conf
-GHC_STAGE3 = $(GHC_COMPILER_DIR)/stage3/ghc-inplace -no-user-package-conf
+GHC_INPLACE = $(GHC_STAGE1)
+GHC_STAGE1 = $(GHC_COMPILER_DIR_ABS)/stage1-inplace/ghc
+GHC_STAGE2 = $(GHC_COMPILER_DIR_ABS)/stage2-inplace/ghc
+GHC_STAGE3 = $(GHC_COMPILER_DIR_ABS)/stage3-inplace/ghc
+# XXX All those used to have -no-user-package-conf, but then we can't
+# pass them to Cabal
+
+BOOTSTRAPPING_CONF = $(FPTOOLS_TOP_ABS)/libraries/bootstrapping.conf
# NOTE: add -no-user-package-conf for stage 1-3 above, so that
# we avoid picking up any packages the user might happen to have
ghc_ge_605 = YES
ghc_ge_607 = YES
+ghc_ge_609 = YES
else # not UseStage1 or BootingFromHc
GhcMajVersion = @GhcMajVersion@
GhcMinVersion = @GhcMinVersion@
+# We build a few packages using the installed GHC as part of the
+# bootstrapping process. These are installed into a local
+# package.conf file, $(BOOTSTRAPPING_CONF). When we invoke the
+# installed GHC we need to pass it -package-conf $(BOOTSTRAPPING_CONF).
+# So the following variables expand to -package-conf $(BOOTSTRAPPING_CONF)
+# when $(HC) does *not* point to one of the GHC binaries built in
+# the local tree.
+#
+BOOTSTRAPPING_PACKAGE_CONF_HC_OPTS =$(if $(findstring $(GHC_COMPILER_DIR_ABS), $(HC)),,-package-conf $(BOOTSTRAPPING_CONF))
+BOOTSTRAPPING_PACKAGE_CONF_MKDEPENDHS_OPTS =$(if $(findstring $(GHC_COMPILER_DIR_ABS), $(MKDEPENDHS)),,-package-conf $(BOOTSTRAPPING_CONF))
+
# Some useful GHC version predicates:
ghc_ge_605 = @ghc_ge_605@
ghc_ge_607 = @ghc_ge_607@
+ghc_ge_609 = @ghc_ge_609@
endif
# Canonicalised ghc version number, used for easy (integer) version
SRC_CC_OPTS += -G0
endif
+SRC_HSC2HS_OPTS += $(addprefix --cflag=,$(filter-out -O,$(SRC_CC_OPTS)))
+SRC_HSC2HS_OPTS += $(foreach d,$(GMP_INCLUDE_DIRS),-I$(d))
+
#-----------------------------------------------------------------------------
# GMP Library (version 2.0.x or above)
#
GHC_ALEX_OPTS = -g
#
-# Haddock
-#
-HADDOCK = @HaddockCmd@
-
-#
# Options for compiling in different `ways'.
#
# To configure up your own way, have a look at some of the standard ways
WAY_thr_debug_HC_OPTS=-optc-DTHREADED_RTS -optc-DDEBUG
# Way 'thr_debug_p':
-WAY_thr_debug_p_NAME=threaded
+WAY_thr_debug_p_NAME=threaded debug profiling
WAY_thr_debug_p_HC_OPTS=-optc-DTHREADED_RTS -optc-DDEBUG -prof
# Way 'dyn': build dynamic shared libraries