diff --git a/Source/Editor/Windows/GameCookerWindow.cs b/Source/Editor/Windows/GameCookerWindow.cs index 54aec19ab..232b51d8d 100644 --- a/Source/Editor/Windows/GameCookerWindow.cs +++ b/Source/Editor/Windows/GameCookerWindow.cs @@ -59,17 +59,11 @@ namespace FlaxEditor.Windows GameCookerWin = win; Selector = platformSelector; - PerPlatformOptions[PlatformType.Windows].Init("Output/Windows", "Windows"); - PerPlatformOptions[PlatformType.XboxOne].Init("Output/XboxOne", "XboxOne"); - PerPlatformOptions[PlatformType.UWP].Init("Output/UWP", "UWP"); - PerPlatformOptions[PlatformType.Linux].Init("Output/Linux", "Linux"); - PerPlatformOptions[PlatformType.PS4].Init("Output/PS4", "PS4"); - PerPlatformOptions[PlatformType.XboxScarlett].Init("Output/XboxScarlett", "XboxScarlett"); - PerPlatformOptions[PlatformType.Android].Init("Output/Android", "Android"); - PerPlatformOptions[PlatformType.Switch].Init("Output/Switch", "Switch"); - PerPlatformOptions[PlatformType.PS5].Init("Output/PS5", "PS5"); - PerPlatformOptions[PlatformType.Mac].Init("Output/Mac", "Mac"); - PerPlatformOptions[PlatformType.iOS].Init("Output/iOS", "iOS"); + foreach (var e in PerPlatformOptions) + { + var str = e.Key.ToString(); + e.Value.Init("Output/" + str, str); + } } [HideInEditor] @@ -196,12 +190,14 @@ namespace FlaxEditor.Windows var label = layout.Label(text, TextAlignment.Center); label.Label.AutoHeight = true; } - + /// /// Used to add platform specific tools if available. /// /// The layout to start the tools at. - public virtual void OnCustomToolsLayout(LayoutElementsContainer layout) { } + public virtual void OnCustomToolsLayout(LayoutElementsContainer layout) + { + } public virtual void Build() { @@ -256,7 +252,7 @@ namespace FlaxEditor.Windows if (string.IsNullOrEmpty(sdkPath)) sdkPath = Environment.GetEnvironmentVariable("ANDROID_SDK"); emulatorGroup.Label($"SDK path: {sdkPath}"); - + // AVD and starting emulator var avdGroup = emulatorGroup.Group("AVD Emulator"); avdGroup.Label("Note: Create AVDs using Android Studio."); @@ -273,7 +269,7 @@ namespace FlaxEditor.Windows { if (avdListTree.Children.Count > 0) avdListTree.DisposeChildren(); - + var processStartInfo = new System.Diagnostics.ProcessStartInfo { FileName = Path.Combine(sdkPath, "emulator", "emulator.exe"), @@ -299,7 +295,7 @@ namespace FlaxEditor.Windows }; //processSettings.ShellExecute = true; FlaxEngine.Platform.CreateProcess(ref processSettings); - + var output = new string(processSettings.Output);*/ if (output.Length == 0) { @@ -345,9 +341,9 @@ namespace FlaxEditor.Windows processSettings.ShellExecute = true; FlaxEngine.Platform.CreateProcess(ref processSettings); }; - + emulatorGroup.Space(2); - + // Device var installGroup = emulatorGroup.Group("Install"); installGroup.Panel.IsClosed = false; @@ -391,10 +387,10 @@ namespace FlaxEditor.Windows processSettings.SaveOutput = true; processSettings.ShellExecute = false; FlaxEngine.Platform.CreateProcess(ref processSettings); - + var output = new string(processSettings.Output); */ - + if (output.Length > 0 && !output.Equals("List of devices attached", StringComparison.Ordinal)) { noDevicesLabel.Visible = false; @@ -403,7 +399,7 @@ namespace FlaxEditor.Windows { if (line.Trim().Equals("List of devices attached", StringComparison.Ordinal) || string.IsNullOrEmpty(line.Trim())) continue; - + var tab = line.Split("device "); if (tab.Length < 2) continue; @@ -430,7 +426,7 @@ namespace FlaxEditor.Windows { if (deviceListTree.Selection.Count == 0) return; - + // Get built APK at output path string output = StringUtils.ConvertRelativePathToAbsolute(Globals.ProjectFolder, StringUtils.NormalizePath(Output)); if (!Directory.Exists(output)) @@ -438,7 +434,7 @@ namespace FlaxEditor.Windows FlaxEditor.Editor.LogWarning("Can not copy APK because output folder does not exist."); return; } - + var apkFiles = Directory.GetFiles(output, "*.apk"); if (apkFiles.Length == 0) { @@ -457,7 +453,7 @@ namespace FlaxEditor.Windows } apkFilesString += $" \"{file}\""; } - + CreateProcessSettings processSettings = new CreateProcessSettings { FileName = Path.Combine(sdkPath, "platform-tools", "adb.exe"), diff --git a/Source/Tools/Flax.Build/Deps/Dependencies/mono.cs b/Source/Tools/Flax.Build/Deps/Dependencies/mono.cs index ddf1cc15d..57d2f74fe 100644 --- a/Source/Tools/Flax.Build/Deps/Dependencies/mono.cs +++ b/Source/Tools/Flax.Build/Deps/Dependencies/mono.cs @@ -18,6 +18,9 @@ namespace Flax.Deps.Dependencies /// class mono : Dependency { + /// + public override bool BuildByDefault => false; // Unused in favor of nethost + /// public override TargetPlatform[] Platforms { diff --git a/Source/Tools/Flax.Build/Deps/Dependencies/nethost.cs b/Source/Tools/Flax.Build/Deps/Dependencies/nethost.cs index 5734e1407..11ab39f8d 100644 --- a/Source/Tools/Flax.Build/Deps/Dependencies/nethost.cs +++ b/Source/Tools/Flax.Build/Deps/Dependencies/nethost.cs @@ -43,9 +43,6 @@ namespace Flax.Deps.Dependencies } } - /// - public override bool BuildByDefault => false; - private string root; private bool cleanArtifacts; @@ -296,9 +293,19 @@ namespace Flax.Deps.Dependencies { root = options.IntermediateFolder; + // On Windows MAX_PATH=260 might cause some build issues with CMake+Ninja, even when LongPathsEnabled=1 + // To solve this, simply use a drive root folder instead of Deps directory + if (BuildPlatform == TargetPlatform.Windows && root.Length > 30) + { + root = Path.Combine(Path.GetPathRoot(root), "nethost"); + Log.Info($"Using custom rooted build directory: {root} (due to path size limit)"); + SetupDirectory(root, false); + } + // Ensure to have dependencies installed Utilities.Run("ninja", "--version", null, null, Utilities.RunOptions.ThrowExceptionOnError); Utilities.Run("cmake", "--version", null, null, Utilities.RunOptions.ThrowExceptionOnError); + Utilities.Run("python", "--version", null, null, Utilities.RunOptions.ThrowExceptionOnError); // Get the source if (!Directory.Exists(Path.Combine(root, ".git"))) diff --git a/Source/Tools/Flax.Build/Deps/Dependencies/vorbis.cs b/Source/Tools/Flax.Build/Deps/Dependencies/vorbis.cs index 195c0d8cb..45adc9188 100644 --- a/Source/Tools/Flax.Build/Deps/Dependencies/vorbis.cs +++ b/Source/Tools/Flax.Build/Deps/Dependencies/vorbis.cs @@ -428,18 +428,19 @@ namespace Flax.Deps.Dependencies var buildDir = Path.Combine(root, "build"); // Get the source + SetupDirectory(oggRoot, false); CloneGitRepo(root, "https://github.com/xiph/vorbis.git"); GitCheckout(root, "master", "98eddc72d36e3421519d54b101c09b57e4d4d10d"); CloneGitRepo(oggRoot, "https://github.com/xiph/ogg.git"); GitCheckout(oggRoot, "master", "4380566a44b8d5e85ad511c9c17eb04197863ec5"); - Utilities.DirectoryCopy(Path.Combine(GetBinariesFolder(options, platform), "ogg"), oggRoot, true, true); - Utilities.DirectoryCopy(Path.Combine(GetBinariesFolder(options, platform), "vorbis"), buildDir, true, true); + Utilities.DirectoryCopy(Path.Combine(GetBinariesFolder(options, platform), "Data/ogg"), oggRoot, true, true); + Utilities.DirectoryCopy(Path.Combine(GetBinariesFolder(options, platform), "Data/vorbis"), buildDir, true, true); // Build for Switch SetupDirectory(oggBuildDir, true); RunCmake(oggBuildDir, platform, TargetArchitecture.ARM64, ".. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=\"../install\""); Utilities.Run("cmake", "--build . --target install", null, oggBuildDir, Utilities.RunOptions.ConsoleLogOutput); - Utilities.FileCopy(Path.Combine(GetBinariesFolder(options, platform), "ogg", "include", "ogg", "config_types.h"), Path.Combine(oggRoot, "install", "include", "ogg", "config_types.h")); + Utilities.FileCopy(Path.Combine(GetBinariesFolder(options, platform), "Data/ogg", "include", "ogg", "config_types.h"), Path.Combine(oggRoot, "install", "include", "ogg", "config_types.h")); SetupDirectory(buildDir, true); RunCmake(buildDir, platform, TargetArchitecture.ARM64, string.Format(".. -DCMAKE_BUILD_TYPE=Release -DOGG_INCLUDE_DIR=\"{0}/install/include\" -DOGG_LIBRARY=\"{0}/install/lib\"", oggRoot)); BuildCmake(buildDir); diff --git a/Source/Tools/Flax.Build/Deps/Dependency.cs b/Source/Tools/Flax.Build/Deps/Dependency.cs index 5ee49a64a..c746cb0ae 100644 --- a/Source/Tools/Flax.Build/Deps/Dependency.cs +++ b/Source/Tools/Flax.Build/Deps/Dependency.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using Flax.Build; using Flax.Build.Platforms; using Flax.Build.Projects.VisualStudio; @@ -305,8 +306,12 @@ namespace Flax.Deps cmdLine = "CMakeLists.txt"; break; case TargetPlatform.Switch: - cmdLine = string.Format("-DCMAKE_TOOLCHAIN_FILE=\"{1}\\Source\\Platforms\\Switch\\Binaries\\Data\\Switch.cmake\" -G \"NMake Makefiles\" -DCMAKE_MAKE_PROGRAM=\"{0}..\\..\\VC\\bin\\nmake.exe\"", Environment.GetEnvironmentVariable("VS140COMNTOOLS"), Globals.EngineRoot); + { + var nmakeSubdir = "bin\\Hostx64\\x64\\nmake.exe"; + var toolset = WindowsPlatform.GetToolsets().First(e => File.Exists(Path.Combine(e.Value, nmakeSubdir))); + cmdLine = string.Format("-DCMAKE_TOOLCHAIN_FILE=\"{1}\\Source\\Platforms\\Switch\\Binaries\\Data\\Switch.cmake\" -G \"NMake Makefiles\" -DCMAKE_MAKE_PROGRAM=\"{0}\"", Path.Combine(toolset.Value, nmakeSubdir), Globals.EngineRoot); break; + } case TargetPlatform.Android: { var ndk = AndroidNdk.Instance.RootPath;