From b086de1c1261c8c9f4ee6cfccd79ad0d07d2d207 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 23 May 2024 16:21:38 +0200 Subject: [PATCH] Add `WindowsMinVer` config for minimum target Windows version switch --- .../Platform/Win32/IncludeWindowsHeaders.h | 13 ++------ Source/Engine/Video/MF/VideoBackendMF.cpp | 9 ++++++ .../Flax.Build/Platforms/UWP/UWPToolchain.cs | 1 + .../Platforms/Windows/WindowsToolchain.cs | 32 +++++++++++++++++++ 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/Source/Engine/Platform/Win32/IncludeWindowsHeaders.h b/Source/Engine/Platform/Win32/IncludeWindowsHeaders.h index 9f8a49dcf..fd1a84bab 100644 --- a/Source/Engine/Platform/Win32/IncludeWindowsHeaders.h +++ b/Source/Engine/Platform/Win32/IncludeWindowsHeaders.h @@ -9,20 +9,13 @@ #define WINVER 0x0601 #endif #ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x0601 +#define _WIN32_WINNT WINVER #endif #ifndef _WIN32_WINDOWS -#define _WIN32_WINDOWS 0x0601 +#define _WIN32_WINDOWS WINVER #endif -// Override Win API for UWP -#if PLATFORM_UWP -#define WINVER 0x0A00 -#define _WIN32_WINNT 0x0A00 -#define _WIN32_WINDOWS 0x0A00 -#endif - -// Override for Xbox Scarlett +// Override for Xbox #if PLATFORM_XBOX_SCARLETT || PLATFORM_XBOX_ONE #define NOBITMAP #define NOMCX diff --git a/Source/Engine/Video/MF/VideoBackendMF.cpp b/Source/Engine/Video/MF/VideoBackendMF.cpp index 29911575b..08676e6d8 100644 --- a/Source/Engine/Video/MF/VideoBackendMF.cpp +++ b/Source/Engine/Video/MF/VideoBackendMF.cpp @@ -11,6 +11,15 @@ #if USE_EDITOR #include "Editor/Editor.h" #endif +#include +#if WINVER >= _WIN32_WINNT_WINBLUE && WINVER < _WIN32_WINNT_WIN10 +// Fix compilation for Windows 8.1 on the latest Windows SDK +typedef enum _MFVideoSphericalFormat { } MFVideoSphericalFormat; +#endif +#ifndef MF_SOURCE_READER_CURRENT_TYPE_INDEX +// Fix compilation for Windows 7 on the latest Windows SDK +#define MF_SOURCE_READER_CURRENT_TYPE_INDEX 0xFFFFFFFF +#endif #include #include #include diff --git a/Source/Tools/Flax.Build/Platforms/UWP/UWPToolchain.cs b/Source/Tools/Flax.Build/Platforms/UWP/UWPToolchain.cs index 6cef48f52..964a3679c 100644 --- a/Source/Tools/Flax.Build/Platforms/UWP/UWPToolchain.cs +++ b/Source/Tools/Flax.Build/Platforms/UWP/UWPToolchain.cs @@ -77,6 +77,7 @@ namespace Flax.Build.Platforms options.CompileEnv.PreprocessorDefinitions.Add("_WINRT_DLL"); options.CompileEnv.PreprocessorDefinitions.Add("_WINDLL"); options.CompileEnv.PreprocessorDefinitions.Add("__WRL_NO_DEFAULT_LIB__"); + options.CompileEnv.PreprocessorDefinitions.Add("WINVER=0x0A00"); options.LinkEnv.InputLibraries.Add("WindowsApp.lib"); } diff --git a/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchain.cs b/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchain.cs index 66c39f853..e7354442b 100644 --- a/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchain.cs +++ b/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchain.cs @@ -1,10 +1,23 @@ // Copyright (c) 2012-2024 Wojciech Figat. All rights reserved. +using System; using System.Collections.Generic; using System.IO; using Flax.Build.Graph; using Flax.Build.NativeCpp; +namespace Flax.Build +{ + partial class Configuration + { + /// + /// Specifies the minimum Windows version to use (eg. 10). + /// + [CommandLine("winMinVer", "", "Specifies the minimum Windows version to use (eg. 10).")] + public static string WindowsMinVer = "7"; + } +} + namespace Flax.Build.Platforms { /// @@ -31,6 +44,25 @@ namespace Flax.Build.Platforms options.CompileEnv.PreprocessorDefinitions.Add("PLATFORM_WINDOWS"); + // Select minimum Windows version + if (!Version.TryParse(Configuration.WindowsMinVer, out var winMinVer)) + { + if (int.TryParse(Configuration.WindowsMinVer, out var winMinVerMajor)) + winMinVer = new Version(winMinVerMajor, 0); + else + winMinVer = new Version(7, 0); + } + int winVer; + if (winMinVer.Major >= 10) + winVer = 0x0A00; // Windows 10 + else if (winMinVer.Major == 8 && winMinVer.Minor >= 1) + winVer = 0x0603; // Windows 8.1 + else if (winMinVer.Major == 8) + winVer = 0x0602; // Windows 8 + else + winVer = 0x0601; // Windows 7 + options.CompileEnv.PreprocessorDefinitions.Add($"WINVER=0x{winVer:X4}"); + options.LinkEnv.InputLibraries.Add("dwmapi.lib"); options.LinkEnv.InputLibraries.Add("kernel32.lib"); options.LinkEnv.InputLibraries.Add("user32.lib");