Enable split sections by default where possible
authorSimon Brenner <olsner@gmail.com>
Fri, 16 Dec 2016 17:16:05 +0000 (12:16 -0500)
committerBen Gamari <ben@smart-cactus.org>
Fri, 16 Dec 2016 17:17:01 +0000 (12:17 -0500)
On non-windows platforms with GNU ld, enable SplitSections in the GHC
build by default.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: DemiMarie, thomie

Differential Revision: https://phabricator.haskell.org/D1800

GHC Trac Issues: #11445

mk/config.mk.in

index 06c12bf..5141ccf 100644 (file)
@@ -339,8 +339,12 @@ SupportsSplitObjs := $(strip \
                                $(filter NO,$(GhcUnregisterised))),\
                           YES,NO))
 
                                $(filter NO,$(GhcUnregisterised))),\
                           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 = $(strip \
+    $(if $(and $(filter YES,$(SupportsSplitObjs)),\
+               $(filter NO,$(SplitSections))),\
+         YES,NO))
 
 # ----------------------------------------------------------------------------
 # Section splitting
 
 # ----------------------------------------------------------------------------
 # Section splitting
@@ -349,9 +353,16 @@ SplitObjs=$(SupportsSplitObjs)
 # like SplitObjs, but doesn't require post-processing and splitting of object
 # files.
 #
 # 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=$(strip $(if $(filter $(TargetOS_CPP),mingw32 darwin),NO,YES))
+SupportsSplitSections = $(strip \
+                    $(if $(and $(filter YES,$(OsSupportsSplitSections)),\
+                               $(filter YES,$(LdIsGNULd))),\
+                          YES,NO))
+SplitSections ?= $(SupportsSplitSections)
 
 # ----------------------------------------------------------------------------
 
 
 # ----------------------------------------------------------------------------