Fix collecting binary modules for targets with Modular linkage
This commit is contained in:
@@ -230,7 +230,7 @@ namespace Flax.Build
|
|||||||
// Get all modules aggregated into all binary modules used in all configurations of this target
|
// Get all modules aggregated into all binary modules used in all configurations of this target
|
||||||
foreach (var configurationData in mainProject.Configurations)
|
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)
|
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)
|
// 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 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 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)
|
foreach (var binaryModule in referenceBinaryModules)
|
||||||
{
|
{
|
||||||
project.Defines.Add(binaryModule.Key.ToUpperInvariant() + "_API=");
|
project.Defines.Add(binaryModule.Key.ToUpperInvariant() + "_API=");
|
||||||
|
|||||||
@@ -229,17 +229,26 @@ namespace Flax.Build
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IGrouping<string, Module>[] GetBinaryModules(RulesAssembly rules, Target target, Dictionary<Module, BuildOptions> buildModules)
|
private static IGrouping<string, Module>[] GetBinaryModules(ProjectInfo project, Target target, Dictionary<Module, BuildOptions> buildModules)
|
||||||
{
|
{
|
||||||
var modules = new List<Module>();
|
var modules = new List<Module>();
|
||||||
switch (target.LinkType)
|
switch (target.LinkType)
|
||||||
{
|
{
|
||||||
case TargetLinkType.Monolithic:
|
case TargetLinkType.Monolithic:
|
||||||
|
// Include all modules
|
||||||
modules.AddRange(buildModules.Keys);
|
modules.AddRange(buildModules.Keys);
|
||||||
break;
|
break;
|
||||||
case TargetLinkType.Modular:
|
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;
|
break;
|
||||||
|
}
|
||||||
default: throw new ArgumentOutOfRangeException();
|
default: throw new ArgumentOutOfRangeException();
|
||||||
}
|
}
|
||||||
modules.RemoveAll(x => x == null || string.IsNullOrEmpty(x.BinaryModuleName));
|
modules.RemoveAll(x => x == null || string.IsNullOrEmpty(x.BinaryModuleName));
|
||||||
@@ -655,7 +664,7 @@ namespace Flax.Build
|
|||||||
using (new ProfileEventScope("SetupBinaryModules"))
|
using (new ProfileEventScope("SetupBinaryModules"))
|
||||||
{
|
{
|
||||||
// Collect all binary modules to include into target
|
// 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
|
// Inject binary modules symbols import/export defines
|
||||||
for (int i = 0; i < buildData.BinaryModules.Length; i++)
|
for (int i = 0; i < buildData.BinaryModules.Length; i++)
|
||||||
@@ -988,7 +997,7 @@ namespace Flax.Build
|
|||||||
using (new ProfileEventScope("SetupBinaryModules"))
|
using (new ProfileEventScope("SetupBinaryModules"))
|
||||||
{
|
{
|
||||||
// Collect all binary modules to include into target
|
// 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
|
// Generate code for binary modules included in the target
|
||||||
|
|||||||
Reference in New Issue
Block a user