Include toolchain preprocessor definitions in binding generation

This commit is contained in:
GoaLitiuM
2021-05-31 16:46:10 +03:00
parent d2f339dba1
commit 5e8da3ba5f
2 changed files with 8 additions and 29 deletions

View File

@@ -173,6 +173,7 @@ namespace Flax.Build
//throw new Exception(string.Format("Platform {0} {1} is not supported.", targetPlatform, architecture));
var platform = Platform.GetPlatform(targetPlatform);
var toolchain = platform.GetToolchain(architecture);
// Special case: building C# bindings only (eg. when building Linux game on Windows without C++ scripting or for C#-only projects)
if (Configuration.BuildBindingsOnly || (project.IsCSharpOnlyProject && platform.HasModularBuildSupport))
@@ -186,7 +187,7 @@ namespace Flax.Build
switch (target.Type)
{
case TargetType.NativeCpp:
BuildTargetNativeCppBindingsOnly(rules, graph, target, buildContext, platform, architecture, configuration);
BuildTargetNativeCppBindingsOnly(rules, graph, target, buildContext, toolchain, platform, architecture, configuration);
break;
case TargetType.DotNet:
BuildTargetDotNet(rules, graph, target, platform, configuration);
@@ -197,8 +198,6 @@ namespace Flax.Build
continue;
}
var toolchain = platform.GetToolchain(architecture);
using (new ProfileEventScope(target.Name))
{
Log.Info(string.Format("Building target {0} in {1} for {2} {3}", target.Name, configuration, targetPlatform, architecture));

View File

@@ -553,7 +553,7 @@ namespace Flax.Build
var graph = new TaskGraph(reference.Project.ProjectFolderPath);
var skipBuild = target.IsPreBuilt || (Configuration.SkipTargets != null && Configuration.SkipTargets.Contains(target.Name));
target.PreBuild();
referencedBuildData = BuildTargetNativeCppBindingsOnly(buildData.Rules, graph, target, buildContext, buildData.Platform, buildData.Architecture, buildData.Configuration);
referencedBuildData = BuildTargetNativeCppBindingsOnly(buildData.Rules, graph, target, buildContext, buildData.Toolchain, buildData.Platform, buildData.Architecture, buildData.Configuration, skipBuild);
if (!skipBuild)
{
using (new ProfileEventScope("PrepareTasks"))
@@ -935,7 +935,7 @@ namespace Flax.Build
return buildData;
}
private static BuildData BuildTargetNativeCppBindingsOnly(RulesAssembly rules, TaskGraph graph, Target target, Dictionary<Target, BuildData> buildContext, Platform platform, TargetArchitecture architecture, TargetConfiguration configuration)
private static BuildData BuildTargetNativeCppBindingsOnly(RulesAssembly rules, TaskGraph graph, Target target, Dictionary<Target, BuildData> buildContext, Toolchain toolchain, Platform platform, TargetArchitecture architecture, TargetConfiguration configuration, bool skipBuild = false)
{
if (buildContext.TryGetValue(target, out var buildData))
return buildData;
@@ -954,24 +954,7 @@ namespace Flax.Build
throw new Exception($"Cannot build target {target.Name}. The project file is missing (.flaxproj located in the folder above).");
// Setup build environment for the target
var platformName = platform.Target.ToString();
var architectureName = architecture.ToString();
var configurationName = configuration.ToString();
var targetBuildOptions = new BuildOptions
{
Target = target,
Platform = platform,
Toolchain = null,
Architecture = architecture,
Configuration = configuration,
CompileEnv = new CompileEnvironment(),
LinkEnv = new LinkEnvironment(),
IntermediateFolder = Path.Combine(project.ProjectFolderPath, Configuration.IntermediateFolder, target.Name, platformName, architectureName, configurationName),
OutputFolder = Path.Combine(project.ProjectFolderPath, Configuration.BinariesFolder, target.Name, platformName, architectureName, configurationName),
WorkingDirectory = project.ProjectFolderPath,
HotReloadPostfix = Configuration.HotReloadPostfix,
};
target.SetupTargetEnvironment(targetBuildOptions);
var targetBuildOptions = GetBuildOptions(target, toolchain.Platform, toolchain, toolchain.Architecture, configuration, project.ProjectFolderPath, skipBuild ? string.Empty : Configuration.HotReloadPostfix);
using (new ProfileEventScope("PreBuild"))
{
@@ -1009,16 +992,13 @@ namespace Flax.Build
{
using (new ProfileEventScope(reference.Project.Name))
{
if (buildData.Toolchain == null)
buildData.Toolchain = platform.GetToolchain(architecture);
if (Configuration.BuildBindingsOnly || project.IsCSharpOnlyProject || reference.Project.IsCSharpOnlyProject || !platform.HasRequiredSDKsInstalled)
{
BuildTargetReferenceNativeCppBindingsOnly(buildContext, buildData, reference);
}
else
{
if (buildData.Toolchain == null)
buildData.Toolchain = platform.GetToolchain(architecture);
BuildTargetReferenceNativeCpp(buildContext, buildData, reference);
}
}
}
}