Home | History | Annotate | Line # | Download | only in Configurations
      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 );
     38