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

Side by Side Diff: visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClLink.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.IO; 5 using System.IO;
6 using System.Resources; 6 using System.Resources;
7 using System.Reflection; 7 using System.Reflection;
8 using System.Text; 8 using System.Text;
9 using Microsoft.Build.Framework; 9 using Microsoft.Build.Framework;
10 using Microsoft.Build.CPPTasks; 10 using Microsoft.Build.CPPTasks;
11 using Microsoft.Build.Utilities; 11 using Microsoft.Build.Utilities;
12 12
13 13
14 namespace NaCl.Build.CPPTasks 14 namespace NaCl.Build.CPPTasks
15 { 15 {
Sam Clegg 2012/11/12 20:10:36 All these removals have been lifted into the super
16 public class NaClLink : NaClToolTask 16 public class NaClLink : NaClToolTask
17 { 17 {
18 public bool BuildingInIDE { get; set; }
19
20 /// <summary> 18 /// <summary>
21 /// Property set only in PNaCl builds to signal that the translator 19 /// Property set only in PNaCl builds to signal that the translator
22 /// should be run post-link. 20 /// should be run post-link.
23 /// </summary> 21 /// </summary>
24 public bool TranslateARM { get; set; } 22 public bool TranslateARM { get; set; }
25 23
26 /// <summary> 24 /// <summary>
27 /// Property set only in PNaCl builds to signal that the translator 25 /// Property set only in PNaCl builds to signal that the translator
28 /// should be run post-link. 26 /// should be run post-link.
29 /// </summary> 27 /// </summary>
30 public bool TranslateX86 { get; set; } 28 public bool TranslateX86 { get; set; }
31 29
32 /// <summary> 30 /// <summary>
33 /// Property set only in PNaCl builds to signal that the translator 31 /// Property set only in PNaCl builds to signal that the translator
34 /// should be run post-link. 32 /// should be run post-link.
35 /// </summary> 33 /// </summary>
36 public bool TranslateX64 { get; set; } 34 public bool TranslateX64 { get; set; }
37 35
38 [Required] 36 [Required]
39 public bool OutputCommandLine { get; set; }
40
41 [Required]
42 public bool CreateNMF { get; set; } 37 public bool CreateNMF { get; set; }
43 38
44 [Required] 39 [Required]
45 public string NaClLinkerPath { get; set; } 40 public string NaClLinkerPath { get; set; }
46 41
47 [Required] 42 [Required]
48 public string ProjectName { get; set; } 43 public string ProjectName { get; set; }
49 44
50 [Required] 45 [Required]
51 public string ToolchainName { get; set; } 46 public string ToolchainName { get; set; }
52 47
53 [Required] 48 [Required]
54 public string Platform { get; set; }
55
56 [Required]
57 public string CreateNMFPath { get; set; } 49 public string CreateNMFPath { get; set; }
58 50
59 [Required] 51 [Required]
60 public virtual string OutputFile { get; set; }
61
62 [Required]
63 public string PropertiesFile { get; set; } 52 public string PropertiesFile { get; set; }
64 53
65 [Required] 54 [Required]
66 public string ConfigurationType { get; set; } 55 public string ConfigurationType { get; set; }
67 56
68 protected override CanonicalTrackedOutputFiles OutputWriteTLog(ITaskItem [] inputs)
69 {
70 string path = Path.Combine(TlogDirectory, WriteTLogFilename);
71 TaskItem item = new TaskItem(path);
72 CanonicalTrackedOutputFiles trackedFiles =
73 new CanonicalTrackedOutputFiles(new TaskItem[] { item });
74
75 foreach (ITaskItem sourceItem in Sources)
76 {
77 //remove this entry associated with compiled source which is abo ut to be recomputed
78 trackedFiles.RemoveEntriesForSource(sourceItem);
79
80 //add entry with updated information
81 string upper = Path.GetFullPath(sourceItem.ItemSpec).ToUpperInva riant();
82 trackedFiles.AddComputedOutputForSourceRoot(upper, OutputFile);
83 }
84
85 //output tlog
86 trackedFiles.SaveTlog();
87
88 return trackedFiles;
89 }
90
91 protected override void OutputReadTLog(ITaskItem[] compiledSources, Cano nicalTrackedOutputFiles outputs)
92 {
93 string trackerPath = Path.GetFullPath(TlogDirectory + ReadTLogFilena mes[0]);
94
95 using (StreamWriter writer = new StreamWriter(trackerPath, false, En coding.Unicode))
96 {
97 string sourcePath = "";
98 foreach (ITaskItem source in Sources)
99 {
100 if (sourcePath != "")
101 sourcePath += "|";
102 sourcePath += Path.GetFullPath(source.ItemSpec).ToUpperInvar iant();
103 }
104
105 writer.WriteLine("^" + sourcePath);
106 foreach (ITaskItem source in Sources)
107 {
108 writer.WriteLine(Path.GetFullPath(source.ItemSpec).ToUpperIn variant());
109 }
110 writer.WriteLine(Path.GetFullPath(OutputFile).ToUpperInvariant() );
111 }
112 }
113
114 protected override void OutputCommandTLog(ITaskItem[] compiledSources)
115 {
116 using (StreamWriter writer = new StreamWriter(TLogCommandFile.GetMet adata("FullPath"), false, Encoding.Unicode))
117 {
118 string cmds = GenerateResponseFileCommands();
119 string sourcePath = "";
120 foreach (ITaskItem source in Sources)
121 {
122 if (sourcePath != "")
123 sourcePath += "|";
124 sourcePath += Path.GetFullPath(source.ItemSpec).ToUpperInvar iant();
125 }
126
127 writer.WriteLine("^" + sourcePath);
128 writer.WriteLine(cmds);
129 }
130 }
131
132 public NaClLink() 57 public NaClLink()
133 : base(new ResourceManager("NaCl.Build.CPPTasks.Properties.Resources ", Assembly.GetExecutingAssembly())) 58 : base(new ResourceManager("NaCl.Build.CPPTasks.Properties.Resources ", Assembly.GetExecutingAssembly()))
134 { 59 {
135 this.EnvironmentVariables = new string[] { "CYGWIN=nodosfilewarning" , "LC_CTYPE=C" }; 60 this.EnvironmentVariables = new string[] { "CYGWIN=nodosfilewarning" , "LC_CTYPE=C" };
136 } 61 }
137 62
138 protected override void LogEventsFromTextOutput(string singleLine, Messa geImportance messageImportance) 63 protected override void LogEventsFromTextOutput(string singleLine, Messa geImportance messageImportance)
139 { 64 {
140 base.LogEventsFromTextOutput(GCCUtilities.ConvertGCCOutput(singleLin e), messageImportance); 65 base.LogEventsFromTextOutput(GCCUtilities.ConvertGCCOutput(singleLin e), messageImportance);
141 } 66 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 Log.LogMessage("pnacl-translate -> {0}", Path.GetFileName(outfil e)); 105 Log.LogMessage("pnacl-translate -> {0}", Path.GetFileName(outfil e));
181 106
182 if (ExecuteTool(translateTool, cmd, string.Empty) != 0) 107 if (ExecuteTool(translateTool, cmd, string.Empty) != 0)
183 { 108 {
184 return false; 109 return false;
185 } 110 }
186 111
187 return true; 112 return true;
188 } 113 }
189 114
190 private bool IsPNaCl()
191 {
192 return Platform.Equals("pnacl", StringComparison.OrdinalIgnoreCase);
193 }
194
195 public override bool Execute() 115 public override bool Execute()
196 { 116 {
197 if (IsPNaCl())
198 {
199 if (!SDKUtilities.FindPython())
200 {
201 Log.LogError("PNaCl linking requires python in your executab le path.");
202 return false;
203 }
204 }
205
206 xamlParser = new XamlParser(PropertiesFile); 117 xamlParser = new XamlParser(PropertiesFile);
207 if (!Setup()) 118 if (!Setup())
208 return false; 119 return false;
209 120
210 if (!OutputCommandLine) 121 if (!OutputCommandLine)
211 Log.LogMessage("Linking: {0}", Path.GetFileName(OutputFile)); 122 Log.LogMessage("Linking: {0}", Path.GetFileName(OutputFile));
212 123
213 if (!base.Execute()) 124 if (!base.Execute())
214 return false; 125 return false;
215 126
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 protected override int ExecuteTool(string pathToTool, string responseFil eCommands, string commandLineCommands) 205 protected override int ExecuteTool(string pathToTool, string responseFil eCommands, string commandLineCommands)
295 { 206 {
296 if (OutputCommandLine) 207 if (OutputCommandLine)
297 { 208 {
298 Log.LogMessage(MessageImportance.High, pathToTool + " " + respo nseFileCommands + " " + commandLineCommands); 209 Log.LogMessage(MessageImportance.High, pathToTool + " " + respo nseFileCommands + " " + commandLineCommands);
299 } 210 }
300 211
301 return base.ExecuteTool(pathToTool, responseFileCommands, commandLin eCommands); 212 return base.ExecuteTool(pathToTool, responseFileCommands, commandLin eCommands);
302 } 213 }
303 214
304 protected override string GenerateFullPathToTool()
305 {
306 return this.ToolName;
307 }
308
309 protected override Encoding ResponseFileEncoding 215 protected override Encoding ResponseFileEncoding
310 { 216 {
311 get 217 get
312 { 218 {
313 return Encoding.ASCII; 219 return Encoding.ASCII;
314 } 220 }
315 } 221 }
316 222
317 protected override string ToolName 223 protected override string ToolName
318 { 224 {
(...skipping 19 matching lines...) Expand all
338 } 244 }
339 } 245 }
340 246
341 protected override string WriteTLogFilename 247 protected override string WriteTLogFilename
342 { 248 {
343 get 249 get
344 { 250 {
345 return BaseTool() + ".link.write.1.tlog"; 251 return BaseTool() + ".link.write.1.tlog";
346 } 252 }
347 } 253 }
348
349 public virtual string PlatformToolset
350 {
351 get
352 {
353 return "GCC";
354 }
355 set
356 {}
357 }
358 } 254 }
359 } 255 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698