diff options
author | Matthieu Ribiere <matthieu.ribiere@airbus.com> | 2023-04-07 10:10:19 (GMT) |
---|---|---|
committer | Matthieu Ribiere <matthieu.ribiere@airbus.com> | 2023-04-13 09:10:00 (GMT) |
commit | e0364eb20dd69cc6db2981c33dc94ba353a5bc78 (patch) | |
tree | 6f40b244602cfa443ef54e81d1bda4f68c08483b /Source | |
parent | 9af53e9bcfadb1e613b72cd385a0dbe31ec0fd2a (diff) | |
download | CMake-e0364eb20dd69cc6db2981c33dc94ba353a5bc78.zip CMake-e0364eb20dd69cc6db2981c33dc94ba353a5bc78.tar.gz CMake-e0364eb20dd69cc6db2981c33dc94ba353a5bc78.tar.bz2 |
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
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmNinjaNormalTargetGenerator.cxx | 38 | ||||
-rw-r--r-- | Source/cmNinjaNormalTargetGenerator.h | 2 |
2 files changed, 35 insertions, 5 deletions
diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx index 4d68460..52c33f7 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 85f42a4..187ea46 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); |