Disable inheriting C# optimization level from dependency modules

This commit is contained in:
2023-10-14 01:45:36 +03:00
parent 18bf005654
commit 7014007362
3 changed files with 13 additions and 17 deletions

View File

@@ -128,7 +128,7 @@ namespace Flax.Build
sourceFiles.Sort();
// Build assembly
BuildDotNet(graph, buildData, targetBuildOptions, target.OutputName, sourceFiles);
BuildDotNet(graph, buildData, targetBuildOptions, target.OutputName, sourceFiles, optimizeAssembly: buildData.TargetOptions.ScriptingAPI.Optimization);
}
// Deploy files
@@ -152,7 +152,7 @@ namespace Flax.Build
}
}
private static void BuildDotNet(TaskGraph graph, BuildData buildData, BuildOptions buildOptions, string name, List<string> sourceFiles, HashSet<string> fileReferences = null, IGrouping<string, Module> binaryModule = null)
private static void BuildDotNet(TaskGraph graph, BuildData buildData, BuildOptions buildOptions, string name, List<string> sourceFiles, HashSet<string> fileReferences = null, IGrouping<string, Module> binaryModule = null, bool? optimizeAssembly = null)
{
// Setup build options
var buildPlatform = Platform.BuildTargetPlatform;
@@ -257,10 +257,8 @@ namespace Flax.Build
if (buildOptions.ScriptingAPI.IgnoreMissingDocumentationWarnings)
args.Add("-nowarn:1591");
// Optimizations prevent debugging, only enable in release builds
var optimize = buildData.Configuration == TargetConfiguration.Release;
if (buildData.TargetOptions.ScriptingAPI.Optimization.HasValue)
optimize = buildData.TargetOptions.ScriptingAPI.Optimization.Value;
// Optimizations prevent debugging, only enable in release builds by default
var optimize = optimizeAssembly.HasValue ? optimizeAssembly.Value : buildData.Configuration == TargetConfiguration.Release;
args.Add(optimize ? "/optimize+" : "/optimize-");
#if !USE_NETCORE
args.Add(string.Format("/reference:\"{0}mscorlib.dll\"", referenceAssemblies));
@@ -374,11 +372,15 @@ namespace Flax.Build
// Get references
fileReferences.Clear();
bool? optimizeAssembly = null;
foreach (var module in binaryModule)
{
if (!buildData.Modules.TryGetValue(module, out var moduleBuildOptions))
continue;
if (moduleBuildOptions.ScriptingAPI.Optimization.HasValue)
optimizeAssembly |= moduleBuildOptions.ScriptingAPI.Optimization;
// Find references based on the modules dependencies
foreach (var dependencyName in moduleBuildOptions.PublicDependencies.Concat(moduleBuildOptions.PrivateDependencies))
{
@@ -408,7 +410,7 @@ namespace Flax.Build
}
// Build assembly
BuildDotNet(graph, buildData, buildOptions, binaryModuleName + ".CSharp", sourceFiles, fileReferences, binaryModule);
BuildDotNet(graph, buildData, buildOptions, binaryModuleName + ".CSharp", sourceFiles, fileReferences, binaryModule, optimizeAssembly);
}
}
}

View File

@@ -225,7 +225,7 @@ namespace Flax.Build.NativeCpp
public CSharpNullableReferences CSharpNullableReferences = CSharpNullableReferences.Disable;
/// <summary>
/// Enable code optimization.
/// Enable code optimizations for the managed module assembly.
/// </summary>
public bool? Optimization;
@@ -237,19 +237,13 @@ namespace Flax.Build.NativeCpp
/// Adds the other options into this.
/// </summary>
/// <param name="other">The other.</param>
public void Add(ScriptingAPIOptions other, bool addBuildOptions = true)
public void Add(ScriptingAPIOptions other)
{
Defines.AddRange(other.Defines);
SystemReferences.AddRange(other.SystemReferences);
FileReferences.AddRange(other.FileReferences);
Analyzers.AddRange(other.Analyzers);
IgnoreMissingDocumentationWarnings |= other.IgnoreMissingDocumentationWarnings;
if (addBuildOptions)
{
if (other.Optimization.HasValue)
Optimization |= other.Optimization;
}
}
}

View File

@@ -403,7 +403,7 @@ namespace Flax.Build
moduleOptions.PrivateIncludePaths.AddRange(dependencyOptions.PublicIncludePaths);
moduleOptions.Libraries.AddRange(dependencyOptions.Libraries);
moduleOptions.DelayLoadLibraries.AddRange(dependencyOptions.DelayLoadLibraries);
moduleOptions.ScriptingAPI.Add(dependencyOptions.ScriptingAPI, false);
moduleOptions.ScriptingAPI.Add(dependencyOptions.ScriptingAPI);
moduleOptions.ExternalModules.AddRange(dependencyOptions.ExternalModules);
}
}
@@ -418,7 +418,7 @@ namespace Flax.Build
moduleOptions.PublicIncludePaths.AddRange(dependencyOptions.PublicIncludePaths);
moduleOptions.Libraries.AddRange(dependencyOptions.Libraries);
moduleOptions.DelayLoadLibraries.AddRange(dependencyOptions.DelayLoadLibraries);
moduleOptions.ScriptingAPI.Add(dependencyOptions.ScriptingAPI, false);
moduleOptions.ScriptingAPI.Add(dependencyOptions.ScriptingAPI);
moduleOptions.ExternalModules.AddRange(dependencyOptions.ExternalModules);
}
}