diff --git a/compiler/GHC/Platform.hs b/compiler/GHC/Platform.hs
index 57b27f1ac27395136f00f3eeb4f3dcdd8958674e..f7cb79c7fadf50bc98f11520fc6fca93bdfec187 100644
--- a/compiler/GHC/Platform.hs
+++ b/compiler/GHC/Platform.hs
@@ -256,7 +256,6 @@ platformHasRTSLinker p = case archOS_arch (platformArchOS p) of
   ArchS390X         -> False
   ArchLoongArch64   -> False
   ArchJavaScript    -> False
-  ArchWasm32        -> False
   _                 -> True
 
 
diff --git a/hadrian/src/Oracles/Flag.hs b/hadrian/src/Oracles/Flag.hs
index 5f2d66f7ec3415b5668e1dd5bbed81d424760013..e1328150c1045d61fc16c5ac3f5670cb7fb9455f 100644
--- a/hadrian/src/Oracles/Flag.hs
+++ b/hadrian/src/Oracles/Flag.hs
@@ -110,11 +110,10 @@ platformSupportsSharedLibs :: Action Bool
 -- FIXME: This is querying about the target but is named "platformXXX", targetSupportsSharedLibs would be better
 platformSupportsSharedLibs = do
     windows       <- isWinTarget
-    wasm          <- anyTargetArch [ ArchWasm32 ]
     ppc_linux     <- (&&) <$> anyTargetArch [ ArchPPC ] <*> anyTargetOs [ OSLinux ]
     solaris       <- (&&) <$> anyTargetArch [ ArchX86 ] <*> anyTargetOs [ OSSolaris2 ]
     javascript    <- anyTargetArch     [ ArchJavaScript ]
-    return $ not (windows || wasm || javascript || ppc_linux || solaris)
+    return $ not (windows || javascript || ppc_linux || solaris)
 
 -- | Does the target support threaded RTS?
 targetSupportsThreadedRts :: Action Bool
diff --git a/hadrian/src/Oracles/Setting.hs b/hadrian/src/Oracles/Setting.hs
index ea91a450fa0cc10f00cb3425c0cf38ae7f2d887f..5818750e4073ddd6b88fe329e80923c7e1b88ebd 100644
--- a/hadrian/src/Oracles/Setting.hs
+++ b/hadrian/src/Oracles/Setting.hs
@@ -200,12 +200,14 @@ ghcWithInterpreter :: Action Bool
 ghcWithInterpreter = do
     goodOs <- anyTargetOs [ OSMinGW32, OSLinux, OSSolaris2 -- TODO "cygwin32"?,
                           , OSFreeBSD, OSDragonFly, OSNetBSD, OSOpenBSD
-                          , OSDarwin, OSKFreeBSD ]
+                          , OSDarwin, OSKFreeBSD
+                          , OSWasi ]
     goodArch <- (||) <$>
                 anyTargetArch [ ArchX86, ArchX86_64, ArchPPC
                               , ArchAArch64, ArchS390X
                               , ArchPPC_64 ELF_V1, ArchPPC_64 ELF_V2
-                              , ArchRISCV64 ]
+                              , ArchRISCV64
+                              , ArchWasm32 ]
                               <*> isArmTarget
     return $ goodOs && goodArch
 
diff --git a/hadrian/src/Settings/Builders/RunTest.hs b/hadrian/src/Settings/Builders/RunTest.hs
index 316a9ea6c8eee079ae34562aac2b9e7f7e6d03e9..8032f002af2e8bc6c3942a4d1675917500d20a77 100644
--- a/hadrian/src/Settings/Builders/RunTest.hs
+++ b/hadrian/src/Settings/Builders/RunTest.hs
@@ -142,7 +142,7 @@ inTreeCompilerArgs stg = do
     -- For this information, we need to query ghc --info, however, that would
     -- require building ghc, which we don't want to do here. Therefore, the
     -- logic from `platformHasRTSLinker` is duplicated here.
-    let rtsLinker = not $ arch `elem` ["powerpc", "powerpc64", "powerpc64le", "s390x", "loongarch64", "javascript", "wasm32"]
+    let rtsLinker = not $ arch `elem` ["powerpc", "powerpc64", "powerpc64le", "s390x", "loongarch64", "javascript"]
 
     return TestCompilerArgs{..}
 
diff --git a/testsuite/tests/driver/T20696/T20696-static.stderr-wasm32-unknown-wasi b/testsuite/tests/driver/T20696/T20696-static.stderr-wasm32-unknown-wasi
new file mode 100644
index 0000000000000000000000000000000000000000..54d5ad5bddccd8c22eccf1b57993d2d0ebacbe71
--- /dev/null
+++ b/testsuite/tests/driver/T20696/T20696-static.stderr-wasm32-unknown-wasi
@@ -0,0 +1,3 @@
+[1 of 3] Compiling C                ( C.hs, C.o, C.dyn_o )
+[2 of 3] Compiling B                ( B.hs, B.o )
+[3 of 3] Compiling A                ( A.hs, A.o )