Add intermediate data folder removing on build tool clean command

This commit is contained in:
Wojtek Figat
2021-07-09 22:22:49 +02:00
parent c6e320b4aa
commit 2783eb07b2
2 changed files with 126 additions and 1 deletions

View File

@@ -13,6 +13,42 @@ namespace Flax.Build
/// </summary>
public static partial class Builder
{
private static void CleanDirectory(DirectoryInfo dir)
{
var subdirs = dir.GetDirectories();
foreach (var subdir in subdirs)
{
CleanDirectory(subdir);
}
var files = dir.GetFiles();
foreach (var file in files)
{
try
{
file.Delete();
}
catch (UnauthorizedAccessException)
{
File.SetAttributes(file.FullName, FileAttributes.Normal);
file.Delete();
}
catch
{
// Skip errors
}
}
try
{
dir.Delete();
}
catch
{
// Skip errors
}
}
/// <summary>
/// Cleans the build system cache and intermediate results.
/// </summary>
@@ -20,8 +56,94 @@ namespace Flax.Build
{
using (new ProfileEventScope("Clean"))
{
var graph = new TaskGraph(Globals.Root);
// Clear task graph cache
var project = Globals.Project;
TaskGraph graph;
if (project == null)
{
graph = new TaskGraph(Globals.Root);
graph.CleanCache();
return;
}
graph = new TaskGraph(project.ProjectFolderPath);
graph.CleanCache();
// Pick targets to clean
var customBuildTargets = Configuration.BuildTargets;
var projectTargets = GetProjectTargets(project);
var targets = customBuildTargets == null ? projectTargets : projectTargets.Where(target => customBuildTargets.Contains(target.Name)).ToArray();
foreach (var target in targets)
{
// Pick configurations to clean
TargetConfiguration[] configurations = Configuration.BuildConfigurations;
if (configurations != null)
{
foreach (var configuration in configurations)
{
if (!target.Configurations.Contains(configuration))
throw new Exception(string.Format("Target {0} does not support {1} configuration.", target.Name, configuration));
}
}
else
{
configurations = target.Configurations;
}
foreach (var configuration in configurations)
{
// Pick platforms to clean
TargetPlatform[] platforms = Configuration.BuildPlatforms;
if (platforms != null)
{
foreach (var platform in platforms)
{
if (!target.Platforms.Contains(platform))
throw new Exception(string.Format("Target {0} does not support {1} platform.", target.Name, platform));
}
}
else
{
platforms = target.Platforms;
}
foreach (var targetPlatform in platforms)
{
// Pick architectures to build
TargetArchitecture[] architectures = Configuration.BuildArchitectures;
if (architectures != null)
{
foreach (var e in architectures)
{
if (!target.Architectures.Contains(e))
throw new Exception(string.Format("Target {0} does not support {1} architecture.", target.Name, e));
}
}
else
{
architectures = target.GetArchitectures(targetPlatform);
}
foreach (var architecture in architectures)
{
if (!Platform.IsPlatformSupported(targetPlatform, architecture))
continue;
//throw new Exception(string.Format("Platform {0} {1} is not supported.", targetPlatform, architecture));
var platform = Platform.GetPlatform(targetPlatform);
var toolchain = platform.GetToolchain(architecture);
var targetBuildOptions = GetBuildOptions(target, toolchain.Platform, toolchain, toolchain.Architecture, configuration, project.ProjectFolderPath, string.Empty);
// Delete all intermediate files
var intermediateFolder = new DirectoryInfo(targetBuildOptions.IntermediateFolder);
if (intermediateFolder.Exists)
{
Log.Info("Removing: " + targetBuildOptions.IntermediateFolder);
CleanDirectory(intermediateFolder);
}
}
}
}
}
}
}

View File

@@ -421,7 +421,10 @@ namespace Flax.Build.Graph
{
var path = CachePath;
if (File.Exists(path))
{
Log.Info("Removing: " + path);
File.Delete(path);
}
}
/// <summary>