Add -fdefer-diagnostics to defer and group diagnostic messages in make-mode
[ghc.git] / mk / config.mk.in
index 0fad90c..0119e9a 100644 (file)
@@ -66,19 +66,13 @@ GhcHcOpts=-Rghc-timing
 # override options from $(GhcHcOpts).
 #
 # See Note [Stage number in build variables].
+#
+# -haddock is needed so the GHCi :doc command can find docs
+#   in the .hi-files for the ghc library
 GhcStage1HcOpts=
-GhcStage2HcOpts=-O2
-GhcStage3HcOpts=-O2
+GhcStage2HcOpts=-O2 -haddock
+GhcStage3HcOpts=-O2 -haddock
 
-# Disable -O2 optimization. Otherwise amount 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 something
-# on 'compiler/hsSyn/HsExpr.hs').
-ifeq "$(GhcUnregisterised)" "YES"
-GhcStage1HcOpts=
-GhcStage2HcOpts=
-GhcStage3HcOpts=
-endif
 
 # Note [Stage number in build variables].
 #
@@ -95,7 +89,6 @@ endif
 #   The stage number refers to the compiler stage the options are passed to.
 
 GhcDebugged=NO
-GhcDynamic=NO
 
 # GhcProfiled=YES means compile a profiled stage-2 compiler
 GhcProfiled=NO
@@ -103,10 +96,13 @@ GhcProfiled=NO
 # 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.
-ifeq "$(Windows_Target)" "NO"
-WITH_TERMINFO=YES
-else
+ifeq "$(TargetOS_CPP)" "ios"
+# iOS has no terminfo support
+WITH_TERMINFO=NO
+else ifeq "$(Windows_Target)" "YES"
 WITH_TERMINFO=NO
+else
+WITH_TERMINFO=YES
 endif
 
 ifeq "$(findstring $(TargetOS_CPP),linux freebsd dragonfly openbsd netbsd solaris2 kfreebsdgnu haiku linux-android)" ""
@@ -190,8 +186,6 @@ GhcWithNativeCodeGen := $(strip\
     $(if $(filter YESYESNO,\
                  $(OsSupportsNCG)$(ArchSupportsNCG)$(GhcUnregisterised)),YES,NO))
 
-HaveLibDL = @HaveLibDL@
-
 # ArchSupportsSMP should be set iff there is support for that arch in
 # includes/stg/SMP.h
 ifeq "$(TargetArch_CPP)" "arm"
@@ -309,6 +303,7 @@ GhcRTSWays += debug
 GhcRTSWays += thr thr_debug thr_l
 GhcRTSWays += $(if $(findstring p, $(GhcLibWays)),thr_p,)
 GhcRTSWays += $(if $(findstring dyn, $(GhcLibWays)),dyn debug_dyn thr_dyn thr_debug_dyn l_dyn thr_l_dyn,)
+GhcRTSWays += $(if $(findstring p, $(GhcLibWays)),thr_debug_p debug_p,)
 
 # We can only build GHCi threaded if we have a threaded RTS:
 GhcThreaded = $(if $(findstring thr,$(GhcRTSWays)),YES,NO)
@@ -320,8 +315,11 @@ GhcThreaded = $(if $(findstring thr,$(GhcRTSWays)),YES,NO)
 #
 #      -O(2) is pretty desirable, otherwise no inlining of prelude
 #              things (incl "+") happens when compiling with this compiler
+#
+#       -haddock is needed so the GHCi :doc command can find the boot
+#               library docs in the respective .hi-files
 
-GhcLibHcOpts=-O2
+GhcLibHcOpts=-O2 -haddock
 
 # Strip local symbols from libraries?  This can make the libraries smaller,
 # but makes debugging somewhat more difficult.  Doesn't work with all ld's.
