diff --git a/Source/Tools/Flax.Build/Build/Builder.cs b/Source/Tools/Flax.Build/Build/Builder.cs index 1bcfca18e..fd784fc3d 100644 --- a/Source/Tools/Flax.Build/Build/Builder.cs +++ b/Source/Tools/Flax.Build/Build/Builder.cs @@ -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)); diff --git a/Source/Tools/Flax.Build/Build/NativeCpp/Builder.NativeCpp.cs b/Source/Tools/Flax.Build/Build/NativeCpp/Builder.NativeCpp.cs index dc35c9fcc..1959cf3a9 100644 --- a/Source/Tools/Flax.Build/Build/NativeCpp/Builder.NativeCpp.cs +++ b/Source/Tools/Flax.Build/Build/NativeCpp/Builder.NativeCpp.cs @@ -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 buildContext, Platform platform, TargetArchitecture architecture, TargetConfiguration configuration) + private static BuildData BuildTargetNativeCppBindingsOnly(RulesAssembly rules, TaskGraph graph, Target target, Dictionary 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); - } } } }