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

Side by Side Diff: visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClToolTask.cs

Issue 11375004: [NaCl Addin] Fix to PNaCl lib creation from MSVS (Closed) Base URL: http://nativeclient-sdk.googlecode.com/svn/trunk/src
Patch Set: Created 8 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 using System; 4 using System;
5 using System.Collections.Generic; 5 using System.Collections.Generic;
6 using System.Text; 6 using System.Text;
7 using System.Collections; 7 using System.Collections;
8 using System.IO; 8 using System.IO;
9 using System.Reflection; 9 using System.Reflection;
10 using System.Resources; 10 using System.Resources;
11 using System.Windows.Forms; 11 using System.Windows.Forms;
12 using Microsoft.Build.Framework; 12 using Microsoft.Build.Framework;
13 using Microsoft.Win32; 13 using Microsoft.Win32;
14 using Microsoft.Build.Utilities; 14 using Microsoft.Build.Utilities;
15 using System.Collections.Specialized; 15 using System.Collections.Specialized;
16 16
17 using System.Diagnostics; 17 using System.Diagnostics;
18 18
19 namespace NaCl.Build.CPPTasks 19 namespace NaCl.Build.CPPTasks
20 { 20 {
21 public abstract class NaClToolTask : ToolTask 21 public abstract class NaClToolTask : ToolTask
22 { 22 {
23 protected NaClToolTask(ResourceManager taskResources) : base(taskResourc es) { } 23 protected NaClToolTask(ResourceManager taskResources) : base(taskResourc es) { }
24 public bool BuildingInIDE { get; set; }
24 protected ITaskItem[] excludedInputPaths; 25 protected ITaskItem[] excludedInputPaths;
25 private ITaskItem[] tlogReadFiles; 26 private ITaskItem[] tlogReadFiles;
26 private ITaskItem tlogCommandFile; 27 private ITaskItem tlogCommandFile;
27 private ITaskItem[] tlogWriteFiles; 28 private ITaskItem[] tlogWriteFiles;
28 private CanonicalTrackedInputFiles trackedInputFiles; 29 private CanonicalTrackedInputFiles trackedInputFiles;
29 private bool skippedExecution; 30 private bool skippedExecution;
30 private bool minimalRebuildFromTracking; 31 private bool minimalRebuildFromTracking;
31 private bool trackFileAccess; 32 private bool trackFileAccess;
32 protected ITaskItem[] compileSourceList; 33 protected ITaskItem[] compileSourceList;
33 protected XamlParser xamlParser; 34 protected XamlParser xamlParser;
34 35
35 protected abstract CanonicalTrackedOutputFiles OutputWriteTLog(ITaskItem [] compiledSources);
36 protected abstract void OutputReadTLog(ITaskItem[] compiledSources, Cano nicalTrackedOutputFiles outputs);
37 protected abstract void OutputCommandTLog(ITaskItem[] compiledSources);
38
39 [Required] 36 [Required]
40 public string TrackerLogDirectory { get; set; } 37 public string TrackerLogDirectory { get; set; }
41 38
42 [Required] 39 [Required]
43 public virtual ITaskItem[] Sources { get; set; } 40 public virtual ITaskItem[] Sources { get; set; }
44 41
42 [Required]
43 public bool OutputCommandLine { get; set; }
44
45 [Required]
46 public string Platform { get; set; }
47
48 public virtual string OutputFile { get; set; }
45 49
46 // Override default StandardOutputLoggingImportance so that we see the s tdout from the 50 // Override default StandardOutputLoggingImportance so that we see the s tdout from the
47 // toolchain from within visual studio. 51 // toolchain from within visual studio.
48 protected override MessageImportance StandardOutputLoggingImportance 52 protected override MessageImportance StandardOutputLoggingImportance
49 { 53 {
50 get { return MessageImportance.Normal; } 54 get { return MessageImportance.Normal; }
51 } 55 }
52 56
53 protected bool ForcedRebuildRequired() 57 protected bool ForcedRebuildRequired()
54 { 58 {
(...skipping 25 matching lines...) Expand all
80 protected override bool SkipTaskExecution() 84 protected override bool SkipTaskExecution()
81 { 85 {
82 return this.skippedExecution; 86 return this.skippedExecution;
83 } 87 }
84 88
85 protected string BaseTool() 89 protected string BaseTool()
86 { 90 {
87 return Path.GetFileNameWithoutExtension(ToolName); 91 return Path.GetFileNameWithoutExtension(ToolName);
88 } 92 }
89 93
94 protected bool IsPNaCl()
95 {
96 return Platform.Equals("pnacl", StringComparison.OrdinalIgnoreCase);
97 }
98
90 protected bool Setup() 99 protected bool Setup()
91 { 100 {
92 this.SkippedExecution = false; 101 this.SkippedExecution = false;
93 102
94 if (!ValidateParameters()) 103 if (!ValidateParameters())
95 { 104 {
96 return false; 105 return false;
97 } 106 }
98 107
108 if (IsPNaCl())
109 {
110 if (!SDKUtilities.FindPython())
111 {
112 Log.LogError("PNaCl linking requires python in your executab le path.");
113 return false;
114 }
115 }
116
99 if (this.TrackFileAccess || this.MinimalRebuildFromTracking) 117 if (this.TrackFileAccess || this.MinimalRebuildFromTracking)
100 { 118 {
101 this.SetTrackerLogPaths(); 119 this.SetTrackerLogPaths();
102 } 120 }
103 121
104 if (this.ForcedRebuildRequired() || this.MinimalRebuildFromTracking == false) 122 if (this.ForcedRebuildRequired() || this.MinimalRebuildFromTracking == false)
105 { 123 {
106 if (this.Sources == null || this.Sources.Length == 0) 124 if (this.Sources == null || this.Sources.Length == 0)
107 { 125 {
108 this.SkippedExecution = true; 126 this.SkippedExecution = true;
109 } 127 }
110 } 128 }
111 129
112 return true; 130 return true;
113 } 131 }
114 132
133 protected virtual CanonicalTrackedOutputFiles OutputWriteTLog(ITaskItem[ ] inputs)
134 {
135 string path = Path.Combine(TlogDirectory, WriteTLogFilename);
136 TaskItem item = new TaskItem(path);
137 CanonicalTrackedOutputFiles trackedFiles =
138 new CanonicalTrackedOutputFiles(new TaskItem[] { item });
139
140 foreach (ITaskItem sourceItem in Sources)
141 {
142 //remove this entry associated with compiled source which is abo ut to be recomputed
143 trackedFiles.RemoveEntriesForSource(sourceItem);
144
145 //add entry with updated information
146 string upper = Path.GetFullPath(sourceItem.ItemSpec).ToUpperInva riant();
147 trackedFiles.AddComputedOutputForSourceRoot(upper, OutputFile);
148 }
149
150 //output tlog
151 trackedFiles.SaveTlog();
152
153 return trackedFiles;
154 }
155
156 protected virtual void OutputReadTLog(ITaskItem[] compiledSources,
157 CanonicalTrackedOutputFiles output s)
158 {
159 string trackerPath = Path.GetFullPath(TlogDirectory + ReadTLogFilena mes[0]);
160
161 using (var writer = new StreamWriter(trackerPath, false, Encoding.Un icode))
162 {
163 string sourcePath = "";
164 foreach (ITaskItem source in Sources)
165 {
166 if (sourcePath != "")
167 sourcePath += "|";
168 sourcePath += Path.GetFullPath(source.ItemSpec).ToUpperInvar iant();
169 }
170
171 writer.WriteLine("^" + sourcePath);
172 foreach (ITaskItem source in Sources)
173 {
174 writer.WriteLine(Path.GetFullPath(source.ItemSpec).ToUpperIn variant());
175 }
176 writer.WriteLine(Path.GetFullPath(OutputFile).ToUpperInvariant() );
177 }
178 }
179
180 protected virtual void OutputCommandTLog(ITaskItem[] compiledSources)
181 {
182 string fullpath = TLogCommandFile.GetMetadata("FullPath");
183 using (var writer = new StreamWriter(fullpath, false, Encoding.Unico de))
184 {
185 string cmds = GenerateResponseFileCommands();
186 string sourcePath = "";
187 foreach (ITaskItem source in Sources)
188 {
189 if (sourcePath != "")
190 sourcePath += "|";
191 sourcePath += Path.GetFullPath(source.ItemSpec).ToUpperInvar iant();
192 }
193
194 writer.WriteLine("^" + sourcePath);
195 writer.WriteLine(cmds);
196 }
197 }
198
115 public override bool Execute() 199 public override bool Execute()
116 { 200 {
117 bool returnResult = base.Execute(); 201 bool returnResult = base.Execute();
118 202
119 // Update tracker log files if execution occurred 203 // Update tracker log files if execution occurred
120 //if (this.skippedExecution == false) 204 //if (this.skippedExecution == false)
121 { 205 {
122 CanonicalTrackedOutputFiles outputs = OutputWriteTLog(compileSou rceList); 206 CanonicalTrackedOutputFiles outputs = OutputWriteTLog(compileSou rceList);
123 OutputReadTLog(compileSourceList, outputs); 207 OutputReadTLog(compileSourceList, outputs);
124 OutputCommandTLog(compileSourceList); 208 OutputCommandTLog(compileSourceList);
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 } 371 }
288 } 372 }
289 373
290 protected virtual string WriteTLogFilename 374 protected virtual string WriteTLogFilename
291 { 375 {
292 get 376 get
293 { 377 {
294 return BaseTool() + ".compile.write.1.tlog"; 378 return BaseTool() + ".compile.write.1.tlog";
295 } 379 }
296 } 380 }
381
382 public virtual string PlatformToolset
383 {
384 get
385 {
386 return "GCC";
387 }
388 }
389
390 protected override string GenerateFullPathToTool()
391 {
392 return this.ToolName;
393 }
297 } 394 }
298 } 395 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698