Commit be67880c1e for openssl.org
commit be67880c1e6e37102a8488f81a8263554fa97d53
Author: Milan Broz <gmazyland@gmail.com>
Date: Thu Apr 2 12:51:46 2026 +0200
Windows: Use /Z7 compiler flag to enable parallel builds
MSVC compilation on Windows cannot be reliably parallelized
with tools like jom (an nmake replacement) due to contention
on shared .pdb files used for debug info. Writes to a shared
.pdb must be serialized.
The /FS compiler flag serializes concurrent compiler writes,
but does not resolve contention when the compiler and linker
access the same .pdb file. With shared .pdb files (e.g. app.pdb),
the makefile does not prevent races between the linker and
compilation of multiple targets.
This can be resolved either by restructuring the makefile
to introduce sentinel dependencies that serialize the conflicting
steps, or by eliminating the shared .pdb entirely.
This patch takes the latter approach: it replaces /Zi with /Z7,
which embeds debug info directly into each .obj file and avoids
any shared-file contention. /Z7 is supported by all MSVC versions.
The linker-generated .pdb is unaffected.
Side effects: object files are slightly larger, and all .pdb files
are now named after their target — the shared app.pdb, ossl_static.pdb,
and dso.pdb no longer exist.
With this change, jom can be used to parallelize the build.
Fixes: #9931
Signed-off-by: Milan Broz <gmazyland@gmail.com>
Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Norbert Pocs <norbertp@openssl.org>
MergeDate: Mon Apr 13 08:46:20 2026
(Merged from https://github.com/openssl/openssl/pull/30703)
diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf
index 76cbf0ffa0..c7002eff39 100644
--- a/Configurations/10-main.conf
+++ b/Configurations/10-main.conf
@@ -1541,10 +1541,10 @@ my %targets = (
"UNICODE", "_UNICODE",
"_CRT_SECURE_NO_DEPRECATE",
"_WINSOCK_DEPRECATED_NO_WARNINGS"),
- lib_cflags => add("/Zi /Fdossl_static.pdb"),
+ lib_cflags => add("/Z7"),
lib_defines => add("L_ENDIAN"),
- dso_cflags => "/Zi /Fddso.pdb",
- bin_cflags => "/Zi /Fdapp.pdb",
+ dso_cflags => "/Z7",
+ bin_cflags => "/Z7",
# def_flag made to empty string so a .def file gets generated
shared_defflag => '',
shared_ldflag => "/dll",
diff --git a/Configurations/windows-makefile.tmpl b/Configurations/windows-makefile.tmpl
index a3c52ac19d..16fed4670d 100644
--- a/Configurations/windows-makefile.tmpl
+++ b/Configurations/windows-makefile.tmpl
@@ -450,7 +450,7 @@ uninstall: {- "uninstall_docs" if !$disabled{docs}; -} uninstall_sw {- $disabled
libclean:
"$(PERL)" -e "map { m/(.*)\.dll$$/; unlink glob """{.,apps,test,fuzz}/$$1.*"""; } @ARGV" $(SHLIBS)
- -del /Q /F $(LIBS) libcrypto.* libssl.* ossl_static.pdb
+ -del /Q /F $(LIBS) libcrypto.* libssl.*
clean: libclean
{- join("\n\t", map { "-if exist $_ del /Q /F $_" } @HTMLDOCS1) || "\@rem" -}
@@ -545,8 +545,6 @@ install_dev: install_runtime_libs
"$(INSTALLTOP)\include\openssl"
@"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(libdir)"
@"$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_LIBS) "$(libdir)"
- @if "$(SHLIBS)"=="" \
- "$(PERL)" "$(SRCDIR)\util\copy.pl" ossl_static.pdb "$(libdir)"
@"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(CMAKECONFIGDIR)"
@"$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_EXPORTERS_CMAKE) "$(CMAKECONFIGDIR)"