<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [C++20] [Module] Offer a strategy to produce .pcm and .o in a single compilation"
   href="https://bugs.llvm.org/show_bug.cgi?id=52340">52340</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[C++20] [Module] Offer a strategy to produce .pcm and .o in a single compilation
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>C++2a
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>yedeng.yd@linux.alibaba.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>blitzrakete@gmail.com, erik.pilkington@gmail.com, llvm-bugs@lists.llvm.org, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>See the discussion in
<a href="https://lists.llvm.org/pipermail/cfe-dev/2021-October/069205.html">https://lists.llvm.org/pipermail/cfe-dev/2021-October/069205.html</a> for details.
Simply, for the hello world example:

```C++
// say_hello.cpp
module;
#include <iostream>
#include <string_view>
export module Hello;
export void SayHello
  (std::string_view const &name)
{
  std::cout << "Hello " << name << "!\n";
}
// main.cpp
#include <string_view>
import Hello;
int main() {
  SayHello("world");
  return 0;
}
```

We could compile the example in GCC as:
```
g++ -std=c++20 -fmodules-ts say_hello.cpp main.cpp 
``` 

And in Clang, we need:

clang++ -std=c++20 say_hello.cppm --precompile -o Hello.pcm
clang++ -std=c++20 -fprebuilt-module-path=. say_hello.pcm main.cpp

It requires another line and two additional options `precompile` and
`fprebuilt-module-path`. It would be more friendly to the users.

Note that we didn't ask for use the new strategy to replace the old one. We
want to keep the two strategies until we get clear solution that how module
should interact with build systems.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>