// Copyright Epic Games, Inc. All Rights Reserved. using System.Collections.Generic; using System.Diagnostics; using System.Linq; using EpicGames.Core; namespace UnrealBuildTool { ///////////////////////////////////////////////////////////////////////////////////// // If you are looking for any version numbers not listed here, see Windows_SDK.json ///////////////////////////////////////////////////////////////////////////////////// partial class MicrosoftPlatformSDK : UEBuildPlatformSDK { /// /// The minimum Windows SDK version to be used. If this is null then it means there is no minimum version /// static readonly VersionNumber? MinimumWindowsSDKVersion = new VersionNumber(10, 0, 18362, 0); /// /// The maximum Windows SDK version to be used. If this is null then it means "Latest" /// static readonly VersionNumber? MaximumWindowsSDKVersion = null; /// /// The default compiler version to be used, if installed. /// static readonly VersionNumberRange[] PreferredClangVersions = { VersionNumberRange.Parse("16.0.0", "16.999"), // VS2022 17.7.x runtime requires Clang 16 VersionNumberRange.Parse("15.0.0", "15.999"), // VS2022 17.5.x runtime requires Clang 15 }; /// /// The minimum supported Clang compiler /// static readonly VersionNumber MinimumClangVersion = new VersionNumber(15, 0, 0); /// /// Ranges of tested compiler toolchains to be used, in order of preference. If multiple toolchains in a range are present, the latest version will be preferred. /// Note that the numbers here correspond to the installation *folders* rather than precise executable versions. /// static readonly VersionNumberRange[] PreferredVisualCppVersions = new VersionNumberRange[] { VersionNumberRange.Parse("14.37.32822", "14.37.99990"), // VS2022 17.7.x VersionNumberRange.Parse("14.36.32532", "14.36.99999"), // VS2022 17.6.x VersionNumberRange.Parse("14.35.32215", "14.35.99999"), // VS2022 17.5.x VersionNumberRange.Parse("14.34.31933", "14.34.99999"), // VS2022 17.4.x VersionNumberRange.Parse("14.29.30133", "14.29.99999"), // VS2019 16.11.x }; /// /// Minimum Clang version required for MSVC toolchain versions /// static readonly IReadOnlyDictionary MinimumRequiredClangVersion = new Dictionary() { { new VersionNumber(14, 37), new VersionNumber(16) }, // VS2022 17.7.x { new VersionNumber(14, 35), new VersionNumber(15) }, // VS2022 17.5.x - 17.6.x { new VersionNumber(14, 34), new VersionNumber(14) }, // VS2022 17.4.x { new VersionNumber(14, 29), new VersionNumber(13) }, // VS2019 16.11.x }; /// /// Tested compiler toolchains that should not be allowed. /// static readonly VersionNumberRange[] BannedVisualCppVersions = new VersionNumberRange[] { VersionNumberRange.Parse("14.30.0", "14.33.99999"), // VS2022 17.0.x - 17.3.x }; /// /// The minimum supported MSVC compiler /// static readonly VersionNumber MinimumVisualCppVersion = new VersionNumber(14, 29, 30133); /// /// The default compiler version to be used, if installed. /// https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html#dpcpp-cpp /// static readonly VersionNumberRange[] PreferredIntelOneApiVersions = { VersionNumberRange.Parse("2023.1.0", "2023.9999"), }; /// /// The minimum supported Intel compiler /// static readonly VersionNumber MinimumIntelOneApiVersion = new VersionNumber(2023, 0, 0); /// protected override void GetValidSoftwareVersionRange(out string? MinVersion, out string? MaxVersion) { MinVersion = MinimumWindowsSDKVersion?.ToString(); MaxVersion = MaximumWindowsSDKVersion?.ToString(); } /// /// The minimum supported Clang version for a given MSVC toolchain /// /// /// public static VersionNumber GetMinimumClangVersionForVcVersion(VersionNumber VcVersion) { foreach (KeyValuePair Item in MinimumRequiredClangVersion) { if (VcVersion >= Item.Key) { return Item.Value; } } return MinimumClangVersion; } /// /// The base Clang version for a given Intel toolchain /// /// /// public static VersionNumber GetClangVersionForIntelCompiler(FileReference IntelCompilerPath) { FileReference LdLLdPath = FileReference.Combine(IntelCompilerPath.Directory, "..", "bin-llvm", "ld.lld.exe"); if (FileReference.Exists(LdLLdPath)) { FileVersionInfo VersionInfo = FileVersionInfo.GetVersionInfo(LdLLdPath.FullName); VersionNumber Version = new VersionNumber(VersionInfo.FileMajorPart, VersionInfo.FileMinorPart, VersionInfo.FileBuildPart); return Version; } return MinimumClangVersion; } /// /// Whether toolchain errors should be ignored. Enable to ignore banned toolchains when generating projects, /// as components such as the recommended toolchain can be installed by opening the generated solution via the .vsconfig file. /// If enabled the error will be downgraded to a warning. /// public static bool IgnoreToolchainErrors = false; } }