/// <summary> /// Sets up the standard compile environment for the toolchain /// </summary> private void SetupEnvironment() { // Add the standard Visual C++ include paths IncludePaths.Add(DirectoryReference.Combine(ToolChainDir, "INCLUDE")); // Add the standard Visual C++ library paths if (Compiler >= WindowsCompiler.VisualStudio2017) { if (Platform == CppPlatform.Win32) { LibraryPaths.Add(DirectoryReference.Combine(ToolChainDir, "lib", "x86")); } else { LibraryPaths.Add(DirectoryReference.Combine(ToolChainDir, "lib", "x64")); } } else { if (Platform == CppPlatform.Win32) { LibraryPaths.Add(DirectoryReference.Combine(ToolChainDir, "LIB")); } else { LibraryPaths.Add(DirectoryReference.Combine(ToolChainDir, "LIB", "amd64")); } } // If we're on Visual Studio 2015 and using pre-Windows 10 SDK, we need to find a Windows 10 SDK and add the UCRT include paths if (Compiler >= WindowsCompiler.VisualStudio2015 && WindowsSdkVersion < new VersionNumber(10)) { KeyValuePair <VersionNumber, DirectoryReference> Pair = WindowsPlatform.FindUniversalCrtDirs().OrderByDescending(x => x.Key).FirstOrDefault(); if (Pair.Key == null || Pair.Key < new VersionNumber(10)) { throw new BuildException("{0} requires the Universal CRT to be installed.", WindowsPlatform.GetCompilerName(Compiler)); } DirectoryReference IncludeRootDir = DirectoryReference.Combine(Pair.Value, "include", Pair.Key.ToString()); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "ucrt")); DirectoryReference LibraryRootDir = DirectoryReference.Combine(Pair.Value, "lib", Pair.Key.ToString()); if (Platform == CppPlatform.Win64) { LibraryPaths.Add(DirectoryReference.Combine(LibraryRootDir, "ucrt", "x64")); } else { LibraryPaths.Add(DirectoryReference.Combine(LibraryRootDir, "ucrt", "x86")); } } // Add the NETFXSDK include path. We need this for SwarmInterface. DirectoryReference NetFxSdkDir; if (WindowsPlatform.TryGetNetFxSdkInstallDir(out NetFxSdkDir)) { IncludePaths.Add(DirectoryReference.Combine(NetFxSdkDir, "include", "um")); if (Platform == CppPlatform.Win32) { LibraryPaths.Add(DirectoryReference.Combine(NetFxSdkDir, "lib", "um", "x86")); } else { LibraryPaths.Add(DirectoryReference.Combine(NetFxSdkDir, "lib", "um", "x64")); } } // Add the Windows SDK paths if (WindowsSdkVersion >= new VersionNumber(10)) { DirectoryReference IncludeRootDir = DirectoryReference.Combine(WindowsSdkDir, "include", WindowsSdkVersion.ToString()); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "ucrt")); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "shared")); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "um")); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "winrt")); DirectoryReference LibraryRootDir = DirectoryReference.Combine(WindowsSdkDir, "lib", WindowsSdkVersion.ToString()); if (Platform == CppPlatform.Win64) { LibraryPaths.Add(DirectoryReference.Combine(LibraryRootDir, "ucrt", "x64")); LibraryPaths.Add(DirectoryReference.Combine(LibraryRootDir, "um", "x64")); } else { LibraryPaths.Add(DirectoryReference.Combine(LibraryRootDir, "ucrt", "x86")); LibraryPaths.Add(DirectoryReference.Combine(LibraryRootDir, "um", "x86")); } } else { DirectoryReference IncludeRootDir = DirectoryReference.Combine(WindowsSdkDir, "include"); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "shared")); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "um")); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "winrt")); DirectoryReference LibraryRootDir = DirectoryReference.Combine(WindowsSdkDir, "lib", "winv6.3"); if (Platform == CppPlatform.Win64) { LibraryPaths.Add(DirectoryReference.Combine(LibraryRootDir, "um", "x64")); } else { LibraryPaths.Add(DirectoryReference.Combine(LibraryRootDir, "um", "x86")); } } }
/// <summary> /// Sets up the standard compile environment for the toolchain /// </summary> private void SetupEnvironment(UnrealTargetPlatform Platform) { // Add the standard Visual C++ include paths IncludePaths.Add(DirectoryReference.Combine(ToolChainDir, "INCLUDE")); string ArchFolder = WindowsExports.GetArchitectureSubpath(Architecture); // Add the standard Visual C++ library paths if (ToolChain >= WindowsCompiler.VisualStudio2017) { if (Platform == UnrealTargetPlatform.HoloLens) { LibraryPaths.Add(DirectoryReference.Combine(ToolChainDir, "lib", ArchFolder, "store")); } else { LibraryPaths.Add(DirectoryReference.Combine(ToolChainDir, "lib", ArchFolder)); } } else { DirectoryReference LibsPath = DirectoryReference.Combine(ToolChainDir, "LIB"); if (Platform == UnrealTargetPlatform.HoloLens) { LibsPath = DirectoryReference.Combine(LibsPath, "store"); } if (Architecture == WindowsArchitecture.x64) { LibsPath = DirectoryReference.Combine(LibsPath, "amd64"); } else if (Architecture == WindowsArchitecture.ARM32) { LibsPath = DirectoryReference.Combine(LibsPath, "arm"); } LibraryPaths.Add(LibsPath); } // If we're on Visual Studio 2015 and using pre-Windows 10 SDK, we need to find a Windows 10 SDK and add the UCRT include paths if (ToolChain >= WindowsCompiler.VisualStudio2015_DEPRECATED && WindowsSdkVersion < new VersionNumber(10)) { KeyValuePair <VersionNumber, DirectoryReference> Pair = WindowsPlatform.FindUniversalCrtDirs().OrderByDescending(x => x.Key).FirstOrDefault(); if (Pair.Key == null || Pair.Key < new VersionNumber(10)) { throw new BuildException("{0} requires the Universal CRT to be installed.", WindowsPlatform.GetCompilerName(ToolChain)); } DirectoryReference IncludeRootDir = DirectoryReference.Combine(Pair.Value, "include", Pair.Key.ToString()); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "ucrt")); DirectoryReference LibraryRootDir = DirectoryReference.Combine(Pair.Value, "lib", Pair.Key.ToString()); LibraryPaths.Add(DirectoryReference.Combine(LibraryRootDir, "ucrt", ArchFolder)); } // Add the NETFXSDK include path. We need this for SwarmInterface. DirectoryReference NetFxSdkDir; if (WindowsPlatform.TryGetNetFxSdkInstallDir(out NetFxSdkDir)) { IncludePaths.Add(DirectoryReference.Combine(NetFxSdkDir, "include", "um")); LibraryPaths.Add(DirectoryReference.Combine(NetFxSdkDir, "lib", "um", ArchFolder)); } else { throw new BuildException("Could not find NetFxSDK install dir; this will prevent SwarmInterface from installing. Install a version of .NET Framework SDK at 4.6.0 or higher."); } // Add the Windows SDK paths if (WindowsSdkVersion >= new VersionNumber(10)) { DirectoryReference IncludeRootDir = DirectoryReference.Combine(WindowsSdkDir, "include", WindowsSdkVersion.ToString()); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "ucrt")); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "shared")); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "um")); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "winrt")); DirectoryReference LibraryRootDir = DirectoryReference.Combine(WindowsSdkDir, "lib", WindowsSdkVersion.ToString()); LibraryPaths.Add(DirectoryReference.Combine(LibraryRootDir, "ucrt", ArchFolder)); LibraryPaths.Add(DirectoryReference.Combine(LibraryRootDir, "um", ArchFolder)); } else { DirectoryReference IncludeRootDir = DirectoryReference.Combine(WindowsSdkDir, "include"); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "shared")); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "um")); IncludePaths.Add(DirectoryReference.Combine(IncludeRootDir, "winrt")); DirectoryReference LibraryRootDir = DirectoryReference.Combine(WindowsSdkDir, "lib", "winv6.3"); LibraryPaths.Add(DirectoryReference.Combine(LibraryRootDir, "um", ArchFolder)); } }