[embedded] Add basics of module serialization, importing and validation in embedded Swift.

- Add a flag to the serialized module (IsEmbeddedSwiftModule)
- Check on import that the mode matches (don't allow importing non-embedded module in embedded mode and vice versa)
- Drop TBD support, it's not expected to work in embedded Swift for now
- Drop auto-linking backdeploy libraries, it's not expected to backdeploy embedded Swift for now
- Drop prespecializations, not expected to work in embedded Swift for now
- Use CMO to serialize everything when emitting an embedded Swift module
- Change SILLinker to deserialize/import everything when importing an embedded Swift module
- Add an IR test for importing modules
- Add a deserialization validation test
This commit is contained in:
Kuba Mracek
2023-09-02 11:55:17 -07:00
parent 74e22dc450
commit 25eb997a28
25 changed files with 188 additions and 21 deletions

View File

@@ -442,7 +442,9 @@ bool CrossModuleOptimization::shouldSerialize(SILFunction *function) {
if (function->hasSemanticsAttr("optimize.no.crossmodule"))
return false;
if (SerializeEverything)
// In embedded Swift we serialize everything.
if (SerializeEverything ||
function->getASTContext().LangOpts.hasFeature(Feature::Embedded))
return true;
if (!conservative) {
@@ -652,15 +654,18 @@ class CrossModuleOptimizationPass: public SILModuleTransform {
return;
bool conservative = false;
switch (M.getOptions().CMOMode) {
case swift::CrossModuleOptimizationMode::Off:
return;
case swift::CrossModuleOptimizationMode::Default:
conservative = true;
break;
case swift::CrossModuleOptimizationMode::Aggressive:
conservative = false;
break;
// In embedded Swift we serialize everything.
if (!M.getASTContext().LangOpts.hasFeature(Feature::Embedded)) {
switch (M.getOptions().CMOMode) {
case swift::CrossModuleOptimizationMode::Off:
return;
case swift::CrossModuleOptimizationMode::Default:
conservative = true;
break;
case swift::CrossModuleOptimizationMode::Aggressive:
conservative = false;
break;
}
}
CrossModuleOptimization CMO(M, conservative);