Index: visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClLink.cs |
diff --git a/visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClLink.cs b/visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClLink.cs |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5e8e964097560e62d18d99660225581f8aec0211 |
--- /dev/null |
+++ b/visual_studio/NativeClientVSAddIn/NaCl.Build.CPPTasks/NaClLink.cs |
@@ -0,0 +1,195 @@ |
+ |
+using System; |
+using System.IO; |
+using System.Resources; |
+using System.Reflection; |
+using System.Text; |
+using Microsoft.Build.Framework; |
+using Microsoft.Build.CPPTasks; |
+ |
+ |
+namespace NaCl.Build.CPPTasks |
+{ |
+ public class NaClLink : TrackedVCToolTask |
+ { |
+ private XamlParser m_XamlParser; |
+ |
+ public bool BuildingInIDE { get; set; } |
+ |
+ [Required] |
+ public string OutputCommandLine { get; set; } |
+ |
+ [Required] |
+ public string NaClLinkerPath { get; set; } |
+ |
+ [Required] |
+ public virtual string OutputFile { get; set; } |
+ |
+ [Required] |
+ public string PropertiesFile { get; set; } |
+ |
+ [Required] |
+ public virtual ITaskItem[] Sources { get; set; } |
+ |
+ [Required] |
+ public string ConfigurationType { get; set; } |
+ |
+ public NaClLink() |
+ : base(new ResourceManager("NaCl.Build.CPPTasks.Properties.Resources", Assembly.GetExecutingAssembly())) |
+ { |
+ |
+ } |
+ |
+ protected override string CommandTLogName |
+ { |
+ get |
+ { |
+ return "default.link.command.tlog"; |
+ } |
+ } |
+ |
+ protected override string[] ReadTLogNames |
+ { |
+ get |
+ { |
+ return new string[] { |
+ "default.link.read.tlog" |
+ }; |
+ } |
+ } |
+ |
+ protected override string[] WriteTLogNames |
+ { |
+ get |
+ { |
+ return new string[] { |
+ "default.link.write.tlog" |
+ }; |
+ } |
+ } |
+ |
+ protected override void LogEventsFromTextOutput(string singleLine, MessageImportance messageImportance) |
+ { |
+ base.LogEventsFromTextOutput(GCCUtilities.Convert_Output_GCC_to_VS(singleLine), messageImportance); |
+ } |
+ |
+ protected override string GenerateResponseFileCommands() |
+ { |
+ StringBuilder responseFileCmds = new StringBuilder(GCCUtilities.s_CommandLineLength); |
+ |
+ foreach (ITaskItem sourceFile in Sources) |
+ { |
+ responseFileCmds.Append(GCCUtilities.Convert_Path_Windows_To_Posix(sourceFile.GetMetadata("Identity"))); |
+ responseFileCmds.Append(" "); |
+ } |
+ |
+ responseFileCmds.Append(m_XamlParser.Parse(Sources[0])); |
+ |
+ return responseFileCmds.ToString(); |
+ } |
+ |
+ public override bool Execute() |
+ { |
+ bool returnResult = false; |
+ |
+ try |
+ { |
+ m_XamlParser = new XamlParser(PropertiesFile); |
+ |
+ returnResult = base.Execute(); |
+ } |
+ finally |
+ { |
+ |
+ } |
+ |
+ return returnResult; |
+ } |
+ |
+ protected override int ExecuteTool(string pathToTool, string responseFileCommands, string commandLineCommands) |
+ { |
+ if (OutputCommandLine == "true") |
+ { |
+ Log.LogMessage(MessageImportance.High, pathToTool + " " + responseFileCommands); |
+ } |
+ |
+ return base.ExecuteTool(pathToTool, responseFileCommands, commandLineCommands); |
+ } |
+ |
+ protected override void PostProcessSwitchList() |
+ { |
+ //skip default behavior |
+ } |
+ |
+ protected override string GenerateFullPathToTool() |
+ { |
+ return this.ToolName; |
+ } |
+ |
+ protected override string TrackerIntermediateDirectory |
+ { |
+ get |
+ { |
+ if (this.TrackerLogDirectory != null) |
+ { |
+ return this.TrackerLogDirectory; |
+ } |
+ |
+ return string.Empty; |
+ } |
+ } |
+ |
+ protected override Encoding ResponseFileEncoding |
+ { |
+ get |
+ { |
+ return Encoding.ASCII; |
+ } |
+ } |
+ |
+ protected override ITaskItem[] TrackedInputFiles |
+ { |
+ get |
+ { |
+ return this.Sources; |
+ } |
+ } |
+ |
+ protected override bool MaintainCompositeRootingMarkers |
+ { |
+ get |
+ { |
+ return true; |
+ } |
+ |
+ } |
+ |
+ protected override string ToolName |
+ { |
+ get |
+ { |
+ return NaClLinkerPath; |
+ } |
+ } |
+ |
+ public override bool AttributeFileTracking |
+ { |
+ get |
+ { |
+ return true; |
+ } |
+ } |
+ |
+ public virtual string PlatformToolset |
+ { |
+ get |
+ { |
+ return "GCC"; |
+ } |
+ set |
+ {} |
+ } |
+ |
+ public string TrackerLogDirectory { get; set; } |
+ } |
+} |