summaryrefslogtreecommitdiffstats
path: root/Source/cmNinjaNormalTargetGenerator.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2017-04-21 12:51:42 (GMT)
committerKitware Robot <kwrobot@kitware.com>2017-04-21 12:51:49 (GMT)
commit718daeb4e6b93527ea8fa0b87091008737b0a897 (patch)
tree954f79f4e7808943a0954add77a80ea1eec1a316 /Source/cmNinjaNormalTargetGenerator.cxx
parentb5a5b227f9a3d88e1c493427e3983aee28c284eb (diff)
parentbbb5c3efe2a17d046506b7c27008c77ea244f0bc (diff)
downloadCMake-718daeb4e6b93527ea8fa0b87091008737b0a897.zip
CMake-718daeb4e6b93527ea8fa0b87091008737b0a897.tar.gz
CMake-718daeb4e6b93527ea8fa0b87091008737b0a897.tar.bz2
Merge topic 'unified-commandline-length'
bbb5c3ef Ninja,Makefile: Unify command line limit logic Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !705
Diffstat (limited to 'Source/cmNinjaNormalTargetGenerator.cxx')
-rw-r--r--Source/cmNinjaNormalTargetGenerator.cxx46
1 files changed, 6 insertions, 40 deletions
diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx
index aaeb659..edab2ba 100644
--- a/Source/cmNinjaNormalTargetGenerator.cxx
+++ b/Source/cmNinjaNormalTargetGenerator.cxx
@@ -5,11 +5,9 @@
#include <algorithm>
#include <assert.h>
#include <iterator>
-#include <limits>
#include <map>
#include <set>
#include <sstream>
-#include <stddef.h>
#include "cmAlgorithms.h"
#include "cmCustomCommand.h"
@@ -35,10 +33,6 @@
#include "cm_auto_ptr.hxx"
#include "cmake.h"
-#ifndef _WIN32
-#include <unistd.h>
-#endif
-
cmNinjaNormalTargetGenerator::cmNinjaNormalTargetGenerator(
cmGeneratorTarget* target)
: cmNinjaTargetGenerator(target)
@@ -546,36 +540,6 @@ std::vector<std::string> cmNinjaNormalTargetGenerator::ComputeLinkCmd()
return std::vector<std::string>();
}
-static int calculateCommandLineLengthLimit(int linkRuleLength)
-{
- static int const limits[] = {
-#ifdef _WIN32
- 8000,
-#endif
-#if defined(__linux)
- // #define MAX_ARG_STRLEN (PAGE_SIZE * 32) in Linux's binfmts.h
- ((int)sysconf(_SC_PAGESIZE) * 32) - 1000,
-#endif
- std::numeric_limits<int>::max()
- };
-
- size_t const arrSz = cmArraySize(limits);
- int sz = *std::min_element(limits, limits + arrSz);
-#if defined(_SC_ARG_MAX)
- // for instance ARG_MAX is 2096152 on Ubuntu or 262144 on Mac
- int const szArgMax = static_cast<int>(sysconf(_SC_ARG_MAX));
- // a return value of -1 signifies an unrestricted value
- if (szArgMax != -1) {
- sz = std::min(sz, szArgMax - 1000);
- }
-#endif
- if (sz == std::numeric_limits<int>::max()) {
- return 0;
- }
-
- return sz - linkRuleLength;
-}
-
void cmNinjaNormalTargetGenerator::WriteDeviceLinkStatement()
{
cmGeneratorTarget& genTarget = *this->GetGeneratorTarget();
@@ -761,8 +725,9 @@ void cmNinjaNormalTargetGenerator::WriteDeviceLinkStatement()
// Device linking currently doesn't support response files so
// do not check if the user has explicitly forced a response file.
- int const commandLineLengthLimit = calculateCommandLineLengthLimit(
- globalGen.GetRuleCmdLength(this->LanguageLinkerDeviceRule()));
+ int const commandLineLengthLimit =
+ static_cast<int>(cmSystemTools::CalculateCommandLineLengthLimit()) -
+ globalGen.GetRuleCmdLength(this->LanguageLinkerDeviceRule());
const std::string rspfile =
std::string(cmake::GetCMakeFilesDirectoryPostSlash()) +
@@ -1048,8 +1013,9 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
!(this->TargetLinkLanguage == "RC" || this->TargetLinkLanguage == "CUDA");
int commandLineLengthLimit = -1;
if (!lang_supports_response || !this->ForceResponseFile()) {
- commandLineLengthLimit = calculateCommandLineLengthLimit(
- globalGen.GetRuleCmdLength(this->LanguageLinkerRule()));
+ commandLineLengthLimit =
+ static_cast<int>(cmSystemTools::CalculateCommandLineLengthLimit()) -
+ globalGen.GetRuleCmdLength(this->LanguageLinkerRule());
}
const std::string rspfile =