Merge topic 'ninja-link-rsp-expand'

dbd99d6 Revert "Ninja: don't expand any rsp files"
f1670ab Ninja: don't confuse ninja's rsp files with nmake's
This commit is contained in:
Brad King 2012-10-02 10:06:54 -04:00 committed by CMake Topic Stage
commit 851a3a0b75
7 changed files with 30 additions and 33 deletions

View File

@ -98,14 +98,11 @@ macro(__windows_compiler_intel lang)
set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "/DNDEBUG /MD /Zi /O2") set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "/DNDEBUG /MD /Zi /O2")
if(_INTEL_COMPILER_SUPPORTS_MANIFEST) if(_INTEL_COMPILER_SUPPORTS_MANIFEST)
if(CMAKE_GENERATOR MATCHES "Ninja")
set(NO_RSP_EXPAND _no_rsp_expand)
endif()
set(CMAKE_${lang}_LINK_EXECUTABLE set(CMAKE_${lang}_LINK_EXECUTABLE
"<CMAKE_COMMAND> -E vs_link_exe${NO_RSP_EXPAND} ${CMAKE_${lang}_LINK_EXECUTABLE}") "<CMAKE_COMMAND> -E vs_link_exe ${CMAKE_${lang}_LINK_EXECUTABLE}")
set(CMAKE_${lang}_CREATE_SHARED_LIBRARY set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
"<CMAKE_COMMAND> -E vs_link_dll${NO_RSP_EXPAND} ${CMAKE_${lang}_CREATE_SHARED_LIBRARY}") "<CMAKE_COMMAND> -E vs_link_dll ${CMAKE_${lang}_CREATE_SHARED_LIBRARY}")
set(CMAKE_${lang}_CREATE_SHARED_MODULE set(CMAKE_${lang}_CREATE_SHARED_MODULE
"<CMAKE_COMMAND> -E vs_link_dll${NO_RSP_EXPAND} ${CMAKE_${lang}_CREATE_SHARED_MODULE}") "<CMAKE_COMMAND> -E vs_link_dll ${CMAKE_${lang}_CREATE_SHARED_MODULE}")
endif() endif()
endmacro() endmacro()

View File

@ -212,11 +212,8 @@ set (CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL_INIT ${CMAKE_EXE_LINKER_FLAGS_MINSIZER
macro(__windows_compiler_msvc lang) macro(__windows_compiler_msvc lang)
if(NOT "${CMAKE_${lang}_COMPILER_VERSION}" VERSION_LESS 14) if(NOT "${CMAKE_${lang}_COMPILER_VERSION}" VERSION_LESS 14)
# for 2005 make sure the manifest is put in the dll with mt # for 2005 make sure the manifest is put in the dll with mt
if(CMAKE_GENERATOR MATCHES "Ninja") set(_CMAKE_VS_LINK_DLL "<CMAKE_COMMAND> -E vs_link_dll ")
set(NO_RSP_EXPAND _no_rsp_expand) set(_CMAKE_VS_LINK_EXE "<CMAKE_COMMAND> -E vs_link_exe ")
endif()
set(_CMAKE_VS_LINK_DLL "<CMAKE_COMMAND> -E vs_link_dll${NO_RSP_EXPAND} ")
set(_CMAKE_VS_LINK_EXE "<CMAKE_COMMAND> -E vs_link_exe${NO_RSP_EXPAND} ")
endif() endif()
set(CMAKE_${lang}_CREATE_SHARED_LIBRARY set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
"${_CMAKE_VS_LINK_DLL}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /dll /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}") "${_CMAKE_VS_LINK_DLL}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /dll /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")

View File

@ -106,6 +106,7 @@ void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os,
const cmNinjaDeps& implicitDeps, const cmNinjaDeps& implicitDeps,
const cmNinjaDeps& orderOnlyDeps, const cmNinjaDeps& orderOnlyDeps,
const cmNinjaVars& variables, const cmNinjaVars& variables,
const std::string& rspfile,
int cmdLineLimit) int cmdLineLimit)
{ {
// Make sure there is a rule. // Make sure there is a rule.
@ -181,12 +182,17 @@ void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os,
// check if a response file rule should be used // check if a response file rule should be used
std::string buildstr = build.str(); std::string buildstr = build.str();
const std::string assignments = variable_assignments.str(); std::string assignments = variable_assignments.str();
const std::string args = arguments.str(); const std::string args = arguments.str();
if (cmdLineLimit > 0 if (cmdLineLimit > 0
&& args.size() + buildstr.size() + assignments.size() && args.size() + buildstr.size() + assignments.size()
> (size_t) cmdLineLimit) > (size_t) cmdLineLimit) {
buildstr += "_RSPFILE"; buildstr += "_RSP_FILE";
variable_assignments.clear();
cmGlobalNinjaGenerator::WriteVariable(variable_assignments,
"RSP_FILE", rspfile, "", 1);
assignments += variable_assignments.str();
}
os << buildstr << args << assignments; os << buildstr << args << assignments;
} }

View File

