From d7e24f01684245ac5ef1f525bf181f556933ec3f Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Sun, 19 Feb 2023 15:16:34 +0100 Subject: [PATCH] Fix missing dotnet hosting components for not yet supported platforms during projects generation stage --- Source/ThirdParty/nethost/nethost.Build.cs | 4 ++++ .../Flax.Build/Build/Builder.Projects.cs | 8 ++++++- Source/Tools/Flax.Build/Build/EngineTarget.cs | 1 + .../Build/NativeCpp/BuildOptions.cs | 24 ++++++++++++++++++- .../Build/NativeCpp/Builder.NativeCpp.cs | 1 + 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/Source/ThirdParty/nethost/nethost.Build.cs b/Source/ThirdParty/nethost/nethost.Build.cs index 048a8ee12..930c4933d 100644 --- a/Source/ThirdParty/nethost/nethost.Build.cs +++ b/Source/ThirdParty/nethost/nethost.Build.cs @@ -34,7 +34,11 @@ public class nethost : ThirdPartyModule if (!dotnetSdk.IsValid) throw new Exception($"Missing NET SDK {DotNetSdk.MinimumVersion}."); if (!dotnetSdk.GetHostRuntime(options.Platform.Target, options.Architecture, out var hostRuntimePath)) + { + if (options.Flags.HasFlag(BuildFlags.GenerateProject)) + return; // Ignore missing Host Runtime at projects evaluation stage (not important) throw new Exception($"Missing NET SDK runtime for {options.Platform.Target} {options.Architecture}."); + } // Setup build configuration switch (options.Platform.Target) diff --git a/Source/Tools/Flax.Build/Build/Builder.Projects.cs b/Source/Tools/Flax.Build/Build/Builder.Projects.cs index 40d17f48b..3ccc562cc 100644 --- a/Source/Tools/Flax.Build/Build/Builder.Projects.cs +++ b/Source/Tools/Flax.Build/Build/Builder.Projects.cs @@ -40,6 +40,7 @@ namespace Flax.Build var configurationName = "Debug"; var configurationText = configurationName; var targetBuildOptions = GetBuildOptions(target, platform, toolchain, architecture, configuration, project.WorkspaceRootPath); + targetBuildOptions.Flags |= BuildFlags.GenerateProject; var modules = CollectModules(rules, platform, target, targetBuildOptions, toolchain, architecture, configuration); foreach (var module in modules) { @@ -65,6 +66,7 @@ namespace Flax.Build configurationName = "Release"; configurationText = configurationName; targetBuildOptions = GetBuildOptions(target, platform, toolchain, architecture, configuration, project.WorkspaceRootPath); + targetBuildOptions.Flags |= BuildFlags.GenerateProject; modules = CollectModules(rules, platform, target, targetBuildOptions, toolchain, architecture, configuration); foreach (var module in modules) { @@ -115,6 +117,7 @@ namespace Flax.Build var toolchain = platform.TryGetToolchain(architecture); var targetBuildOptions = GetBuildOptions(target, platform, toolchain, architecture, configuration, project.WorkspaceRootPath); + targetBuildOptions.Flags |= BuildFlags.GenerateProject; var modules = CollectModules(rules, platform, target, targetBuildOptions, toolchain, architecture, configuration); foreach (var module in modules) { @@ -275,6 +278,7 @@ namespace Flax.Build try { var referenceBuildOptions = GetBuildOptions(referenceTarget, configurationData.TargetBuildOptions.Platform, configurationData.TargetBuildOptions.Toolchain, configurationData.Architecture, configurationData.Configuration, reference.Project.ProjectFolderPath); + referenceBuildOptions.Flags |= BuildFlags.GenerateProject; var referenceModules = CollectModules(rules, referenceBuildOptions.Platform, referenceTarget, referenceBuildOptions, referenceBuildOptions.Toolchain, referenceBuildOptions.Architecture, referenceBuildOptions.Configuration); var referenceBinaryModules = GetBinaryModules(projectInfo, referenceTarget, referenceModules); foreach (var binaryModule in referenceBinaryModules) @@ -504,6 +508,8 @@ namespace Flax.Build var platform = Platform.BuildPlatform; var architecture = TargetArchitecture.x64; var configuration = TargetConfiguration.Debug; + var buildOptions = GetBuildOptions(target, platform, null, architecture, configuration, project.WorkspaceRootPath); + buildOptions.Flags |= BuildFlags.GenerateProject; project.Configurations.Add(new Project.ConfigurationData { Platform = platform.Target, @@ -513,7 +519,7 @@ namespace Flax.Build Configuration = configuration, ConfigurationName = configuration.ToString(), Target = target, - TargetBuildOptions = GetBuildOptions(target, platform, null, architecture, configuration, project.WorkspaceRootPath), + TargetBuildOptions = buildOptions, Modules = new Dictionary(), }); } diff --git a/Source/Tools/Flax.Build/Build/EngineTarget.cs b/Source/Tools/Flax.Build/Build/EngineTarget.cs index e673e77e3..4b691cf51 100644 --- a/Source/Tools/Flax.Build/Build/EngineTarget.cs +++ b/Source/Tools/Flax.Build/Build/EngineTarget.cs @@ -171,6 +171,7 @@ namespace Flax.Build OutputFolder = mainModuleOutputPath, WorkingDirectory = exeBuildOptions.WorkingDirectory, HotReloadPostfix = exeBuildOptions.HotReloadPostfix, + Flags = exeBuildOptions.Flags, }; mainModuleOptions.SourcePaths.Add(mainModule.FolderPath); mainModule.Setup(mainModuleOptions); diff --git a/Source/Tools/Flax.Build/Build/NativeCpp/BuildOptions.cs b/Source/Tools/Flax.Build/Build/NativeCpp/BuildOptions.cs index a8f80f56d..81d2a76b6 100644 --- a/Source/Tools/Flax.Build/Build/NativeCpp/BuildOptions.cs +++ b/Source/Tools/Flax.Build/Build/NativeCpp/BuildOptions.cs @@ -6,6 +6,23 @@ using System.IO; namespace Flax.Build.NativeCpp { + /// + /// The native C++ module build flag types. + /// + [Flags] + public enum BuildFlags + { + /// + /// Nothing. + /// + None = 0, + + /// + /// Projects generation (not actual build, just build setup evaluation). + /// + GenerateProject = 1, + } + /// /// The native C++ module build settings container. /// @@ -131,6 +148,11 @@ namespace Flax.Build.NativeCpp /// public string HotReloadPostfix; + /// + /// The build flags. + /// + public BuildFlags Flags; + /// /// The full path to the dependencies folder for the current build platform, configuration, and architecture. /// @@ -213,7 +235,7 @@ namespace Flax.Build.NativeCpp "System.Private.CoreLib", "System.Private.Uri", "System.Private.Xml", - + "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", diff --git a/Source/Tools/Flax.Build/Build/NativeCpp/Builder.NativeCpp.cs b/Source/Tools/Flax.Build/Build/NativeCpp/Builder.NativeCpp.cs index aee48066e..086cff297 100644 --- a/Source/Tools/Flax.Build/Build/NativeCpp/Builder.NativeCpp.cs +++ b/Source/Tools/Flax.Build/Build/NativeCpp/Builder.NativeCpp.cs @@ -177,6 +177,7 @@ namespace Flax.Build OutputFolder = outputPath, WorkingDirectory = buildData.TargetOptions.WorkingDirectory, HotReloadPostfix = buildData.TargetOptions.HotReloadPostfix, + Flags = buildData.TargetOptions.Flags, }; moduleOptions.SourcePaths.Add(module.FolderPath); module.Setup(moduleOptions);