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