mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-08 23:00:07 -06:00
Makefile: Fix command line limits for static libs
I have been hitting the Windows command-line limit when cross-compiling static library (POCO) and having more than 8000 characters in the call to "ar". Calculating exact limits here are tricky, since this particular limit will only take into account object file strings, which is correct for response files, but not for the archive rules (link.txt files), since they also contain the call to "ar" and its arguments. Also, there can be other additional arguments if "ar" tool is wrapped into something else, so it is a good idea to leave more space than trying to exactly fit the limit. Since response files use half of the limit as a heuristic, we reproduce it here for consistency.
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include <algorithm>
|
||||
#include <memory> // IWYU pragma: keep
|
||||
#include <sstream>
|
||||
#include <stddef.h>
|
||||
#include <vector>
|
||||
|
||||
#include "cmGeneratedFileStream.h"
|
||||
@@ -732,10 +733,14 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules(
|
||||
// Archiving rules never use a response file.
|
||||
useResponseFileForObjects = false;
|
||||
|
||||
// Limit the length of individual object lists to less than the
|
||||
// 32K command line length limit on Windows. We could make this a
|
||||
// platform file variable but this should work everywhere.
|
||||
archiveCommandLimit = 30000;
|
||||
// Limit the length of individual object lists to less than half of
|
||||
// the command line length limit (leaving half for other flags).
|
||||
// This may result in several calls to the archiver.
|
||||
if (size_t limit = cmSystemTools::CalculateCommandLineLengthLimit()) {
|
||||
archiveCommandLimit = limit / 2;
|
||||
} else {
|
||||
archiveCommandLimit = 8000;
|
||||
}
|
||||
}
|
||||
|
||||
// Expand the rule variables.
|
||||
|
||||
Reference in New Issue
Block a user