--- /dev/null
+## -*- 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")),
+ },
+);
As mentioned in the [Choices](#choices) section, you need to pick one
of the four Configure targets in the first command.
-Most likely you will be using the `VC-WIN64A` target for 64bit Windows
-binaries (AMD64) or `VC-WIN32` for 32bit Windows binaries (X86).
+Most likely you will be using the `VC-WIN64A`/`VC-WIN64A-HYBRIDCRT` target for
+64bit Windows binaries (AMD64) or `VC-WIN32`/`VC-WIN32-HYBRIDCRT` for 32bit
+Windows binaries (X86).
The other two options are `VC-WIN64I` (Intel IA64, Itanium) and
`VC-CE` (Windows CE) are rather uncommon nowadays.
- `perl Configure VC-WIN64A` if you want 64-bit OpenSSL or
- `perl Configure VC-WIN64-ARM` if you want Windows on Arm (win-arm64)
OpenSSL or
+ - `perl Configure VC-WIN32-HYBRIDCRT`
+ - `perl Configure VC-WIN64A-HYBRIDCRT`
- `perl Configure` to let Configure figure out the platform
6. `nmake`