|
@@ -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")),
|
|
|
+ },
|
|
|
+);
|