Ninja: add new placeholder SWIFT_AUXILIARY_SOURCES
The swift compilation model requires all sources for the module to be listed for the compiler to type check across them. Provide a placeholder to allow enumerating the remainder of the swift sources in a target for the language compile rule. Issue: #18800
This commit is contained in:
parent
d4a42dd4a8
commit
b90e6134a7
@ -19,6 +19,7 @@
|
||||
#include "cmGeneratorExpression.h"
|
||||
#include "cmGeneratorTarget.h"
|
||||
#include "cmGlobalNinjaGenerator.h"
|
||||
#include "cmListFileCache.h" // for BT
|
||||
#include "cmLocalGenerator.h"
|
||||
#include "cmLocalNinjaGenerator.h"
|
||||
#include "cmMakefile.h"
|
||||
@ -430,6 +431,9 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang)
|
||||
vars.TargetCompilePDB = "$TARGET_COMPILE_PDB";
|
||||
vars.ObjectDir = "$OBJECT_DIR";
|
||||
vars.ObjectFileDir = "$OBJECT_FILE_DIR";
|
||||
if (lang == "Swift") {
|
||||
vars.SwiftAuxiliarySources = "$SWIFT_AUXILIARY_SOURCES";
|
||||
}
|
||||
|
||||
// For some cases we do an explicit preprocessor invocation.
|
||||
bool const explicitPP = this->NeedExplicitPreprocessing(lang);
|
||||
@ -900,6 +904,20 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement(
|
||||
vars["FLAGS"] = this->ComputeFlagsForObject(source, language);
|
||||
vars["DEFINES"] = this->ComputeDefines(source, language);
|
||||
vars["INCLUDES"] = this->ComputeIncludes(source, language);
|
||||
// The swift compiler needs all the sources besides the one being compiled in
|
||||
// order to do the type checking. List all these "auxiliary" sources.
|
||||
if (language == "Swift") {
|
||||
std::string aux_sources;
|
||||
cmGeneratorTarget::KindedSources const& sources =
|
||||
this->GeneratorTarget->GetKindedSources(this->GetConfigName());
|
||||
for (cmGeneratorTarget::SourceAndKind const& src : sources.Sources) {
|
||||
if (src.Source.Value == source) {
|
||||
continue;
|
||||
}
|
||||
aux_sources += " " + this->GetSourceFilePath(src.Source.Value);
|
||||
}
|
||||
vars["SWIFT_AUXILIARY_SOURCES"] = aux_sources;
|
||||
}
|
||||
|
||||
if (!this->NeedDepTypeMSVC(language)) {
|
||||
bool replaceExt(false);
|
||||
|
@ -162,6 +162,11 @@ std::string cmRulePlaceholderExpander::ExpandRuleVariable(
|
||||
}
|
||||
}
|
||||
}
|
||||
if (replaceValues.SwiftAuxiliarySources) {
|
||||
if (variable == "SWIFT_AUXILIARY_SOURCES") {
|
||||
return replaceValues.SwiftAuxiliarySources;
|
||||
}
|
||||
}
|
||||
if (variable == "TARGET_SONAME" || variable == "SONAME_FLAG" ||
|
||||
variable == "TARGET_INSTALLNAME_DIR") {
|
||||
// All these variables depend on TargetSOName
|
||||
|
@ -58,6 +58,7 @@ public:
|
||||
const char* Includes;
|
||||
const char* DependencyFile;
|
||||
const char* FilterPrefix;
|
||||
const char* SwiftAuxiliarySources;
|
||||
};
|
||||
|
||||
// Expand rule variables in CMake of the type found in language rules
|
||||
|
Loading…
Reference in New Issue
Block a user