| Index: visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClToolTask.cs
|
| diff --git a/visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClToolTask.cs b/visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClToolTask.cs
|
| index 2c471366d0e68a82c39003471546d52484fa9fdd..ab5e413917a6124665859c483044c59feb6a2b67 100644
|
| --- a/visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClToolTask.cs
|
| +++ b/visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClToolTask.cs
|
| @@ -21,6 +21,7 @@ namespace NaCl.Build.CPPTasks
|
| public abstract class NaClToolTask : ToolTask
|
| {
|
| protected NaClToolTask(ResourceManager taskResources) : base(taskResources) { }
|
| + public bool BuildingInIDE { get; set; }
|
| protected ITaskItem[] excludedInputPaths;
|
| private ITaskItem[] tlogReadFiles;
|
| private ITaskItem tlogCommandFile;
|
| @@ -32,16 +33,19 @@ namespace NaCl.Build.CPPTasks
|
| protected ITaskItem[] compileSourceList;
|
| protected XamlParser xamlParser;
|
|
|
| - protected abstract CanonicalTrackedOutputFiles OutputWriteTLog(ITaskItem[] compiledSources);
|
| - protected abstract void OutputReadTLog(ITaskItem[] compiledSources, CanonicalTrackedOutputFiles outputs);
|
| - protected abstract void OutputCommandTLog(ITaskItem[] compiledSources);
|
| -
|
| [Required]
|
| public string TrackerLogDirectory { get; set; }
|
|
|
| [Required]
|
| public virtual ITaskItem[] Sources { get; set; }
|
|
|
| + [Required]
|
| + public bool OutputCommandLine { get; set; }
|
| +
|
| + [Required]
|
| + public string Platform { get; set; }
|
| +
|
| + public virtual string OutputFile { get; set; }
|
|
|
| // Override default StandardOutputLoggingImportance so that we see the stdout from the
|
| // toolchain from within visual studio.
|
| @@ -87,6 +91,11 @@ namespace NaCl.Build.CPPTasks
|
| return Path.GetFileNameWithoutExtension(ToolName);
|
| }
|
|
|
| + protected bool IsPNaCl()
|
| + {
|
| + return Platform.Equals("pnacl", StringComparison.OrdinalIgnoreCase);
|
| + }
|
| +
|
| protected bool Setup()
|
| {
|
| this.SkippedExecution = false;
|
| @@ -96,6 +105,15 @@ namespace NaCl.Build.CPPTasks
|
| return false;
|
| }
|
|
|
| + if (IsPNaCl())
|
| + {
|
| + if (!SDKUtilities.FindPython())
|
| + {
|
| + Log.LogError("PNaCl linking requires python in your executable path.");
|
| + return false;
|
| + }
|
| + }
|
| +
|
| if (this.TrackFileAccess || this.MinimalRebuildFromTracking)
|
| {
|
| this.SetTrackerLogPaths();
|
| @@ -112,6 +130,72 @@ namespace NaCl.Build.CPPTasks
|
| return true;
|
| }
|
|
|
| + protected virtual CanonicalTrackedOutputFiles OutputWriteTLog(ITaskItem[] inputs)
|
| + {
|
| + string path = Path.Combine(TlogDirectory, WriteTLogFilename);
|
| + TaskItem item = new TaskItem(path);
|
| + CanonicalTrackedOutputFiles trackedFiles =
|
| + new CanonicalTrackedOutputFiles(new TaskItem[] { item });
|
| +
|
| + foreach (ITaskItem sourceItem in Sources)
|
| + {
|
| + //remove this entry associated with compiled source which is about to be recomputed
|
| + trackedFiles.RemoveEntriesForSource(sourceItem);
|
| +
|
| + //add entry with updated information
|
| + string upper = Path.GetFullPath(sourceItem.ItemSpec).ToUpperInvariant();
|
| + trackedFiles.AddComputedOutputForSourceRoot(upper, OutputFile);
|
| + }
|
| +
|
| + //output tlog
|
| + trackedFiles.SaveTlog();
|
| +
|
| + return trackedFiles;
|
| + }
|
| +
|
| + protected virtual void OutputReadTLog(ITaskItem[] compiledSources,
|
| + CanonicalTrackedOutputFiles outputs)
|
| + {
|
| + string trackerPath = Path.GetFullPath(TlogDirectory + ReadTLogFilenames[0]);
|
| +
|
| + using (var writer = new StreamWriter(trackerPath, false, Encoding.Unicode))
|
| + {
|
| + string sourcePath = "";
|
| + foreach (ITaskItem source in Sources)
|
| + {
|
| + if (sourcePath != "")
|
| + sourcePath += "|";
|
| + sourcePath += Path.GetFullPath(source.ItemSpec).ToUpperInvariant();
|
| + }
|
| +
|
| + writer.WriteLine("^" + sourcePath);
|
| + foreach (ITaskItem source in Sources)
|
| + {
|
| + writer.WriteLine(Path.GetFullPath(source.ItemSpec).ToUpperInvariant());
|
| + }
|
| + writer.WriteLine(Path.GetFullPath(OutputFile).ToUpperInvariant());
|
| + }
|
| + }
|
| +
|
| + protected virtual void OutputCommandTLog(ITaskItem[] compiledSources)
|
| + {
|
| + string fullpath = TLogCommandFile.GetMetadata("FullPath");
|
| + using (var writer = new StreamWriter(fullpath, false, Encoding.Unicode))
|
| + {
|
| + string cmds = GenerateResponseFileCommands();
|
| + string sourcePath = "";
|
| + foreach (ITaskItem source in Sources)
|
| + {
|
| + if (sourcePath != "")
|
| + sourcePath += "|";
|
| + sourcePath += Path.GetFullPath(source.ItemSpec).ToUpperInvariant();
|
| + }
|
| +
|
| + writer.WriteLine("^" + sourcePath);
|
| + writer.WriteLine(cmds);
|
| + }
|
| + }
|
| +
|
| public override bool Execute()
|
| {
|
| bool returnResult = base.Execute();
|
| @@ -294,5 +378,18 @@ namespace NaCl.Build.CPPTasks
|
| return BaseTool() + ".compile.write.1.tlog";
|
| }
|
| }
|
| +
|
| + public virtual string PlatformToolset
|
| + {
|
| + get
|
| + {
|
| + return "GCC";
|
| + }
|
| + }
|
| +
|
| + protected override string GenerateFullPathToTool()
|
| + {
|
| + return this.ToolName;
|
| + }
|
| }
|
| }
|
|
|