Rip out object splitting
authorBen Gamari <ben@smart-cactus.org>
Mon, 26 Nov 2018 22:21:12 +0000 (17:21 -0500)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Wed, 6 Mar 2019 03:22:40 +0000 (22:22 -0500)
The splitter is an evil Perl script that processes assembler code.
Its job can be done better by the linker's --gc-sections flag. GHC
passes this flag to the linker whenever -split-sections is passed on
the command line.

This is based on @DemiMarie's D2768.

Fixes Trac #11315
Fixes Trac #9832
Fixes Trac #8964
Fixes Trac #8685
Fixes Trac #8629

72 files changed:
.gitignore
aclocal.m4
compiler/cmm/CLabel.hs
compiler/codeGen/StgCmm.hs
compiler/codeGen/StgCmmExpr.hs
compiler/codeGen/StgCmmMonad.hs
compiler/ghc.mk
compiler/main/DriverPhases.hs
compiler/main/DriverPipeline.hs
compiler/main/DynFlags.hs
compiler/main/HscMain.hs
compiler/main/SysTools.hs
compiler/main/SysTools/BaseDir.hs
compiler/main/SysTools/Tasks.hs
compiler/nativeGen/AsmCodeGen.hs
compiler/nativeGen/CFG.hs
compiler/nativeGen/PIC.hs
compiler/nativeGen/PPC/Ppr.hs
compiler/nativeGen/RegAlloc/Liveness.hs
compiler/nativeGen/SPARC/Ppr.hs
compiler/nativeGen/X86/Ppr.hs
configure.ac
distrib/cross-port
distrib/hc-build
docs/storage-mgt/rp.tex
docs/users_guide/8.8.1-notes.rst
docs/users_guide/packages.rst
docs/users_guide/phases.rst
driver/split/Makefile [deleted file]
driver/split/ghc-split.pl [deleted file]
driver/split/ghc.mk [deleted file]
ghc.mk
ghc/ghc.mk
hadrian/README.md
hadrian/cfg/system.config.in
hadrian/doc/user-settings.md
hadrian/src/Base.hs
hadrian/src/Builder.hs
hadrian/src/CommandLine.hs
hadrian/src/Flavour.hs
hadrian/src/Oracles/Flag.hs
hadrian/src/Packages.hs
hadrian/src/Rules/BinaryDist.hs
hadrian/src/Rules/Generate.hs
hadrian/src/Rules/Library.hs
hadrian/src/Settings/Builders/Ghc.hs
hadrian/src/Settings/Default.hs
hadrian/src/Settings/Default.hs-boot
mk/config.mk.in
mk/flavours/bench-cross-ncg.mk
mk/flavours/bench-cross.mk
mk/flavours/bench-llvm.mk
mk/flavours/bench.mk
mk/flavours/devel1.mk
mk/flavours/devel2.mk
mk/flavours/perf-cross-ncg.mk
mk/flavours/perf-cross.mk
mk/flavours/perf-llvm.mk
mk/flavours/perf.mk
mk/flavours/prof-llvm.mk
mk/flavours/prof.mk
mk/flavours/quick-cross-ncg.mk
mk/flavours/quick-cross.mk
mk/flavours/quick-llvm.mk
mk/flavours/quick.mk
mk/flavours/quickest.mk
mk/flavours/validate.mk
rules/build-package-way.mk
rules/build-perl.mk [deleted file]
rules/distdir-opts.mk
rules/distdir-way-opts.mk
utils/haddock

index cb30cdc..e4e5420 100644 (file)
@@ -68,7 +68,6 @@ _darcs/
 /driver/ghc/dist/
 /driver/haddock/dist/
 /driver/ghci/dist/
