// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved. using System; using System.IO; using System.Linq; namespace Flax.Build.Platforms { /// /// The Microsoft Game Development Kit. /// /// public sealed class GDK : Sdk { /// /// The singleton instance. /// public static readonly GDK Instance = new GDK(); /// public override TargetPlatform[] Platforms => new[] { TargetPlatform.Windows, }; /// /// Initializes a new instance of the class. /// public GDK() { if (!Platforms.Contains(Platform.BuildTargetPlatform)) return; var sdkDir = Environment.GetEnvironmentVariable("GameDKLatest"); if (!Directory.Exists(sdkDir)) sdkDir = Environment.GetEnvironmentVariable("GRDKLatest"); if (Directory.Exists(sdkDir)) { if (sdkDir.EndsWith("GRDK\\")) sdkDir = sdkDir.Remove(sdkDir.Length - 6); else if (sdkDir.EndsWith("GRDK")) sdkDir = sdkDir.Remove(sdkDir.Length - 5); RootPath = sdkDir; // Read the SDK version number string sdkManifest = Path.Combine(RootPath, "GRDK", "grdk.ini"); if (File.Exists(sdkManifest)) { var contents = File.ReadAllText(sdkManifest); const string prefix = "_xbld_edition="; var start = contents.IndexOf(prefix) + prefix.Length; var end = contents.IndexOf("\r\n_xbld_full_productbuild"); var versionText = contents.Substring(start, end - start); Version = new Version(int.Parse(versionText), 0); var minEdition = 200500; if (Version.Major < minEdition) { Log.Error(string.Format("Unsupported GDK version {0}. Minimum supported is edition {1}.", Version.Major, minEdition)); return; } Log.Info(string.Format("Found GDK {0} at {1}", Version.Major, RootPath)); IsValid = true; } } } } }