diff --git a/compiler/GHC/Platform.hs b/compiler/GHC/Platform.hs
index 42f2aa041e33b9f3c0c4e3ccd064cb725b0f7a6a..da74d324e54acb295edc1d1c9732864cbac12efb 100644
--- a/compiler/GHC/Platform.hs
+++ b/compiler/GHC/Platform.hs
@@ -253,7 +253,6 @@ platformHasRTSLinker p = case archOS_arch (platformArchOS p) of
   ArchRISCV64       -> False
   ArchLoongArch64   -> False
   ArchJavaScript    -> False
-  ArchWasm32        -> False
   _                 -> True
 
 
diff --git a/hadrian/src/Oracles/Flag.hs b/hadrian/src/Oracles/Flag.hs
index af4e268fb85d365f8f3e5d0e7f725058fe69b6c8..2ca3d0f0507b3f8f1baa294a160360f0a0d46a13 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 5d7e19baa604188bcc73f4ecb43aa38cffae3d47..0e2e48bc187458923daaedc850326e9d6dbd5f84 100644
--- a/hadrian/src/Oracles/Setting.hs
+++ b/hadrian/src/Oracles/Setting.hs
@@ -198,12 +198,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 8d47882f1cdd5b720af92c1fe9f4bd4434eb533a..81e2b22c76cb579eb1e07664fa348ce2b48de55a 100644
--- a/hadrian/src/Settings/Builders/RunTest.hs
+++ b/hadrian/src/Settings/Builders/RunTest.hs
@@ -141,7 +141,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", "riscv64", "loongarch64", "javascript", "wasm32"]
+    let rtsLinker = not $ arch `elem` ["powerpc", "powerpc64", "powerpc64le", "s390x", "riscv64", "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 )