예제 #1
0
        /// <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"));
                }
            }
        }
예제 #2
0
        /// <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);
        }