diff --git a/hadrian/doc/flavours.md b/hadrian/doc/flavours.md index 7a3e75cf3049cebfea70c05cf5e8c329d57bfd65..ca7897ba0bd2f24dc36469940a60a9ad20365b8c 100644 --- a/hadrian/doc/flavours.md +++ b/hadrian/doc/flavours.md @@ -265,6 +265,10 @@ The supported transformers are listed below: <td><code>native_bignum</code></td> <td>Use the native <code>ghc-bignum</code> backend.</td> </tr> + <tr> + <td><code>text_simdutf</code></td> + <td>Enable building the <code>text</code> package with <code>simdutf</code> support.</td> + </tr> <tr> <td><code>no_profiled_libs</code></td> <td>Disables building of libraries in profiled build ways.</td> diff --git a/hadrian/src/Flavour.hs b/hadrian/src/Flavour.hs index 3a14fc19f2198f450cbd3b2bfa9a915792c1d8cc..1c9bc3c1b367e4e1b05eb457f29530f58b266546 100644 --- a/hadrian/src/Flavour.hs +++ b/hadrian/src/Flavour.hs @@ -17,6 +17,7 @@ module Flavour , enableHaddock , enableHiCore , useNativeBignum + , enableTextWithSIMDUTF , omitPragmas , completeSetting @@ -53,6 +54,7 @@ flavourTransformers = M.fromList , "no_dynamic_ghc" =: disableDynamicGhcPrograms , "no_dynamic_libs" =: disableDynamicLibs , "native_bignum" =: useNativeBignum + , "text_simdutf" =: enableTextWithSIMDUTF , "no_profiled_libs" =: disableProfiledLibs , "omit_pragmas" =: omitPragmas , "ipe" =: enableIPE @@ -293,6 +295,12 @@ useNativeBignum flavour = flavour { bignumBackend = "native" } +-- | Enable building the @text@ package with @simdutf@ support. +enableTextWithSIMDUTF :: Flavour -> Flavour +enableTextWithSIMDUTF flavour = flavour { + textWithSIMDUTF = True +} + -- | Build stage2 compiler with -fomit-interface-pragmas to reduce -- recompilation. omitPragmas :: Flavour -> Flavour diff --git a/hadrian/src/Flavour/Type.hs b/hadrian/src/Flavour/Type.hs index a2d0d574676468d6a9acbf60afdbdf8f51de3d6d..da2940f076b5b96388ea4060337cdda86a208dce 100644 --- a/hadrian/src/Flavour/Type.hs +++ b/hadrian/src/Flavour/Type.hs @@ -23,6 +23,9 @@ data Flavour = Flavour { bignumBackend :: String, -- | Check selected bignum backend against native backend bignumCheck :: Bool, + -- | Build the @text@ package with @simdutf@ support. Disabled by + -- default due to packaging difficulties described in #20724. + textWithSIMDUTF :: Bool, -- | Build libraries these ways. libraryWays :: Ways, -- | Build RTS these ways. @@ -67,4 +70,3 @@ type DocTargets = Set DocTarget -- distribution. data DocTarget = Haddocks | SphinxHTML | SphinxPDFs | SphinxMan | SphinxInfo deriving (Eq, Ord, Show, Bounded, Enum) - diff --git a/hadrian/src/Rules/Register.hs b/hadrian/src/Rules/Register.hs index ad2df7c33debdcbb6d9dd393926aefb4027fda94..032d747ba040bafba9fc3c24d1286bcea1b21329 100644 --- a/hadrian/src/Rules/Register.hs +++ b/hadrian/src/Rules/Register.hs @@ -7,6 +7,7 @@ module Rules.Register ( import Base import Context import Expression ( getContextData ) +import Flavour import Oracles.Setting import Hadrian.BuildPath import Hadrian.Expression @@ -51,6 +52,14 @@ configurePackageRules = do isGmp <- (== "gmp") <$> interpretInContext ctx getBignumBackend when isGmp $ need [buildP -/- "include/ghc-gmp.h"] + when (pkg == text) $ do + simdutf <- textWithSIMDUTF <$> flavour + when simdutf $ do + -- This is required, otherwise you get Error: hadrian: + -- Encountered missing or private dependencies: + -- system-cxx-std-lib ==1.0 + cxxStdLib <- systemCxxStdLibConfPath $ PackageDbLoc stage Inplace + need [cxxStdLib] Cabal.configurePackage ctx root -/- "**/autogen/cabal_macros.h" %> \out -> do diff --git a/hadrian/src/Settings/Default.hs b/hadrian/src/Settings/Default.hs index 192e439c772941db13c72f8111b361cfd00f6d2d..1b8e68ad6ab00f20ef7a7c2c5b98dac34081453b 100644 --- a/hadrian/src/Settings/Default.hs +++ b/hadrian/src/Settings/Default.hs @@ -270,6 +270,7 @@ defaultFlavour = Flavour , packages = defaultPackages , bignumBackend = defaultBignumBackend , bignumCheck = False + , textWithSIMDUTF = False , libraryWays = defaultLibraryWays , rtsWays = defaultRtsWays , dynamicGhcPrograms = defaultDynamicGhcPrograms diff --git a/hadrian/src/Settings/Packages.hs b/hadrian/src/Settings/Packages.hs index 1b37ecbb8f50920f6cdddf230cbe301edbd3fd49..be5829015ed2c2e843b266994a8edc98d93dfeb3 100644 --- a/hadrian/src/Settings/Packages.hs +++ b/hadrian/src/Settings/Packages.hs @@ -208,12 +208,10 @@ packageArgs = do builder (Cabal Flags) ? stage0 `cabalFlag` "bootstrap" ---------------------------------- text -------------------------------- - , package text ? mconcat - -- Disable SIMDUTF by default due to packaging difficulties - -- described in #20724. - [ builder (Cabal Flags) ? arg "-simdutf" - -- https://github.com/haskell/text/issues/415 - , builder Ghc ? input "**/Data/Text/Encoding.hs" ? arg "-Wno-unused-imports" ] + , package text ? + ifM (textWithSIMDUTF <$> expr flavour) + (builder (Cabal Flags) ? arg "+simdutf") + (builder (Cabal Flags) ? arg "-simdutf") ------------------------------- haskeline ------------------------------ -- Hadrian doesn't currently support packages containing both libraries