From bf279fd5e77e6926b2b06e82bbfef0d5d2bd13ff Mon Sep 17 00:00:00 2001
From: trevyn <230691+trevyn@users.noreply.github.com>
Date: Tue, 9 Jan 2024 01:23:59 +0400
Subject: [PATCH] build: Allow building C compiler-rt fallbacks for wasm

---
 .github/workflows/main.yml                  | 4 ++--
 build.rs                                    | 7 +------
 ci/docker/wasm32-unknown-unknown/Dockerfile | 2 +-
 ci/run.sh                                   | 1 +
 4 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index b69c48c16..8110e27f7 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -90,8 +90,8 @@ jobs:
     - run: rustup component add llvm-tools-preview
     - name: Download compiler-rt reference sources
       run: |
-        curl -L -o code.tar.gz https://github.com/rust-lang/llvm-project/archive/rustc/12.0-2021-04-15.tar.gz
-        tar xzf code.tar.gz --strip-components 1 llvm-project-rustc-12.0-2021-04-15/compiler-rt
+        curl -L -o code.tar.gz https://github.com/rust-lang/llvm-project/archive/rustc/13.0-2021-08-08.tar.gz
+        tar xzf code.tar.gz --strip-components 1 llvm-project-rustc-13.0-2021-08-08/compiler-rt
         echo RUST_COMPILER_RT_ROOT=./compiler-rt >> $GITHUB_ENV
       shell: bash
 
diff --git a/build.rs b/build.rs
index 048611677..9bf6a2547 100644
--- a/build.rs
+++ b/build.rs
@@ -56,15 +56,10 @@ fn main() {
     if !cfg!(feature = "mangled-names") && cfg!(feature = "c") {
         // Don't use a C compiler for these targets:
         //
-        // * wasm - clang for wasm is somewhat hard to come by and it's
-        //   unlikely that the C is really that much better than our own Rust.
         // * nvptx - everything is bitcode, not compatible with mixed C/Rust
         // * riscv - the rust-lang/rust distribution container doesn't have a C
         //   compiler.
-        if !target.contains("wasm")
-            && !target.contains("nvptx")
-            && (!target.starts_with("riscv") || target.contains("xous"))
-        {
+        if !target.contains("nvptx") && (!target.starts_with("riscv") || target.contains("xous")) {
             #[cfg(feature = "c")]
             c::compile(&llvm_target, &target);
         }
diff --git a/ci/docker/wasm32-unknown-unknown/Dockerfile b/ci/docker/wasm32-unknown-unknown/Dockerfile
index 758d94d50..85ead29aa 100644
--- a/ci/docker/wasm32-unknown-unknown/Dockerfile
+++ b/ci/docker/wasm32-unknown-unknown/Dockerfile
@@ -1,6 +1,6 @@
 FROM ubuntu:20.04
 RUN apt-get update && \
     apt-get install -y --no-install-recommends \
-    gcc libc6-dev ca-certificates
+    gcc clang libc6-dev ca-certificates
 
 ENV CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER=true
diff --git a/ci/run.sh b/ci/run.sh
index 44ec30fb7..6376d2216 100755
--- a/ci/run.sh
+++ b/ci/run.sh
@@ -66,6 +66,7 @@ for rlib in $(echo $path); do
       grep -v __x86.get_pc_thunk | \
       grep -v __builtin_cl | \
       grep -v __builtin_ctz | \
+      grep -v __builtin_sadd_overflow | \
       grep 'T __'
 
     if test $? = 0; then