summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Ribiere <matthieu.ribiere@airbus.com>2023-04-07 12:10:19 +0200
committerMatthieu Ribiere <matthieu.ribiere@airbus.com>2023-04-13 11:10:00 +0200
commite0364eb20dd69cc6db2981c33dc94ba353a5bc78 (patch)
tree6f40b244602cfa443ef54e81d1bda4f68c08483b
parent9af53e9bcfadb1e613b72cd385a0dbe31ec0fd2a (diff)
downloadcmake-e0364eb20dd69cc6db2981c33dc94ba353a5bc78.tar.gz
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
-rw-r--r--Source/cmNinjaNormalTargetGenerator.cxx38
-rw-r--r--Source/cmNinjaNormalTargetGenerator.h2
2 files changed, 35 insertions, 5 deletions
diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx
index 4d68460521..52c33f7d28 100644
--- a/Source/cmNinjaNormalTargetGenerator.cxx
+++ b/Source/cmNinjaNormalTargetGenerator.cxx
@@ -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";
diff --git a/Source/cmNinjaNormalTargetGenerator.h b/Source/cmNinjaNormalTargetGenerator.h
index 85f42a4487..187ea4627a 100644
--- a/Source/cmNinjaNormalTargetGenerator.h
+++ b/Source/cmNinjaNormalTargetGenerator.h
@@ -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);