From 18891efdf4813547bc4e5b3791ac7af72fa277c8 Mon Sep 17 00:00:00 2001 From: klaus triendl Date: Thu, 19 Jan 2023 14:14:48 +0200 Subject: Added 'hybrid CRT' targets for the Windows platform Reviewed-by: Hugo Landau Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/20081) --- Configurations/50-win-hybridcrt.conf | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Configurations/50-win-hybridcrt.conf (limited to 'Configurations') diff --git a/Configurations/50-win-hybridcrt.conf b/Configurations/50-win-hybridcrt.conf new file mode 100644 index 0000000000..2ddd25a42a --- /dev/null +++ b/Configurations/50-win-hybridcrt.conf @@ -0,0 +1,36 @@ +## -*- mode: perl; -*- +# Windows HybridCRT targets. +# +# https://github.com/microsoft/WindowsAppSDK/blob/77761e244289fda6b3d5f14c7bded189fed4fb89/docs/Coding-Guidelines/HybridCRT.md +# Link statically against the runtime and STL, but link dynamically against the CRT by ignoring the static CRT +# lib and instead linking against the Universal CRT DLL import library. This "Hybrid" linking mechanism is +# supported according to the CRT maintainer. Dynamic linking against the CRT makes the binaries a bit smaller +# than they would otherwise be if the CRT, runtime, and STL were all statically linked in. + + +sub remove_from_flags { + my ($toRemove, $flags) = @_; + + return $flags =~ s/$toRemove//r; +} + +my %targets = ( + "VC-WIN32-HYBRIDCRT" => { + inherit_from => [ "VC-WIN32" ], + cflags => sub { + remove_from_flags(qr/\/MDd?\s/, add(picker(debug => "/MTd", + release => "/MT"))->(@_)) + }, + lflags => add(picker(debug => "/NODEFAULTLIB:libucrtd.lib /DEFAULTLIB:ucrtd.lib", + release => "/NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")), + }, + "VC-WIN64A-HYBRIDCRT" => { + inherit_from => [ "VC-WIN64A" ], + cflags => sub { + remove_from_flags(qr/\/MDd?\s/, add(picker(debug => "/MTd", + release => "/MT"))->(@_)) + }, + lflags => add(picker(debug => "/NODEFAULTLIB:libucrtd.lib /DEFAULTLIB:ucrtd.lib", + release => "/NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")), + }, +); -- cgit v1.2.1