|
|
@@ -283,6 +283,11 @@ void cmNinjaNormalTargetGenerator::WriteLinkRule(bool useResponseFile)
|
|
|
cmState::GetTargetTypeName(this->GetGeneratorTarget()->GetType());
|
|
|
|
|
|
vars.Language = this->TargetLinkLanguage.c_str();
|
|
|
+ if (this->TargetLinkLanguage == "Swift") {
|
|
|
+ vars.SwiftPartialModules = "$SWIFT_PARTIAL_MODULES";
|
|
|
+ vars.TargetSwiftModule = "$TARGET_SWIFT_MODULE";
|
|
|
+ vars.TargetSwiftDoc = "$TARGET_SWIFT_DOC";
|
|
|
+ }
|
|
|
|
|
|
std::string responseFlag;
|
|
|
if (!useResponseFile) {
|
|
|
@@ -787,6 +792,34 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
|
|
|
cmNinjaDeps outputs;
|
|
|
outputs.push_back(targetOutputReal);
|
|
|
|
|
|
+ if (this->TargetLinkLanguage == "Swift") {
|
|
|
+ if (const char* name = gt.GetProperty("SWIFT_MODULE_NAME")) {
|
|
|
+ vars["TARGET_SWIFT_DOC"] = std::string(name) + ".swiftdoc";
|
|
|
+ vars["TARGET_SWIFT_MODULE"] = std::string(name) + ".swiftmodule";
|
|
|
+ } else {
|
|
|
+ vars["TARGET_SWIFT_DOC"] = gt.GetName() + ".swiftdoc";
|
|
|
+ vars["TARGET_SWIFT_MODULE"] = gt.GetName() + ".swiftmodule";
|
|
|
+ }
|
|
|
+ outputs.push_back(vars["TARGET_SWIFT_DOC"]);
|
|
|
+ outputs.push_back(vars["TARGET_SWIFT_MODULE"]);
|
|
|
+
|
|
|
+ cmLocalNinjaGenerator& localGen = *this->GetLocalGenerator();
|
|
|
+
|
|
|
+ std::string partials;
|
|
|
+ std::vector<cmSourceFile const*> sources;
|
|
|
+ gt.GetObjectSources(sources, this->GetConfigName());
|
|
|
+ for (cmSourceFile const* source : sources) {
|
|
|
+ partials += " ";
|
|
|
+ if (const char* partial = source->GetProperty("SWIFT_PARTIAL_MODULE")) {
|
|
|
+ partials += partial;
|
|
|
+ } else {
|
|
|
+ partials += localGen.GetTargetDirectory(>) + "/" +
|
|
|
+ gt.GetObjectName(source) + ".swiftmodule";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vars["SWIFT_PARTIAL_MODULES"] = partials;
|
|
|
+ }
|
|
|
+
|
|
|
// Compute specific libraries to link with.
|
|
|
cmNinjaDeps explicitDeps = this->GetObjects();
|
|
|
cmNinjaDeps implicitDeps = this->ComputeLinkDeps(this->TargetLinkLanguage);
|