GhcProfiled=NO
# Do we support shared libs?
-PlatformSupportsSharedLibs = $(if $(filter $(TARGETPLATFORM),i386-unknown-linux x86_64-unknown-linux i386-unknown-freebsd x86_64-unknown-freebsd i386-unknown-mingw32 i386-apple-darwin powerpc-apple-darwin),YES,NO)
+PlatformSupportsSharedLibs = $(if $(filter $(TARGETPLATFORM),\
+ i386-unknown-linux x86_64-unknown-linux \
+ i386-unknown-freebsd x86_64-unknown-freebsd \
+ i386-unknown-openbsd x86_64-unknown-openbsd \
+ i386-unknown-mingw32 \
+ i386-unknown-solaris2 \
+ i386-apple-darwin powerpc-apple-darwin),YES,NO)
# Build a compiler that will build *unregisterised* libraries and
# binaries by default. Unregisterised code is supposed to compile and
# 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.
-ArchHasAdjustorSupport=$(strip $(if $(findstring $(HostArch_CPP),i386 x86_64 powerpc,),YES,NO))
+ArchHasAdjustorSupport = $(if $(findstring $(HostArch_CPP),i386 x86_64),YES,NO)
ifeq "$(ArchHasAdjustorSupport)" "YES"
UseLibFFIForAdjustors=NO
else
# doing object-file splitting
ArchSupportsSplitObjs=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64 powerpc sparc),YES,NO))
+# Object splitting is disabled on darwin due to #4013
+OsSupportsSplitObjs=$(strip $(if $(filter $(TargetOS_CPP),mingw32 cygwin32 linux solaris2 freebsd dragonfly netbsd openbsd),YES,NO))
# lazy test, so that $(GhcUnregisterised) can be set in build.mk
-SupportsSplitObjs=$(strip $(if $(filter YES,$(ArchSupportsSplitObjs)),\
- $(if $(filter NO,$(BootingFromHc)),\
- $(if $(filter NO,$(GhcUnregisterised)),\
- YES,\
- NO),\
- NO),\
- NO))
+SupportsSplitObjs=$(strip \
+ $(if $(and $(filter YES,$(ArchSupportsSplitObjs)),\
+ $(filter YES,$(OsSupportsSplitObjs)),\
+ $(filter NO,$(BootingFromHc)),\
+ $(filter NO,$(GhcUnregisterised))),\
+ YES,NO))
# By default, enable SplitObjs for the libraries if this build supports it
SplitObjs=$(SupportsSplitObjs)
#
# SRC_HC_OPTS += -O
+
+# 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>).
+#
+# 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.
+#
SRC_HC_OPTS += -H32m -O
# These flags make flex 8-bit
EXECUTABLE_FILE = chmod +x
#-----------------------------------------------------------------------------
-# Haskell compilers and mkdependHS
+# Installed GHC
-# $(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).
+# $(GHC) points to installed version of the compiler.
#
# NOTE: Don't override $(GHC) in build.mk, use configure --with-ghc instead
# (because the version numbers have to be calculated).
GHC := $(GHC).exe
endif
-GhcDir = $(dir $(GHC))
-
-# Set to YES if $(GHC) has the editline package installed
-GhcHasEditline = @GhcHasEditline@
-
-HBC = @HBC@
-NHC = @NHC@
-
# Sometimes we want to invoke ghc from the build tree in different
# 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):
GhcMinVersion = @GhcMinVersion@
# Keep this in sync with the variables in package-config.mk
-ghc_ge_6102 = @ghc_ge_6102@
-ghc_ge_611 = @ghc_ge_611@
ghc_ge_613 = @ghc_ge_613@
# Canonicalised ghc version number, used for easy (integer) version
endif
# C compiler and linker flags from configure (e.g. -m<blah> to select
-# correct C compiler backend).
+# correct C compiler backend). The stage number is the stage of GHC
+# that is being used to compile with.
CONF_CC_OPTS_STAGE0 = @CONF_CC_OPTS_STAGE0@
CONF_CC_OPTS_STAGE1 = @CONF_CC_OPTS_STAGE1@
CONF_CC_OPTS_STAGE2 = @CONF_CC_OPTS_STAGE2@
CONF_LD_OPTS_STAGE0 = @CONF_LD_OPTS_STAGE0@
CONF_LD_OPTS_STAGE1 = @CONF_LD_OPTS_STAGE1@
CONF_LD_OPTS_STAGE2 = @CONF_LD_OPTS_STAGE2@
+CONF_CPP_OPTS_STAGE0 = @CONF_CPP_OPTS_STAGE0@
+CONF_CPP_OPTS_STAGE1 = @CONF_CPP_OPTS_STAGE1@
+CONF_CPP_OPTS_STAGE2 = @CONF_CPP_OPTS_STAGE2@
ifeq "$(TARGETPLATFORM)" "ia64-unknown-linux"
CONF_CC_OPTS += -G0
# On MSYS, building with SplitObjs=YES fails with
# ar: Bad file number
# see #3201. We need to specify a smaller max command-line size
-# to work around it. 32767 doesn't work; 30000 does.
+# 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
XARGS = xargs
ifeq "$(Windows)" "YES"
-XARGS_OPTS = -s 30000
+XARGS_OPTS = -s 20000
endif
#