From 07f7fee4a8f2a0c3363518f42be79715d8829da2 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 22 Feb 2021 17:18:03 +0100 Subject: [PATCH] Fix collecting binary modules for targets with Modular linkage --- .../Tools/Flax.Build/Build/Builder.Projects.cs | 4 ++-- .../Build/NativeCpp/Builder.NativeCpp.cs | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Source/Tools/Flax.Build/Build/Builder.Projects.cs b/Source/Tools/Flax.Build/Build/Builder.Projects.cs index e4e6f72c9..2055e698d 100644 --- a/Source/Tools/Flax.Build/Build/Builder.Projects.cs +++ b/Source/Tools/Flax.Build/Build/Builder.Projects.cs @@ -230,7 +230,7 @@ namespace Flax.Build // Get all modules aggregated into all binary modules used in all configurations of this target foreach (var configurationData in mainProject.Configurations) { - var configurationBinaryModules = GetBinaryModules(rules, configurationData.Target, configurationData.Modules); + var configurationBinaryModules = GetBinaryModules(rootProject, configurationData.Target, configurationData.Modules); foreach (var configurationBinaryModule in configurationBinaryModules) { // Skip if none of the included binary modules is inside the project workspace (eg. merged external binary modules from engine to game project) @@ -256,7 +256,7 @@ namespace Flax.Build { var referenceBuildOptions = GetBuildOptions(referenceTarget, configurationData.TargetBuildOptions.Platform, configurationData.TargetBuildOptions.Toolchain, configurationData.Architecture, configurationData.Configuration, reference.Project.ProjectFolderPath); var referenceModules = CollectModules(rules, referenceBuildOptions.Platform, referenceTarget, referenceBuildOptions, referenceBuildOptions.Toolchain, referenceBuildOptions.Architecture, referenceBuildOptions.Configuration); - var referenceBinaryModules = GetBinaryModules(rules, referenceTarget, referenceModules); + var referenceBinaryModules = GetBinaryModules(rootProject, referenceTarget, referenceModules); foreach (var binaryModule in referenceBinaryModules) { project.Defines.Add(binaryModule.Key.ToUpperInvariant() + "_API="); diff --git a/Source/Tools/Flax.Build/Build/NativeCpp/Builder.NativeCpp.cs b/Source/Tools/Flax.Build/Build/NativeCpp/Builder.NativeCpp.cs index 9b3d7b408..6e662a3df 100644 --- a/Source/Tools/Flax.Build/Build/NativeCpp/Builder.NativeCpp.cs +++ b/Source/Tools/Flax.Build/Build/NativeCpp/Builder.NativeCpp.cs @@ -229,17 +229,26 @@ namespace Flax.Build } } - private static IGrouping[] GetBinaryModules(RulesAssembly rules, Target target, Dictionary buildModules) + private static IGrouping[] GetBinaryModules(ProjectInfo project, Target target, Dictionary buildModules) { var modules = new List(); switch (target.LinkType) { case TargetLinkType.Monolithic: + // Include all modules modules.AddRange(buildModules.Keys); break; case TargetLinkType.Modular: - modules.AddRange(target.Modules.Select(rules.GetModule)); + { + // Include all modules from the project that contains this target + var sourcePath = Path.Combine(project.ProjectFolderPath, "Source"); + foreach (var module in buildModules.Keys) + { + if (module.FolderPath.StartsWith(sourcePath)) + modules.Add(module); + } break; + } default: throw new ArgumentOutOfRangeException(); } modules.RemoveAll(x => x == null || string.IsNullOrEmpty(x.BinaryModuleName)); @@ -655,7 +664,7 @@ namespace Flax.Build using (new ProfileEventScope("SetupBinaryModules")) { // Collect all binary modules to include into target - buildData.BinaryModules = GetBinaryModules(rules, target, buildData.Modules); + buildData.BinaryModules = GetBinaryModules(project, target, buildData.Modules); // Inject binary modules symbols import/export defines for (int i = 0; i < buildData.BinaryModules.Length; i++) @@ -988,7 +997,7 @@ namespace Flax.Build using (new ProfileEventScope("SetupBinaryModules")) { // Collect all binary modules to include into target - buildData.BinaryModules = GetBinaryModules(rules, target, buildData.Modules); + buildData.BinaryModules = GetBinaryModules(project, target, buildData.Modules); } // Generate code for binary modules included in the target