]>
Commit | Line | Data |
---|---|---|
18891efd | 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 | ||
d30695ba RJ |
14 | $flags =~ s/$toRemove//; |
15 | return $flags; | |
18891efd | 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 | ); |