コード例 #1
0
        /// <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"));
                }
            }
        }
コード例 #2
0
        /// <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));
            }
        }