/// <summary> /// Sets up the standard compile environment for the toolchain /// </summary> private void SetupEnvironment(CppPlatform Platform) { // Add the standard Visual C++ include paths IncludePaths.Add(DirectoryReference.Combine(ToolChainDir, "INCLUDE")); // Add the standard Visual C++ library paths if (ToolChain >= 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 (ToolChain >= 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(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()); 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> /// Gets the path to the resource compiler's rc.exe for the specified platform. /// </summary> static FileReference GetResourceCompilerToolPath(CppPlatform Platform, DirectoryReference WindowsSdkDir, VersionNumber WindowsSdkVersion) { // 64 bit -- we can use the 32 bit version to target 64 bit on 32 bit OS. if (Platform == CppPlatform.Win64) { FileReference ResourceCompilerPath = FileReference.Combine(WindowsSdkDir, "bin", WindowsSdkVersion.ToString(), "x64", "rc.exe"); if (FileReference.Exists(ResourceCompilerPath)) { return(ResourceCompilerPath); } ResourceCompilerPath = FileReference.Combine(WindowsSdkDir, "bin", "x64", "rc.exe"); if (FileReference.Exists(ResourceCompilerPath)) { return(ResourceCompilerPath); } } else { FileReference ResourceCompilerPath = FileReference.Combine(WindowsSdkDir, "bin", WindowsSdkVersion.ToString(), "x86", "rc.exe"); if (FileReference.Exists(ResourceCompilerPath)) { return(ResourceCompilerPath); } ResourceCompilerPath = FileReference.Combine(WindowsSdkDir, "bin", "x86", "rc.exe"); if (FileReference.Exists(ResourceCompilerPath)) { return(ResourceCompilerPath); } } throw new BuildException("Unable to find path to the Windows resource compiler under {0} (version {1})", WindowsSdkDir, WindowsSdkVersion); }