mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 21:31:08 -06:00
Merge topic 'ewilde/swift-output-file-map-logic'
e88509d0e8 Swift: Omit output-file-map when used as a linker
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !7835
This commit is contained in:
@@ -372,7 +372,6 @@ void cmNinjaNormalTargetGenerator::WriteLinkRule(bool useResponseFile,
|
||||
vars.SwiftLibraryName = "$SWIFT_LIBRARY_NAME";
|
||||
vars.SwiftModule = "$SWIFT_MODULE";
|
||||
vars.SwiftModuleName = "$SWIFT_MODULE_NAME";
|
||||
vars.SwiftOutputFileMap = "$SWIFT_OUTPUT_FILE_MAP";
|
||||
vars.SwiftSources = "$SWIFT_SOURCES";
|
||||
|
||||
vars.Defines = "$DEFINES";
|
||||
@@ -1072,12 +1071,6 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement(
|
||||
cmOutputConverter::SHELL);
|
||||
}(vars["SWIFT_MODULE_NAME"]);
|
||||
|
||||
const std::string map = cmStrCat(gt->GetSupportDirectory(), '/', config,
|
||||
'/', "output-file-map.json");
|
||||
vars["SWIFT_OUTPUT_FILE_MAP"] =
|
||||
this->GetLocalGenerator()->ConvertToOutputFormat(
|
||||
this->ConvertToNinjaPath(map), cmOutputConverter::SHELL);
|
||||
|
||||
vars["SWIFT_SOURCES"] = [this, config]() -> std::string {
|
||||
std::vector<cmSourceFile const*> sources;
|
||||
std::stringstream oss;
|
||||
@@ -1101,6 +1094,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement(
|
||||
vars["DEFINES"] = this->GetDefines("Swift", config);
|
||||
vars["FLAGS"] = this->GetFlags("Swift", config);
|
||||
vars["INCLUDES"] = this->GetIncludes("Swift", config);
|
||||
this->GenerateSwiftOutputFileMap(config, vars["FLAGS"]);
|
||||
}
|
||||
|
||||
// Compute specific libraries to link with.
|
||||
|
||||
@@ -1177,30 +1177,42 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatements(
|
||||
}
|
||||
|
||||
this->GetImplFileStream(fileConfig) << "\n";
|
||||
}
|
||||
|
||||
if (!this->Configs[config].SwiftOutputMap.empty()) {
|
||||
std::string const mapFilePath =
|
||||
cmStrCat(this->GeneratorTarget->GetSupportDirectory(), '/', config, '/',
|
||||
"output-file-map.json");
|
||||
std::string const targetSwiftDepsPath = [this, config]() -> std::string {
|
||||
cmGeneratorTarget const* target = this->GeneratorTarget;
|
||||
if (cmValue name = target->GetProperty("Swift_DEPENDENCIES_FILE")) {
|
||||
return *name;
|
||||
}
|
||||
return this->ConvertToNinjaPath(
|
||||
cmStrCat(target->GetSupportDirectory(), '/', config, '/',
|
||||
target->GetName(), ".swiftdeps"));
|
||||
}();
|
||||
|
||||
// build the global target dependencies
|
||||
// https://github.com/apple/swift/blob/master/docs/Driver.md#output-file-maps
|
||||
Json::Value deps(Json::objectValue);
|
||||
deps["swift-dependencies"] = targetSwiftDepsPath;
|
||||
this->Configs[config].SwiftOutputMap[""] = deps;
|
||||
|
||||
cmGeneratedFileStream output(mapFilePath);
|
||||
output << this->Configs[config].SwiftOutputMap;
|
||||
void cmNinjaTargetGenerator::GenerateSwiftOutputFileMap(
|
||||
const std::string& config, std::string& flags)
|
||||
{
|
||||
if (this->Configs[config].SwiftOutputMap.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
std::string const targetSwiftDepsPath = [this, config]() -> std::string {
|
||||
cmGeneratorTarget const* target = this->GeneratorTarget;
|
||||
if (cmValue name = target->GetProperty("Swift_DEPENDENCIES_FILE")) {
|
||||
return *name;
|
||||
}
|
||||
return this->ConvertToNinjaPath(cmStrCat(target->GetSupportDirectory(),
|
||||
'/', config, '/',
|
||||
target->GetName(), ".swiftdeps"));
|
||||
}();
|
||||
|
||||
std::string mapFilePath =
|
||||
cmStrCat(this->GeneratorTarget->GetSupportDirectory(), '/', config, '/',
|
||||
"output-file-map.json");
|
||||
|
||||
// build the global target dependencies
|
||||
// https://github.com/apple/swift/blob/master/docs/Driver.md#output-file-maps
|
||||
Json::Value deps(Json::objectValue);
|
||||
deps["swift-dependencies"] = targetSwiftDepsPath;
|
||||
this->Configs[config].SwiftOutputMap[""] = deps;
|
||||
|
||||
cmGeneratedFileStream output(mapFilePath);
|
||||
output << this->Configs[config].SwiftOutputMap;
|
||||
|
||||
// Add flag
|
||||
this->LocalGenerator->AppendFlags(flags, "-output-file-map");
|
||||
this->LocalGenerator->AppendFlagEscape(flags,
|
||||
ConvertToNinjaPath(mapFilePath));
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -163,6 +163,9 @@ protected:
|
||||
void EmitSwiftDependencyInfo(cmSourceFile const* source,
|
||||
const std::string& config);
|
||||
|
||||
void GenerateSwiftOutputFileMap(const std::string& config,
|
||||
std::string& flags);
|
||||
|
||||
void ExportObjectCompileCommand(
|
||||
std::string const& language, std::string const& sourceFileName,
|
||||
std::string const& objectDir, std::string const& objectFileName,
|
||||
|
||||
@@ -119,11 +119,6 @@ std::string cmRulePlaceholderExpander::ExpandVariable(
|
||||
return this->ReplaceValues->SwiftModuleName;
|
||||
}
|
||||
}
|
||||
if (this->ReplaceValues->SwiftOutputFileMap) {
|
||||
if (variable == "SWIFT_OUTPUT_FILE_MAP") {
|
||||
return this->ReplaceValues->SwiftOutputFileMap;
|
||||
}
|
||||
}
|
||||
if (this->ReplaceValues->SwiftSources) {
|
||||
if (variable == "SWIFT_SOURCES") {
|
||||
return this->ReplaceValues->SwiftSources;
|
||||
|
||||
@@ -64,7 +64,7 @@ public:
|
||||
const char* SwiftLibraryName = nullptr;
|
||||
const char* SwiftModule = nullptr;
|
||||
const char* SwiftModuleName = nullptr;
|
||||
const char* SwiftOutputFileMap = nullptr;
|
||||
const char* SwiftOutputFileMapOption = nullptr;
|
||||
const char* SwiftSources = nullptr;
|
||||
const char* ISPCHeader = nullptr;
|
||||
const char* CudaCompileMode = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user