// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved. using System; using System.Collections.Generic; using System.IO; using System.Linq; using Flax.Build.Graph; using Flax.Build.NativeCpp; using Flax.Build.Projects.VisualStudio; namespace Flax.Build.Platforms { /// /// The Universal Windows Platform (UWP) toolchain implementation. /// /// /// public class UWPToolchain : WindowsToolchainBase { private readonly List _usingDirs = new List(); /// /// Initializes a new instance of the class. /// /// The platform. /// The target architecture. /// The target platform toolset version. /// The target platform SDK version. public UWPToolchain(UWPPlatform platform, TargetArchitecture architecture, WindowsPlatformToolset toolsetVer = WindowsPlatformToolset.Latest, WindowsPlatformSDK sdkVer = WindowsPlatformSDK.Latest) : base(platform, architecture, toolsetVer, sdkVer) { var visualStudio = VisualStudioInstance.GetInstances().FirstOrDefault(x => x.Version == VisualStudioVersion.VisualStudio2017 || x.Version == VisualStudioVersion.VisualStudio2019 || x.Version == VisualStudioVersion.VisualStudio2022); if (visualStudio == null) throw new Exception("Missing Visual Studio 2017 or newer. It's required to build for UWP."); _usingDirs.Add(Path.Combine(visualStudio.Path, "VC", "vcpackages")); var sdks = WindowsPlatformBase.GetSDKs(); var sdk10 = sdks.FirstOrDefault(x => x.Key != WindowsPlatformSDK.v8_1).Value; if (sdk10 == null) throw new Exception("Missing Windows 10 SDK. It's required to build for UWP."); var sdk10Ver = WindowsPlatformBase.GetSDKVersion(SDK).ToString(); _usingDirs.Add(Path.Combine(sdk10, "References")); _usingDirs.Add(Path.Combine(sdk10, "References", sdk10Ver)); _usingDirs.Add(Path.Combine(sdk10, "References", "CommonConfiguration", "Neutral")); _usingDirs.Add(Path.Combine(sdk10, "UnionMetadata", sdk10Ver)); } /// public override void LogInfo() { base.LogInfo(); Log.Error("UWP (Windows Store) platform has been deprecated and is no longer supported!"); } /// protected override void SetupCompileCppFilesArgs(TaskGraph graph, BuildOptions options, List args) { base.SetupCompileCppFilesArgs(graph, options, args); if (options.CompileEnv.WinRTComponentExtensions) { foreach (var path in _usingDirs) { args.Add(string.Format("/AI\"{0}\"", path)); } } } /// public override void SetupEnvironment(BuildOptions options) { base.SetupEnvironment(options); options.CompileEnv.PreprocessorDefinitions.Add("PLATFORM_UWP"); options.CompileEnv.PreprocessorDefinitions.Add("WINAPI_FAMILY=WINAPI_FAMILY_PC_APP"); options.CompileEnv.PreprocessorDefinitions.Add("_WINRT_DLL"); options.CompileEnv.PreprocessorDefinitions.Add("_WINDLL"); options.CompileEnv.PreprocessorDefinitions.Add("__WRL_NO_DEFAULT_LIB__"); options.LinkEnv.InputLibraries.Add("WindowsApp.lib"); } } }