1 | ## -*- mode: perl; -*-
|
---|
2 | # Windows HybridCRT targets.
|
---|
3 | #
|
---|
4 | # https://github.com/microsoft/WindowsAppSDK/blob/77761e244289fda6b3d5f14c7bded189fed4fb89/docs/Coding-Guidelines/HybridCRT.md
|
---|
5 | # Link statically against the runtime and STL, but link dynamically against the CRT by ignoring the static CRT
|
---|
6 | # lib and instead linking against the Universal CRT DLL import library. This "Hybrid" linking mechanism is
|
---|
7 | # supported according to the CRT maintainer. Dynamic linking against the CRT makes the binaries a bit smaller
|
---|
8 | # than they would otherwise be if the CRT, runtime, and STL were all statically linked in.
|
---|
9 |
|
---|
10 |
|
---|
11 | sub remove_from_flags {
|
---|
12 | my ($toRemove, $flags) = @_;
|
---|
13 |
|
---|
14 | $flags =~ s/$toRemove//;
|
---|
15 | return $flags;
|
---|
16 | }
|
---|
17 |
|
---|
18 | my %targets = (
|
---|
19 | "VC-WIN32-HYBRIDCRT" => {
|
---|
20 | inherit_from => [ "VC-WIN32" ],
|
---|
21 | cflags => sub {
|
---|
22 | remove_from_flags(qr/\/MDd?\s/, add(picker(debug => "/MTd",
|
---|
23 | release => "/MT"))->(@_))
|
---|
24 | },
|
---|
25 | lflags => add(picker(debug => "/NODEFAULTLIB:libucrtd.lib /DEFAULTLIB:ucrtd.lib",
|
---|
26 | release => "/NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")),
|
---|
27 | },
|
---|
28 | "VC-WIN64A-HYBRIDCRT" => {
|
---|
29 | inherit_from => [ "VC-WIN64A" ],
|
---|
30 | cflags => sub {
|
---|
31 | remove_from_flags(qr/\/MDd?\s/, add(picker(debug => "/MTd",
|
---|
32 | release => "/MT"))->(@_))
|
---|
33 | },
|
---|
34 | lflags => add(picker(debug => "/NODEFAULTLIB:libucrtd.lib /DEFAULTLIB:ucrtd.lib",
|
---|
35 | release => "/NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")),
|
---|
36 | },
|
---|
37 | );
|
---|