Make split sections by default work again
[ghc.git] / mk / config.mk.in
index 47198b9..35ff04c 100644 (file)
@@ -187,12 +187,12 @@ HaveLibDL = @HaveLibDL@
 # includes/stg/SMP.h
 ifeq "$(TargetArch_CPP)" "arm"
 # We don't support load/store barriers pre-ARMv7. See #10433.
-ArchSupportsSMP="$(if $(filter $(ARM_ISA),ARMv5 ARMv6),NO,YES)"
+ArchSupportsSMP=$(if $(filter $(ARM_ISA),ARMv5 ARMv6),NO,YES)
 else
 ArchSupportsSMP=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 sparc powerpc powerpc64 powerpc64le aarch64)))
 endif
 
-# The THREADED_RTS requites `BaseReg` to be in a register and the
+# The THREADED_RTS requires `BaseReg` to be in a register and the
 # `GhcUnregisterised` mode doesn't allow that.
 GhcWithSMP := $(strip $(if $(filter YESNO, $(ArchSupportsSMP)$(GhcUnregisterised)),YES,NO))
 
@@ -274,14 +274,21 @@ BuildSharedLibs=$(strip $(if $(findstring dyn,$(GhcLibWays)),YES,NO))
 # 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
-#   thr_debug   : debugging threaded
-#   thr_debug_p : debugging threaded profiled
-#   l           : event logging
-#   thr_l       : threaded and event logging
+#   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.
 #
 GhcRTSWays=l
 
@@ -321,19 +328,24 @@ StripLibraries=NO
 #              system needs to do other special magic if you are
 #              doing object-file splitting
 
-ArchSupportsSplitObjs=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64 powerpc sparc),YES,NO))
-OsSupportsSplitObjs=$(strip $(if $(filter $(TargetOS_CPP),mingw32 linux darwin solaris2 freebsd dragonfly netbsd openbsd),YES,NO))
+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)
 SplitObjsBroken = @SplitObjsBroken@
 
-SupportsSplitObjs := $(strip \
-                    $(if $(and $(filter YES,$(ArchSupportsSplitObjs)),\
-                               $(filter YES,$(OsSupportsSplitObjs)),\
-                               $(filter NO,$(SplitObjsBroken)),\
-                               $(filter NO,$(GhcUnregisterised))),\
-                          YES,NO))
+SupportsSplitObjs := $(if $(and $(filter YES,$(ArchSupportsSplitObjs)),\
+                                $(filter YES,$(OsSupportsSplitObjs)),\
+                                $(filter NO,$(SplitObjsBroken)),\
+                                $(filter YES,$(GhcWithNativeCodeGen))),YES,NO)
 
-# By default, enable SplitObjs for the libraries if this build supports it
-SplitObjs=$(SupportsSplitObjs)
+# By default, enable SplitObjs for the libraries if this build supports it.
+# Unless SplitSections is enabled - then let that take precedence.
+SplitObjs = $(if $(and $(filter YES,$(SupportsSplitObjs)),\
+                       $(filter NO,$(SplitSections))),YES,NO)
 
 # ----------------------------------------------------------------------------
 # Section splitting
@@ -342,9 +354,14 @@ SplitObjs=$(SupportsSplitObjs)
 # like SplitObjs, but doesn't require post-processing and splitting of object
 # files.
 #
-# Set SplitSections=YES in your build.mk to enable.
-
-SplitSections=NO
+# 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)
+SupportsSplitSections=$(if $(and $(filter YES,$(OsSupportsSplitSections)),\
+                                   $(filter YES,$(LdIsGNULd))),YES,NO)
+SplitSections ?= $(SupportsSplitSections)
 
 # ----------------------------------------------------------------------------
 
@@ -389,21 +406,6 @@ GhcRtsWithLibdw=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64),@UseLibdw@,
 #
 ################################################################################
 
-# Directory used by GHC (and possibly other tools) for storing
-# temporary files.  If your TMPDIR isn't big enough, either override
-# this in build.mk or set your environment variable "TMPDIR" to point
-# to somewhere with more space.  (TMPDIR=. is a good choice).
-
-# DEFAULT_TMPDIR isn't called TMPDIR because GNU make tends to
-# 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.
-
-DEFAULT_TMPDIR         = /tmp
-ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
-DEFAULT_TMPDIR         = /C/TEMP
-endif
-
 BIN_DIST_NAME         = ghc-$(ProjectVersion)
 BIN_DIST_PREP_DIR     = bindistprep/$(BIN_DIST_NAME)
 BIN_DIST_PREP_TAR     = bindistprep/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar
@@ -626,6 +628,9 @@ CONF_LD_LINKER_OPTS_STAGE2 = @CONF_LD_LINKER_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@
+CONF_HC_OPTS_STAGE0 = @CONF_HC_OPTS_STAGE0@
+CONF_HC_OPTS_STAGE1 = @CONF_HC_OPTS_STAGE1@
+CONF_HC_OPTS_STAGE2 = @CONF_HC_OPTS_STAGE2@
 
 # The .hsc files aren't currently safe for cross-compilation on Windows:
 #     libraries\haskeline\.\System\Console\Haskeline\Backend\Win32.hsc:160