summaryrefslogtreecommitdiffstats
path: root/Configurations
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2020-08-23 18:33:57 +0200
committerRichard Levitte <levitte@openssl.org>2020-09-07 09:23:49 +0200
commit385deae79f26dd685339d3141a06d04d6bd753cd (patch)
tree8d0e9546f02fa2dc0c036acd5716e372c458c41c /Configurations
parent6353507e9d4afe666ade7b8fdf0f0e673f57b36c (diff)
Building: Build Unix static libraries one object file at a time
We're hitting problems that the 'ar' command line becomes too long for some 'make' versions, or the shell it uses. We therefore change the way we create a static library by doing so one object file at a time. This is slower, but has better guarantees to work properly on limited systems. Fixes #12116 Reviewed-by: David von Oheimb <david.von.oheimb@siemens.com> (Merged from https://github.com/openssl/openssl/pull/12706)
Diffstat (limited to 'Configurations')
-rw-r--r--Configurations/00-base-templates.conf2
-rw-r--r--Configurations/unix-Makefile.tmpl11
2 files changed, 9 insertions, 4 deletions
diff --git a/Configurations/00-base-templates.conf b/Configurations/00-base-templates.conf
index 821a211cc8..340e789326 100644
--- a/Configurations/00-base-templates.conf
+++ b/Configurations/00-base-templates.conf
@@ -66,7 +66,7 @@ my %targets=(
template => 1,
AR => "ar",
- ARFLAGS => "r",
+ ARFLAGS => "qc",
CC => "cc",
lflags =>
sub { $withargs{zlib_lib} ? "-L".$withargs{zlib_lib} : () },
diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl
index ff4803be74..ff37aa0290 100644
--- a/Configurations/unix-Makefile.tmpl
+++ b/Configurations/unix-Makefile.tmpl
@@ -1508,11 +1508,16 @@ EOF
my %args = @_;
my $lib = platform->staticlib($args{lib});
my @objs = map { platform->obj($_) } @{$args{objs}};
- my $objs = join(" \\\n" . ' ' x (length($lib) + 2),
+ my $deps = join(" \\\n" . ' ' x (length($lib) + 2),
fill_lines(' ', $COLUMNS - length($lib) - 2, @objs));
+ my $max_per_call = 250;
+ my @objs_grouped;
+ push @objs_grouped, join(" ", splice @objs, 0, $max_per_call) while @objs;
+ my $fill_lib =
+ join("\n\t", (map { "\$(AR) \$(ARFLAGS) $lib $_" } @objs_grouped));
return <<"EOF";
-$lib: $objs
- \$(AR) \$(ARFLAGS) \$\@ \$\?
+$lib: $deps
+ $fill_lib
\$(RANLIB) \$\@ || echo Never mind.
EOF
}