Add build setting for enabling C++ interoperability #6276
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation:
When importing C language dependencies, the Swift compiler internally runs Clang in C/Objective-C mode by default.
If some of the imported clang modules are actually written in C++, that causes build errors since C++ syntax might be invalid in C/Objective-C. To resolve that, Swift allows the user to explicitly enable C++/Objective-C++ language mode (along with the rest of the Swift/C++ interoperability logic) for clang via a compiler flag. The reason we cannot enable C++/Objective-C++ mode by default is because it changes the way some existing C/Objective-C APIs are imported: for instance, a library header might provide a different definition of a symbol under
#ifdef __cplusplus
.The user should be able to enable Swift/C++ interoperability for a given Swift target without using unsafe flags.
Modifications:
This adds a build setting to the package manifest that enables Swift/C++ Interoperability for a given Swift target:
The implementation relies on the new Swift driver flag for versioned C++ interop (see swiftlang/swift#64088).