Fix missing dotnet hosting components for not yet supported platforms during projects generation stage

This commit is contained in:
Wojtek Figat
2023-02-19 15:16:34 +01:00
parent 0cf40729fa
commit d7e24f0168
5 changed files with 36 additions and 2 deletions

View File

@@ -34,7 +34,11 @@ public class nethost : ThirdPartyModule
if (!dotnetSdk.IsValid) if (!dotnetSdk.IsValid)
throw new Exception($"Missing NET SDK {DotNetSdk.MinimumVersion}."); throw new Exception($"Missing NET SDK {DotNetSdk.MinimumVersion}.");
if (!dotnetSdk.GetHostRuntime(options.Platform.Target, options.Architecture, out var hostRuntimePath)) 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}."); throw new Exception($"Missing NET SDK runtime for {options.Platform.Target} {options.Architecture}.");
}
// Setup build configuration // Setup build configuration
switch (options.Platform.Target) switch (options.Platform.Target)

View File

@@ -40,6 +40,7 @@ namespace Flax.Build
var configurationName = "Debug"; var configurationName = "Debug";
var configurationText = configurationName; var configurationText = configurationName;
var targetBuildOptions = GetBuildOptions(target, platform, toolchain, architecture, configuration, project.WorkspaceRootPath); var targetBuildOptions = GetBuildOptions(target, platform, toolchain, architecture, configuration, project.WorkspaceRootPath);
targetBuildOptions.Flags |= BuildFlags.GenerateProject;
var modules = CollectModules(rules, platform, target, targetBuildOptions, toolchain, architecture, configuration); var modules = CollectModules(rules, platform, target, targetBuildOptions, toolchain, architecture, configuration);
foreach (var module in modules) foreach (var module in modules)
{ {
@@ -65,6 +66,7 @@ namespace Flax.Build
configurationName = "Release"; configurationName = "Release";
configurationText = configurationName; configurationText = configurationName;
targetBuildOptions = GetBuildOptions(target, platform, toolchain, architecture, configuration, project.WorkspaceRootPath); targetBuildOptions = GetBuildOptions(target, platform, toolchain, architecture, configuration, project.WorkspaceRootPath);
targetBuildOptions.Flags |= BuildFlags.GenerateProject;
modules = CollectModules(rules, platform, target, targetBuildOptions, toolchain, architecture, configuration); modules = CollectModules(rules, platform, target, targetBuildOptions, toolchain, architecture, configuration);
foreach (var module in modules) foreach (var module in modules)
{ {
@@ -115,6 +117,7 @@ namespace Flax.Build
var toolchain = platform.TryGetToolchain(architecture); var toolchain = platform.TryGetToolchain(architecture);
var targetBuildOptions = GetBuildOptions(target, platform, toolchain, architecture, configuration, project.WorkspaceRootPath); var targetBuildOptions = GetBuildOptions(target, platform, toolchain, architecture, configuration, project.WorkspaceRootPath);
targetBuildOptions.Flags |= BuildFlags.GenerateProject;
var modules = CollectModules(rules, platform, target, targetBuildOptions, toolchain, architecture, configuration); var modules = CollectModules(rules, platform, target, targetBuildOptions, toolchain, architecture, configuration);
foreach (var module in modules) foreach (var module in modules)
{ {
@@ -275,6 +278,7 @@ namespace Flax.Build
try try
{ {
var referenceBuildOptions = GetBuildOptions(referenceTarget, configurationData.TargetBuildOptions.Platform, configurationData.TargetBuildOptions.Toolchain, configurationData.Architecture, configurationData.Configuration, reference.Project.ProjectFolderPath); 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 referenceModules = CollectModules(rules, referenceBuildOptions.Platform, referenceTarget, referenceBuildOptions, referenceBuildOptions.Toolchain, referenceBuildOptions.Architecture, referenceBuildOptions.Configuration);
var referenceBinaryModules = GetBinaryModules(projectInfo, referenceTarget, referenceModules); var referenceBinaryModules = GetBinaryModules(projectInfo, referenceTarget, referenceModules);
foreach (var binaryModule in referenceBinaryModules) foreach (var binaryModule in referenceBinaryModules)
@@ -504,6 +508,8 @@ namespace Flax.Build
var platform = Platform.BuildPlatform; var platform = Platform.BuildPlatform;
var architecture = TargetArchitecture.x64; var architecture = TargetArchitecture.x64;
var configuration = TargetConfiguration.Debug; var configuration = TargetConfiguration.Debug;
var buildOptions = GetBuildOptions(target, platform, null, architecture, configuration, project.WorkspaceRootPath);
buildOptions.Flags |= BuildFlags.GenerateProject;
project.Configurations.Add(new Project.ConfigurationData project.Configurations.Add(new Project.ConfigurationData
{ {
Platform = platform.Target, Platform = platform.Target,
@@ -513,7 +519,7 @@ namespace Flax.Build
Configuration = configuration, Configuration = configuration,
ConfigurationName = configuration.ToString(), ConfigurationName = configuration.ToString(),
Target = target, Target = target,
TargetBuildOptions = GetBuildOptions(target, platform, null, architecture, configuration, project.WorkspaceRootPath), TargetBuildOptions = buildOptions,
Modules = new Dictionary<Module, BuildOptions>(), Modules = new Dictionary<Module, BuildOptions>(),
}); });
} }

View File

@@ -171,6 +171,7 @@ namespace Flax.Build
OutputFolder = mainModuleOutputPath, OutputFolder = mainModuleOutputPath,
WorkingDirectory = exeBuildOptions.WorkingDirectory, WorkingDirectory = exeBuildOptions.WorkingDirectory,
HotReloadPostfix = exeBuildOptions.HotReloadPostfix, HotReloadPostfix = exeBuildOptions.HotReloadPostfix,
Flags = exeBuildOptions.Flags,
}; };
mainModuleOptions.SourcePaths.Add(mainModule.FolderPath); mainModuleOptions.SourcePaths.Add(mainModule.FolderPath);
mainModule.Setup(mainModuleOptions); mainModule.Setup(mainModuleOptions);

View File

@@ -6,6 +6,23 @@ using System.IO;
namespace Flax.Build.NativeCpp namespace Flax.Build.NativeCpp
{ {
/// <summary>
/// The native C++ module build flag types.
/// </summary>
[Flags]
public enum BuildFlags
{
/// <summary>
/// Nothing.
/// </summary>
None = 0,
/// <summary>
/// Projects generation (not actual build, just build setup evaluation).
/// </summary>
GenerateProject = 1,
}
/// <summary> /// <summary>
/// The native C++ module build settings container. /// The native C++ module build settings container.
/// </summary> /// </summary>
@@ -131,6 +148,11 @@ namespace Flax.Build.NativeCpp
/// </summary> /// </summary>
public string HotReloadPostfix; public string HotReloadPostfix;
/// <summary>
/// The build flags.
/// </summary>
public BuildFlags Flags;
/// <summary> /// <summary>
/// The full path to the dependencies folder for the current build platform, configuration, and architecture. /// The full path to the dependencies folder for the current build platform, configuration, and architecture.
/// </summary> /// </summary>
@@ -213,7 +235,7 @@ namespace Flax.Build.NativeCpp
"System.Private.CoreLib", "System.Private.CoreLib",
"System.Private.Uri", "System.Private.Uri",
"System.Private.Xml", "System.Private.Xml",
"System.Reflection", "System.Reflection",
"System.Runtime", "System.Runtime",
"System.Runtime.CompilerServices.Unsafe", "System.Runtime.CompilerServices.Unsafe",

View File

@@ -177,6 +177,7 @@ namespace Flax.Build
OutputFolder = outputPath, OutputFolder = outputPath,
WorkingDirectory = buildData.TargetOptions.WorkingDirectory, WorkingDirectory = buildData.TargetOptions.WorkingDirectory,
HotReloadPostfix = buildData.TargetOptions.HotReloadPostfix, HotReloadPostfix = buildData.TargetOptions.HotReloadPostfix,
Flags = buildData.TargetOptions.Flags,
}; };
moduleOptions.SourcePaths.Add(module.FolderPath); moduleOptions.SourcePaths.Add(module.FolderPath);
module.Setup(moduleOptions); module.Setup(moduleOptions);