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)
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)

View File

@@ -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<Module, BuildOptions>(),
});
}

View File

@@ -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);

View File

@@ -6,6 +6,23 @@ using System.IO;
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>
/// The native C++ module build settings container.
/// </summary>
@@ -131,6 +148,11 @@ namespace Flax.Build.NativeCpp
/// </summary>
public string HotReloadPostfix;
/// <summary>
/// The build flags.
/// </summary>
public BuildFlags Flags;
/// <summary>
/// The full path to the dependencies folder for the current build platform, configuration, and architecture.
/// </summary>
@@ -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",

View File

@@ -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);