Add intermediate data folder removing on build tool clean command
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -421,7 +421,10 @@ namespace Flax.Build.Graph
|
||||
{
|
||||
var path = CachePath;
|
||||
if (File.Exists(path))
|
||||
{
|
||||
Log.Info("Removing: " + path);
|
||||
File.Delete(path);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user