@ -84,6 +84,7 @@ public:
const cmNinjaDeps& implicitDeps, const cmNinjaDeps& implicitDeps,
const cmNinjaDeps& orderOnlyDeps, const cmNinjaDeps& orderOnlyDeps,
const cmNinjaVars& variables, const cmNinjaVars& variables,
const std::string& rspfile = std::string(),
int cmdLineLimit = -1); int cmdLineLimit = -1);
/** /**

View File

@ -153,7 +153,7 @@ cmNinjaNormalTargetGenerator
cmTarget::TargetType targetType = this->GetTarget()->GetType(); cmTarget::TargetType targetType = this->GetTarget()->GetType();
std::string ruleName = this->LanguageLinkerRule(); std::string ruleName = this->LanguageLinkerRule();
if (useResponseFile) if (useResponseFile)
ruleName += "_RSPFILE"; ruleName += "_RSP_FILE";
// Select whether to use a response file for objects. // Select whether to use a response file for objects.
std::string rspfile; std::string rspfile;
@ -179,7 +179,7 @@ cmNinjaNormalTargetGenerator
} else { } else {
responseFlag = "@"; responseFlag = "@";
} }
rspfile = "$out.rsp"; rspfile = "$RSP_FILE";
responseFlag += rspfile; responseFlag += rspfile;
rspcontent = "$in $LINK_LIBRARIES"; rspcontent = "$in $LINK_LIBRARIES";
vars.Objects = responseFlag.c_str(); vars.Objects = responseFlag.c_str();
@ -549,6 +549,10 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
int commandLineLengthLimit = -1; int commandLineLengthLimit = -1;
#endif #endif
const std::string rspfile = std::string
(cmake::GetCMakeFilesDirectoryPostSlash()) +
this->GetTarget()->GetName() + ".rsp";
// Write the build statement for this target. // Write the build statement for this target.
cmGlobalNinjaGenerator::WriteBuild(this->GetBuildFileStream(), cmGlobalNinjaGenerator::WriteBuild(this->GetBuildFileStream(),
comment.str(), comment.str(),
@ -558,6 +562,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
implicitDeps, implicitDeps,
emptyDeps, emptyDeps,
vars, vars,
rspfile,
commandLineLengthLimit); commandLineLengthLimit);
if (targetOutput != targetOutputReal) { if (targetOutput != targetOutputReal) {

View File

@ -1683,19 +1683,11 @@ int cmake::ExecuteCMakeCommand(std::vector<std::string>& args)
} }
else if (args[1] == "vs_link_exe") else if (args[1] == "vs_link_exe")
{ {
return cmake::VisualStudioLink(args, 1, false); return cmake::VisualStudioLink(args, 1);
} }
else if (args[1] == "vs_link_dll") else if (args[1] == "vs_link_dll")
{ {
return cmake::VisualStudioLink(args, 2, false); return cmake::VisualStudioLink(args, 2);
}
else if (args[1] == "vs_link_exe_no_rsp_expand")
{
return cmake::VisualStudioLink(args, 1, true);
}
else if (args[1] == "vs_link_dll_no_rsp_expand")
{
return cmake::VisualStudioLink(args, 2, true);
} }
#ifdef CMAKE_BUILD_WITH_CMAKE #ifdef CMAKE_BUILD_WITH_CMAKE
// Internal CMake color makefile support. // Internal CMake color makefile support.
@ -4021,8 +4013,7 @@ static bool cmakeCheckStampList(const char* stampList)
// For visual studio 2005 and newer manifest files need to be embeded into // For visual studio 2005 and newer manifest files need to be embeded into
// exe and dll's. This code does that in such a way that incremental linking // exe and dll's. This code does that in such a way that incremental linking
// still works. // still works.
int cmake::VisualStudioLink(std::vector<std::string>& args, int type, int cmake::VisualStudioLink(std::vector<std::string>& args, int type)
bool no_rsp_expand)
{ {
if(args.size() < 2) if(args.size() < 2)
{ {
@ -4037,12 +4028,13 @@ int cmake::VisualStudioLink(std::vector<std::string>& args, int type,
for(std::vector<std::string>::iterator i = args.begin(); for(std::vector<std::string>::iterator i = args.begin();
i != args.end(); ++i) i != args.end(); ++i)
{ {
// check for nmake temporary files (there are two rsp files) // check for nmake temporary files
if(!no_rsp_expand && (*i)[0] == '@' && i->find("@CMakeFiles") != 0 ) if((*i)[0] == '@' && i->find("@CMakeFiles") != 0 )
{ {
std::ifstream fin(i->substr(1).c_str()); std::ifstream fin(i->substr(1).c_str());
std::string line; std::string line;
while(cmSystemTools::GetLineFromStream(fin, line)) while(cmSystemTools::GetLineFromStream(fin,
line))
{ {
cmSystemTools::ParseWindowsCommandLine(line.c_str(), expandedArgs); cmSystemTools::ParseWindowsCommandLine(line.c_str(), expandedArgs);
} }

View File

@ -447,8 +447,7 @@ protected:
std::string const& link); std::string const& link);
static int ExecuteEchoColor(std::vector<std::string>& args); static int ExecuteEchoColor(std::vector<std::string>& args);
static int ExecuteLinkScript(std::vector<std::string>& args); static int ExecuteLinkScript(std::vector<std::string>& args);
static int VisualStudioLink(std::vector<std::string>& args, int type, static int VisualStudioLink(std::vector<std::string>& args, int type);
bool no_rsp_expand);
static int VisualStudioLinkIncremental(std::vector<std::string>& args, static int VisualStudioLinkIncremental(std::vector<std::string>& args,
int type, int type,
bool verbose); bool verbose);