Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Unified Diff: visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClCompile.cs

Issue 11266051: Add PNaCl support for VS addin. (Closed) Base URL: http://nativeclient-sdk.googlecode.com/svn/trunk/src
Patch Set: fix nits and tests Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClCompile.cs
diff --git a/visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClCompile.cs b/visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClCompile.cs
index fc9f9253986ce3861a7a1b6f4597b197c89fc98a..cb4da6604103f6a73e09cb5aa98298bcb7dafb47 100644
--- a/visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClCompile.cs
+++ b/visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClCompile.cs
@@ -16,41 +16,27 @@ using System.Diagnostics;
namespace NaCl.Build.CPPTasks
{
- public class NaClCompile : ToolTask
+ public class NaClCompile : NaClToolTask
{
- private XamlParser m_XamlParser;
- private ITaskItem[] excludedInputPaths;
- private ITaskItem[] tlogReadFiles;
- private ITaskItem tlogCommandFile;
- private ITaskItem[] tlogWriteFiles;
- private CanonicalTrackedInputFiles trackedInputFiles;
- private bool skippedExecution;
- private ITaskItem[] compileSourceList;
public bool BuildingInIDE { get; set; }
- private string m_toolname;
- private bool trackFileAccess;
- private bool minimalRebuildFromTracking;
- private string pathToLog;
[Required]
public string PropertiesFile { get; set; }
[Required]
- public ITaskItem[] Sources { get; set; }
-
- [Required]
public string NaCLCompilerPath { get; set; }
[Required]
public bool OutputCommandLine { get; set; }
+ [Required]
+ public string Platform { get; set; }
+
public int ProcessorNumber { get; set; }
public bool MultiProcessorCompilation { get; set; }
- [Required]
- public string TrackerLogDirectory { get; set; }
-
+ [Obsolete]
protected override StringDictionary EnvironmentOverride
{
get {
@@ -63,12 +49,14 @@ namespace NaCl.Build.CPPTasks
}
}
- protected override string GenerateFullPathToTool() { return ToolName; }
+ protected override string GenerateFullPathToTool()
+ {
+ return ToolName;
+ }
public NaClCompile()
: base(new ResourceManager("NaCl.Build.CPPTasks.Properties.Resources", Assembly.GetExecutingAssembly()))
{
- this.pathToLog = string.Empty;
this.EnvironmentVariables = new string[] { "CYGWIN=nodosfilewarning", "LC_CTYPE=C" };
}
@@ -122,7 +110,7 @@ namespace NaCl.Build.CPPTasks
return objectFilePath;
}
- private void ConstructReadTLog(ITaskItem[] compiledSources, CanonicalTrackedOutputFiles outputs)
+ protected override void OutputReadTLog(ITaskItem[] compiledSources, CanonicalTrackedOutputFiles outputs)
{
string trackerPath = Path.GetFullPath(TlogDirectory + ReadTLogFilenames[0]);
@@ -186,7 +174,7 @@ namespace NaCl.Build.CPPTasks
}
}
- private CanonicalTrackedOutputFiles OutputWriteTrackerLog(ITaskItem[] compiledSources)
+ protected override CanonicalTrackedOutputFiles OutputWriteTLog(ITaskItem[] compiledSources)
{
string path = Path.Combine(TlogDirectory, WriteTLogFilename);
TaskItem item = new TaskItem(path);
@@ -208,7 +196,7 @@ namespace NaCl.Build.CPPTasks
return trackedFiles;
}
- private void OutputCommandTrackerLog(ITaskItem[] compiledSources)
+ protected override void OutputCommandTLog(ITaskItem[] compiledSources)
{
IDictionary<string, string> commandLines = GenerateCommandLinesFromTlog();
@@ -248,9 +236,9 @@ namespace NaCl.Build.CPPTasks
}
//build command line from components and add required switches
- string props = m_XamlParser.Parse(sourceFile, fullOutputName);
+ string props = xamlParser.Parse(sourceFile, fullOutputName);
commandLine.Append(props);
- commandLine.Append(" -MD -c ");
+ commandLine.Append(" -c ");
}
return commandLine.ToString();
@@ -271,73 +259,34 @@ namespace NaCl.Build.CPPTasks
return mergedSources.ToArray();
}
- protected bool ForcedRebuildRequired()
+ private int Compile(string pathToTool)
{
- string tlogCommandPath = null;
-
- try
+ if (Platform.Equals("pnacl", StringComparison.OrdinalIgnoreCase))
{
- tlogCommandPath = this.TLogCommandFile.GetMetadata("FullPath");
- }
- catch (Exception exception)
- {
- if (exception is InvalidOperationException || exception is NullReferenceException)
- return true;
- else
- throw;
- }
-
- //if command tlog file does not exist then force rebuild is required
- if (File.Exists(tlogCommandPath) == false)
- {
- return true;
- }
- else
- {
- return false;
+ if (!GCCUtilities.FindPython())
+ {
+ Log.LogError("PNaCl compilation requires python in your executable path.");
+ return -1;
+ }
}
- }
- private int Compile(string pathToTool)
- {
// If multiprocess complication is enabled (not the VS default)
// and the number of processors to use is not 1, then use the
// compiler_wrapper python script to run multiple instances of
// gcc
if (MultiProcessorCompilation && ProcessorNumber != 1)
{
-
- string envvar = (string)Registry.GetValue("HKEY_CURRENT_USER\\Environment", "PATH", "");
- List<string> pathList = new List<string>(envvar.Split(';'));
- envvar = (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\Environment", "PATH", "");
- pathList.AddRange(new List<string>(envvar.Split(';')));
- string pythonExe = null;
- foreach (string path in pathList)
- {
- string testPath = Path.Combine(path, "python.bat");
- if (File.Exists(testPath))
- {
- pythonExe = testPath;
- break;
- }
- testPath = Path.Combine(path, "python.exe");
- if (File.Exists(testPath))
- {
- pythonExe = testPath;
- break;
- }
- }
-
- if (pythonExe == null)
+ if (!GCCUtilities.FindPython())
{
- MessageBox.Show("Multi-processor Compilation with NaCl requires that python available in the PATH.\n" +
- "Please disable Multi-processor Compilation in the project properties or add python " +
- "to the your PATH\n" +
+ MessageBox.Show("Multi-processor Compilation with NaCl requires that python " +
+ "be available in the visual studio executable path.\n" +
+ "Please disable Multi-processor Compilation in the project " +
+ "properties or add python to the your executable path.\n" +
"Falling back to serial compilation.\n");
}
else
{
- return CompileParallel(pathToTool, pythonExe);
+ return CompileParallel(pathToTool);
}
}
return CompileSerial(pathToTool);
@@ -346,7 +295,6 @@ namespace NaCl.Build.CPPTasks
private int CompileSerial(string pathToTool)
{
int returnCode = 0;
-
foreach (ITaskItem sourceItem in CompileSourceList)
{
try
@@ -364,7 +312,6 @@ namespace NaCl.Build.CPPTasks
base.Log.LogMessage(Path.GetFileName(sourceItem.ToString()));
}
-
// compile
returnCode = base.ExecuteTool(pathToTool, commandLine, string.Empty);
}
@@ -382,7 +329,7 @@ namespace NaCl.Build.CPPTasks
return returnCode;
}
- private int CompileParallel(string pathToTool, string pythonExe)
+ private int CompileParallel(string pathToTool)
{
int returnCode = 0;
@@ -421,7 +368,7 @@ namespace NaCl.Build.CPPTasks
try
{
// compile this group of sources
- returnCode = base.ExecuteTool(pythonExe, cmd, "\"" + pythonScript + "\"");
+ returnCode = base.ExecuteTool("python", cmd, "\"" + pythonScript + "\"");
}
catch (Exception e)
{
@@ -459,55 +406,43 @@ namespace NaCl.Build.CPPTasks
return returnCode;
}
- protected override bool SkipTaskExecution()
- {
- return this.skippedExecution;
- }
-
protected void CalcSourcesToCompile()
{
- if (this.TrackFileAccess || this.MinimalRebuildFromTracking)
- {
- this.SetTrackerLogPaths();
- }
-
//check if full recompile is required otherwise perform incremental
if (this.ForcedRebuildRequired() || this.MinimalRebuildFromTracking == false)
{
this.CompileSourceList = this.Sources;
- if (this.CompileSourceList == null || this.CompileSourceList.Length == 0)
- {
- this.SkippedExecution = true;
- }
+ return;
}
- else
- {
- //retrieve list of sources out of date due to command line changes
- List<ITaskItem> outOfDateSourcesFromCommandLineChanges = this.GetOutOfDateSourcesFromCommandLineChanges();
- //retrieve sources out of date due to tracking
- CanonicalTrackedOutputFiles trackedOutputFiles = new CanonicalTrackedOutputFiles(this, this.TLogWriteFiles);
- this.TrackedInputFiles = new CanonicalTrackedInputFiles(this, this.TLogReadFiles, this.Sources, this.ExcludedInputPaths, trackedOutputFiles, true, false);
- ITaskItem[] outOfDateSourcesFromTracking = this.TrackedInputFiles.ComputeSourcesNeedingCompilation();
+ //retrieve list of sources out of date due to command line changes
+ List<ITaskItem> outOfDateSourcesFromCommandLine = GetOutOfDateSourcesFromCmdLineChanges();
- //merge out of date lists
- this.CompileSourceList = this.MergeOutOfDateSources(outOfDateSourcesFromTracking, outOfDateSourcesFromCommandLineChanges);
+ //retrieve sources out of date due to tracking
+ CanonicalTrackedOutputFiles trackedOutputFiles = new CanonicalTrackedOutputFiles(this, this.TLogWriteFiles);
+ this.TrackedInputFiles = new CanonicalTrackedInputFiles(this,
+ this.TLogReadFiles,
+ this.Sources,
+ this.ExcludedInputPaths,
+ trackedOutputFiles,
+ true,
+ false);
+ ITaskItem[] outOfDateSourcesFromTracking = this.TrackedInputFiles.ComputeSourcesNeedingCompilation();
- if (this.CompileSourceList.Length == 0)
- {
- this.SkippedExecution = true;
- }
- else
- {
- //remove sources to compile from tracked file list
- this.TrackedInputFiles.RemoveEntriesForSource(this.CompileSourceList);
- trackedOutputFiles.RemoveEntriesForSource(this.CompileSourceList);
- this.TrackedInputFiles.SaveTlog();
- trackedOutputFiles.SaveTlog();
+ //merge out of date lists
+ CompileSourceList = MergeOutOfDateSources(outOfDateSourcesFromTracking, outOfDateSourcesFromCommandLine);
- this.SkippedExecution = false;
- }
+ if (this.CompileSourceList.Length == 0)
+ {
+ this.SkippedExecution = true;
+ return;
}
+
+ //remove sources to compile from tracked file list
+ this.TrackedInputFiles.RemoveEntriesForSource(this.CompileSourceList);
+ trackedOutputFiles.RemoveEntriesForSource(this.CompileSourceList);
+ this.TrackedInputFiles.SaveTlog();
+ trackedOutputFiles.SaveTlog();
}
protected bool SourceIsC(string sourceFilename)
@@ -526,20 +461,11 @@ namespace NaCl.Build.CPPTasks
try
{
- m_XamlParser = new XamlParser(PropertiesFile);
- m_toolname = Path.GetFileNameWithoutExtension(ToolName);
- ValidateParameters();
+ xamlParser = new XamlParser(PropertiesFile);
+ if (!Setup())
+ return false;
CalcSourcesToCompile();
-
returnResult = base.Execute();
-
- // Update tracker log files if execution occurred
- //if (this.skippedExecution == false)
- {
- CanonicalTrackedOutputFiles outputs = OutputWriteTrackerLog(CompileSourceList);
- ConstructReadTLog(CompileSourceList, outputs);
- OutputCommandTrackerLog(CompileSourceList);
- }
}
finally
{
@@ -549,7 +475,7 @@ namespace NaCl.Build.CPPTasks
return returnResult;
}
- protected List<ITaskItem> GetOutOfDateSourcesFromCommandLineChanges()
+ protected List<ITaskItem> GetOutOfDateSourcesFromCmdLineChanges()
{
//get dictionary of source + command lines
IDictionary<string, string> dictionary = this.GenerateCommandLinesFromTlog();
@@ -581,169 +507,6 @@ namespace NaCl.Build.CPPTasks
return outOfDateSources;
}
- protected virtual void SetTrackerLogPaths()
- {
- if (this.TLogCommandFile == null)
- {
- string commandFile = Path.Combine(this.TlogDirectory, this.CommandTLogFilename);
- this.TLogCommandFile = new TaskItem(commandFile);
- }
-
- if (this.TLogReadFiles == null)
- {
- this.TLogReadFiles = new ITaskItem[this.ReadTLogFilenames.Length];
- for (int n = 0; n < this.ReadTLogFilenames.Length; n++)
- {
- string readFile = Path.Combine(this.TlogDirectory, this.ReadTLogFilenames[n]);
- this.TLogReadFiles[n] = new TaskItem(readFile);
- }
- }
-
- if (this.TLogWriteFiles == null)
- {
- this.TLogWriteFiles = new ITaskItem[1];
- string writeFile = Path.Combine(this.TlogDirectory, this.WriteTLogFilename);
- this.TLogWriteFiles[0] = new TaskItem(writeFile);
- }
- }
-
-
- //props
- protected string CommandTLogFilename
- {
- get
- {
- return m_toolname + ".compile.command.1.tlog";
- }
- }
-
- protected string[] ReadTLogFilenames
- {
- get
- {
- return new string[] { m_toolname + ".compile.read.1.tlog" };
- }
- }
-
- [Output]
- public bool SkippedExecution
- {
- get
- {
- return this.skippedExecution;
- }
- set
- {
- this.skippedExecution = value;
- }
- }
-
- public ITaskItem TLogCommandFile
- {
- get
- {
- return this.tlogCommandFile;
- }
- set
- {
- this.tlogCommandFile = value;
- }
- }
-
- protected string TlogDirectory
- {
- get
- {
- if (this.TrackerLogDirectory != null)
- {
- return this.TrackerLogDirectory;
- }
- return string.Empty;
- }
- }
-
- public bool MinimalRebuildFromTracking
- {
- get
- {
- return this.minimalRebuildFromTracking;
- }
- set
- {
- this.minimalRebuildFromTracking = value;
- }
- }
-
-
- public ITaskItem[] TLogReadFiles
- {
- get
- {
- return this.tlogReadFiles;
- }
- set
- {
- this.tlogReadFiles = value;
- }
- }
-
- public ITaskItem[] ExcludedInputPaths
- {
- get
- {
- return this.excludedInputPaths;
- }
- set
- {
- this.excludedInputPaths = value;
- }
- }
-
-
- public ITaskItem[] TLogWriteFiles
- {
- get
- {
- return this.tlogWriteFiles;
- }
- set
- {
- this.tlogWriteFiles = value;
- }
- }
-
- protected string WriteTLogFilename
- {
- get
- {
- return m_toolname + ".compile.write.1.tlog";
- }
- }
-
- public bool TrackFileAccess
- {
- get
- {
- return this.trackFileAccess;
- }
- set
- {
- this.trackFileAccess = value;
- }
- }
-
- protected CanonicalTrackedInputFiles TrackedInputFiles
- {
- get
- {
- return this.trackedInputFiles;
- }
- set
- {
- this.trackedInputFiles = value;
- }
- }
-
[Output]
public ITaskItem[] CompileSourceList
{
@@ -765,12 +528,5 @@ namespace NaCl.Build.CPPTasks
}
}
- protected override Encoding ResponseFileEncoding
- {
- get
- {
- return Encoding.ASCII;
- }
- }
}
}

Powered by Google App Engine
This is Rietveld 408576698