mirror of
https://github.com/openssl/openssl.git
synced 2024-12-03 05:41:46 +08:00
bcc0025d0b
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)
138 lines
5.9 KiB
Perl
138 lines
5.9 KiB
Perl
## -*- mode: perl; -*-
|
|
# Windows OneCore targets.
|
|
#
|
|
# OneCore is new API stability "contract" that transcends Desktop, IoT and
|
|
# Mobile[?] Windows editions. It's a set up "umbrella" libraries that
|
|
# export subset of Win32 API that are common to all Windows 10 devices.
|
|
#
|
|
# OneCore Configuration temporarly dedicated for console applications
|
|
# due to disabled event logging, which is incompatible with one core.
|
|
# Error messages are provided via standard error only.
|
|
# 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" ],
|
|
# /NODEFAULTLIB:kernel32.lib is needed, because MSVCRT.LIB has
|
|
# hidden reference to kernel32.lib, but we don't actually want
|
|
# it in "onecore" build.
|
|
lflags => add("/NODEFAULTLIB:kernel32.lib"),
|
|
defines => add("OPENSSL_SYS_WIN_CORE"),
|
|
ex_libs => "onecore.lib",
|
|
},
|
|
"VC-WIN64A-ONECORE" => {
|
|
inherit_from => [ "VC-WIN64A" ],
|
|
lflags => add("/NODEFAULTLIB:kernel32.lib"),
|
|
defines => add("OPENSSL_SYS_WIN_CORE"),
|
|
ex_libs => "onecore.lib",
|
|
},
|
|
|
|
# Windows on ARM targets. ARM compilers are additional components in
|
|
# VS2017, i.e. they are not installed by default. And when installed,
|
|
# there are no "ARM Tool Command Prompt"s on Start menu, you have
|
|
# to locate vcvarsall.bat and act accordingly. VC-WIN32-ARM has
|
|
# received limited testing with evp_test.exe on Windows 10 IoT Core,
|
|
# but not VC-WIN64-ARM, no hardware... In other words they are not
|
|
# actually supported...
|
|
#
|
|
# Another thing to keep in mind [in cross-compilation scenario such
|
|
# as this one] is that target's file system has nothing to do with
|
|
# compilation system's one. This means that you're are likely to use
|
|
# --prefix and --openssldir with target-specific values. 'nmake install'
|
|
# step is effectively meaningless in cross-compilation case, though
|
|
# it might be useful to 'nmake install DESTDIR=S:\ome\where' where you
|
|
# can point Visual Studio to when compiling custom application code.
|
|
|
|
"VC-WIN32-ARM" => {
|
|
inherit_from => [ "VC-noCE-common" ],
|
|
defines => add("_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE",
|
|
"OPENSSL_SYS_WIN_CORE"),
|
|
bn_ops => "BN_LLONG RC4_CHAR",
|
|
lflags => add("/NODEFAULTLIB:kernel32.lib"),
|
|
ex_libs => "onecore.lib",
|
|
multilib => "-arm",
|
|
},
|
|
"VC-WIN64-ARM" => {
|
|
inherit_from => [ "VC-noCE-common" ],
|
|
defines => add("_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE",
|
|
"OPENSSL_SYS_WIN_CORE"),
|
|
bn_ops => "SIXTY_FOUR_BIT RC4_CHAR",
|
|
lflags => add("/NODEFAULTLIB:kernel32.lib"),
|
|
ex_libs => "onecore.lib",
|
|
multilib => "-arm64",
|
|
},
|
|
|
|
# Universal Windows Platform (UWP) App Support
|
|
|
|
# TODO
|
|
#
|
|
# The 'disable' attribute should have 'uplink'.
|
|
# however, these are checked in some 'inherit_from', which is processed
|
|
# very early, before the 'disable' attributes are seen.
|
|
# This is a problem that needs to be resolved in Configure first.
|
|
#
|
|
# But if you want to build library with Windows 10 Version 1809 SDK or
|
|
# earlier, the 'disable' attribute should also have 'asm'.
|
|
|
|
"VC-WIN32-UWP" => {
|
|
inherit_from => [ "VC-WIN32-ONECORE" ],
|
|
lflags => add("/APPCONTAINER"),
|
|
defines => add("WINAPI_FAMILY=WINAPI_FAMILY_APP",
|
|
"_WIN32_WINNT=0x0A00"),
|
|
dso_scheme => "",
|
|
disable => sub { [ 'ui-console', 'stdio', 'async', 'uplink',
|
|
@{ UWP_info()->{disable} } ] },
|
|
ex_libs => "WindowsApp.lib",
|
|
},
|
|
"VC-WIN64A-UWP" => {
|
|
inherit_from => [ "VC-WIN64A-ONECORE" ],
|
|
lflags => add("/APPCONTAINER"),
|
|
defines => add("WINAPI_FAMILY=WINAPI_FAMILY_APP",
|
|
"_WIN32_WINNT=0x0A00"),
|
|
dso_scheme => "",
|
|
disable => sub { [ 'ui-console', 'stdio', 'async', 'uplink',
|
|
@{ UWP_info()->{disable} } ] },
|
|
ex_libs => "WindowsApp.lib",
|
|
},
|
|
"VC-WIN32-ARM-UWP" => {
|
|
inherit_from => [ "VC-WIN32-ARM" ],
|
|
lflags => add("/APPCONTAINER"),
|
|
defines => add("WINAPI_FAMILY=WINAPI_FAMILY_APP",
|
|
"_WIN32_WINNT=0x0A00"),
|
|
dso_scheme => "",
|
|
disable => sub { [ 'ui-console', 'stdio', 'async', 'uplink',
|
|
@{ UWP_info()->{disable} } ] },
|
|
ex_libs => "WindowsApp.lib",
|
|
},
|
|
"VC-WIN64-ARM-UWP" => {
|
|
inherit_from => [ "VC-WIN64-ARM" ],
|
|
lflags => add("/APPCONTAINER"),
|
|
defines => add("WINAPI_FAMILY=WINAPI_FAMILY_APP",
|
|
"_WIN32_WINNT=0x0A00"),
|
|
dso_scheme => "",
|
|
disable => sub { [ 'ui-console', 'stdio', 'async', 'uplink',
|
|
@{ UWP_info()->{disable} } ] },
|
|
ex_libs => "WindowsApp.lib",
|
|
},
|
|
);
|