public override void GenerateGameProperties(UnrealTargetConfiguration Configuration, StringBuilder VCProjectFileContent, TargetType TargetType, DirectoryReference RootDirectory, FileReference TargetFilePath) { string MinVersion = string.Empty; string MaxTestedVersion = string.Empty; ConfigHierarchy EngineIni = ConfigCache.ReadHierarchy(ConfigHierarchyType.Engine, RootDirectory, UnrealTargetPlatform.HoloLens); if (EngineIni != null) { EngineIni.GetString("/Script/HoloLensPlatformEditor.HoloLensTargetSettings", "MinimumPlatformVersion", out MinVersion); EngineIni.GetString("/Script/HoloLensPlatformEditor.HoloLensTargetSettings", "MaximumPlatformVersionTested", out MaxTestedVersion); } if (!string.IsNullOrEmpty(MinVersion)) { VCProjectFileContent.Append(" <WindowsTargetPlatformMinVersion>"+ MinVersion + "</WindowsTargetPlatformMinVersion>" + ProjectFileGenerator.NewLine); } if (!string.IsNullOrEmpty(MaxTestedVersion)) { VCProjectFileContent.Append(" <WindowsTargetPlatformVersion>"+ MaxTestedVersion + "</WindowsTargetPlatformVersion>" + ProjectFileGenerator.NewLine); } WindowsCompiler Compiler = WindowsPlatform.GetDefaultCompiler(TargetFilePath); DirectoryReference PlatformWinMDLocation = HoloLens.GetCppCXMetadataLocation(Compiler, "Latest"); if (PlatformWinMDLocation == null || !FileReference.Exists(FileReference.Combine(PlatformWinMDLocation, "platform.winmd"))) { throw new BuildException("Unable to find platform.winmd for {0} toolchain; '{1}' is an invalid version", WindowsPlatform.GetCompilerName(Compiler), "Latest"); } string FoundationWinMDPath = HoloLens.GetLatestMetadataPathForApiContract("Windows.Foundation.FoundationContract", Compiler); string UniversalWinMDPath = HoloLens.GetLatestMetadataPathForApiContract("Windows.Foundation.UniversalApiContract", Compiler); VCProjectFileContent.Append(" <AdditionalOptions>/ZW /ZW:nostdlib</AdditionalOptions>"+ ProjectFileGenerator.NewLine); VCProjectFileContent.Append(" <NMakePreprocessorDefinitions>$(NMakePreprocessorDefinitions);PLATFORM_HOLOLENS=1;HOLOLENS=1;</NMakePreprocessorDefinitions>"+ ProjectFileGenerator.NewLine); if (PlatformWinMDLocation != null) { VCProjectFileContent.Append(" <NMakeAssemblySearchPath>$(NMakeAssemblySearchPath);"+ PlatformWinMDLocation + "</NMakeAssemblySearchPath>" + ProjectFileGenerator.NewLine); } VCProjectFileContent.Append(" <NMakeForcedUsingAssemblies>$(NMakeForcedUsingAssemblies);"+ FoundationWinMDPath + ";" + UniversalWinMDPath + ";platform.winmd</NMakeForcedUsingAssemblies>" + ProjectFileGenerator.NewLine); }
private void WriteEnvironmentSetup() { DirectoryReference VCInstallDir = null; string VCToolPath64 = ""; VCEnvironment VCEnv = null; try { VCEnv = VCEnvironment.Create(WindowsPlatform.GetDefaultCompiler(null), CppPlatform.Win64, null, null); } catch (Exception) { Console.WriteLine("Failed to get Visual Studio environment."); } // Copy environment into a case-insensitive dictionary for easier key lookups Dictionary <string, string> envVars = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); foreach (DictionaryEntry entry in Environment.GetEnvironmentVariables()) { envVars[(string)entry.Key] = (string)entry.Value; } if (envVars.ContainsKey("CommonProgramFiles")) { AddText("#import CommonProgramFiles\n"); } if (envVars.ContainsKey("DXSDK_DIR")) { AddText("#import DXSDK_DIR\n"); } if (envVars.ContainsKey("DurangoXDK")) { AddText("#import DurangoXDK\n"); } if (VCEnv != null) { string platformVersionNumber = "VSVersionUnknown"; platformVersionNumber = "140"; if (!WindowsPlatform.TryGetVSInstallDir(WindowsPlatform.GetDefaultCompiler(null), out VCInstallDir)) { string exceptionString = "Error: Cannot locate Visual Studio Installation."; Console.WriteLine(exceptionString); throw new BuildException(exceptionString); } VCToolPath64 = Environment.GetEnvironmentVariable("VC_COMPILER_DIR"); AddText(string.Format(".WindowsSDKBasePath = '{0}'\n", VCEnv.WindowsSdkDir)); AddText("Compiler('UE4ResourceCompiler') \n{\n"); AddText(string.Format("\t.Executable = '{0}'\n", VCEnv.ResourceCompilerPath)); AddText("\t.CompilerFamily = 'custom'\n"); AddText("}\n\n"); AddText("Compiler('UE4Compiler') \n{\n"); AddText(string.Format("\t.Root = '{0}'\n", VCEnv.CompilerPath.Directory)); AddText("\t.Executable = '$Root$/cl.exe'\n"); AddText("\t.ExtraFiles =\n\t{\n"); AddText("\t\t'$Root$/c1.dll'\n"); AddText("\t\t'$Root$/c1xx.dll'\n"); AddText("\t\t'$Root$/c2.dll'\n"); if (File.Exists(FileReference.Combine(VCEnv.CompilerPath.Directory, "1033/clui.dll").ToString())) //Check English first... { AddText("\t\t'$Root$/1033/clui.dll'\n"); } else { var numericDirectories = Directory.GetDirectories(VCToolPath64).Where(d => Path.GetFileName(d).All(char.IsDigit)); var cluiDirectories = numericDirectories.Where(d => Directory.GetFiles(d, "clui.dll").Any()); if (cluiDirectories.Any()) { AddText(string.Format("\t\t'$Root$/{0}/clui.dll'\n", Path.GetFileName(cluiDirectories.First()))); } } AddText("\t\t'$Root$/mspdbsrv.exe'\n"); AddText("\t\t'$Root$/mspdbcore.dll'\n"); AddText(string.Format("\t\t'$Root$/mspft{0}.dll'\n", platformVersionNumber)); AddText(string.Format("\t\t'$Root$/msobj{0}.dll'\n", platformVersionNumber)); AddText(string.Format("\t\t'$Root$/mspdb{0}.dll'\n", platformVersionNumber)); AddText(string.Format("\t\t'{0}/VC/Redist/MSVC/14.21.27702/x64/Microsoft.VC142.CRT/msvcp{1}.dll'\n", VCInstallDir.ToString(), platformVersionNumber)); AddText(string.Format("\t\t'{0}/VC/Redist/MSVC/14.21.27702/x64/Microsoft.VC142.CRT/vccorlib{1}.dll'\n", VCInstallDir.ToString(), platformVersionNumber)); AddText("\t}\n"); //End extra files AddText("}\n\n"); //End compiler } AddText("Settings \n{\n"); //Start Environment AddText("\t.Environment = \n\t{\n"); if (VCEnv != null) { AddText(string.Format("\t\t\"PATH={0}\\Common7\\IDE\\;{1}\",\n", VCInstallDir.ToString(), VCToolPath64)); if (VCEnv.IncludePaths.Count() > 0) { AddText(string.Format("\t\t\"INCLUDE={0}\",\n", String.Join(";", VCEnv.IncludePaths.Select(x => x)))); } if (VCEnv.LibraryPaths.Count() > 0) { AddText(string.Format("\t\t\"LIB={0}\",\n", String.Join(";", VCEnv.LibraryPaths.Select(x => x)))); } } if (envVars.ContainsKey("TMP")) { AddText(string.Format("\t\t\"TMP={0}\",\n", envVars["TMP"])); } if (envVars.ContainsKey("SystemRoot")) { AddText(string.Format("\t\t\"SystemRoot={0}\",\n", envVars["SystemRoot"])); } if (envVars.ContainsKey("INCLUDE")) { AddText(string.Format("\t\t\"INCLUDE={0}\",\n", envVars["INCLUDE"])); } if (envVars.ContainsKey("LIB")) { AddText(string.Format("\t\t\"LIB={0}\",\n", envVars["LIB"])); } AddText("\t}\n"); //End environment AddText("}\n\n"); //End Settings }
public override void ValidateTarget(TargetRules Target) { // WindowsTargetRules are reused for HoloLens, so that build modules can keep the model that reuses "windows" configs for most cases // That means overriding those settings here that need to be adjusted for HoloLens // Compiler version and pix flags must be reloaded from the HoloLens hive // Currently BP-only projects don't load build-related settings from their remote ini when building UE4Game.exe // (see TargetRules.cs, where the possibly-null project directory is passed to ConfigCache.ReadSettings). // It's important for HoloLens that we *do* use the project-specific settings when building (VS 2017 vs 2015 and // retail Windows Store are both examples). Possibly this should be done on all platforms? But in the interest // of not changing behavior on other platforms I'm limiting the scope. DirectoryReference IniDirRef = DirectoryReference.FromFile(Target.ProjectFile); if (IniDirRef == null && !string.IsNullOrEmpty(UnrealBuildTool.GetRemoteIniPath())) { IniDirRef = new DirectoryReference(UnrealBuildTool.GetRemoteIniPath()); } // Stash the current compiler choice (accounts for command line) in case ReadSettings reverts it to default WindowsCompiler CompilerBeforeReadSettings = Target.HoloLensPlatform.Compiler; ConfigCache.ReadSettings(IniDirRef, Platform, Target.HoloLensPlatform); if (Target.HoloLensPlatform.Compiler == WindowsCompiler.Default) { if (CompilerBeforeReadSettings != WindowsCompiler.Default) { // Previous setting was more specific, use that Target.HoloLensPlatform.Compiler = CompilerBeforeReadSettings; } else { Target.HoloLensPlatform.Compiler = WindowsPlatform.GetDefaultCompiler(Target.ProjectFile); } } if (!Target.bGenerateProjectFiles) { Log.TraceInformationOnce("Using {0} architecture for deploying to HoloLens device", Target.HoloLensPlatform.Architecture); } Target.WindowsPlatform.Compiler = Target.HoloLensPlatform.Compiler; Target.WindowsPlatform.Architecture = Target.HoloLensPlatform.Architecture; Target.WindowsPlatform.bPixProfilingEnabled = Target.HoloLensPlatform.bPixProfilingEnabled; Target.WindowsPlatform.bUseWindowsSDK10 = true; Target.bDeployAfterCompile = true; Target.bCompileNvCloth = false; // requires CUDA // Disable Simplygon support if compiling against the NULL RHI. if (Target.GlobalDefinitions.Contains("USE_NULL_RHI=1")) { Target.bCompileSpeedTree = false; } // Use shipping binaries to avoid dependency on nvToolsExt which fails WACK. if (Target.Configuration == UnrealTargetConfiguration.Shipping) { Target.bUseShippingPhysXLibraries = true; } // Be resilient to SDKs being uninstalled but still referenced in the INI file VersionNumber SelectedWindowsSdkVersion; DirectoryReference SelectedWindowsSdkDir; if (!WindowsPlatform.TryGetWindowsSdkDir(Target.HoloLensPlatform.Win10SDKVersionString, out SelectedWindowsSdkVersion, out SelectedWindowsSdkDir)) { Target.HoloLensPlatform.Win10SDKVersionString = "Latest"; } // Initialize the VC environment for the target, and set all the version numbers to the concrete values we chose. VCEnvironment Environment = VCEnvironment.Create(Target.WindowsPlatform.Compiler, Platform, Target.WindowsPlatform.Architecture, Target.WindowsPlatform.CompilerVersion, Target.HoloLensPlatform.Win10SDKVersionString, null); Target.WindowsPlatform.Environment = Environment; Target.WindowsPlatform.Compiler = Environment.Compiler; Target.WindowsPlatform.CompilerVersion = Environment.CompilerVersion.ToString(); Target.WindowsPlatform.WindowsSdkVersion = Environment.WindowsSdkVersion.ToString(); // Windows 10 SDK version // Auto-detect latest compatible by default (recommended), allow for explicit override if necessary // Validate that the SDK isn't too old, and that the combination of VS and SDK is supported. Target.HoloLensPlatform.Win10SDKVersion = new Version(Environment.WindowsSdkVersion.ToString()); if (!Target.bGenerateProjectFiles) { Log.TraceInformationOnce("Building using Windows SDK version {0} for HoloLens", Target.HoloLensPlatform.Win10SDKVersion); if (Target.HoloLensPlatform.Win10SDKVersion < MinimumSDKVersionRecommended) { Log.TraceWarning("Your Windows SDK version {0} is older than the minimum recommended version ({1}) for HoloLens. Consider upgrading.", Target.HoloLensPlatform.Win10SDKVersion, MinimumSDKVersionRecommended); } else if (Target.HoloLensPlatform.Win10SDKVersion > MaximumSDKVersionTested) { Log.TraceInformationOnce("Your Windows SDK version ({0}) for HoloLens is newer than the highest tested with this version of UBT ({1}). This is probably fine, but if you encounter issues consider using an earlier SDK.", Target.HoloLensPlatform.Win10SDKVersion, MaximumSDKVersionTested); } } HoloLensExports.InitWindowsSdkToolPath(Target.HoloLensPlatform.Win10SDKVersion.ToString()); }
private void WriteEnvironmentSetup() { VCEnvironment VCEnv = null; try { // This may fail if the caller emptied PATH; we try to ignore the problem since // it probably means we are building for another platform. if (BuildType == FBBuildType.Windows) { VCEnv = VCEnvironment.SetEnvironment(CppPlatform.Win64, WindowsPlatform.GetDefaultCompiler(null)); } else if (BuildType == FBBuildType.XBOne) { // If you have XboxOne source access, uncommenting the line below will be better for selecting the appropriate version of the compiler. // Translate the XboxOne compiler to the right Windows compiler to set the VC environment vars correctly... //WindowsCompiler windowsCompiler = XboxOnePlatform.GetDefaultCompiler() == XboxOneCompiler.VisualStudio2015 ? WindowsCompiler.VisualStudio2015 : WindowsCompiler.VisualStudio2017; //VCEnv = VCEnvironment.SetEnvironment(CppPlatform.Win64, windowsCompiler); } } catch (Exception) { Console.WriteLine("Failed to get Visual Studio environment."); } // Copy environment into a case-insensitive dictionary for easier key lookups Dictionary <string, string> envVars = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); foreach (DictionaryEntry entry in Environment.GetEnvironmentVariables()) { envVars[(string)entry.Key] = (string)entry.Value; } if (envVars.ContainsKey("CommonProgramFiles")) { AddText("#import CommonProgramFiles\n"); } if (envVars.ContainsKey("DXSDK_DIR")) { AddText("#import DXSDK_DIR\n"); } if (envVars.ContainsKey("DurangoXDK")) { AddText("#import DurangoXDK\n"); } if (VCEnv != null) { string platformVersionNumber = "VSVersionUnknown"; switch (VCEnv.Compiler) { case WindowsCompiler.VisualStudio2015: platformVersionNumber = "140"; break; case WindowsCompiler.VisualStudio2017: // For now we are working with the 140 version, might need to change to 141 or 150 depending on the version of the Toolchain you chose // to install platformVersionNumber = "140"; break; default: string exceptionString = "Error: Unsupported Visual Studio Version."; Console.WriteLine(exceptionString); throw new BuildException(exceptionString); } AddText(string.Format(".WindowsSDKBasePath = '{0}'\n", VCEnv.WindowsSDKDir)); AddText("Compiler('UE4ResourceCompiler') \n{\n"); AddText("\t.Executable = '$WindowsSDKBasePath$/bin/x64/rc.exe'\n"); AddText("\t.CompilerFamily = 'custom'\n"); AddText("}\n\n"); AddText("Compiler('UE4Compiler') \n{\n"); AddText(string.Format("\t.Root = '{0}'\n", VCEnv.VCToolPath64)); AddText("\t.Executable = '$Root$/cl.exe'\n"); AddText("\t.ExtraFiles =\n\t{\n"); AddText("\t\t'$Root$/c1.dll'\n"); AddText("\t\t'$Root$/c1xx.dll'\n"); AddText("\t\t'$Root$/c2.dll'\n"); if (File.Exists(VCEnv.VCToolPath64 + "1033/clui.dll")) //Check English first... { AddText("\t\t'$Root$/1033/clui.dll'\n"); } else { var numericDirectories = Directory.GetDirectories(VCEnv.VCToolPath64.ToString()).Where(d => Path.GetFileName(d).All(char.IsDigit)); var cluiDirectories = numericDirectories.Where(d => Directory.GetFiles(d, "clui.dll").Any()); if (cluiDirectories.Any()) { AddText(string.Format("\t\t'$Root$/{0}/clui.dll'\n", Path.GetFileName(cluiDirectories.First()))); } } AddText("\t\t'$Root$/mspdbsrv.exe'\n"); AddText("\t\t'$Root$/mspdbcore.dll'\n"); AddText(string.Format("\t\t'$Root$/mspft{0}.dll'\n", platformVersionNumber)); AddText(string.Format("\t\t'$Root$/msobj{0}.dll'\n", platformVersionNumber)); AddText(string.Format("\t\t'$Root$/mspdb{0}.dll'\n", platformVersionNumber)); if (VCEnv.Compiler == WindowsCompiler.VisualStudio2015) { AddText(string.Format("\t\t'{0}/redist/x64/Microsoft.VC{1}.CRT/msvcp{2}.dll'\n", VCEnv.VCInstallDir, platformVersionNumber, platformVersionNumber)); AddText(string.Format("\t\t'{0}/redist/x64/Microsoft.VC{1}.CRT/vccorlib{2}.dll'\n", VCEnv.VCInstallDir, platformVersionNumber, platformVersionNumber)); } else { //VS 2017 is really confusing in terms of version numbers and paths so these values might need to be modified depending on what version of the tool chain you // chose to install. AddText(string.Format("\t\t'{0}/Redist/MSVC/14.12.25810/x64/Microsoft.VC141.CRT/msvcp{1}.dll'\n", VCEnv.VCInstallDir, platformVersionNumber)); AddText(string.Format("\t\t'{0}/Redist/MSVC/14.12.25810/x64/Microsoft.VC141.CRT/vccorlib{1}.dll'\n", VCEnv.VCInstallDir, platformVersionNumber)); } AddText("\t}\n"); //End extra files AddText("}\n\n"); //End compiler } if (envVars.ContainsKey("SCE_ORBIS_SDK_DIR")) { AddText(string.Format(".SCE_ORBIS_SDK_DIR = '{0}'\n", envVars["SCE_ORBIS_SDK_DIR"])); AddText(string.Format(".PS4BasePath = '{0}/host_tools/bin'\n\n", envVars["SCE_ORBIS_SDK_DIR"])); AddText("Compiler('UE4PS4Compiler') \n{\n"); AddText("\t.Executable = '$PS4BasePath$/orbis-clang.exe'\n"); AddText("}\n\n"); } AddText("Settings \n{\n"); // Optional cachePath user setting if (bEnableCaching && CachePath != "") { AddText(string.Format("\t.CachePath = '{0}'\n", CachePath)); } //Start Environment AddText("\t.Environment = \n\t{\n"); if (VCEnv != null) { AddText(string.Format("\t\t\"PATH={0}\\Common7\\IDE\\;{1}\",\n", VCEnv.VCInstallDir, VCEnv.VCToolPath64)); } if (envVars.ContainsKey("TMP")) { AddText(string.Format("\t\t\"TMP={0}\",\n", envVars["TMP"])); } if (envVars.ContainsKey("SystemRoot")) { AddText(string.Format("\t\t\"SystemRoot={0}\",\n", envVars["SystemRoot"])); } if (envVars.ContainsKey("INCLUDE")) { AddText(string.Format("\t\t\"INCLUDE={0}\",\n", envVars["INCLUDE"])); } if (envVars.ContainsKey("LIB")) { AddText(string.Format("\t\t\"LIB={0}\",\n", envVars["LIB"])); } AddText("\t}\n"); //End environment AddText("}\n\n"); //End Settings }
private void WriteEnvironmentSetup() { DirectoryReference VCInstallDir = null; string VCToolPath64 = ""; VCEnvironment VCEnv = null; try { VCEnv = VCEnvironment.Create(WindowsPlatform.GetDefaultCompiler(null), UnrealTargetPlatform.Win64, WindowsArchitecture.x64, null, null, null); } catch (Exception) { Log.TraceError("Failed to get Visual Studio environment."); } // Copy environment into a case-insensitive dictionary for easier key lookups Dictionary <string, string> envVars = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); foreach (DictionaryEntry entry in Environment.GetEnvironmentVariables()) { envVars[(string)entry.Key] = (string)entry.Value; } if (envVars.ContainsKey("CommonProgramFiles")) { AddText("#import CommonProgramFiles\n"); } if (envVars.ContainsKey("DXSDK_DIR")) { AddText("#import DXSDK_DIR\n"); } if (envVars.ContainsKey("DurangoXDK")) { AddText("#import DurangoXDK\n"); } if (VCEnv != null) { string platformVersionNumber = "VSVersionUnknown"; switch (VCEnv.Compiler) { case WindowsCompiler.VisualStudio2017: // For now we are working with the 140 version, might need to change to 141 or 150 depending on the version of the Toolchain you chose // to install platformVersionNumber = "140"; break; case WindowsCompiler.VisualStudio2019: platformVersionNumber = "140"; break; default: string exceptionString = "Error: Unsupported Visual Studio Version."; Log.TraceError(exceptionString); throw new BuildException(exceptionString); } if (!WindowsPlatform.TryGetVSInstallDir(WindowsPlatform.GetDefaultCompiler(null), out VCInstallDir)) { string exceptionString = "Error: Cannot locate Visual Studio Installation."; Log.TraceError(exceptionString); throw new BuildException(exceptionString); } VCToolPath64 = VCEnv.CompilerPath.Directory.ToString() + "\\"; AddText(string.Format(".WindowsSDKBasePath = '{0}'\n", VCEnv.WindowsSdkDir)); AddText("Compiler('UE4ResourceCompiler') \n{\n"); AddText(string.Format("\t.Executable = '{0}'\n", VCEnv.ResourceCompilerPath)); AddText("\t.CompilerFamily = 'custom'\n"); AddText("}\n\n"); AddText("Compiler('UE4Compiler') \n{\n"); AddText(string.Format("\t.Root = '{0}'\n", VCEnv.CompilerPath.Directory)); AddText("\t.Executable = '$Root$/cl.exe'\n"); AddText("\t.ExtraFiles =\n\t{\n"); AddText("\t\t'$Root$/c1.dll'\n"); AddText("\t\t'$Root$/c1xx.dll'\n"); AddText("\t\t'$Root$/c2.dll'\n"); if (File.Exists(FileReference.Combine(VCEnv.CompilerPath.Directory, "1033/clui.dll").ToString())) //Check English first... { AddText("\t\t'$Root$/1033/clui.dll'\n"); } else { var numericDirectories = Directory.GetDirectories(VCToolPath64).Where(d => Path.GetFileName(d).All(char.IsDigit)); var cluiDirectories = numericDirectories.Where(d => Directory.GetFiles(d, "clui.dll").Any()); if (cluiDirectories.Any()) { AddText(string.Format("\t\t'$Root$/{0}/clui.dll'\n", Path.GetFileName(cluiDirectories.First()))); } } AddText("\t\t'$Root$/mspdbsrv.exe'\n"); AddText("\t\t'$Root$/mspdbcore.dll'\n"); AddText(string.Format("\t\t'$Root$/mspft{0}.dll'\n", platformVersionNumber)); AddText(string.Format("\t\t'$Root$/msobj{0}.dll'\n", platformVersionNumber)); AddText(string.Format("\t\t'$Root$/mspdb{0}.dll'\n", platformVersionNumber)); var redistDirs = Directory.GetDirectories(VCInstallDir.ToString() + "\\VC\\Redist\\MSVC\\", "*", SearchOption.TopDirectoryOnly); if (redistDirs.Length > 0) { Regex regex = new Regex(@"\d{2}\.\d{2}\.\d{5}$"); string redistDir = redistDirs.First((s) => { return(regex.IsMatch(s)); }); if (VCEnv.Compiler == WindowsCompiler.VisualStudio2019) { AddText(string.Format("\t\t'{0}/x64/Microsoft.VC142.CRT/msvcp{1}.dll'\n", redistDir, platformVersionNumber)); AddText(string.Format("\t\t'{0}/x64/Microsoft.VC142.CRT/vccorlib{1}.dll'\n", redistDir, platformVersionNumber)); AddText("\t\t'$Root$/tbbmalloc.dll'\n"); } else if (VCEnv.Compiler == WindowsCompiler.VisualStudio2017) { //VS 2017 is really confusing in terms of version numbers and paths so these values might need to be modified depending on what version of the tool chain you // chose to install. AddText(string.Format("\t\t'{0}/x64/Microsoft.VC141.CRT/msvcp{1}.dll'\n", redistDir, platformVersionNumber)); AddText(string.Format("\t\t'{0}/x64/Microsoft.VC141.CRT/vccorlib{1}.dll'\n", redistDir, platformVersionNumber)); } } AddText("\t}\n"); //End extra files AddText("}\n\n"); //End compiler } if (envVars.ContainsKey("SCE_ORBIS_SDK_DIR")) { AddText(string.Format(".SCE_ORBIS_SDK_DIR = '{0}'\n", envVars["SCE_ORBIS_SDK_DIR"])); AddText(string.Format(".PS4BasePath = '{0}/host_tools/bin'\n\n", envVars["SCE_ORBIS_SDK_DIR"])); AddText("Compiler('UE4PS4Compiler') \n{\n"); AddText("\t.Executable = '$PS4BasePath$/orbis-clang.exe'\n"); AddText("\t.ExtraFiles = '$PS4BasePath$/orbis-snarl.exe'\n"); AddText("}\n\n"); } AddText("Settings \n{\n"); // Optional cachePath user setting if (bEnableCaching && CachePath != "") { AddText(string.Format("\t.CachePath = '{0}'\n", CachePath)); } //Start Environment AddText("\t.Environment = \n\t{\n"); if (VCEnv != null) { AddText(string.Format("\t\t\"PATH={0}\\Common7\\IDE\\;{1};{2}\",\n", VCInstallDir.ToString(), VCToolPath64, VCEnv.ResourceCompilerPath.Directory)); if (VCEnv.IncludePaths.Count() > 0) { AddText(string.Format("\t\t\"INCLUDE={0}\",\n", String.Join(";", VCEnv.IncludePaths.Select(x => x)))); } if (VCEnv.LibraryPaths.Count() > 0) { AddText(string.Format("\t\t\"LIB={0}\",\n", String.Join(";", VCEnv.LibraryPaths.Select(x => x)))); } } if (envVars.ContainsKey("TMP")) { AddText(string.Format("\t\t\"TMP={0}\",\n", envVars["TMP"])); } if (envVars.ContainsKey("SystemRoot")) { AddText(string.Format("\t\t\"SystemRoot={0}\",\n", envVars["SystemRoot"])); } if (envVars.ContainsKey("INCLUDE")) { AddText(string.Format("\t\t\"INCLUDE={0}\",\n", envVars["INCLUDE"])); } if (envVars.ContainsKey("LIB")) { AddText(string.Format("\t\t\"LIB={0}\",\n", envVars["LIB"])); } AddText("\t}\n"); //End environment AddText("}\n\n"); //End Settings }