@@ -366,8 +364,9 @@ SplitObjs = $(if $(and $(filter YES,$(SupportsSplitObjs)),\
 # 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
-# instead) and Windows is not yet working. (See #11445 and related tickets.)
-OsSupportsSplitSections=$(if $(filter $(TargetOS_CPP),mingw32 darwin),NO,YES)
+# 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),darwin),NO,YES)
 SupportsSplitSections=$(if $(and $(filter YES,$(OsSupportsSplitSections)),\
                                    $(filter YES,$(LdIsGNULd))),YES,NO)
 SplitSections ?= $(SupportsSplitSections)
@@ -415,6 +414,7 @@ GhcRtsWithLibdw=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64),@UseLibdw@,
 #
 ################################################################################
 
+BINDIST               = NO
 BIN_DIST_NAME         = ghc-$(ProjectVersion)
 BIN_DIST_PREP_DIR     = bindistprep/$(BIN_DIST_NAME)
 BIN_DIST_PREP_TAR     = bindistprep/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar
@@ -517,8 +517,6 @@ endif
 
 GHC_PACKAGE_DB_FLAG = @GHC_PACKAGE_DB_FLAG@
 
-SUPPORTS_THIS_UNIT_ID = @SUPPORTS_THIS_UNIT_ID@
-
 #-----------------------------------------------------------------------------
 # C compiler
 #
@@ -527,16 +525,10 @@ SUPPORTS_THIS_UNIT_ID = @SUPPORTS_THIS_UNIT_ID@
 # needs to know which gcc you're using in order to perform its tests.
 
 GccVersion            = @GccVersion@
-ifeq "$(phase)" "0"
-CrossCompilePrefix    =
-else
-CrossCompilePrefix    = @CrossCompilePrefix@
-endif
+
 # TargetPlatformFull retains the string passed to configure so we have it in
 # the necessary format to pass to libffi's configure.
 TargetPlatformFull    = @TargetPlatformFull@
-GccLT34         = @GccLT34@
-GccLT44         = @GccLT44@
 GccLT46         = @GccLT46@
 GccIsClang      = @GccIsClang@
 
@@ -568,6 +560,11 @@ CrossCompiling        = @CrossCompiling@
 # See Note [Stage1Only vs stage=1]
 Stage1Only = NO
 
+# 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@,)
+
 # 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)
@@ -661,6 +658,14 @@ $(eval $(call set_stage_HSC2HS_OPTS,2))
 ifeq "$(CrossCompiling)" "YES"
 SRC_HSC2HS_OPTS_STAGE1 += --cross-compile
 SRC_HSC2HS_OPTS_STAGE2 += --cross-compile
+ifeq "$(Windows_Target)" "YES"
+# We'll assume we compile with gcc or clang, and both support `-S` and can as such use the
+# --via-asm pass, which should be faster and is required for cross compiling to windows, as
+# the c compiler complains about non-constant expressions even though they are constant and
+# end up as constants in the assembly.
+SRC_HSC2HS_OPTS_STAGE1 += --via-asm
+SRC_HSC2HS_OPTS_STAGE2 += --via-asm
+endif
 endif
 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
@@ -737,11 +742,13 @@ HaveDtrace                = @HaveDtrace@
 USE_DTRACE = $(HaveDtrace)
 DTRACE                 = @DtraceCmd@
 
+LD_NO_GOLD = @LdNoGoldCmd@
 LD = @LdCmd@
 NM = @NmCmd@
 AR = @ArCmd@
 OBJDUMP = @ObjdumpCmd@
 
+CLANG = @ClangCmd@
 LLC = @LlcCmd@
 OPT = @OptCmd@
 
@@ -782,26 +789,26 @@ else ifeq "$(TARGETPLATFORM)" "arm-unknown-linux"
 # The hack of using `:` to disable stripping is implemented by ghc-cabal.
 STRIP_CMD      = :
 else
-STRIP_CMD      = strip
+STRIP_CMD      = @StripCmd@
 endif
 PATCH_CMD      = @PatchCmd@
 TAR_CMD        = @TarCmd@
-BZIP2_CMD      = bzip2
-GZIP_CMD       = gzip
-XZ_CMD         = xz
+BZIP2_CMD      = @Bzip2Cmd@
+GZIP_CMD       = @GzipCmd@
+XZ_CMD         = @XzCmd@
 
 # xz is default compression
 TAR_COMP      ?= xz
 
 # select compression command and .tar extension based on TAR_COMP value
 ifeq "$(TAR_COMP)" "bzip2"
-TAR_COMP_CMD  = $(BZIP2_CMD)
+TAR_COMP_CMD  = $(BZIP2_CMD) $(TAR_COMP_OPTS)
 TAR_COMP_EXT  = bz2
 else ifeq "$(TAR_COMP)" "gzip"
-TAR_COMP_CMD  = $(GZIP_CMD)
+TAR_COMP_CMD  = $(GZIP_CMD) $(TAR_COMP_OPTS)
 TAR_COMP_EXT  = gz
 else ifeq "$(TAR_COMP)" "xz"
-TAR_COMP_CMD  = $(XZ_CMD)
+TAR_COMP_CMD  = $(XZ_CMD) $(TAR_COMP_OPTS)
 TAR_COMP_EXT  = xz
 else
 $(error $$(TAR_COMP) set to unknown value "$(TAR_COMP)" (supported: "bzip2", "gzip", "xz"))
@@ -852,16 +859,13 @@ SRC_HAPPY_OPTS            = -agc --strict
 #
 ALEX                   = @AlexCmd@
 ALEX_VERSION           = @AlexVersion@
-Alex3                  = @Alex3@
 #
 # Options to pass to Alex when we're going to compile the output with GHC
 #
 SRC_ALEX_OPTS = -g
-ifeq "$(Alex3)" "YES"
 # The compiler isn't using the Unicode support in Alex 3.0 yet, in fact we do our own
 # Unicode handling, so diable Alex's.
 compiler_ALEX_OPTS = --latin1
-endif
 
 # Should we build haddock docs?
 HADDOCK_DOCS = YES
@@ -872,8 +876,6 @@ else
 HSCOLOUR_SRCS = YES
 endif
 
-# Build and install DPH?
-BUILD_DPH = NO
 # Build and install the "extra" packages (see ./packages)?
 BUILD_EXTRA_PKGS = NO
 
@@ -896,6 +898,24 @@ ICONV_LIB_DIRS = @ICONV_LIB_DIRS@
 
 GMP_INCLUDE_DIRS = @GMP_INCLUDE_DIRS@
 GMP_LIB_DIRS = @GMP_LIB_DIRS@
+GMP_PREFER_FRAMEWORK = @GMP_PREFER_FRAMEWORK@
+GMP_FORCE_INTREE = @GMP_FORCE_INTREE@
 
-CURSES_INCLUDE_DIRS = @CURSES_INCLUDE_DIRS@
 CURSES_LIB_DIRS = @CURSES_LIB_DIRS@
+
+# See Note [Disable -O2 in unregisterised mode]
+# Be careful: 'GhcUnregisterised' should be defined earlier in this file.
+ifeq "$(GhcUnregisterised)" "YES"
+GhcStage1HcOpts=
+GhcStage2HcOpts=
+GhcStage3HcOpts=
+
+GhcLibHcOpts=
+endif
+
+# Note [Disable -O2 in unregisterised mode]
+# Disable -O2 optimization in unregisterised mode. Otherwise amount
+# 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'