mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-09 15:20:56 -06:00
Add support of CMAKE_<LANG>_USE_RESPONSE_FILE_FOR_LIBRARIES variable.
We add a function in cmNinjaNormalTargetGenerator.cxx to check for the state of the option (as it was done for Makefile). This will be checked to add or not the `$LINK_PATH` and `$LINK_LIBRARIES` to the Ninja file. The default behavior is adding those libraries. Fixes: #24681
This commit is contained in:
@@ -213,6 +213,22 @@ std::string cmNinjaNormalTargetGenerator::TextStubsGeneratorRule(
|
||||
'_', config);
|
||||
}
|
||||
|
||||
bool cmNinjaNormalTargetGenerator::CheckUseResponseFileForLibraries(
|
||||
const std::string& l) const
|
||||
{
|
||||
// Check for an explicit setting one way or the other.
|
||||
std::string const responseVar =
|
||||
"CMAKE_" + l + "_USE_RESPONSE_FILE_FOR_LIBRARIES";
|
||||
|
||||
// If the option is defined, read it's value
|
||||
if (cmValue val = this->Makefile->GetDefinition(responseVar)) {
|
||||
return val.IsOn();
|
||||
}
|
||||
|
||||
// Default to true
|
||||
return true;
|
||||
}
|
||||
|
||||
struct cmNinjaRemoveNoOpCommands
|
||||
{
|
||||
bool operator()(std::string const& cmd)
|
||||
@@ -251,9 +267,16 @@ void cmNinjaNormalTargetGenerator::WriteNvidiaDeviceLinkRule(
|
||||
} else {
|
||||
rule.RspContent = "$in_newline";
|
||||
}
|
||||
rule.RspContent += " $LINK_LIBRARIES";
|
||||
|
||||
// add the link command in the file if necessary
|
||||
if (this->CheckUseResponseFileForLibraries("CUDA")) {
|
||||
rule.RspContent += " $LINK_LIBRARIES";
|
||||
vars.LinkLibraries = "";
|
||||
} else {
|
||||
vars.LinkLibraries = "$LINK_PATH $LINK_LIBRARIES";
|
||||
}
|
||||
|
||||
vars.Objects = responseFlag.c_str();
|
||||
vars.LinkLibraries = "";
|
||||
}
|
||||
|
||||
vars.ObjectDir = "$OBJECT_DIR";
|
||||
@@ -416,13 +439,20 @@ void cmNinjaNormalTargetGenerator::WriteLinkRule(bool useResponseFile,
|
||||
} else {
|
||||
rule.RspContent = "$in_newline";
|
||||
}
|
||||
rule.RspContent += " $LINK_PATH $LINK_LIBRARIES";
|
||||
|
||||
// If libraries in rsp is enable
|
||||
if (this->CheckUseResponseFileForLibraries(lang)) {
|
||||
rule.RspContent += " $LINK_PATH $LINK_LIBRARIES";
|
||||
vars.LinkLibraries = "";
|
||||
} else {
|
||||
vars.LinkLibraries = "$LINK_PATH $LINK_LIBRARIES";
|
||||
}
|
||||
|
||||
if (this->TargetLinkLanguage(config) == "Swift") {
|
||||
vars.SwiftSources = responseFlag.c_str();
|
||||
} else {
|
||||
vars.Objects = responseFlag.c_str();
|
||||
}
|
||||
vars.LinkLibraries = "";
|
||||
}
|
||||
|
||||
vars.ObjectDir = "$OBJECT_DIR";
|
||||
|
||||
@@ -26,7 +26,7 @@ private:
|
||||
const std::string& config) const;
|
||||
std::string LanguageLinkerCudaFatbinaryRule(const std::string& config) const;
|
||||
std::string TextStubsGeneratorRule(const std::string& config) const;
|
||||
|
||||
bool CheckUseResponseFileForLibraries(const std::string& config) const;
|
||||
const char* GetVisibleTypeName() const;
|
||||
void WriteLanguagesRules(const std::string& config);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user