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

    <tr>
        <th>Summary</th>
        <td>
            [C++20] [Modules] Backport 1782e8f9e882
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:modules
      </td>
    </tr>

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

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

<pre>
    1782e8f9e882 allows the BMI for implementation module unit to be loaded conditionally, which solves https://github.com/llvm/llvm-project/issues/57293. Now we are trying to deprecate the form `-fmodule-file=<BMI>` and prefer `-fmodule-file=<module-name>=<BMI>` (See https://github.com/llvm/llvm-project/issues/60824 and https://gitlab.kitware.com/cmake/cmake/-/issues/18355).

If we don't backport this, it will add unnecessary burdens to build systems which want to make clang16 a usable version for C++20 modules.

/cherry-pick 1782e8f9e882
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykkz9vpDoUxT-Naa5mZAzmT0ERZt5IKfKa17z2gi-Dd4zN2iZovv0KMtlNdrVVGiwh-_gc_87FEPTVEjVMtkyeE1zi6HxzGhe03_X_S510Tt2btKwEVUNNVSUAjXFrgDgStC_PMDgPepoNTWQjRu0sTE4thmCxOkJ00BEYh4oU9M4qvW1BY-5MnGAddT9CcOaVAowxzoFlT0xcmLhcdRyX7ti7iYmLMa_vy2H27hv1kYmLDmGhwMRFlqLOjvCvW2ElQE8Q_V3b63a7otlTj5F2x4PzE7CCH4Y3k4dBG2LZmWWn9uWZZf-wggNaBbOngfxftj5-WJxoO_LbcSaq_4i-EKfglch3F39oGOyONx1X9PTQ6ie80Yf18FEprTIpmaiPjJ8Zf3r7Pg_bKylnmSgjdNjfZucjxFGHjYmOsGpjAJWCxVrqKQT0d-gWr8iGneiijYJwD5Gm8IC4ot1pbzagN2ivaQEIS8DOELySD1s1tracmGiZaAV_FCV8crdFGcn7-2HW_Q0-Vi9RTabqrMaEmrQoi4LLsqySsZFCdIVMh7qWFSpeYKGqvCvTIRe14HWW6EZwkXGRljzL66w68kGVVZH3OFBZ846znNOE2hw3Jkfnr8n-hs2GQiYGOzJhHxIh9mwse3qYZ0Jsk-ObnWa3XAPLudEhhl9aUUezz9jP6Eyegcn25aEhz9C-c_iUePGm-VqR5I8AAAD__31OPPg">