[interop][SwiftToCxx] Gather initial struct layout information and emit struct stubs with storage in C++

This change extends the clang header printer to start emitting C++ classes for Swift struct types with the correct struct layout in them (size + alignment)
This commit is contained in:
Alex Lorenz
2022-05-26 17:44:59 -07:00
parent a7053e458f
commit 42c6ff63b8
17 changed files with 295 additions and 51 deletions

View File

@@ -180,13 +180,14 @@ static bool writeSIL(SILModule &SM, const PrimarySpecificPaths &PSPs,
/// \see swift::printAsClangHeader
static bool printAsClangHeaderIfNeeded(StringRef outputPath, ModuleDecl *M,
StringRef bridgingHeader,
bool ExposePublicDeclsInClangHeader) {
bool ExposePublicDeclsInClangHeader,
const IRGenOptions &irGenOpts) {
if (outputPath.empty())
return false;
return withOutputFile(
M->getDiags(), outputPath, [&](raw_ostream &out) -> bool {
return printAsClangHeader(out, M, bridgingHeader,
ExposePublicDeclsInClangHeader);
ExposePublicDeclsInClangHeader, irGenOpts);
});
}
@@ -859,7 +860,7 @@ static bool emitAnyWholeModulePostTypeCheckSupplementaryOutputs(
hadAnyError |= printAsClangHeaderIfNeeded(
Invocation.getClangHeaderOutputPathForAtMostOnePrimary(),
Instance.getMainModule(), BridgingHeaderPathForPrint,
opts.ExposePublicDeclsInClangHeader);
opts.ExposePublicDeclsInClangHeader, Invocation.getIRGenOptions());
}
// Only want the header if there's been any errors, ie. there's not much