<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/61646>61646</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            libc++ targetting wasm 32: fails to build with `error: use of undeclared identifier '__ratio'`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            libc++,
            backend:WebAssembly,
            build-problem
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          sylvestre
      </td>
    </tr>
</table>

<pre>
    Building libc++ targetting wasm32. Recently start to fail on Ubuntu Kinetic
```

In file included from /build/source/libcxx/src/mutex.cpp:11:
In file included from /build/source/build-wasm/libcxx-wasm32-wasi/include/c++/v1/mutex:192:
/build/source/build-wasm/libcxx-wasm32-wasi/include/c++/v1/__condition_variable/condition_variable.h:94:44: error: no template named 'is_floating_point'; did you mean 'std::is_floating_point'?
inline _LIBCPP_HIDE_FROM_ABI __enable_if_t<is_floating_point<_Rep>::value, chrono::nanoseconds>
 ^~~~~~~~~~~~~~~~~
 std::is_floating_point
/build/source/build-wasm/libcxx-wasm32-wasi/include/c++/v1/__type_traits/is_floating_point.h:27:50: note: 'std::is_floating_point' declared here
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_floating_point
 ^
In file included from /build/source/libcxx/src/mutex.cpp:11:
In file included from /build/source/build-wasm/libcxx-wasm32-wasi/include/c++/v1/mutex:192:
/build/source/build-wasm/libcxx-wasm32-wasi/include/c++/v1/__condition_variable/condition_variable.h:94:76: error: use of undeclared identifier 'chrono'; did you mean 'std::chrono'?
inline _LIBCPP_HIDE_FROM_ABI __enable_if_t<is_floating_point<_Rep>::value, chrono::nanoseconds>
 ^~~~~~
 std::chrono
[...]

/build/source/build-wasm/libcxx-wasm32-wasi/include/c++/v1/__condition_variable/condition_variable.h:99:39: error: use of undeclared identifier '__ratio'
  _Rep __result_float = __d.count() * __ratio::num / __ratio::den;
 ^
/build/source/build-wasm/libcxx-wasm32-wasi/include/c++/v1/__condition_variable/condition_variable.h:99:54: error: use of undeclared identifier '__ratio'
  _Rep __result_float = __d.count() * __ratio::num / __ratio::den;
 ^
/build/source/build-wasm/libcxx-wasm32-wasi/include/c++/v1/__condition_variable/condition_variable.h:101:23: error: no template named 'numeric_limits'; did you mean 'std::numeric_limits'?
  _Rep __result_max = numeric_limits<__ns_rep>::max();
                      ^~~~~~~~~~~~~~
 std::numeric_limits

```

Full build log:
https://llvm-jenkins.debian.net/job/llvm-toolchain-kinetic-binaries/architecture=amd64,distribution=kinetic,label=amd64/351/consoleFull

