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

    <tr>
        <th>Summary</th>
        <td>
            Clang-cl: Allow choosing runtime library (e.g. UCRT)
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    I am using `clang-cl` to cross-compile code for a windows target on a linux host.
I want to switch from linking my binaries with `msvcrt` to `ucrt`. By default, the `clang-cl` switches `/MD` and `/MT` add `/DEFAULTLIB:msvcrt.lib` and  `/DEFAULTLIB:libcmt.lib` respectively. These are translated into `--dependent-lib=` arguments for clang's `cc1`.

However, for [ucrt](https://learn.microsoft.com/en-us/cpp/c-runtime-library/crt-library-features?view=msvc-170), `/DEFAULTLIB:libucrt.lib` and `/DEFAULTLIB:ucrt.lib` are needed.

[#89642](https://github.com/llvm/llvm-project/pull/89642) should allow the user to disable the defaultlib, but `clang-cl` does not recognize this argument:
```
clang-cl --target=x86_64-pc-windows-msvc /winsysroot /tmp/xwin -fno-rtlib-defaultlib /c test.c /Fotest.obj
clang-cl: warning: argument unused during compilation: '-fno-rtlib-defaultlib' [-Wunused-command-line-argument]
```
The linker sees the `/DEFAULTLIB:libcmt.lib`, which prevents it from linking against `libucrt.lib`:
```
lld-link -verbose test.obj /out:test.exe
lld-link: Reading test.obj
lld-link: Directives: test.obj:  /DEFAULTLIB:libcmt.lib /DEFAULTLIB:oldnames.lib /DEFAULTLIB:uuid.lib /DEFAULTLIB:uuid.lib
```

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVU1v4zgP_jXKhZDhyImdHHxwm9d4C8xeBh3scSFLjK2pLAX6iJv99QvZSb8mO8ACRWNKpPnwIR-ae696g1iT7QPZHlY8hsG6WnD_gpcXZfpVZ-WlfgI-QvTK9EDKXGhueio0KXMIFoSz3lNhx5PSCMJKhKN1wGFSRtrJQ-CuxwDWAAetTHyFwfqQkbx5gombkF7iJxXEAEdnx-STUsN4gU4Z7hR6mFQYUu7Rn4UL18ykzONiZfBwAYlHHnUg7BHCgF-RLhnQp3PC2j8O6ZAbebOfZ1ve7MP_2ubHt-dvTw-kaJasmVbdLeiel1adGN-8HPoTiqDOqC8ZPA_oEbhDCI4br3lACcosRVAq8YRGogk0RRcLNtfHEU3wM51zKYRVM34h1qlokjckb_5vJzyjS2UnR7J9mEnZHgjbDSGcPCkawlrCWo3cmWxUqWP2GDJhR8JaNDR6wlpxOqX_1EUT1IgJiePuks5cuFn0iDxEh54U7VnhRIpDIoeuq5ywfcJwn5j4hb87Xp9cHIJBlCivRab5ZMVuX27Yvcp6FYbYXQvS-nz7oSdnf6IIhLWnqDVh7fIKtgc_2KglcK3tNM9L9OjSVEnleadxPruOVELFHqGL4etUSYsejA3gUNjeqL9TnPJvzUsI8yZVu_zlzS0aKF2EQYrD6678q9zQk6BXzdBEKhDWTsr4i3fWhmSFMbXodVIG6NFY6hIy-g4y-QgI6EM2R7d2frbdzw-JSdHAxJ1Rpk-PN6QQTfQoQUaXxLfomQdlTfIirLqbkbAqTRz9c4lOa2DkRlKtDNI3EraHLyQ8DzjLHB14RH_T628VlTowDUoMcHJ4noWhwueNwXuujJ-b9Hnmfm2D1jPIF6BndJ31CDeqEnE2ps7NJ_iKH9wTF9-Ry5TtA7cfrw_KLbpP4_nuVDQA_17fL1dWS8NH9HcvY1Tytxdfil3JupD7Ys9XWK-r7Xqfb8tNtRrqomLbciMlbmUp-V5UWLLderc7yv12XZb5StUsZ9u8yqt1ySpWZV2ZF7zk5bqSOTuKPdnkOHKlsyS3zLp-pbyPWK83VbEpVpp3qP38eWHM4ATzLWFJxStXzxrtYu_JJtfKB__-mqCCxvrxw9A2s1TFYO38JbruKbhuJiBsh1mfwY_H78-E7VfR6fo_b4kZXtqGV_znmv0TAAD__4NYRlI">