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:
commit
851a3a0b75
|
@ -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()
|
||||||
|
|
|
@ -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}")
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue