Windows UWP builds: determine automatically if asm should be disabled
authorRichard Levitte <levitte@openssl.org>
Tue, 23 Jul 2019 07:21:10 +0000 (09:21 +0200)
committerRichard Levitte <levitte@openssl.org>
Sat, 17 Aug 2019 05:55:12 +0000 (07:55 +0200)
Earlier Windows SDK versions lack the necessary support for our ASM
builds, so we check for the SDK version that has the support.

Information on exactly what registry key to check was found here:

https://stackoverflow.com/questions/2665755/how-can-i-determine-the-version-of-the-windows-sdk-installed-on-my-computer

Ref: #9125

Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
(Merged from https://github.com/openssl/openssl/pull/9440)

Configurations/50-win-onecore.conf

index d4e6e64f15b24f4070cda5957495965051541d30..1e5d970b4bd9a70c18c56c4d7e0a4dbfd4dbc954 100644 (file)
@@ -1,3 +1,4 @@
+## -*- mode: perl; -*-
 # Windows OneCore targets.
 #
 # OneCore is new API stability "contract" that transcends Desktop, IoT and
 # TODO: extend error handling to use ETW based eventing
 # (Or rework whole error messaging)
 
+my $UWP_info = {};
+sub UWP_info {
+    unless (%$UWP_info) {
+        my $SDKver = `powershell -Command  \"& {\$(Get-Item \\\"hklm:\\SOFTWARE\\WOW6432Node\\Microsoft\\Microsoft SDKs\\Windows\\\").GetValue(\\\"CurrentVersion\\\")}\"`;
+        $SDKver =~ s|\R$||;
+        my @SDKver_split = split(/\./, $SDKver);
+        # SDK version older than 10.0.17763 don't support our ASM builds
+        if ($SDKver_split[0] < 10
+            || ($SDKver_split[0] == 10
+                && $SDKver_split[1] == 0
+                && $SDKver_split[2] < 17763)) {
+            $UWP_info->{disable} = [ 'asm' ];
+        } else {
+            $UWP_info->{disable} = [ ];
+        }
+    }
+    return $UWP_info;
+}
+
 my %targets = (
     "VC-WIN32-ONECORE" => {
         inherit_from    => [ "VC-WIN32" ],
@@ -80,7 +100,8 @@ my %targets = (
         defines         => add("WINAPI_FAMILY=WINAPI_FAMILY_APP",
                                "_WIN32_WINNT=0x0A00"),
         dso_scheme      => "",
-        disable         => [ 'ui-console', 'stdio', 'async', 'uplink' ],
+        disable         => sub { [ 'ui-console', 'stdio', 'async', 'uplink',
+                                   @{ UWP_info()->{disable} } ] },
         ex_libs         => "WindowsApp.lib",
     },
      "VC-WIN64A-UWP" => {
@@ -89,7 +110,8 @@ my %targets = (
         defines         => add("WINAPI_FAMILY=WINAPI_FAMILY_APP",
                                "_WIN32_WINNT=0x0A00"),
         dso_scheme      => "",
-        disable         => [ 'ui-console', 'stdio', 'async', 'uplink' ],
+        disable         => sub { [ 'ui-console', 'stdio', 'async', 'uplink',
+                                   @{ UWP_info()->{disable} } ] },
         ex_libs         => "WindowsApp.lib",
     },
     "VC-WIN32-ARM-UWP" => {
@@ -98,7 +120,8 @@ my %targets = (
         defines         => add("WINAPI_FAMILY=WINAPI_FAMILY_APP",
                                "_WIN32_WINNT=0x0A00"),
         dso_scheme      => "",
-        disable         => [ 'ui-console', 'stdio', 'async', 'uplink' ],
+        disable         => sub { [ 'ui-console', 'stdio', 'async', 'uplink',
+                                   @{ UWP_info()->{disable} } ] },
         ex_libs         => "WindowsApp.lib",
     },
      "VC-WIN64-ARM-UWP" => {
@@ -107,7 +130,8 @@ my %targets = (
         defines         => add("WINAPI_FAMILY=WINAPI_FAMILY_APP",
                                "_WIN32_WINNT=0x0A00"),
         dso_scheme      => "",
-        disable         => [ 'ui-console', 'stdio', 'async', 'uplink' ],
+        disable         => sub { [ 'ui-console', 'stdio', 'async', 'uplink',
+                                   @{ UWP_info()->{disable} } ] },
         ex_libs         => "WindowsApp.lib",
     },
 );