Add option for using Address and Thread sanitizers

This commit is contained in:
Wojtek Figat
2024-04-13 12:35:46 +02:00
parent 3e475398e7
commit 4ac6a292f7
6 changed files with 72 additions and 7 deletions

View File

@@ -26,6 +26,28 @@ namespace Flax.Build.NativeCpp
SmallCode
}
/// <summary>
/// The code sanitizers for core errors detection by compiler-supported checks.
/// </summary>
[Flags]
public enum Sanitizer
{
/// <summary>
/// No sanitizers in use.
/// </summary>
None = 0,
/// <summary>
/// Memory errors detector,
/// </summary>
Address = 1,
/// <summary>
/// Data races and deadlocks detector.
/// </summary>
Thread = 2,
}
/// <summary>
/// The compilation optimization hint.
/// </summary>
@@ -67,6 +89,11 @@ namespace Flax.Build.NativeCpp
/// </summary>
public FavorSizeOrSpeed FavorSizeOrSpeed = FavorSizeOrSpeed.Neither;
/// <summary>
/// Selects a sanitizers to use (as flags).
/// </summary>
public Sanitizer Sanitizers = Sanitizer.None;
/// <summary>
/// Enables exceptions support.
/// </summary>
@@ -184,6 +211,7 @@ namespace Flax.Build.NativeCpp
{
CppVersion = CppVersion,
FavorSizeOrSpeed = FavorSizeOrSpeed,
Sanitizers = Sanitizers,
EnableExceptions = EnableExceptions,
RuntimeTypeInfo = RuntimeTypeInfo,
Inlining = Inlining,

View File

@@ -249,6 +249,7 @@ namespace Flax.Build
}
options.CompileEnv.EnableExceptions = true; // TODO: try to disable this!
options.CompileEnv.Sanitizers = Configuration.Sanitizers;
switch (options.Configuration)
{
case TargetConfiguration.Debug:

View File

@@ -182,5 +182,18 @@ namespace Flax.Build
}
return true;
}
/// <summary>
/// Utility that outputs the arguments for Clang with specific sanitizer.
/// </summary>
/// <param name="options">The sanitizers as flags.</param>
/// <param name="options">The arguments list.</param>
protected void AddClangSanitizerArgs(Sanitizer sanitizers, List<string> args)
{
if (sanitizers.HasFlag(Sanitizer.Address))
args.Add("-fsanitize=address");
if (sanitizers.HasFlag(Sanitizer.Thread))
args.Add("-fsanitize=thread");
}
}
}