-/driver/split/dist/
 /includes/dist-*/
 /libffi/dist-install/
 /libraries/*/dist-boot/
index 9d2390e..1647119 100644 (file)
@@ -476,7 +476,6 @@ AC_DEFUN([FP_SETTINGS],
        SettingsLdCommand="\$tooldir/${mingw_bin_prefix}ld.exe"
        SettingsArCommand="\$tooldir/${mingw_bin_prefix}ar.exe"
        SettingsRanlibCommand="\$tooldir/${mingw_bin_prefix}ranlib.exe"
-       SettingsPerlCommand='$tooldir/perl/perl.exe'
        SettingsDllWrapCommand="\$tooldir/${mingw_bin_prefix}dllwrap.exe"
        SettingsWindresCommand="\$tooldir/${mingw_bin_prefix}windres.exe"
         SettingsTouchCommand='$topdir/bin/touchy.exe'
@@ -488,7 +487,6 @@ AC_DEFUN([FP_SETTINGS],
         SettingsHaskellCPPFlags="$HaskellCPPArgs"
         SettingsLdCommand="$(basename $LdCmd)"
         SettingsArCommand="$(basename $ArCmd)"
-        SettingsPerlCommand="$(basename $PerlCmd)"
         SettingsDllWrapCommand="$(basename $DllWrapCmd)"
         SettingsWindresCommand="$(basename $WindresCmd)"
         SettingsTouchCommand='$topdir/bin/touchy.exe'
@@ -499,7 +497,6 @@ AC_DEFUN([FP_SETTINGS],
         SettingsLdCommand="$LdCmd"
         SettingsArCommand="$ArCmd"
         SettingsRanlibCommand="$RanlibCmd"
-        SettingsPerlCommand="$PerlCmd"
         if test -z "$DllWrapCmd"
         then
             SettingsDllWrapCommand="/bin/false"
@@ -552,7 +549,6 @@ AC_DEFUN([FP_SETTINGS],
     AC_SUBST(SettingsLdFlags)
     AC_SUBST(SettingsArCommand)
     AC_SUBST(SettingsRanlibCommand)
-    AC_SUBST(SettingsPerlCommand)
     AC_SUBST(SettingsDllWrapCommand)
     AC_SUBST(SettingsWindresCommand)
     AC_SUBST(SettingsLibtoolCommand)
@@ -1327,22 +1323,6 @@ AC_DEFUN([FP_GCC_SUPPORTS_NO_PIE],
    rm -f conftest.c conftest.o conftest
 ])
 
-dnl Small feature test for perl version. Assumes PerlCmd
-dnl contains path to perl binary.
-dnl
-dnl (Perl versions prior to v5.6 does not contain the string "v5";
-dnl instead they display version strings such as "version 5.005".)
-dnl
-AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
-[$PerlCmd -v >conftest.out 2>&1
-   if grep "v5" conftest.out >/dev/null 2>&1; then
-      :
-   else
-      AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
-   fi
-rm -fr conftest*
-])
-
 
 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
 #               [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
index 40b4e70..73ca36c 100644 (file)
@@ -39,7 +39,6 @@ module CLabel (
         mkAsmTempEndLabel,
         mkAsmTempDieLabel,
 
-        mkSplitMarkerLabel,
         mkDirty_MUT_VAR_Label,
         mkUpdInfoLabel,
         mkBHUpdInfoLabel,
@@ -486,7 +485,7 @@ mkBlockInfoTableLabel name c = IdLabel name c BlockInfoTable
                                -- See Note [Proc-point local block entry-point].
 
 -- Constructing Cmm Labels
-mkDirty_MUT_VAR_Label, mkSplitMarkerLabel, mkUpdInfoLabel,
+mkDirty_MUT_VAR_Label, mkUpdInfoLabel,
     mkBHUpdInfoLabel, mkIndStaticInfoLabel, mkMainCapabilityLabel,
     mkMAP_FROZEN_CLEAN_infoLabel, mkMAP_FROZEN_DIRTY_infoLabel,
     mkMAP_DIRTY_infoLabel,
@@ -496,7 +495,6 @@ mkDirty_MUT_VAR_Label, mkSplitMarkerLabel, mkUpdInfoLabel,
     mkSMAP_FROZEN_CLEAN_infoLabel, mkSMAP_FROZEN_DIRTY_infoLabel,
     mkSMAP_DIRTY_infoLabel, mkBadAlignmentLabel :: CLabel
 mkDirty_MUT_VAR_Label           = mkForeignLabel (fsLit "dirty_MUT_VAR") Nothing ForeignLabelInExternalPackage IsFunction
-mkSplitMarkerLabel              = CmmLabel rtsUnitId (fsLit "__stg_split_marker")    CmmCode
 mkUpdInfoLabel                  = CmmLabel rtsUnitId (fsLit "stg_upd_frame")         CmmInfo
 mkBHUpdInfoLabel                = CmmLabel rtsUnitId (fsLit "stg_bh_upd_frame" )     CmmInfo
 mkIndStaticInfoLabel            = CmmLabel rtsUnitId (fsLit "stg_IND_STATIC")        CmmInfo
index ff63b55..6cdb148 100644 (file)
@@ -39,7 +39,6 @@ import Id
 import IdInfo
 import RepType
 import DataCon
-import Name
 import TyCon
 import Module
 import Outputable
@@ -120,17 +119,14 @@ variable. -}
 
 cgTopBinding :: DynFlags -> CgStgTopBinding -> FCode ()
 cgTopBinding dflags (StgTopLifted (StgNonRec id rhs))
-  = do  { id' <- maybeExternaliseId dflags id
-        ; let (info, fcode) = cgTopRhs dflags NonRecursive id' rhs
+  = do  { let (info, fcode) = cgTopRhs dflags NonRecursive id rhs
         ; fcode
-        ; addBindC info -- Add the *un-externalised* Id to the envt,
-                        -- so we find it when we look up occurrences
+        ; addBindC info
         }
 
 cgTopBinding dflags (StgTopLifted (StgRec pairs))
   = do  { let (bndrs, rhss) = unzip pairs
-        ; bndrs' <- Prelude.mapM (maybeExternaliseId dflags) bndrs
-        ; let pairs' = zip bndrs' rhss
+        ; let pairs' = zip bndrs rhss
               r = unzipWith (cgTopRhs dflags Recursive) pairs'
               (infos, fcodes) = unzip r
         ; addBindsC infos
@@ -138,16 +134,14 @@ cgTopBinding dflags (StgTopLifted (StgRec pairs))
         }
 
 cgTopBinding dflags (StgTopStringLit id str)
-  = do  { id' <- maybeExternaliseId dflags id
-        ; let label = mkBytesLabel (idName id')
+  = do  { let label = mkBytesLabel (idName id)
         ; let (lit, decl) = mkByteStringCLit label str
         ; emitDecl decl
-        ; addBindC (litIdInfo dflags id' mkLFStringLit lit)
+        ; addBindC (litIdInfo dflags id mkLFStringLit lit)
         }
 
 cgTopRhs :: DynFlags -> RecFlag -> Id -> CgStgRhs -> (CgIdInfo, FCode ())
         -- The Id is passed along for setting up a binding...
-        -- It's already been externalised if necessary
 
 cgTopRhs dflags _rec bndr (StgRhsCon _cc con args)
   = cgTopRhsCon dflags bndr con (assertNonVoidStgArgs args)
@@ -226,25 +220,3 @@ cgDataCon data_con
                }
                     -- The case continuation code expects a tagged pointer
         }
-
----------------------------------------------------------------
---      Stuff to support splitting
----------------------------------------------------------------
-
-maybeExternaliseId :: DynFlags -> Id -> FCode Id
-maybeExternaliseId dflags id
-  | gopt Opt_SplitObjs dflags,  -- See Note [Externalise when splitting]
-                                -- in StgCmmMonad
-    isInternalName name = do { mod <- getModuleName
-                             ; return (setIdName id (externalise mod)) }
-  | otherwise           = return id
-  where
-    externalise mod = mkExternalName uniq mod new_occ loc
-    name    = idName id
-    uniq    = nameUnique name
-    new_occ = mkLocalOcc uniq (nameOccName name)
-    loc     = nameSrcSpan name
-        -- We want to conjure up a name that can't clash with any
-        -- existing name.  So we generate
-        --      Mod_$L243foo
-        -- where 243 is the unique.
index 7a2340e..5ad2e98 100644 (file)
@@ -758,19 +758,14 @@ cgIdApp fun_id args = do
     dflags         <- getDynFlags
     fun_info       <- getCgIdInfo fun_id
     self_loop_info <- getSelfLoop
-    let cg_fun_id   = cg_id fun_info
-           -- NB: use (cg_id fun_info) instead of fun_id, because
-           -- the former may be externalised for -split-objs.
-           -- See Note [Externalise when splitting] in StgCmmMonad
-
-        fun_arg     = StgVarArg cg_fun_id
-        fun_name    = idName    cg_fun_id
+    let fun_arg     = StgVarArg fun_id
+        fun_name    = idName    fun_id
         fun         = idInfoToAmode fun_info
         lf_info     = cg_lf         fun_info
         n_args      = length args
         v_args      = length $ filter (isVoidTy . stgArgType) args
         node_points dflags = nodeMustPointToIt dflags lf_info
-    case getCallMethod dflags fun_name cg_fun_id lf_info n_args v_args (cg_loc fun_info) self_loop_info of
+    case getCallMethod dflags fun_name fun_id lf_info n_args v_args (cg_loc fun_info) self_loop_info of
             -- A value in WHNF, so we can just return it.
         ReturnIt
           | isVoidTy (idType fun_id) -> emitReturn []
index 9ddd8a3..b93e0ab 100644 (file)
@@ -174,20 +174,10 @@ type CgBindings = IdEnv CgIdInfo
 data CgIdInfo
   = CgIdInfo
         { cg_id :: Id   -- Id that this is the info for
-                        -- Can differ from the Id at occurrence sites by
-                        -- virtue of being externalised, for splittable C
-                        -- See Note [Externalise when splitting]
         , cg_lf  :: LambdaFormInfo
         , cg_loc :: CgLoc                     -- CmmExpr for the *tagged* value
         }
 
--- Note [Externalise when splitting]
--- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--- If we're splitting the object with -fsplit-objs, we need to
--- externalise *all* the top-level names, and then make sure we only
--- use the externalised one in any C label we use which refers to this
--- name.
-
 instance Outputable CgIdInfo where
   ppr (CgIdInfo { cg_id = id, cg_loc = loc })
     = ppr id <+> text "-->" <+> ppr loc
index 6cfa43a..64615a3 100644 (file)
@@ -92,8 +92,6 @@ else ifeq "$(INTEGER_LIBRARY)" "integer-simple"
 else ifneq "$(CLEANING)" "YES"
 $(error Unknown integer library)
 endif
-       @echo 'cSupportsSplitObjs    :: String'                             >> $@
-       @echo 'cSupportsSplitObjs    = "$(SupportsSplitObjs)"'              >> $@
        @echo 'cGhcWithInterpreter   :: String'                             >> $@
        @echo 'cGhcWithInterpreter   = "$(GhcWithInterpreter)"'             >> $@
        @echo 'cGhcWithNativeCodeGen :: String'                             >> $@
@@ -114,8 +112,6 @@ endif
        @echo 'cLeadingUnderscore    = "$(LeadingUnderscore)"'              >> $@
        @echo 'cGHC_UNLIT_PGM        :: String'                             >> $@
        @echo 'cGHC_UNLIT_PGM        = "$(utils/unlit_dist_PROG)"'          >> $@
-       @echo 'cGHC_SPLIT_PGM        :: String'                             >> $@
-       @echo 'cGHC_SPLIT_PGM        = "$(driver/split_dist_PROG)"'         >> $@
        @echo 'cLibFFI               :: Bool'                               >> $@
 ifeq "$(UseLibFFIForAdjustors)" "YES"
        @echo 'cLibFFI               = True'                                >> $@
@@ -421,9 +417,6 @@ compiler_PACKAGE = ghc
 
 # Don't do splitting for the GHC package, it takes too long and
 # there's not much benefit.
-compiler_stage1_SplitObjs = NO
-compiler_stage2_SplitObjs = NO
-compiler_stage3_SplitObjs = NO
 compiler_stage1_SplitSections = NO
 compiler_stage2_SplitSections = NO
 compiler_stage3_SplitSections = NO
index d923262..12e12ca 100644 (file)
@@ -138,8 +138,6 @@ data Phase
         | Cobjc         -- Compile Objective-C
         | Cobjcxx       -- Compile Objective-C++
         | HCc           -- Haskellised C (as opposed to vanilla C) compilation
-        | Splitter      -- Assembly file splitter (part of '-split-objs')
-        | SplitAs       -- Assembler for split assembly files (part of '-split-objs')
         | As Bool       -- Assembler for regular assembly files (Bool: with-cpp)
         | LlvmOpt       -- Run LLVM opt tool over llvm assembly
         | LlvmLlc       -- LLVM bitcode to native assembly
@@ -173,8 +171,6 @@ eqPhase (Hsc   _)   (Hsc   _)  = True
 eqPhase Cc          Cc         = True
 eqPhase Cobjc       Cobjc      = True
 eqPhase HCc         HCc        = True
-eqPhase Splitter    Splitter   = True
-eqPhase SplitAs     SplitAs    = True
 eqPhase (As x)      (As y)     = x == y
 eqPhase LlvmOpt     LlvmOpt    = True
 eqPhase LlvmLlc     LlvmLlc    = True
@@ -218,11 +214,9 @@ nextPhase dflags p
       Cpp   sf   -> HsPp sf
       HsPp  sf   -> Hsc  sf
       Hsc   _    -> maybeHCc
-      Splitter   -> SplitAs
       LlvmOpt    -> LlvmLlc
       LlvmLlc    -> LlvmMangle
       LlvmMangle -> As False
-      SplitAs    -> MergeForeign
       As _       -> MergeForeign
       Ccxx       -> As False
       Cc         -> As False
@@ -257,7 +251,6 @@ startPhase "M"        = Cobjcxx
 startPhase "mm"       = Cobjcxx
 startPhase "cc"       = Ccxx
 startPhase "cxx"      = Ccxx
-startPhase "split_s"  = Splitter
 startPhase "s"        = As False
 startPhase "S"        = As True
 startPhase "ll"       = LlvmOpt
@@ -286,13 +279,11 @@ phaseInputExt Ccxx                = "cpp"
 phaseInputExt Cobjc               = "m"
 phaseInputExt Cobjcxx             = "mm"
 phaseInputExt Cc                  = "c"
-phaseInputExt Splitter            = "split_s"
 phaseInputExt (As True)           = "S"
 phaseInputExt (As False)          = "s"
 phaseInputExt LlvmOpt             = "ll"
 phaseInputExt LlvmLlc             = "bc"
 phaseInputExt LlvmMangle          = "lm_s"
-phaseInputExt SplitAs             = "split_s"
 phaseInputExt CmmCpp              = "cmmcpp"
 phaseInputExt Cmm                 = "cmm"
 phaseInputExt MergeForeign        = "o"
index 5fe2362..04576e7 100644 (file)
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, NamedFieldPuns, NondecreasingIndentation, BangPatterns #-}
+{-# LANGUAGE CPP, NamedFieldPuns, NondecreasingIndentation, BangPatterns, MultiWayIf #-}
 {-# OPTIONS_GHC -fno-cse #-}
 -- -fno-cse is needed for GLOBAL_VAR's to behave properly
 
@@ -70,7 +70,7 @@ import System.Directory
 import System.FilePath
 import System.IO
 import Control.Monad
-import Data.List        ( isInfixOf, isSuffixOf, intercalate )
+import Data.List        ( isInfixOf, intercalate )
 import Data.Maybe
 import Data.Version
 import Data.Either      ( partitionEithers )
@@ -247,7 +247,7 @@ compileOne' m_tc_result mHscMessage
 
        src_flavour = ms_hsc_src summary
        mod_name = ms_mod_name summary
-       next_phase = hscPostBackendPhase dflags src_flavour hsc_lang
+       next_phase = hscPostBackendPhase src_flavour hsc_lang
        object_filename = ml_obj_file location
 
        -- #8180 - when using TemplateHaskell, switch on -dynamic-too so
@@ -505,7 +505,6 @@ compileFile hsc_env stop_phase (src, mb_phase) = do
 
    let
         dflags    = hsc_dflags hsc_env
-        split     = gopt Opt_SplitObjs dflags
         mb_o_file = outputFile dflags
         ghc_link  = ghcLink dflags      -- Set by -c or -no-link
 
@@ -522,11 +521,7 @@ compileFile hsc_env stop_phase (src, mb_phase) = do
                 -- -o foo applies to the file we are compiling now
          | otherwise = Persistent
 
-        stop_phase' = case stop_phase of
-                        As _ | split -> SplitAs
-                        _            -> stop_phase
-
-   ( _, out_file) <- runPipeline stop_phase' hsc_env
+   ( _, out_file) <- runPipeline stop_phase hsc_env
                             (src, fmap RealPhase mb_phase) Nothing output
                             Nothing{-no ModLocation-} []
    return out_file
@@ -1085,7 +1080,7 @@ runPhase (HscOut src_flavour mod_name result) _ dflags = do
 
         let o_file = ml_obj_file location -- The real object file
             hsc_lang = hscTarget dflags
-            next_phase = hscPostBackendPhase dflags src_flavour hsc_lang
+            next_phase = hscPostBackendPhase src_flavour hsc_lang
 
         case result of
             HscNotGeneratingCode ->
@@ -1138,7 +1133,7 @@ runPhase (RealPhase Cmm) input_fn dflags
   = do
         let hsc_lang = hscTarget dflags
 
-        let next_phase = hscPostBackendPhase dflags HsSrcFile hsc_lang
+        let next_phase = hscPostBackendPhase HsSrcFile hsc_lang
 
         output_fn <- phaseOutputFilename next_phase
 
@@ -1281,40 +1276,9 @@ runPhase (RealPhase cc_phase) input_fn dflags
         return (RealPhase next_phase, output_fn)
 
 -----------------------------------------------------------------------------
--- Splitting phase
-
-runPhase (RealPhase Splitter) input_fn dflags
-  = do  -- tmp_pfx is the prefix used for the split .s files
-
-        split_s_prefix <-
-          liftIO $ newTempName dflags TFL_CurrentModule "split"
-        let n_files_fn = split_s_prefix
-
-        liftIO $ SysTools.runSplit dflags
-                          [ SysTools.FileOption "" input_fn
-                          , SysTools.FileOption "" split_s_prefix
-                          , SysTools.FileOption "" n_files_fn
-                          ]
-
-        -- Save the number of split files for future references
-        s <- liftIO $ readFile n_files_fn
-        let n_files = read s :: Int
-            dflags' = dflags { splitInfo = Just (split_s_prefix, n_files) }
-
-        setDynFlags dflags'
-
-        -- Remember to delete all these files
-        liftIO $ addFilesToClean dflags' TFL_CurrentModule $
-                                 [ split_s_prefix ++ "__" ++ show n ++ ".s"
-                                 | n <- [1..n_files]]
-
-        return (RealPhase SplitAs,
-                "**splitter**") -- we don't use the filename in SplitAs
-
------------------------------------------------------------------------------
 -- As, SpitAs phase : Assembler
 
--- This is for calling the assembler on a regular assembly file (not split).
+-- This is for calling the assembler on a regular assembly file
 runPhase (RealPhase (As with_cpp)) input_fn dflags
   = do
         -- LLVM from version 3.0 onwards doesn't support the OS X system
@@ -1379,96 +1343,6 @@ runPhase (RealPhase (As with_cpp)) input_fn dflags
         return (RealPhase next_phase, output_fn)
 
 
--- This is for calling the assembler on a split assembly file (so a collection
--- of assembly files)
-runPhase (RealPhase SplitAs) _input_fn dflags
-  = do
-        -- we'll handle the stub_o file in this phase, so don't MergeForeign,
-        -- just jump straight to StopLn afterwards.
-        let next_phase = StopLn
-        output_fn <- phaseOutputFilename next_phase
-
-        let base_o = dropExtension output_fn
-            osuf = objectSuf dflags
-            split_odir  = base_o ++ "_" ++ osuf ++ "_split"
-
-        let pic_c_flags = picCCOpts dflags
-
-        -- this also creates the hierarchy
-        liftIO $ createDirectoryIfMissing True split_odir
-
-        -- remove M_split/ *.o, because we're going to archive M_split/ *.o
-        -- later and we don't want to pick up any old objects.
-        fs <- liftIO $ getDirectoryContents split_odir
-        liftIO $ mapM_ removeFile $
-                map (split_odir </>) $ filter (osuf `isSuffixOf`) fs
-
-        let (split_s_prefix, n) = case splitInfo dflags of
-                                  Nothing -> panic "No split info"
-                                  Just x -> x
-
-        let split_s   n = split_s_prefix ++ "__" ++ show n <.> "s"
-
-            split_obj :: Int -> FilePath
-            split_obj n = split_odir </>
-                          takeFileName base_o ++ "__" ++ show n <.> osuf
-
-        let assemble_file n
-              = SysTools.runAs dflags (
-
-        -- We only support SparcV9 and better because V8 lacks an atomic CAS
-        -- instruction so we have to make sure that the assembler accepts the
-        -- instruction set. Note that the user can still override this
-        -- (e.g., -mcpu=ultrasparc). GCC picks the "best" -mcpu flag
-        -- regardless of the ordering.
-        --
-        -- This is a temporary hack.
-                          (if platformArch (targetPlatform dflags) == ArchSPARC
-                           then [SysTools.Option "-mcpu=v9"]
-                           else []) ++
-
-                          -- See Note [-fPIC for assembler]
-                          map SysTools.Option pic_c_flags ++
-
-                          [ SysTools.Option "-c"
-                          , SysTools.Option "-o"
-                          , SysTools.FileOption "" (split_obj n)
-                          , SysTools.FileOption "" (split_s n)
-                          ])
-
-        liftIO $ mapM_ assemble_file [1..n]
-
-        -- Note [pipeline-split-init]
-        -- If we have a stub file -- which will be part of foreign_os --
-        --  it may contain constructor
-        -- functions for initialisation of this module.  We can't
-        -- simply leave the stub as a separate object file, because it
-        -- will never be linked in: nothing refers to it.  We need to
-        -- ensure that if we ever refer to the data in this module
-        -- that needs initialisation, then we also pull in the
-        -- initialisation routine.
-        --
-        -- To that end, we make a DANGEROUS ASSUMPTION here: the data
-        -- that needs to be initialised is all in the FIRST split
-        -- object.  See Note [codegen-split-init].
-        --
-        -- We also merge in all the foreign objects since we're at it.
-
-        PipeState{foreign_os} <- getPipeState
-        if null foreign_os
-          then return ()
-          else liftIO $ do
-             tmp_split_1 <- newTempName dflags TFL_CurrentModule osuf
-             let split_1 = split_obj 1
-             copyFile split_1 tmp_split_1
-             removeFile split_1
-             joinObjectFiles dflags (tmp_split_1 : foreign_os) split_1
-
-        -- join them into a single .o file
-        liftIO $ joinObjectFiles dflags (map split_obj [1..n]) output_fn
-
-        return (RealPhase next_phase, output_fn)
-
 -----------------------------------------------------------------------------
 -- LlvmOpt phase
 runPhase (RealPhase LlvmOpt) input_fn dflags
@@ -1510,13 +1384,10 @@ runPhase (RealPhase LlvmOpt) input_fn dflags
 
 runPhase (RealPhase LlvmLlc) input_fn dflags
   = do
-    next_phase <- if fastLlvmPipeline dflags
-                  then maybeMergeForeign
-                  -- hidden debugging flag '-dno-llvm-mangler' to skip mangling
-                  else case gopt Opt_NoLlvmMangler dflags of
-                         False                            -> return LlvmMangle
-                         True | gopt Opt_SplitObjs dflags -> return Splitter
-                         True                             -> return (As False)
+    next_phase <- if | fastLlvmPipeline dflags -> maybeMergeForeign
+                     -- hidden debugging flag '-dno-llvm-mangler' to skip mangling
+                     | gopt Opt_NoLlvmMangler dflags -> return (As False)
+                     | otherwise -> return LlvmMangle
 
     output_fn <- phaseOutputFilename next_phase
 
@@ -1588,7 +1459,7 @@ runPhase (RealPhase LlvmLlc) input_fn dflags
 
 runPhase (RealPhase LlvmMangle) input_fn dflags
   = do
-      let next_phase = if gopt Opt_SplitObjs dflags then Splitter else As False
+      let next_phase = As False
       output_fn <- phaseOutputFilename next_phase
       liftIO $ llvmFixupAsm dflags input_fn output_fn
       return (RealPhase next_phase, output_fn)
@@ -2271,14 +2142,13 @@ sourceModified dest_file src_timestamp = do
              return (t2 <= src_timestamp)
 
 -- | What phase to run after one of the backend code generators has run
-hscPostBackendPhase :: DynFlags -> HscSource -> HscTarget -> Phase
-hscPostBackendPhase HsBootFile _    =  StopLn
-hscPostBackendPhase HsigFile _      =  StopLn
-hscPostBackendPhase dflags _ hsc_lang =
+hscPostBackendPhase :: HscSource -> HscTarget -> Phase
+hscPostBackendPhase HsBootFile _    =  StopLn
+hscPostBackendPhase HsigFile _      =  StopLn
+hscPostBackendPhase _ hsc_lang =
   case hsc_lang of
-        HscC -> HCc
-        HscAsm | gopt Opt_SplitObjs dflags -> Splitter
-               | otherwise                 -> As False
+        HscC           -> HCc
+        HscAsm         -> As False
         HscLlvm        -> LlvmOpt
         HscNothing     -> StopLn
         HscInterpreted -> StopLn
index d29fa4a..b3cfa48 100644 (file)
@@ -90,7 +90,7 @@ module DynFlags (
         ghcUsagePath, ghciUsagePath, topDir, tmpDir, rawSettings,
         versionedAppDir,
         extraGccViaCFlags, systemPackageConfig,
-        pgm_L, pgm_P, pgm_F, pgm_c, pgm_s, pgm_a, pgm_l, pgm_dll, pgm_T,
+        pgm_L, pgm_P, pgm_F, pgm_c, pgm_a, pgm_l, pgm_dll, pgm_T,
         pgm_windres, pgm_libtool, pgm_ar, pgm_ranlib, pgm_lo, pgm_lc,
         pgm_lcc, pgm_i, opt_L, opt_P, opt_F, opt_c, opt_a, opt_l, opt_i,
         opt_P_signature,
@@ -526,7 +526,6 @@ data GeneralFlag
    | Opt_ExcessPrecision
    | Opt_EagerBlackHoling
    | Opt_NoHsMain
-   | Opt_SplitObjs
    | Opt_SplitSections
    | Opt_StgStats
    | Opt_HideAllPackages
@@ -1322,7 +1321,6 @@ data Settings = Settings {
   sPgm_P                 :: (String,[Option]),
   sPgm_F                 :: String,
   sPgm_c                 :: (String,[Option]),
-  sPgm_s                 :: (String,[Option]),
   sPgm_a                 :: (String,[Option]),
   sPgm_l                 :: (String,[Option]),
   sPgm_dll               :: (String,[Option]),
@@ -1383,8 +1381,6 @@ pgm_F                 :: DynFlags -> String
 pgm_F dflags = sPgm_F (settings dflags)
 pgm_c                 :: DynFlags -> (String,[Option])
 pgm_c dflags = sPgm_c (settings dflags)
-pgm_s                 :: DynFlags -> (String,[Option])
-pgm_s dflags = sPgm_s (settings dflags)
 pgm_a                 :: DynFlags -> (String,[Option])
 pgm_a dflags = sPgm_a (settings dflags)
 pgm_l                 :: DynFlags -> (String,[Option])
@@ -1746,13 +1742,10 @@ wayUnsetGeneralFlags :: Platform -> Way -> [GeneralFlag]
 wayUnsetGeneralFlags _ (WayCustom {}) = []
 wayUnsetGeneralFlags _ WayThreaded = []
 wayUnsetGeneralFlags _ WayDebug    = []
-wayUnsetGeneralFlags _ WayDyn      = [-- There's no point splitting objects
+wayUnsetGeneralFlags _ WayDyn      = [-- There's no point splitting
                                       -- when we're going to be dynamically
                                       -- linking. Plus it breaks compilation
                                       -- on OSX x86.
-                                      Opt_SplitObjs,
-                                      -- If splitobjs wasn't useful for this,
-                                      -- assume sections aren't either.
                                       Opt_SplitSections]
 wayUnsetGeneralFlags _ WayProf     = []
 wayUnsetGeneralFlags _ WayEventLog = []
@@ -3015,7 +3008,7 @@ dynamic_flags_deps = [
                                               -- (see Trac #15319)
                                               sGccSupportsNoPie = False})))
   , make_ord_flag defFlag "pgms"
-      (hasArg (\f -> alterSettings (\s -> s { sPgm_s   = (f,[])})))
+      (HasArg (\_ -> addWarn "Object splitting was removed in GHC 8.8"))
   , make_ord_flag defFlag "pgma"
       (hasArg (\f -> alterSettings (\s -> s { sPgm_a   = (f,[])})))
   , make_ord_flag defFlag "pgml"
@@ -3056,9 +3049,7 @@ dynamic_flags_deps = [
         alterSettings (\s -> s { sOpt_windres = f : sOpt_windres s})))
 
   , make_ord_flag defGhcFlag "split-objs"
-      (NoArg (if can_split
-                then setGeneralFlag Opt_SplitObjs
-                else addWarn "ignoring -split-objs"))
+      (NoArg $ addWarn "ignoring -split-objs")
 
   , make_ord_flag defGhcFlag "split-sections"
       (noArgM (\dflags -> do
@@ -5588,12 +5579,6 @@ picPOpts dflags
  | otherwise           = []
 
 -- -----------------------------------------------------------------------------
--- Splitting
-
-can_split :: Bool
-can_split = cSupportsSplitObjs == "YES"
-
--- -----------------------------------------------------------------------------
 -- Compiler Info
 
 compilerInfo :: DynFlags -> [(String, String)]
@@ -5615,7 +5600,7 @@ compilerInfo dflags
        ("Host platform",               cHostPlatformString),
        ("Target platform",             cTargetPlatformString),
        ("Have interpreter",            cGhcWithInterpreter),
-       ("Object splitting supported",  cSupportsSplitObjs),
+       ("Object splitting supported",  showBool False),
        ("Have native code generator",  cGhcWithNativeCodeGen),
        ("Support SMP",                 cGhcWithSMP),
        ("Tables next to code",         cGhcEnableTablesNextToCode),
index bb16ae3..16c8db9 100644 (file)
@@ -1494,7 +1494,7 @@ doCodeGen hsc_env this_mod data_tycons
     -- we generate one SRT for the whole module.
     let
      pipeline_stream
-      | gopt Opt_SplitObjs dflags || gopt Opt_SplitSections dflags ||
+      | gopt Opt_SplitSections dflags ||
         osSubsectionsViaSymbols (platformOS (targetPlatform dflags))
         = {-# SCC "cmmPipeline" #-}
           let run_pipeline us cmmgroup = do
index 9bbce19..543dd9c 100644 (file)
@@ -139,7 +139,7 @@ initSysTools top_dir
              -- NB: top_dir is assumed to be in standard Unix
              -- format, '/' separated
        mtool_dir <- findToolDir top_dir
-             -- see Note [tooldir: How GHC finds mingw and perl on Windows]
+             -- see Note [tooldir: How GHC finds mingw on Windows]
 
        let installed :: FilePath -> FilePath
            installed file = top_dir </> file
@@ -212,7 +212,6 @@ initSysTools top_dir
        ldSupportsBuildId       <- getBooleanSetting "ld supports build-id"
        ldSupportsFilelist      <- getBooleanSetting "ld supports filelist"
        ldIsGnuLd               <- getBooleanSetting "ld is GNU ld"
-       perl_path <- getToolSetting "perl command"
 
        let pkgconfig_path = installed "package.conf.d"
            ghc_usage_msg_path  = installed "ghc-usage.txt"
@@ -222,9 +221,6 @@ initSysTools top_dir
              -- architecture-specific stuff is done when building Config.hs
            unlit_path = libexec cGHC_UNLIT_PGM
 
-             -- split is a Perl script
-           split_script  = libexec cGHC_SPLIT_PGM
-
        windres_path <- getToolSetting "windres command"
        libtool_path <- getToolSetting "libtool command"
        ar_path <- getToolSetting "ar command"
@@ -234,15 +230,6 @@ initSysTools top_dir
 
        touch_path <- getToolSetting "touch command"
 
-       let -- On Win32 we don't want to rely on #!/bin/perl, so we prepend
-           -- a call to Perl to get the invocation of split.
-           -- On Unix, scripts are invoked using the '#!' method.  Binary
-           -- installations of GHC on Unix place the correct line on the
-           -- front of the script at installation time, so we don't want
-           -- to wire-in our knowledge of $(PERL) on the host system here.
-           (split_prog,  split_args)
-             | isWindowsHost = (perl_path,    [Option split_script])
-             | otherwise     = (split_script, [])
        mkdll_prog <- getToolSetting "dllwrap command"
        let mkdll_args = []
 
@@ -297,7 +284,6 @@ initSysTools top_dir
                     sPgm_P   = (cpp_prog, cpp_args),
                     sPgm_F   = "",
                     sPgm_c   = (gcc_prog, gcc_args),
-                    sPgm_s   = (split_prog,split_args),
                     sPgm_a   = (as_prog, as_args),
                     sPgm_l   = (ld_prog, ld_args),
                     sPgm_dll = (mkdll_prog,mkdll_args),
index 786b0e4..d01d521 100644 (file)
@@ -68,7 +68,7 @@ On Windows:
 from topdir we can find package.conf, ghc-asm, etc.
 
 
-Note [tooldir: How GHC finds mingw and perl on Windows]
+Note [tooldir: How GHC finds mingw on Windows]
 
 GHC has some custom logic on Windows for finding the mingw
 toolchain and perl. Depending on whether GHC is built
index a986db2..9e3df26 100644 (file)
@@ -131,11 +131,6 @@ askLd dflags args = do
   runSomethingWith dflags "gcc" p args2 $ \real_args ->
     readCreateProcessWithExitCode' (proc p real_args){ env = mb_env }
 
-runSplit :: DynFlags -> [Option] -> IO ()
-runSplit dflags args = do
-  let (p,args0) = pgm_s dflags
-  runSomething dflags "Splitter" p (args0++args)
-
 runAs :: DynFlags -> [Option] -> IO ()
 runAs dflags args = do
   let (p,args0) = pgm_a dflags
index 4672415..b866741 100644 (file)
@@ -335,7 +335,7 @@ finishNativeGen :: Instruction instr
 finishNativeGen dflags modLoc bufh@(BufHandle _ _ h) us ngs
  = do
         -- Write debug data and finish
-        let emitDw = debugLevel dflags > 0 && not (gopt Opt_SplitObjs dflags)
+        let emitDw = debugLevel dflags > 0
         us' <- if not emitDw then return us else do
           (dwarf, us') <- dwarfGen dflags modLoc us (ngs_debug ngs)
           emitNativeCode dflags bufh dwarf
@@ -406,14 +406,9 @@ cmmNativeGenStream dflags this_mod modLoc ncgImpl h us cmm_stream ngs
                      | otherwise = []
               dbgMap = debugToMap ndbgs
 
-          -- Insert split marker, generate native code
-          let splitObjs = gopt Opt_SplitObjs dflags
-              split_marker = CmmProc mapEmpty mkSplitMarkerLabel [] $
-                             ofBlockList (panic "split_marker_entry") []
-              cmms' | splitObjs  = split_marker : cmms
-                    | otherwise  = cmms
+          -- Generate native code
           (ngs',us') <- cmmNativeGens dflags this_mod modLoc ncgImpl h
-                                             dbgMap us cmms' ngs 0
+                                             dbgMap us cmms ngs 0
 
           -- Link native code information into debug blocks
           -- See Note [What is this unwinding business?] in Debug.
@@ -421,23 +416,10 @@ cmmNativeGenStream dflags this_mod modLoc ncgImpl h us cmm_stream ngs
           dumpIfSet_dyn dflags Opt_D_dump_debug "Debug Infos"
             (vcat $ map ppr ldbgs)
 
-          -- Emit & clear DWARF information when generating split
-          -- object files, as we need it to land in the same object file
-          -- When using split sections, note that we do not split the debug
-          -- info but emit all the info at once in finishNativeGen.
-          (ngs'', us'') <-
-            if debugFlag && splitObjs
-            then do (dwarf, us'') <- dwarfGen dflags modLoc us ldbgs
-                    emitNativeCode dflags h dwarf
-                    return (ngs' { ngs_debug = []
-                                 , ngs_dwarfFiles = emptyUFM
-                                 , ngs_labels = [] },
-                            us'')
-            else return (ngs' { ngs_debug  = ngs_debug ngs' ++ ldbgs
-                              , ngs_labels = [] },
-                         us')
-
-          cmmNativeGenStream dflags this_mod modLoc ncgImpl h us''
+          -- Accumulate debug information for emission in finishNativeGen.
+          let ngs'' = ngs' { ngs_debug = ngs_debug ngs' ++ ldbgs, ngs_labels = [] }
+
+          cmmNativeGenStream dflags this_mod modLoc ncgImpl h us'
               cmm_stream' ngs''
 
 -- | Do native code generation on all these cmms.
index 155e5bc..af0c6da 100644 (file)
@@ -483,12 +483,7 @@ addNodesBetween m updates =
 -- | Generate weights for a Cmm proc based on some simple heuristics.
 getCfgProc :: D.CfgWeights -> RawCmmDecl -> CFG
 getCfgProc _       (CmmData {}) = mapEmpty
--- Sometimes GHC generates dummy procs which don't actually contain code.
--- But they might contain bottoms in some fields so we check for an empty
--- body first. In particular this happens with SplitObjs enabled.
-getCfgProc weights (CmmProc _info _lab _live graph)
-  | null (toBlockList graph) = mapEmpty
-  | otherwise                = getCfg weights graph
+getCfgProc weights (CmmProc _info _lab _live graph) = getCfg weights graph
 
 getCfg :: D.CfgWeights -> CmmGraph -> CFG
 getCfg weights graph =
index 280a87e..b4bf899 100644 (file)
@@ -563,8 +563,6 @@ pprGotDeclaration _ _ _
 -- For each processor architecture, there are two versions, one for PIC
 -- and one for non-PIC.
 --
--- Whenever you change something in this assembler output, make sure
--- the splitter in driver/split/ghc-split.pl recognizes the new output
 
 pprImportedSymbol :: DynFlags -> Platform -> CLabel -> SDoc
 pprImportedSymbol dflags platform@(Platform { platformArch = ArchX86, platformOS = OSDarwin }) importedLbl
index c54d443..c9d5c2d 100644 (file)
@@ -49,17 +49,14 @@ pprNatCmmDecl proc@(CmmProc top_info lbl _ (ListGraph blocks)) =
   case topInfoTable proc of
     Nothing ->
        sdocWithPlatform $ \platform ->
-       case blocks of
-         []     -> -- special case for split markers:
-           pprLabel lbl
-         blocks -> -- special case for code without info table:
-           pprSectionAlign (Section Text lbl) $$
-           (case platformArch platform of
-              ArchPPC_64 ELF_V1 -> pprFunctionDescriptor lbl
-              ArchPPC_64 ELF_V2 -> pprFunctionPrologue lbl
-              _ -> pprLabel lbl) $$ -- blocks guaranteed not null,
+         -- special case for code without info table:
+         pprSectionAlign (Section Text lbl) $$
+         (case platformArch platform of
+            ArchPPC_64 ELF_V1 -> pprFunctionDescriptor lbl
+            ArchPPC_64 ELF_V2 -> pprFunctionPrologue lbl
+            _ -> pprLabel lbl) $$ -- blocks guaranteed not null,
                                      -- so label needed
-           vcat (map (pprBasicBlock top_info) blocks)
+         vcat (map (pprBasicBlock top_info) blocks)
 
     Just (Statics info_lbl _) ->
       sdocWithPlatform $ \platform ->
index 065231f..3ad01c6 100644 (file)
@@ -504,10 +504,6 @@ stripLive dflags live
            in   CmmProc info label live
                           (ListGraph $ map (stripLiveBlock dflags) $ first' : rest')
 
-        -- procs used for stg_split_markers don't contain any blocks, and have no first_id.
-        stripCmm (CmmProc (LiveInfo info [] _ _) label live [])
-         =      CmmProc info label live (ListGraph [])
-
         -- If the proc has blocks but we don't know what the first one was, then we're dead.
         stripCmm proc
                  = pprPanic "RegAlloc.Liveness.stripLive: no first_id on proc" (ppr proc)
index 42ba13d..d367b07 100644 (file)
@@ -60,13 +60,10 @@ pprNatCmmDecl (CmmData section dats) =
 pprNatCmmDecl proc@(CmmProc top_info lbl _ (ListGraph blocks)) =
   case topInfoTable proc of
     Nothing ->
-       case blocks of
-         []     -> -- special case for split markers:
-           pprLabel lbl
-         blocks -> -- special case for code without info table:
-           pprSectionAlign (Section Text lbl) $$
-           pprLabel lbl $$ -- blocks guaranteed not null, so label needed
-           vcat (map (pprBasicBlock top_info) blocks)
+        -- special case for code without info table:
+        pprSectionAlign (Section Text lbl) $$
+        pprLabel lbl $$ -- blocks guaranteed not null, so label needed
+        vcat (map (pprBasicBlock top_info) blocks)
 
     Just (Statics info_lbl _) ->
       sdocWithPlatform $ \platform ->
index 8335675..2d099f9 100644 (file)
@@ -83,17 +83,14 @@ pprNatCmmDecl proc@(CmmProc top_info lbl _ (ListGraph blocks)) =
   pprProcAlignment $$
   case topInfoTable proc of
     Nothing ->
-       case blocks of
-         []     -> -- special case for split markers:
-           pprLabel lbl
-         blocks -> -- special case for code without info table:
-           pprSectionAlign (Section Text lbl) $$
-           pprProcAlignment $$
-           pprLabel lbl $$ -- blocks guaranteed not null, so label needed
-           vcat (map (pprBasicBlock top_info) blocks) $$
-           (if debugLevel dflags > 0
-            then ppr (mkAsmTempEndLabel lbl) <> char ':' else empty) $$
-           pprSizeDecl lbl
+        -- special case for code without info table:
+        pprSectionAlign (Section Text lbl) $$
+        pprProcAlignment $$
+        pprLabel lbl $$ -- blocks guaranteed not null, so label needed
+        vcat (map (pprBasicBlock top_info) blocks) $$
+        (if debugLevel dflags > 0
+         then ppr (mkAsmTempEndLabel lbl) <> char ':' else empty) $$
+        pprSizeDecl lbl
 
     Just (Statics info_lbl _) ->
       sdocWithPlatform $ \platform ->
index 1aae465..a803a1f 100644 (file)
@@ -386,20 +386,6 @@ then
     fp_prog_ar="${mingwbin}ar.exe"
 
     AC_PATH_PROG([Genlib],[genlib])
-
-    # NB. Download the perl binaries if required
-    if ! test -d inplace/perl ||
-         test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz
-    then
-        AC_MSG_NOTICE([Making in-tree perl tree])
-        rm -rf inplace/perl
-        mkdir inplace/perl
-        (
-            cd inplace/perl &&
-            tar -zxf ../../ghc-tarballs/perl/ghc-perl*.tar.gz
-        )
-        AC_MSG_NOTICE([In-tree perl tree created])
-    fi
 fi
 
 # We don't want to bundle a MinGW-w64 toolchain
@@ -696,36 +682,6 @@ AC_SUBST([GhcLibsWithUnix])
 dnl ** does #! work?
 AC_SYS_INTERPRETER()
 
-# Check for split-objs
-SplitObjsBroken=NO
-dnl ** look for `perl'
-case $HostOS_CPP in
-cygwin32|mingw32)
-  if test "$EnableDistroToolchain" = "NO"; then
-    PerlCmd=$hardtop/inplace/perl/perl
-  else
-    AC_PATH_PROG([PerlCmd],[perl])
-  fi
-  # because of Trac #15051 SplitObjs is useless on Windows.  It regresses
-  # build times to days for a build, and this effect is also there for end users
-  # of GHC.  So unfortunately we have to disable it, even without having
-  # split-sections.  Though the compile time hit for split-sections should be
-  # tiny compared to this so maybe we should enable it for x86_64.
-  SplitObjsBroken=YES
-  ;;
-*)
-    AC_PATH_PROG([PerlCmd],[perl])
-    if test -z "$PerlCmd"
-    then
-        AC_MSG_WARN([No Perl on PATH, disabling split object support])
-        SplitObjsBroken=YES
-    else
-        FPTOOLS_CHECK_PERL_VERSION
-    fi
-    ;;
-esac
-AC_SUBST([SplitObjsBroken])
-
 dnl ** look for GCC and find out which version
 dnl     Figure out which C compiler to use.  Gcc is preferred.
 dnl     If gcc, make sure it's at least 3.0
@@ -1391,7 +1347,6 @@ echo "\
    genlib       : $GenlibCmd
    Happy        : $HappyCmd ($HappyVersion)
    Alex         : $AlexCmd ($AlexVersion)
-   Perl         : $PerlCmd
    sphinx-build : $SPHINXBUILD
    xelatex      : $XELATEX
 
index 7c54604..4a18541 100644 (file)
@@ -35,7 +35,6 @@ if [ ! -f b1-stamp ]; then
    echo "GhcUnregisterised = YES" >> mk/build.mk
    echo "GhcLibHcOpts = -O -H32m -fvia-C -keep-hc-files" >> mk/build.mk
    echo "GhcLibWays =" >> mk/build.mk
-   echo "SplitObjs = NO" >> mk/build.mk
 
    # We could optimise slightly by not building hslibs here.  Also, building
    # the RTS is not necessary (and might not be desirable if we're using
index 43133f8..13afaa7 100644 (file)
@@ -32,7 +32,6 @@ cat >>mk/build.mk <<END
 GhcUnregisterised=YES
 GhcWithInterpreter=NO
 GhcWithNativeCodeGen=NO
-SplitObjs=NO
 GhcLibWays=
 GhcWithSMP=NO
 END
index 2f83532..199b284 100644 (file)
@@ -173,7 +173,6 @@ Installing the GHC is done as follows:
 \begin{code}
 ./fptools/mk    vi build.mk
     GhcHcOpts = -O -fasm -Rghc-timing
-    SplitObjs = NO
     GhcRtsHcOpts = 
     GhcRtsCcOpts = -g
     STRIP_CMD =:
index c5bc89a..8ca0433 100644 (file)
@@ -92,6 +92,11 @@ Compiler
   taking advantage of :extension:`DerivingStrategies`. The warning is supplied at each
   ``deriving`` site.
 
+- Support for object splitting with the flag ``-split-objs`` is removed.  Using
+  this flag now results in a warning and does nothing.  Use
+  :ghc-flag:`-split-sections` instead.
+
+
 Runtime system
 ~~~~~~~~~~~~~~
 
index 632162f..9383b8a 100644 (file)
@@ -1023,9 +1023,9 @@ extra indirection).
    ``HSfoo.o`` file that has been pre-linked. Loading the ``.o`` file is
    slightly quicker, but at the expense of having another copy of the
    compiled package. The rule of thumb is that if the modules of the
-   package were compiled with :ghc-flag:`-split-objs` then building the
+   package were compiled with :ghc-flag:`-split-sections` then building the
    ``HSfoo.o`` is worthwhile because it saves time when loading the
-   package into GHCi. Without :ghc-flag:`-split-objs`, there is not much
+   package into GHCi. Without :ghc-flag:`-split-sections`, there is not much
    difference in load time between the ``.o`` and ``.a`` libraries, so
    it is better to save the disk space and only keep the ``.a`` around.
    In a GHC distribution we provide ``.o`` files for most packages
index f5f735b..0f70368 100644 (file)
@@ -732,21 +732,6 @@ for example).
     option for Apple's Linker (``-F`` already means something else for
     GHC).
 
-.. ghc-flag:: -split-objs
-    :shortdesc: Split objects (for libraries)
-    :type: dynamic
-    :category: linking
-
-    Tell the linker to split the single object file that would normally
-    be generated into multiple object files, one per top-level Haskell
-    function or type in the module. This only makes sense for libraries,
-    where it means that executables linked against the library are
-    smaller as they only link against the object files that they need.
-    However, assembling all the sections separately is expensive, so
-    this is slower than compiling normally. Additionally, the size of
-    the library itself (the ``.a`` file) can be a factor of 2 to 2.5
-    larger.
-
 .. ghc-flag:: -split-sections
     :shortdesc: Split sections for link-time dead-code stripping
     :type: dynamic
@@ -758,9 +743,7 @@ for example).
     output file.
 
     When linking, the linker can automatically remove all unreferenced sections
-    and thus produce smaller executables. The effect is similar to
-    :ghc-flag:`-split-objs`, but somewhat more efficient - the generated library
-    files are about 30% smaller than with :ghc-flag:`-split-objs`.
+    and thus produce smaller executables.
 
 .. ghc-flag:: -static
     :shortdesc: Use static Haskell libraries
diff --git a/driver/split/Makefile b/driver/split/Makefile
deleted file mode 100644 (file)
index 93e9b12..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      http://ghc.haskell.org/trac/ghc/wiki/Building/Architecture
-#      http://ghc.haskell.org/trac/ghc/wiki/Building/Modifying
-#
-# -----------------------------------------------------------------------------
-
-dir = driver/split
-TOP = ../..
-include $(TOP)/mk/sub-makefile.mk
diff --git a/driver/split/ghc-split.pl b/driver/split/ghc-split.pl
deleted file mode 100644 (file)
index 1b3a3ed..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-#************************************************************************
-#*                                                                      *
-#* \section[Driver-obj-splitting]{Splitting into many \tr{.o} files (for libraries)}
-#*                                                                      *
-#************************************************************************
-
-$TargetPlatform = $TARGETPLATFORM;
-
-($Pgm = $0) =~ s|.*/||;
-$ifile      = $ARGV[0];
-$Tmp_prefix = $ARGV[1];
-$Output     = $ARGV[2];
-
-&split_asm_file($ifile);
-
-open(OUTPUT, '>', $Output) ||  &tidy_up_and_die(1,"$Pgm: failed to open `$Output' (to write)\n");
-print OUTPUT "$NoOfSplitFiles\n";
-close(OUTPUT);
-
-exit(0);
-
-
-sub split_asm_file {
-    (my $asm_file,) = @_;
-    my @pieces = ();
-
-    open(TMPI, '<', $asm_file) || &tidy_up_and_die(1,"$Pgm: failed to open `$asm_file' (to read)\n");
-
-
-    $octr = 0;  # output file counter
-
-    %LocalConstant = (); # we have to subvert C compiler's commoning-up of constants...
-
-    $s_stuff = &ReadTMPIUpToAMarker( '', $octr );
-    # that first stuff is a prologue for all .s outputs
-    $prologue_stuff = &process_asm_block ( $s_stuff );
-    # $_ already has some of the next stuff in it...
-
-#   &tidy_up_and_die(1,"$Pgm: no split markers in .s file!\n")
-#       if $prologue_stuff eq $s_stuff;
-
-    while ( $_ ne '' ) { # not EOF
-        $octr++;
-
-        # grab and de-mangle a section of the .s file...
-        $s_stuff = &ReadTMPIUpToAMarker ( $_, $octr );
-        $pieces[$octr] = &process_asm_block ( $s_stuff );
-    }
-
-    # Make sure that we still have some output when the input file is empty
-    if ($octr == 0) {
-        $octr = 1;
-        $pieces[$octr] = '';
-    }
-
-    $NoOfSplitFiles = $octr;
-
-    if ($pieces[$NoOfSplitFiles] =~ /(\n[ \t]*\.section[ \t]+\.note\.GNU-stack,[^\n]*\n)/m) {
-        $note_gnu_stack = $1;
-        for $octr (1..($NoOfSplitFiles - 1)) {
-            $pieces[$octr] .= $note_gnu_stack;
-        }
-    }
-
-    for $octr (1..$NoOfSplitFiles) {
-        # output to a file of its own
-        # open a new output file...
-        $ofname = "${Tmp_prefix}__${octr}.s";
-        open(OUTF, '>', $ofname) || die "$Pgm: can't open output file: $ofname\n";
-
-        print OUTF $prologue_stuff;
-        print OUTF $pieces[$octr];
-
-        close(OUTF)
-          || &tidy_up_and_die(1,"$Pgm:Failed writing ${Tmp_prefix}__${octr}.s\n");
-    }
-
-    close(TMPI) || &tidy_up_and_die(1,"Failed reading $asm_file\n");
-}
-
-sub ReadTMPIUpToAMarker {
-    (my $str, my $count) = @_; # already read bits
-
-
-    for ( $_ = <TMPI>; $_ ne '' && ! /_?__stg_split_marker/m; $_ = <TMPI> ) {
-        $str .= $_;
-    }
-    # if not EOF, then creep forward until next "real" line
-    # (throwing everything away).
-    # that first "real" line will stay in $_.
-
-    # This loop is intended to pick up the body of the split_marker function
-
-    while ($_ ne '' && (/_?__stg_split_marker/m
-                     || /^L[^C].*:$/m
-                     || /\t\.frame/m
-                     # || /\t\.end/ NOT!  Let the split_marker regexp catch it
-                     # || /\t\.ent/ NOT!  Let the split_marker regexp catch it
-                     || /^\s+(save|retl?|restore|nop)/m)) {
-        $_ = <TMPI>;
-    }
-
-    print STDERR "### BLOCK:$count:\n$str" if $Dump_asm_splitting_info;
-
-    # return str
-    $str =~ tr/\r//d if $TargetPlatform =~ /-mingw32$/m; # in case Perl doesn't convert line endings
-    $str;
-}
-=pod
-
-We must (a)~strip the marker off the block, (b)~record any literal C
-constants that are defined here, and (c)~inject copies of any C constants
-that are used-but-not-defined here.
-
-=cut
-
-sub process_asm_block {
-    local($str) = @_;
-
-    return(&process_asm_block_sparc($str)) if $TargetPlatform =~ /^sparc-/m;
-    return(&process_asm_block_iX86($str))  if $TargetPlatform =~ /^i[34]86-/m;
-    return(&process_asm_block_x86_64($str))  if $TargetPlatform =~ /^x86_64-/m;
-    return(&process_asm_block_powerpc_linux($str))
-                            if $TargetPlatform =~ /^powerpc-[^-]+-linux/m;
-
-    # otherwise...
-    &tidy_up_and_die(1,"$Pgm: no process_asm_block for $TargetPlatform\n");
-}
-
-sub process_asm_block_sparc {
-    local($str) = @_;
-
-    # strip the marker
-    $str =~ s/(\.text\n\t\.align .\n)\t\.global\s+.*_?__stg_split_marker.*\n\t\.proc.*\n/$1/m;
-    $str =~ s/(\t\.align .\n)\t\.global\s+.*_?__stg_split_marker.*\n\t\.proc.*\n/$1/m;
-
-    # remove/record any literal constants defined here
-    while ( $str =~ /(\t\.align .\n\.?(L?LC\d+):\n(\t\.asci[iz].*\n)+)/m ) {
-        local($label) = $2;
-        local($body)  = $1;
-
-        &tidy_up_and_die(1,"Local constant label $label already defined!\n")
-            if $LocalConstant{$label};
-
-        $LocalConstant{$label} = $body;
-
-        $str =~ s/\t\.align .\n\.?LL?C\d+:\n(\t\.asci[iz].*\n)+//m;
-    }
-
-    # inject definitions for any local constants now used herein
-    foreach $k (keys %LocalConstant) {
-        if ( $str =~ /\b$k\b/m ) {
-            $str = $LocalConstant{$k} . $str;
-        }
-    }
-
-   print STDERR "### STRIPPED BLOCK (sparc):\n$str" if $Dump_asm_splitting_info;
-
-   $str;
-}
-
-sub process_asm_block_iX86 {
-    (my $str,) = @_;
-
-    # strip the marker
-
-    $str =~ s/(\.text\n\t\.align .(?:,0x90)?\n)\.globl\s+.*_?__stg_split_marker.*\n/$1/m;
-    $str =~ s/(\t\.align .(?:,0x90)?\n)\.globl\s+.*_?__stg_split_marker.*\n/$1/m;
-
-    # it seems prudent to stick on one of these:
-    $str = "\.text\n\t.align 4\n" . $str;
-
-    # remove/record any literal constants defined here
-    # [perl made uglier to work around the perl 5.7/5.8 bug documented at
-    # http://bugs6.perl.org/rt2/Ticket/Display.html?id=1760 and illustrated
-    # by the seg fault of perl -e '("x\n" x 5000) =~ /(.*\n)+/'
-    # -- ccshan 2002-09-05]
-    while ( ($str =~ /((?:^|\.)(LC\d+):\n(\t\.(ascii|string).*\n|\s*\.byte.*\n){1,100})/m )) {
-        local($label) = $2;
-        local($body)  = $1;
-        local($prefix, $suffix) = ($`, $');
-
-        &tidy_up_and_die(1,"Local constant label $label already defined!\n")
-            if $LocalConstant{$label};
-
-        while ( $suffix =~ /^((\t\.(ascii|string).*\n|\s*\.byte.*\n){1,100})/ ) {
-            $body .= $1;
-            $suffix = $';
-        }
-        $LocalConstant{$label} = $body;
-        $str = $prefix . $suffix;
-    }
-
-    # inject definitions for any local constants now used herein
-    foreach $k (keys %LocalConstant) {
-        if ( $str =~ /\b$k\b/m ) {
-            $str = $LocalConstant{$k} . $str;
-        }
-    }
-
-   print STDERR "### STRIPPED BLOCK (iX86):\n$str" if $Dump_asm_splitting_info;
-
-   $str;
-}
-
-sub process_asm_block_x86_64 {
-    local($str) = @_;
-
-    # remove/record any literal constants defined here
-    # [perl made uglier to work around the perl 5.7/5.8 bug documented at
-    # http://bugs6.perl.org/rt2/Ticket/Display.html?id=1760 and illustrated
-    # by the seg fault of perl -e '("x\n" x 5000) =~ /(.*\n)+/'
-    # -- ccshan 2002-09-05]
-    while ( ($str =~ /((?:^|\.)(LC\d+):\n(\t\.(ascii|string).*\n|\s*\.byte.*\n){1,100})/m )) {
-        local($label) = $2;
-        local($body)  = $1;
-        local($prefix, $suffix) = ($`, $');
-
-        &tidy_up_and_die(1,"Local constant label $label already defined!\n")
-            if $LocalConstant{$label};
-
-        while ( $suffix =~ /^((\t\.(ascii|string).*\n|\s*\.byte.*\n){1,100})/ ) {
-            $body .= $1;
-            $suffix = $';
-        }
-        $LocalConstant{$label} = $body;
-        $str = $prefix . $suffix;
-    }
-
-    # inject definitions for any local constants now used herein
-    foreach $k (keys %LocalConstant) {
-        if ( $str =~ /\b$k\b/m ) {
-            $str = $LocalConstant{$k} . $str;
-        }
-    }
-
-   print STDERR "### STRIPPED BLOCK (x86_64):\n$str" if $Dump_asm_splitting_info;
-
-   $str;
-}
-
-sub process_asm_block_powerpc_linux {
-    local($str) = @_;
-
-    # strip the marker
-    $str =~ s/__stg_split_marker.*\n//m;
-
-    # remove/record any literal constants defined here
-    while ( $str =~ s/^(\s+.section\s+\.rodata\n\s+\.align.*\n(\.LC\d+):\n(\s\.(byte|short|long|quad|2byte|4byte|8byte|fill|space|ascii|string).*\n)+)//m ) {
-        local($label) = $2;
-        local($body)  = $1;
-
-        &tidy_up_and_die(1,"Local constant label $label already defined!\n")
-            if $LocalConstant{$label};
-
-        $LocalConstant{$label} = $body;
-    }
-
-    # inject definitions for any local constants now used herein
-    foreach $k (keys %LocalConstant) {
-        if ( $str =~ /[\s,]$k\b/m ) {
-            $str = $LocalConstant{$k} . $str;
-        }
-    }
-
-    print STDERR "### STRIPPED BLOCK (powerpc linux):\n$str" if $Dump_asm_splitting_info;
-
-    $str;
-}
-
-sub tidy_up_and_die {
-    local($return_val, $msg) = @_;
-    print STDERR $msg;
-    exit (($return_val == 0) ? 0 : 1);
-}
diff --git a/driver/split/ghc.mk b/driver/split/ghc.mk
deleted file mode 100644 (file)
index 9d34a59..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      http://ghc.haskell.org/trac/ghc/wiki/Building/Architecture
-#      http://ghc.haskell.org/trac/ghc/wiki/Building/Modifying
-#
-# -----------------------------------------------------------------------------
-
-driver/split_PERL_SRC  = ghc-split.pl
-driver/split_dist_PROGNAME = ghc-split
-driver/split_dist_TOPDIR = YES
-driver/split_dist_INSTALL = YES
-driver/split_dist_INSTALL_INPLACE = YES
-
-$(eval $(call build-perl,driver/split,dist))
-
diff --git a/ghc.mk b/ghc.mk
index 47d260d..bc92b87 100644 (file)
--- a/ghc.mk
+++ b/ghc.mk
@@ -330,11 +330,6 @@ include rules/build-prog.mk
 include rules/shell-wrapper.mk
 
 # -----------------------------------------------------------------------------
-# Build a perl script
-
-include rules/build-perl.mk
-
-# -----------------------------------------------------------------------------
 # Build a package
 
 include rules/build-package.mk
@@ -626,7 +621,6 @@ BUILD_DIRS += utils/mkdirhier
 BUILD_DIRS += utils/touchy
 BUILD_DIRS += utils/unlit
 BUILD_DIRS += utils/hp2ps
-BUILD_DIRS += driver/split
 BUILD_DIRS += utils/genprimopcode
 BUILD_DIRS += driver
 BUILD_DIRS += driver/ghci
@@ -700,9 +694,6 @@ endif
 ifeq "$(Windows_Host)" "NO"
 BUILD_DIRS := $(filter-out utils/touchy,$(BUILD_DIRS))
 endif
-ifeq "$(GhcUnregisterised)" "YES"
-BUILD_DIRS := $(filter-out driver/split,$(BUILD_DIRS))
-endif
 ifeq "$(GhcWithInterpreter)" "NO"
 # runghc is just GHCi in disguise
 BUILD_DIRS := $(filter-out utils/runghc,$(BUILD_DIRS))
@@ -1422,7 +1413,6 @@ distclean : clean
 # Also clean Windows-only inplace directories.
 # Don't delete 'inplace' itself, it contains source files.
        $(call removeTrees,inplace/mingw)
-       $(call removeTrees,inplace/perl)
 
 # Remove the fs utilities.
        $(call removeFiles,utils/lndir/fs.h)
index 6e32935..f9a3d1f 100644 (file)
@@ -154,12 +154,6 @@ $(GHC_STAGE1) : | $(GHC_DEPENDENCIES)
 $(GHC_STAGE2) : | $(GHC_DEPENDENCIES)
 $(GHC_STAGE3) : | $(GHC_DEPENDENCIES)
 
-ifeq "$(GhcUnregisterised)" "NO"
-$(GHC_STAGE1) : | $$(ghc-split_INPLACE)
-$(GHC_STAGE2) : | $$(ghc-split_INPLACE)
-$(GHC_STAGE3) : | $$(ghc-split_INPLACE)
-endif
-
 ifeq "$(Windows_Host)" "YES"
 $(GHC_STAGE1) : | $$(touchy_INPLACE)
 $(GHC_STAGE2) : | $$(touchy_INPLACE)
index 7b6646d..179d9d0 100644 (file)
@@ -114,10 +114,6 @@ four settings: `none`, `brief` (one line per build command; this is the default
 setting), `normal` (typically a box per build command), and `unicorn` (when
 `normal` just won't do).
 
-* `--split-objects`: generate split objects, which are switched off by default.
-Due to a GHC [bug][ghc-split-objs-bug], you need a full clean rebuild when using
-this flag.
-
 * `--verbose`: run Hadrian in verbose mode. In particular this prints diagnostic
 messages by Shake oracles.
 
@@ -263,7 +259,6 @@ projects), as well as Well-Typed.
 [ghc-preparation]: https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation
 [ghc-windows-quick-build]: https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Windows#AQuickBuild
 [windows-build]: https://gitlab.haskell.org/ghc/ghc/blob/master/hadrian/doc/windows.md
-[ghc-split-objs-bug]: https://ghc.haskell.org/trac/ghc/ticket/11315
 [test-issue]: https://github.com/snowleopard/hadrian/issues/197
 [validation-issue]: https://github.com/snowleopard/hadrian/issues/187
 [dynamic-windows-issue]: https://github.com/snowleopard/hadrian/issues/343
index 4cae2b6..affeeaa 100644 (file)
@@ -43,7 +43,6 @@ hs-cpp-args         = @HaskellCPPArgs@
 #===============
 
 solaris-broken-shld  = @SOLARIS_BROKEN_SHLD@
-split-objects-broken = @SplitObjsBroken@
 ghc-unregisterised   = @Unregisterised@
 ghc-source-path      = @hardtop@
 leading-underscore   = @LeadingUnderscore@
index 68929d3..d0531a3 100644 (file)
@@ -23,8 +23,6 @@ data Flavour = Flavour {
     libraryWays :: Ways,
     -- | Build RTS these ways.
     rtsWays :: Ways,
-    -- | Build split objects.
-    splitObjects :: Predicate,
     -- | Build dynamic GHC programs.
     dynamicGhcPrograms :: Action Bool,
     -- | Enable GHCi debugger.
@@ -275,13 +273,6 @@ their effects.
 
 ## Miscellaneous
 
-To change the default behaviour of Hadrian with respect to building split
-objects, override the `splitObjects` setting of the `Flavour` record:
-```haskell
-userFlavour :: Flavour
-userFlavour = defaultFlavour { name = "user", splitObjects = return False }
-```
-
 Hadrian prints various progress info during the build. You can change the colours
 used by default by overriding `buildProgressColour` and `successColour`:
 ```haskell
index 47d9107..19573de 100644 (file)
@@ -26,7 +26,6 @@ module Base (
     generatedDir, generatedPath, stageBinPath, stageLibPath, templateHscPath,
     ghcDeps, includesDependencies, haddockDeps, relativePackageDbPath,
     packageDbPath, packageDbStamp, mingwStamp,
-    ghcSplitPath
     ) where
 
 import Control.Applicative
@@ -138,12 +137,6 @@ haddockDeps stage = do
 templateHscPath :: Stage -> Action FilePath
 templateHscPath stage = stageLibPath stage <&> (-/- "template-hsc.h")
 
--- | @ghc-split@ is a Perl script used by GHC when run with @-split-objs@ flag.
--- It is generated in "Rules.Generate". This function returns the path relative
--- to the build root under which we will copy @ghc-split@.
-ghcSplitPath :: Stage -> FilePath
-ghcSplitPath stage = stageString stage -/- "bin" -/- "ghc-split"
-
 -- | We use this stamp file to track whether we've moved the mingw toolchain
 --   under the build root (to make it accessible to the GHCs we build on
 --   Windows). See "Rules.Program".
index b56f9c1..6c14eb4 100644 (file)
@@ -181,8 +181,7 @@ instance H.Builder Builder where
             unlitPath  <- builderPath Unlit
             ghcdeps <- ghcDeps stage
             ghcgens <- generatedGhcDependencies stage
-            return $ [ root -/- ghcSplitPath stage -- TODO: Make conditional on --split-objects
-                     , unlitPath ]
+            return $ [ unlitPath ]
                   ++ ghcdeps
                   ++ ghcgens
                   ++ [ touchyPath | win ]
index 842fb03..75e9812 100644 (file)
@@ -1,6 +1,6 @@
 module CommandLine (
     optDescrs, cmdLineArgsMap, cmdFlavour, lookupFreeze1, cmdIntegerSimple,
-    cmdProgressColour, cmdProgressInfo, cmdConfigure, cmdSplitObjects,
+    cmdProgressColour, cmdProgressInfo, cmdConfigure,
     cmdDocsArgs, lookupBuildRoot, TestArgs(..), TestSpeed(..), defaultTestArgs
     ) where
 
@@ -25,7 +25,6 @@ data CommandLineArgs = CommandLineArgs
     , integerSimple  :: Bool
     , progressColour :: UseColour
     , progressInfo   :: ProgressInfo
-    , splitObjects   :: Bool
     , buildRoot      :: BuildRoot
     , testArgs       :: TestArgs
     , docTargets     :: DocTargets }
@@ -40,7 +39,6 @@ defaultCommandLineArgs = CommandLineArgs
     , integerSimple  = False
     , progressColour = Auto
     , progressInfo   = Brief
-    , splitObjects   = False
     , buildRoot      = BuildRoot "_build"
     , testArgs       = defaultTestArgs
     , docTargets     = Set.fromList [minBound..maxBound] }
@@ -121,9 +119,6 @@ readProgressInfo ms =
     set :: ProgressInfo -> CommandLineArgs -> CommandLineArgs
     set flag flags = flags { progressInfo = flag }
 
-readSplitObjects :: Either String (CommandLineArgs -> CommandLineArgs)
-readSplitObjects = Right $ \flags -> flags { splitObjects = True }
-
 readTestCompiler :: Maybe String -> Either String (CommandLineArgs -> CommandLineArgs)
 readTestCompiler compiler = maybe (Left "Cannot parse compiler") (Right . set) compiler
   where
@@ -220,8 +215,6 @@ optDescrs =
       "Use colours in progress info (Never, Auto or Always)."
     , Option [] ["progress-info"] (OptArg readProgressInfo "STYLE")
       "Progress info style (None, Brief, Normal or Unicorn)."
-    , Option [] ["split-objects"] (NoArg readSplitObjects)
-      "Generate split objects (requires a full clean rebuild)."
     , Option [] ["docs"] (OptArg readDocsArg "TARGET")
       "Strip down docs targets (none, no-haddocks, no-sphinx[-{html, pdfs, man}]."
     , Option [] ["test-compiler"] (OptArg readTestCompiler "TEST_COMPILER")
@@ -283,8 +276,5 @@ cmdProgressColour = progressColour <$> cmdLineArgs
 cmdProgressInfo :: Action ProgressInfo
 cmdProgressInfo = progressInfo <$> cmdLineArgs
 
-cmdSplitObjects :: Action Bool
-cmdSplitObjects = splitObjects <$> cmdLineArgs
-
 cmdDocsArgs :: Action DocTargets
 cmdDocsArgs = docTargets <$> cmdLineArgs
index 4a71e80..06407e7 100644 (file)
@@ -26,8 +26,6 @@ data Flavour = Flavour {
     libraryWays :: Ways,
     -- | Build RTS these ways.
     rtsWays :: Ways,
-    -- | Build split objects.
-    splitObjects :: Predicate,
     -- | Build dynamic GHC programs.
     dynamicGhcPrograms :: Action Bool,
     -- | Enable GHCi debugger.
index b294ceb..4f5116b 100644 (file)
@@ -1,6 +1,6 @@
 module Oracles.Flag (
     Flag (..), flag, getFlag, platformSupportsSharedLibs, ghcWithSMP,
-    ghcWithNativeCodeGen, supportsSplitObjects
+    ghcWithNativeCodeGen
     ) where
 
 import Hadrian.Oracles.TextFile
@@ -17,7 +17,6 @@ data Flag = ArSupportsAtFile
           | GmpFrameworkPref
           | LeadingUnderscore
           | SolarisBrokenShld
-          | SplitObjectsBroken
           | WithLibdw
           | HaveLibMingwEx
           | UseSystemFfi
@@ -35,7 +34,6 @@ flag f = do
             GmpFrameworkPref   -> "gmp-framework-preferred"
             LeadingUnderscore  -> "leading-underscore"
             SolarisBrokenShld  -> "solaris-broken-shld"
-            SplitObjectsBroken -> "split-objects-broken"
             WithLibdw          -> "with-libdw"
             HaveLibMingwEx     -> "have-lib-mingw-ex"
             UseSystemFfi       -> "use-system-ffi"
@@ -69,12 +67,3 @@ ghcWithNativeCodeGen = do
     badOs    <- anyTargetOs ["ios", "aix"]
     ghcUnreg <- flag GhcUnregisterised
     return $ goodArch && not badOs && not ghcUnreg
-
-supportsSplitObjects :: Action Bool
-supportsSplitObjects = do
-    broken   <- flag SplitObjectsBroken
-    ghcUnreg <- flag GhcUnregisterised
-    goodArch <- anyTargetArch [ "i386", "x86_64", "powerpc", "sparc" ]
-    goodOs   <- anyTargetOs [ "mingw32", "cygwin32", "linux", "darwin", "solaris2"
-                            , "freebsd", "dragonfly", "netbsd", "openbsd" ]
-    return $ not broken && not ghcUnreg && goodArch && goodOs
index 75a74b2..2738c69 100644 (file)
@@ -4,7 +4,7 @@ module Packages (
     array, base, binary, bytestring, cabal, checkApiAnnotations, checkPpr,
     compareSizes, compiler, containers, deepseq, deriveConstants, directory,
     filepath, genapply, genprimopcode, ghc, ghcBoot, ghcBootTh, ghcCompact,
-    ghcHeap, ghci, ghcPkg, ghcPrim, ghcSplit, haddock, haskeline,
+    ghcHeap, ghci, ghcPkg, ghcPrim, haddock, haskeline,
     hsc2hs, hp2ps, hpc, hpcBin, integerGmp, integerSimple, iserv, libffi,
     libiserv, mtl, parsec, pretty, primitive, process, rts, runGhc,
     stm, templateHaskell, terminfo, text, time, timeout, touchy, transformers,
@@ -69,7 +69,6 @@ ghcHeap             = lib  "ghc-heap"
 ghci                = lib  "ghci"
 ghcPkg              = util "ghc-pkg"
 ghcPrim             = lib  "ghc-prim"
-ghcSplit            = util "ghc-split"
 haddock             = util "haddock"
 haskeline           = lib  "haskeline"
 hsc2hs              = util "hsc2hs"
index d54ac3d..609766d 100644 (file)
@@ -134,7 +134,7 @@ bindistRules = do
         need $ map (bindistFilesDir -/-)
                    (["configure", "Makefile"] ++ bindistInstallFiles)
         need $ map ((bindistFilesDir -/- "wrappers") -/-) ["check-api-annotations"
-                   , "check-ppr", "ghc", "ghc-iserv", "ghc-pkg", "ghc-split"
+                   , "check-ppr", "ghc", "ghc-iserv", "ghc-pkg"
                    , "ghci-script", "ghci", "haddock", "hpc", "hp2ps", "hsc2hs"
                    , "runghc"]
 
index 13544f2..032f6a6 100644 (file)
@@ -174,11 +174,6 @@ generateRules = do
     priority 2.0 $ (root -/- generatedDir -/- "ghcplatform.h") <~ generateGhcPlatformH
     priority 2.0 $ (root -/- generatedDir -/-  "ghcversion.h") <~ generateGhcVersionH
 
-    forM_ [Stage0 ..] $ \stage ->
-        root -/- ghcSplitPath stage %> \path -> do
-            generate path emptyTarget generateGhcSplit
-            makeExecutable path
-
     -- TODO: simplify, get rid of fake rts context
     root -/- generatedDir ++ "//*" %> \file -> do
         withTempDir $ \dir -> build $
@@ -200,26 +195,6 @@ emptyTarget = vanillaContext (error "Rules.Generate.emptyTarget: unknown stage")
 cppify :: String -> String
 cppify = replaceEq '-' '_' . replaceEq '.' '_'
 
-ghcSplitSource :: FilePath
-ghcSplitSource = "driver/split/ghc-split.pl"
-
--- ref: rules/build-perl.mk
--- | Generate the @ghc-split@ Perl script.
-generateGhcSplit :: Expr String
-generateGhcSplit = do
-    trackGenerateHs
-    targetPlatform <- getSetting TargetPlatform
-    ghcEnableTNC   <- expr $ yesNo <$> ghcEnableTablesNextToCode
-    perlPath       <- getBuilderPath Perl
-    contents       <- expr $ readFileLines ghcSplitSource
-    return . unlines $
-        [ "#!" ++ perlPath
-        , "my $TARGETPLATFORM = " ++ show targetPlatform ++ ";"
-        -- I don't see where the ghc-split tool uses TNC, but
-        -- it's in the build-perl macro.
-        , "my $TABLES_NEXT_TO_CODE = " ++ show ghcEnableTNC ++ ";"
-        ] ++ contents
-
 -- | Generate @ghcplatform.h@ header.
 generateGhcPlatformH :: Expr String
 generateGhcPlatformH = do
@@ -289,7 +264,6 @@ generateConfigHs = do
             | intLib == integerGmp    = "IntegerGMP"
             | intLib == integerSimple = "IntegerSimple"
             | otherwise = error $ "Unknown integer library: " ++ pkgName intLib
-    cSupportsSplitObjs         <- expr $ yesNo <$> supportsSplitObjects
     cGhcWithInterpreter        <- expr $ yesNo <$> ghcWithInterpreter
     cGhcWithNativeCodeGen      <- expr $ yesNo <$> ghcWithNativeCodeGen
     cGhcWithSMP                <- expr $ yesNo <$> ghcWithSMP
@@ -341,8 +315,6 @@ generateConfigHs = do
         , "cIntegerLibrary       = " ++ show (pkgName intLib)
         , "cIntegerLibraryType   :: IntegerLibrary"
         , "cIntegerLibraryType   = " ++ cIntegerLibraryType
-        , "cSupportsSplitObjs    :: String"
-        , "cSupportsSplitObjs    = " ++ show cSupportsSplitObjs
         , "cGhcWithInterpreter   :: String"
         , "cGhcWithInterpreter   = " ++ show cGhcWithInterpreter
         , "cGhcWithNativeCodeGen :: String"
@@ -357,8 +329,6 @@ generateConfigHs = do
         , "cLeadingUnderscore    = " ++ show cLeadingUnderscore
         , "cGHC_UNLIT_PGM        :: String"
         , "cGHC_UNLIT_PGM        = " ++ show cGHC_UNLIT_PGM
-        , "cGHC_SPLIT_PGM        :: String"
-        , "cGHC_SPLIT_PGM        = " ++ show "ghc-split"
         , "cLibFFI               :: Bool"
         , "cLibFFI               = " ++ show cLibFFI
         , "cGhcThreaded :: Bool"
index d19907b..edec160 100644 (file)
@@ -121,18 +121,8 @@ libraryObjects :: Context -> Action [FilePath]
 libraryObjects context@Context{..} = do
     hsObjs   <- hsObjects    context
     noHsObjs <- nonHsObjects context
-
-    -- This will create split objects if required (we don't track them
-    -- explicitly as this would needlessly bloat the Shake database).
     need $ noHsObjs ++ hsObjs
-
-    split <- interpretInContext context =<< splitObjects <$> flavour
-    let getSplitObjs = concatForM hsObjs $ \obj -> do
-            let dir = dropExtension obj ++ "_" ++ osuf way ++ "_split"
-            contents <- liftIO $ IO.getDirectoryContents dir
-            return . map (dir -/-) $ filter (not . all (== '.')) contents
-
-    (noHsObjs ++) <$> if split then getSplitObjs else return hsObjs
+    return (noHsObjs ++ hsObjs)
 
 -- * Library paths types and parsers
 
index 4bc10e5..b952a01 100644 (file)
@@ -17,7 +17,6 @@ compileAndLinkHs :: Args
 compileAndLinkHs = (builder (Ghc CompileHs) ||^ builder (Ghc LinkHs)) ? do
     mconcat [ arg "-Wall"
             , commonGhcArgs
-            , splitObjects <$> flavour ? arg "-split-objs"
             , ghcLinkArgs
             , defaultGhcWarningsArgs
             , builder (Ghc CompileHs) ? arg "-c"
index 084dcf3..b74ee09 100644 (file)
@@ -10,7 +10,7 @@ module Settings.Default (
     defaultArgs,
 
     -- * Default build flavour
-    defaultFlavour, defaultSplitObjects
+    defaultFlavour
     ) where
 
 import qualified Hadrian.Builder.Ar
@@ -210,7 +210,6 @@ defaultFlavour = Flavour
     , integerLibrary     = (\x -> if x then integerSimple else integerGmp) <$> cmdIntegerSimple
     , libraryWays        = defaultLibraryWays
     , rtsWays            = defaultRtsWays
-    , splitObjects       = defaultSplitObjects
     , dynamicGhcPrograms = defaultDynamicGhcPrograms
     , ghciWithDebugger   = False
     , ghcProfiled        = False
@@ -228,16 +227,6 @@ defaultDynamicGhcPrograms = do
   supportsShared <- platformSupportsSharedLibs
   return (not win && supportsShared)
 
--- | Default condition for building split objects.
-defaultSplitObjects :: Predicate
-defaultSplitObjects = do
-    goodStage <- notStage0 -- We don't split bootstrap (stage 0) packages
-    pkg       <- getPackage
-    supported <- expr supportsSplitObjects
-    split     <- expr cmdSplitObjects
-    let goodPackage = isLibrary pkg && pkg /= compiler && pkg /= rts
-    return $ split && goodStage && goodPackage && supported
-
 -- | All 'Builder'-dependent command line arguments.
 defaultBuilderArgs :: Args
 defaultBuilderArgs = mconcat
index 30a2849..e2996d9 100644 (file)
@@ -1,7 +1,7 @@
 module Settings.Default (
     SourceArgs (..), sourceArgs, defaultBuilderArgs, defaultPackageArgs,
     defaultArgs, defaultLibraryWays, defaultRtsWays,
-    defaultFlavour, defaultSplitObjects
+    defaultFlavour
     ) where
 
 import Flavour
@@ -18,4 +18,3 @@ sourceArgs :: SourceArgs -> Args
 defaultBuilderArgs, defaultPackageArgs, defaultArgs :: Args
 defaultLibraryWays, defaultRtsWays :: Ways
 defaultFlavour :: Flavour
-defaultSplitObjects :: Predicate
index 2bff843..55fb808 100644 (file)
@@ -327,39 +327,9 @@ GhcLibHcOpts=-O2 -haddock
 StripLibraries=NO
 
 # ----------------------------------------------------------------------------
-# Object-file splitting
-#
-#      Set SplitObjs=YES or NO in your build.mk
-#
-#      Don't use -split-objs in in GhcLibHcOpts, because the build
-#              system needs to do other special magic if you are
-#              doing object-file splitting
-
-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 := $(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.
-# Unless SplitSections is enabled - then let that take precedence.
-SplitObjs = $(if $(and $(filter YES,$(SupportsSplitObjs)),\
-                       $(filter NO,$(SplitSections))),YES,NO)
-
-# ----------------------------------------------------------------------------
 # Section splitting
 #
-# Similar to -ffunction-sections -fdata-sections in GCC. Provides space saving
-# like SplitObjs, but doesn't require post-processing and splitting of object
-# files.
+# Similar to -ffunction-sections -fdata-sections in GCC.
 #
 # Set SplitSections=YES or NO in your build.mk to override the default.
 #
index 0d42938..1fc7b24 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O2
 GhcStage2HcOpts    = -O0
 GhcLibHcOpts       = -O2
 BUILD_PROF_LIBS    = NO
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
index ae67f34..7d1d4c4 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O
 GhcStage2HcOpts    = -O0 -fllvm
 GhcLibHcOpts       = -O2 -fllvm
 BUILD_PROF_LIBS    = NO
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
index 9b71005..58fb92d 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O
 GhcStage2HcOpts    = -O0
 GhcLibHcOpts       = -O2
 BUILD_PROF_LIBS    = NO
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
index 73015aa..ecfc535 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O2
 GhcStage2HcOpts    = -O0
 GhcLibHcOpts       = -O2
 BUILD_PROF_LIBS    = NO
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
index 8c8925c..e062a57 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O0 -DDEBUG
 GhcStage2HcOpts    = -O
 GhcLibHcOpts       = -O -dcore-lint
 BUILD_PROF_LIBS    = NO
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
index dc8be47..1c8e24f 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O2
 GhcStage2HcOpts    = -O0 -DDEBUG
 GhcLibHcOpts       = -O -dcore-lint
 BUILD_PROF_LIBS    = NO
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
index 4b94c48..56ecc79 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O2
 GhcStage2HcOpts    = -O2
 GhcLibHcOpts       = -O2
 BUILD_PROF_LIBS    = YES
-#SplitObjs
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
 BUILD_SPHINX_PDF   = NO
index f202642..9e48ce9 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O2
 GhcStage2HcOpts    = -O2 -fllvm
 GhcLibHcOpts       = -O2 -fllvm
 BUILD_PROF_LIBS    = YES
-#SplitObjs
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
 BUILD_SPHINX_PDF   = NO
index cd3d4f4..2598f4a 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O
 GhcStage2HcOpts    = -O2
 GhcLibHcOpts       = -O2
 BUILD_PROF_LIBS    = YES
-#SplitObjs
 #HADDOCK_DOCS
 #BUILD_SPHINX_HTML
 #BUILD_SPHINX_PDF
index ec314bd..ee85662 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O2
 GhcStage2HcOpts    = -O2
 GhcLibHcOpts       = -O2
 BUILD_PROF_LIBS    = YES
-#SplitObjs
 #HADDOCK_DOCS
 #BUILD_SPHINX_HTML
 #BUILD_SPHINX_PDF
index dcbd6a4..9c28443 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O
 GhcStage2HcOpts    = -O
 GhcLibHcOpts       = -O
 BUILD_PROF_LIBS    = YES
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
index c7e0e28..6c4a6ba 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O2
 GhcStage2HcOpts    = -O
 GhcLibHcOpts       = -O
 BUILD_PROF_LIBS    = YES
-SplitObjs          = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
 BUILD_SPHINX_PDF   = NO
index 5ca88c0..471b37d 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O2
 GhcStage2HcOpts    = -O0
 GhcLibHcOpts       = -O
 BUILD_PROF_LIBS    = NO
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
index f0f00d2..98defa7 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O
 GhcStage2HcOpts    = -O0 -fllvm
 GhcLibHcOpts       = -O -fllvm
 BUILD_PROF_LIBS    = NO
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
index 8a5c5e1..9869041 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O
 GhcStage2HcOpts    = -O0
 GhcLibHcOpts       = -O
 BUILD_PROF_LIBS    = NO
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
index 30322cd..286cb2e 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O2
 GhcStage2HcOpts    = -O0
 GhcLibHcOpts       = -O
 BUILD_PROF_LIBS    = NO
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
index 5204acb..5583748 100644 (file)
@@ -3,7 +3,6 @@ GhcStage1HcOpts    = -O2
 GhcStage2HcOpts    = -O0
 GhcLibHcOpts       = -O0
 BUILD_PROF_LIBS    = NO
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = NO
 BUILD_SPHINX_HTML  = NO
index a1470cd..ba33584 100644 (file)
@@ -4,7 +4,6 @@ GhcStage1HcOpts    = -O2 -DDEBUG
 GhcStage2HcOpts    = -O -dcore-lint -dno-debug-output
 GhcLibHcOpts       = -O -dcore-lint -dno-debug-output
 BUILD_PROF_LIBS    = NO
-SplitObjs          = NO
 SplitSections      = NO
 HADDOCK_DOCS       = YES
 BUILD_SPHINX_HTML  = YES
index f9eca23..122ec60 100644 (file)
@@ -74,12 +74,7 @@ else # ifneq "$3" "dyn"
 # Build the ordinary .a library
 $$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS)
        $$(call removeFiles,$$@ $$@.contents)
-ifeq "$$($1_$2_SplitObjs)" "YES"
-       $$(FIND) $$(patsubst %.$$($3_osuf),%_$$($3_osuf)_split,$$($1_$2_$3_HS_OBJS)) -name '*.$$($3_osuf)' -print >> $$@.contents
-       echo $$($1_$2_$3_NON_HS_OBJS) >> $$@.contents
-else
        echo $$($1_$2_$3_ALL_OBJS) >> $$@.contents
-endif
 ifeq "$$($1_$2_ArSupportsAtFile)" "YES"
        $$(call cmd,$1_$2_AR) $$($1_$2_AR_OPTS) $$($1_$2_EXTRA_AR_ARGS) $$@ @$$@.contents
 else
diff --git a/rules/build-perl.mk b/rules/build-perl.mk
deleted file mode 100644 (file)
index 6bec7d9..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      http://ghc.haskell.org/trac/ghc/wiki/Building/Architecture
-#      http://ghc.haskell.org/trac/ghc/wiki/Building/Modifying
-#
-# -----------------------------------------------------------------------------
-
-
-# Build a perl script.  Invoke like this:
-#
-# driver/mangler_PERL_SRC = ghc-asm.pl
-# driver/mangler_dist_PROGNAME = ghc-asm
-#
-# $(eval $(call build-perl,driver/mangler,dist))
-
-define build-perl
-$(call trace, build-perl($1,$2))
-$(call profStart, build-perl($1,$2))
-# $1 = dir
-# $2 = distdir
-
-ifeq "$$($1_$2_PROGNAME)" ""
-$$(error $1_$2_PROGNAME is not set)
-endif
-ifneq "$$($1_$2_PROG)" ""
-$$(error $1_$2_PROG is set)
-endif
-$1_$2_PROG = $$($1_$2_PROGNAME)
-
-ifneq "$$($$($1_$2_PROG)_INPLACE)" ""
-$$(error $$($1_$2_PROG)_INPLACE defined twice)
-endif
-ifeq "$$($1_$2_TOPDIR)" "YES"
-$$($1_$2_PROG)_INPLACE = $$(INPLACE_LIB)/bin/$$($1_$2_PROG)
-else
-$$($1_$2_PROG)_INPLACE = $$(INPLACE_BIN)/$$($1_$2_PROG)
-endif
-
-$1_$2_INPLACE = $$($$($1_$2_PROG)_INPLACE)
-
-$(call all-target,$1_$2,$$($1_$2_INPLACE))
-
-$(call clean-target,$1,$2,$1/$2 $$($1_$2_INPLACE))
-.PHONY: clean_$1
-clean_$1 : clean_$1_$2
-
-ifneq "$$(BINDIST)" "YES"
-
-$1/$2/$$($1_$2_PROG): $1/$$/$$($1_PERL_SRC) $$$$(unlit_INPLACE) | $$$$(dir $$$$@)/.
-       $$(call removeFiles,$$@)
-       echo '#!$$(PERL)'                                  >> $$@
-       echo 'my $$$$TARGETPLATFORM  = "$$(TARGETPLATFORM)";' >> $$@
-       echo 'my $$$$TABLES_NEXT_TO_CODE  = "$(GhcEnableTablesNextToCode)";' >> $$@
-       cat $$<                                            >> $$@
-
-$$($1_$2_INPLACE): $1/$2/$$($1_$2_PROG) | $$$$(dir $$$$@)/.
-       "$$(CP)" $$< $$@
-       $$(EXECUTABLE_FILE) $$@
-endif
-
-ifeq "$$($1_$2_INSTALL)" "YES"
-# Don't add to INSTALL_BINS or INSTALL_LIBEXECS, because they will get
-# stripped when calling 'make install-strip', and stripping a Perl script
-# doesn't work.
-ifeq "$$($1_$2_TOPDIR)" "YES"
-INSTALL_LIBEXEC_SCRIPTS += $$($1_$2_INPLACE)
-else
-INSTALL_SCRIPTS += $$($1_$2_INPLACE)
-endif
-endif
-
-$(call profEnd, build-perl($1,$2))
-endef
index 6cabac3..b8f10bb 100644 (file)
@@ -89,14 +89,6 @@ $1_$2_ALL_HAPPY_OPTS = \
  $$($1_$2_HAPPY_OPTS) \
  $$(EXTRA_HAPPY_OPTS)
 
-# We don't bother splitting the bootstrap packages (built with stage 0)
-ifeq "$$($1_$2_SplitObjs)" ""
-ifeq "$$(SplitObjs) $3" "YES 1"
-$1_$2_SplitObjs = YES
-else
-$1_$2_SplitObjs = NO
-endif
-endif
 # Disable split sections when building with stage0, it won't be supported yet
 # and it's probably not very relevant anyway (smaller stage1 ghc?).
 ifeq "$$($1_$2_SplitSections)" ""
index 9166abc..de2e45d 100644 (file)
@@ -163,7 +163,6 @@ $1_$2_$3_MOST_DIR_HC_OPTS = \
 $1_$2_$3_ALL_HC_OPTS = \
  -hisuf $$($3_hisuf) -osuf  $$($3_osuf) -hcsuf $$($3_hcsuf) \
  $$($1_$2_$3_MOST_DIR_HC_OPTS) \
- $$(if $$(findstring YES,$$($1_$2_SplitObjs)),$$(if $$(findstring dyn,$3),,-split-objs),) \
  $$(if $$(findstring YES,$$($1_$2_SplitSections)),$$(if $$(findstring dyn,$3),,-split-sections),) \
  $$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),$$(if $$(findstring v,$3),-dynamic-too))
 
index 8459c60..07f2ca9 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 8459c600e0f6da3f85abefdefe651bbe3ed3da4a
+Subproject commit 07f2ca98fd4249dc6ebad053bd6aef90c814efe0