Build command:
```
cmake -B "build-wasm/libcxx-wasm32-wasi" -S runtimes \
        -G Ninja \
         \
        -DCMAKE_C_COMPILER_WORKS=ON \
        -DCMAKE_CXX_COMPILER_WORKS=ON \
        -DLLVM_COMPILER_CHECKED=ON \
        -DCMAKE_C_COMPILER_TARGET=wasm32-unknown-wasi \
        -DCMAKE_CXX_COMPILER_TARGET=wasm32-unknown-wasi \
        -DCMAKE_ASM_COMPILER_TARGET=wasm32-unknown-wasi \
        -DCMAKE_C_COMPILER=/build/source/build-llvm/tools/clang/stage2-bins/bin/clang \
        -DCMAKE_CXX_COMPILER=/build/source/build-llvm/tools/clang/stage2-bins/bin/clang++ \
        -DCMAKE_AR=/build/source/build-llvm/tools/clang/stage2-bins/bin/llvm-ar \
        -DCMAKE_RANLIB=/build/source/build-llvm/tools/clang/stage2-bins/bin/llvm-ranlib \
        -DCMAKE_C_FLAGS="-O2 -DNDEBUG -g1 -fstack-protector-strong -Wformat -Werror=format-security -Wno-unused-command-line-argument -Wdate-time -D_FORTIFY_SOURCE=2 -fno-stack-protector" \
        -DCMAKE_CXX_FLAGS="-O2 -DNDEBUG -g1 -fstack-protector-strong -Wformat -Werror=format-security -Wno-unused-command-line-argument -Wdate-time -D_FORTIFY_SOURCE=2 -fno-stack-protector" \
        -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions -Wl,-z,relro -L/build/source/build-llvm/tools/clang/stage2-bins/lib" \
        -DCMAKE_MODULE_LINKER_FLAGS="-Wl,-Bsymbolic-functions -Wl,-z,relro -L/build/source/build-llvm/tools/clang/stage2-bins/lib" \
        -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions -Wl,-z,relro -L/build/source/build-llvm/tools/clang/stage2-bins/lib" \
        -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-17 \
        -DCMAKE_INSTALL_INCLUDEDIR=include/wasm32-wasi \
        -DLLVM_LIBDIR_SUFFIX=/wasm32-wasi \
        -DLLVM_CONFIG=/build/source/build-llvm/tools/clang/stage2-bins/bin/llvm-config \
        -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
        -DLIBCXX_USE_COMPILER_RT=ON \
        -DLIBCXXABI_USE_COMPILER_RT=ON \
        -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \
        -DLIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON \
        -DLIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY=OFF \
        -DCMAKE_BUILD_TYPE=RelWithDebugInfo \
        -DLIBCXX_CXX_ABI=libcxxabi \
        -DLIBCXX_ABI_VERSION=2 \
        -DLIBCXX_HAS_MUSL_LIBC:BOOL=ON \
        -DLIBCXX_ENABLE_SHARED:BOOL=OFF \
        -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF \
        -DLIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF \
        -DLIBCXX_ENABLE_FILESYSTEM:BOOL=OFF \
        -DLIBCXX_ENABLE_THREADS:BOOL=OFF \
        -DLIBCXX_HAS_PTHREAD_API:BOOL=OFF \
        -DLIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
        -DLIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
        -DLIBCXXABI_ENABLE_SHARED:BOOL=OFF \
        -DLIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF \
        -DLIBCXXABI_SILENT_TERMINATE:BOOL=ON \
        -DLIBCXXABI_ENABLE_THREADS:BOOL=OFF \
        -DLIBCXXABI_HAS_PTHREAD_API:BOOL=OFF \
        -DLIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
        -DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF


```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWVtz2roW_jXiRWMG5EDKAw--tp6ayxjTpE8a2RagxpYYSW6b83B--xnZXAIlCenOmd3Zs5mEi7w-La1v3byAKMXWnNIxGLhg4HdIrTdCjtVj-Z0qLWknE8Xj2K1ZWTC-hiXLcoBcgFyoiVxTrc3qD6IqG3VhQnPKdfkIlSZSQy3girASCg6XWc11DT8zTjXLQc8HPQcMe7u_9mPzHHG4YiWFjOdlXdACrqSoIEBhZo4AUKhELXMKUGiO8vOnWZE5QGFVa_qzm2-3wHb6fWC_eb9mwTKmHDa3WsPMCwMo3O0BULjjAKDwe3-v2-gdoYPid1aBcS54wTQTHH8nkpGsbKR-WexugO2MboDt3JgnSKUU0rzhAmpabUuiKeSkogUE6JYpvCoFMV7EW8G4BugW2C4sWAEfRQ0rSriRU7owltnOZUDY2sx4yTiFOI5cbz7HnyI_wGEym2DHjSDGlJsDYrbCGtjerzvZHk7oFthBq-o7KWsKkAfzjRRctIuccKGoMVsZwUYtBIPgv2eP3ZUXzv3_8ZJ-3FKsJWFaGcFzrY13DGPOoNc6RVPz-hrFsKB5SSQt4IZK2p794E1ge3lJlII4NexBpWWd64Mb0mAyj500wF-iBXyGB0Phvwn4zgl4OzxJwFpRKFaw5gdfsoJyzVaMShMAuzB_JQGfSP0hWXeeajtg64SB2-12wcB_WuP_Xs-MgO3Yozd5BmNJNGtIb22FhjKIsaSqLnXLKAS2DzEuurmoTc5-AGgEAXLgHt0yWTfBf7pYUA5s9zwT_36aBjf_0vQyTf2eqXTIfr3T8rqikuW4ZFXTG17O8gvS4WVSK_KzofQMYXsYc4Xlk8yuyM-W7iOJFx_n3fQ8v880PU3sS3d0YV2WsHEILMX6UJ43Wm-V-YRC46Pye2V9o_yBcdUtaMYI73KqAQq_iWx_XQtR5hvCuPXQ3kdaGeNEMmpaLZH5hmma61pSYPukKoY3AHkFU1qyrDauA7a_AwLklSSj5VEwtAf91s1KlNSc-akNzf0vzEVVEV4cO8ypuXlFHii0XAgQejUAEbQWUNZcs4oqCAbeXt3I-ginjH8jJ4unEr43cT4H2MPebDKP4iDBd7Pk8wLY_mx6WfL-_grZOP4yOYp5nwLvc-C_sOlRNnWSj0EKbH9nY80fuPjBG1tfP9Cb0c5i8ld0H7DA9p-vHibkAApN0Jn4ykvC10ZKkzVFJvLMasb4_tqrdr6rtt0QdpGdd9PUZB2RF7UkzjSO3HfVJAkvWfaMz8LY-bho1CFrhqDlT_3AXX6E1roPrZXSJH-wtlKYCiCkpbQUfA2tu5WQFdHQuttVZ79dsBTNa8n0I7TuuLBqXitaWLsEt8z9lEXkuq4oN9iCaGqZTIWWj8NZkkbhV7yYLRMvALaPoLXiwjo7gknx5yLin2LL4pOTBD6Oo-nnIDmx6q4EyLNc9VhlomS5tap5bkqwgrtL_wHIk7SUAlrxX4ygkmXPHXAy85dx8AcfMLj_k08XTRepE8d4ngRhdN_meq3kHtRmbf_2RWw09eKlH_iRqUrHu64nzfBSF4oj148SvFiGB8WvILzZNIw-vms9ygVfsfO63igLpo4bBzhZTtNoEuy8tpuHbbd9QzL2K69mRru_x8tFcGxgSXqxGTeSjhtdL7w_1iJ10sgz45_hMXGSry9gWmEnjr82gdigoul-j9_H70vDAR-GF-PEXUaxj9Ovc1N-ElreMb3xaVavI74Sl1Waf8eNgO0fmL4saM7yJUgW0Wza1LaLQp-cBZ4sF3EzPwPbcWez-AqOG_ueiP9i3ql8cD8PkmgSTFMnPrJyPdoL5mk0my6ux4RRHCy-LtJgcj0m_ZQEjn-NEsPavBXHzjy6EhHcp0EydWL8JmQbIufYq0k0UfBGrz2BvIV6A1tEcTBNcRokk2jqpMGrEfVE19X0G8ybPbAH_ZYTDPh6P5wMhaezUqcY28XIHpEOHfeHt6PB4EN_2Otsxjnt0dEI3QzybIXIwO4PRsNBZme9AfkwyG5Jh41RD9k9G9m928Gw1-uSfFQUvf7tcPihfzO0P4CbHq0IK7umeneFXHeYUjUdD_vDm2GnGfhU8ztHW6v3cz8CyDMjG8kfaDPd3dHMUYpWWfl4vNp0kK0UWUkrszrwO3LctImsXitw0yuZ0uqoWjNd0vHzv5dAGwHbaX4gUVCL3YT8g-kNBMPe73znMux1almOTwfrNdObOuvmotp1tX1z20rxjea6-ZJa1c0I3fD0vwAAAP__7pLoKA">