@@ -107,7 +107,7 @@ std::unique_ptr<cmMakefileTargetGenerator> cmMakefileTargetGenerator::New(
107107 return result;
108108}
109109
110- std::string cmMakefileTargetGenerator::GetConfigName ()
110+ std::string cmMakefileTargetGenerator::GetConfigName () const
111111{
112112 auto const & configNames = this ->LocalGenerator ->GetConfigNames ();
113113 assert (configNames.size () == 1 );
@@ -2080,7 +2080,7 @@ bool cmMakefileTargetGenerator::CheckUseResponseFileForLibraries(
20802080}
20812081
20822082std::string cmMakefileTargetGenerator::CreateResponseFile (
2083- const char * name, std::string const & options,
2083+ const std::string& name, std::string const & options,
20842084 std::vector<std::string>& makefile_depends)
20852085{
20862086 // FIXME: Find a better way to determine the response file encoding,
@@ -2126,7 +2126,8 @@ cmMakefileTargetGenerator::CreateLinkLineComputer(
21262126
21272127void cmMakefileTargetGenerator::CreateLinkLibs (
21282128 cmLinkLineComputer* linkLineComputer, std::string& linkLibs,
2129- bool useResponseFile, std::vector<std::string>& makefile_depends)
2129+ bool useResponseFile, std::vector<std::string>& makefile_depends,
2130+ ResponseFlagFor responseMode)
21302131{
21312132 std::string frameworkPath;
21322133 std::string linkPath;
@@ -2139,20 +2140,13 @@ void cmMakefileTargetGenerator::CreateLinkLibs(
21392140 if (useResponseFile &&
21402141 linkLibs.find_first_not_of (' ' ) != std::string::npos) {
21412142 // Lookup the response file reference flag.
2142- std::string responseFlagVar =
2143- cmStrCat (" CMAKE_" ,
2144- this ->GeneratorTarget ->GetLinkerLanguage (this ->GetConfigName ()),
2145- " _RESPONSE_FILE_LINK_FLAG" );
2146- std::string responseFlag;
2147- if (cmValue p = this ->Makefile ->GetDefinition (responseFlagVar)) {
2148- responseFlag = *p;
2149- } else {
2150- responseFlag = " @" ;
2151- }
2143+ std::string responseFlag = this ->GetResponseFlag (responseMode);
21522144
21532145 // Create this response file.
2146+ std::string responseFileName =
2147+ (responseMode == Link) ? " linkLibs.rsp" : " deviceLinkLibs.rsp" ;
21542148 std::string link_rsp =
2155- this ->CreateResponseFile (" linklibs.rsp " , linkLibs, makefile_depends);
2149+ this ->CreateResponseFile (responseFileName , linkLibs, makefile_depends);
21562150
21572151 // Reference the response file.
21582152 linkLibs = cmStrCat (responseFlag,
@@ -2164,7 +2158,7 @@ void cmMakefileTargetGenerator::CreateLinkLibs(
21642158void cmMakefileTargetGenerator::CreateObjectLists (
21652159 bool useLinkScript, bool useArchiveRules, bool useResponseFile,
21662160 std::string& buildObjs, std::vector<std::string>& makefile_depends,
2167- bool useWatcomQuote)
2161+ bool useWatcomQuote, ResponseFlagFor responseMode )
21682162{
21692163 std::string variableName;
21702164 std::string variableNameExternal;
@@ -2179,27 +2173,19 @@ void cmMakefileTargetGenerator::CreateObjectLists(
21792173 this ->WriteObjectsStrings (object_strings, responseFileLimit);
21802174
21812175 // Lookup the response file reference flag.
2182- std::string responseFlagVar =
2183- cmStrCat (" CMAKE_" ,
2184- this ->GeneratorTarget ->GetLinkerLanguage (this ->GetConfigName ()),
2185- " _RESPONSE_FILE_LINK_FLAG" );
2186- std::string responseFlag;
2187- if (cmValue p = this ->Makefile ->GetDefinition (responseFlagVar)) {
2188- responseFlag = *p;
2189- } else {
2190- responseFlag = " @" ;
2191- }
2176+ std::string responseFlag = this ->GetResponseFlag (responseMode);
21922177
21932178 // Write a response file for each string.
21942179 const char * sep = " " ;
21952180 for (unsigned int i = 0 ; i < object_strings.size (); ++i) {
21962181 // Number the response files.
2197- char rsp[32 ];
2198- snprintf (rsp, sizeof (rsp), " objects%u.rsp" , i + 1 );
2182+ std::string responseFileName =
2183+ (responseMode == Link) ? " objects" : " deviceObjects" ;
2184+ responseFileName += std::to_string (i + 1 );
21992185
22002186 // Create this response file.
2201- std::string objects_rsp =
2202- this -> CreateResponseFile (rsp , object_strings[i], makefile_depends);
2187+ std::string objects_rsp = this -> CreateResponseFile (
2188+ responseFileName , object_strings[i], makefile_depends);
22032189
22042190 // Separate from previous response file references.
22052191 buildObjs += sep;
@@ -2251,7 +2237,7 @@ void cmMakefileTargetGenerator::AddIncludeFlags(std::string& flags,
22512237 }
22522238 std::string name = cmStrCat (" includes_" , lang, " .rsp" );
22532239 std::string arg = std::move (responseFlag) +
2254- this ->CreateResponseFile (name. c_str () , includeFlags,
2240+ this ->CreateResponseFile (name, includeFlags,
22552241 this ->FlagFileDepends [lang]);
22562242 this ->LocalGenerator ->AppendFlags (flags, arg);
22572243 } else {
@@ -2304,3 +2290,22 @@ void cmMakefileTargetGenerator::GenDefFile(
23042290 fout << src->GetFullPath () << " \n " ;
23052291 }
23062292}
2293+
2294+ std::string cmMakefileTargetGenerator::GetResponseFlag (
2295+ ResponseFlagFor mode) const
2296+ {
2297+ std::string responseFlag = " @" ;
2298+ std::string responseFlagVar;
2299+
2300+ auto lang = this ->GeneratorTarget ->GetLinkerLanguage (this ->GetConfigName ());
2301+ if (mode == cmMakefileTargetGenerator::ResponseFlagFor::Link) {
2302+ responseFlagVar = cmStrCat (" CMAKE_" , lang, " _RESPONSE_FILE_LINK_FLAG" );
2303+ } else if (mode == cmMakefileTargetGenerator::ResponseFlagFor::DeviceLink) {
2304+ responseFlagVar = " CMAKE_CUDA_RESPONSE_FILE_DEVICE_LINK_FLAG" ;
2305+ }
2306+
2307+ if (cmValue p = this ->Makefile ->GetDefinition (responseFlagVar)) {
2308+ responseFlag = *p;
2309+ }
2310+ return responseFlag;
2311+ }
0 commit comments