Ninja: also consider rule command length for rsp file

This commit is contained in:
Peter Kuemmel 2012-07-02 10:30:29 +02:00
parent 0c42faf63a
commit 6332ba5a58
3 changed files with 9 additions and 1 deletions

View File

@ -557,6 +557,8 @@ void cmGlobalNinjaGenerator::AddRule(const std::string& name,
rspfile, rspfile,
restat, restat,
generator); generator);
this->RuleCmdLength[name] = command.size();
} }
bool cmGlobalNinjaGenerator::HasRule(const std::string &name) bool cmGlobalNinjaGenerator::HasRule(const std::string &name)

View File

@ -319,6 +319,8 @@ private:
std::string ninjaCmd() const; std::string ninjaCmd() const;
int GetRuleCmdLength(const std::string& name) { return RuleCmdLength[name]; }
private: private:
/// The file containing the build statement. (the relation ship of the /// The file containing the build statement. (the relation ship of the
/// compilation DAG). /// compilation DAG).
@ -335,6 +337,9 @@ private:
/// The set of rules added to the generated build system. /// The set of rules added to the generated build system.
RulesSetType Rules; RulesSetType Rules;
/// Length of rule command, used by rsp file evaluation
std::map<std::string, int> RuleCmdLength;
/// The set of dependencies to add to the "all" target. /// The set of dependencies to add to the "all" target.
cmNinjaDeps AllDependencies; cmNinjaDeps AllDependencies;

View File

@ -480,7 +480,8 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
int cmdLineLimit; int cmdLineLimit;
#ifdef _WIN32 #ifdef _WIN32
cmdLineLimit = 8000; cmdLineLimit = 8000 - this->GetGlobalGenerator()->
GetRuleCmdLength(this->LanguageLinkerRule());
#else #else
cmdLineLimit = -1; // TODO cmdLineLimit = -1; // TODO
#endif #endif