From c238a9dac6edb0055ed644e8812c25c519f24021 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Mon, 23 May 2016 13:46:01 -0400 Subject: [PATCH 1/6] [msbuild] Added support for Mono symbolication --- msbuild/Xamarin.Mac.Tasks/Tasks/Mmp.cs | 4 ++++ msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props | 1 + msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets | 1 + msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ArchiveTaskBase.cs | 4 ++++ msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs | 4 ++++ msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs | 5 +++++ msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props | 2 ++ msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets | 1 + 8 files changed, 22 insertions(+) diff --git a/msbuild/Xamarin.Mac.Tasks/Tasks/Mmp.cs b/msbuild/Xamarin.Mac.Tasks/Tasks/Mmp.cs index 8d5de2cc05e3..a6bfe2ca1431 100644 --- a/msbuild/Xamarin.Mac.Tasks/Tasks/Mmp.cs +++ b/msbuild/Xamarin.Mac.Tasks/Tasks/Mmp.cs @@ -57,6 +57,7 @@ protected override string ToolName { public string ApplicationName { get; set; } public string Architecture { get; set; } + public bool ArchiveSymbols { get; set; } public string LinkMode { get; set; } public bool Debug { get; set; } public bool Profiling { get; set; } @@ -117,6 +118,8 @@ protected override string GenerateCommandLineCommands () args.Add ("/arch:i386"); } + args.Add ("/msym:" + (ArchiveSymbols ? "yes" : "no")); + args.Add (string.Format ("--http-message-handler={0}", HttpClientHandler)); if (AppManifest != null) { @@ -193,6 +196,7 @@ public override bool Execute () Log.LogTaskProperty ("ApplicationAssembly", ApplicationAssembly); Log.LogTaskProperty ("ApplicationName", ApplicationName); Log.LogTaskProperty ("Architecture", Architecture); + Log.LogTaskProperty ("ArchiveSymbols", ArchiveSymbols); Log.LogTaskProperty ("Debug", Debug); Log.LogTaskProperty ("ExplicitReferences", ExplicitReferences); Log.LogTaskProperty ("ExtraArguments", ExtraArguments); diff --git a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props index 6de19bd9d316..45ea0e7efef8 100644 --- a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props +++ b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props @@ -34,6 +34,7 @@ Copyright (C) 2013-2014 Xamarin. All rights reserved. + True false diff --git a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets index 93916048a36f..1004e34bb382 100644 --- a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets +++ b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets @@ -418,6 +418,7 @@ Copyright (C) 2014 Xamarin. All rights reserved. TargetFrameworkVersion="$(TargetFrameworkVersion)" UseXamMacFullFramework="$(UseXamMacFullFramework)" Architecture="$(XamMacArch)" + ArchiveSymbols="$(MonoSymbolArchive)" LinkMode="$(LinkMode)" Debug="$(DebugSymbols)" HttpClientHandler="$(HttpClientHandler)" diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ArchiveTaskBase.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ArchiveTaskBase.cs index f2c81b4ada07..3f9313286381 100644 --- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ArchiveTaskBase.cs +++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ArchiveTaskBase.cs @@ -47,6 +47,10 @@ protected string DSYMDir { get { return AppBundleDir.ItemSpec + ".dSYM"; } } + protected string MSYMDir { + get { return AppBundleDir.ItemSpec + ".mSYM"; } + } + protected string XcodeArchivesDir { get { var home = Environment.GetFolderPath (Environment.SpecialFolder.Personal); diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs index b8f7340d2d2c..9284ca604361 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs +++ b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs @@ -135,6 +135,10 @@ public override bool Execute () var appDestDir = Path.Combine (productsDir, "Applications", Path.GetFileName (AppBundleDir.ItemSpec)); Ditto (AppBundleDir.ItemSpec, appDestDir); + // Archive the mSYMs... + var msymsDestDir = Path.Combine (archiveDir, "mSYMs", Path.GetFileName (MSYMDir)); + Ditto (MSYMDir, msymsDestDir); + // Archive the dSYMs... var dsymsDestDir = Path.Combine (archiveDir, "dSYMs", Path.GetFileName (DSYMDir)); Ditto (DSYMDir, dsymsDestDir); diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs index 6d44040b8208..17fa1220af80 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs +++ b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs @@ -67,6 +67,8 @@ public GccOptions () public string Architectures { get; set; } + public bool ArchiveSymbols { get; set; } + [Required] public string CompiledEntitlements { get; set; } @@ -492,6 +494,8 @@ protected override string GenerateCommandLineCommands () // don't have mtouch generate the dsyms... args.Add ("--dsym=no"); + args.Add ("--msym=" + (ArchiveSymbols ? "yes" : "no")); + var gcc = new GccOptions (); if (!string.IsNullOrEmpty (ExtraArgs)) { @@ -607,6 +611,7 @@ public override bool Execute () Log.LogTaskProperty ("AppExtensionReferences", AppExtensionReferences); Log.LogTaskProperty ("AppManifest", AppManifest); Log.LogTaskProperty ("Architectures", Architectures); + Log.LogTaskProperty ("ArchiveSymbols", ArchiveSymbols); Log.LogTaskProperty ("BitcodeEnabled", EnableBitcode); Log.LogTaskProperty ("CompiledEntitlements", CompiledEntitlements); Log.LogTaskProperty ("Debug", Debug); diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props index 4c1c1f8bb599..d0842aa9b64e 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props @@ -36,6 +36,8 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. Resources + True + False True False diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets index 22230d3d1a8e..cf77907ee317 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets @@ -717,6 +717,7 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. UseThumb="$(MtouchUseThumb)" EnableBitcode="$(MtouchEnableBitcode)" AppExtensionReferences="@(_ResolvedAppExtensionReferences)" + ArchiveSymbols="$(MonoSymbolArchive)" Verbosity="$(MtouchVerbosity)" > From 2ca7ee0a6392fad748dff9565fa091c267308ec7 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Mon, 23 May 2016 13:53:38 -0400 Subject: [PATCH 2/6] [msbuild] Archive appex mSYM data as well --- .../Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs index 9284ca604361..907acf191f7f 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs +++ b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs @@ -79,6 +79,11 @@ void ArchiveAppExtension (ITaskItem appex, string archiveDir) var destDir = Path.Combine (archiveDir, "dSYMs", Path.GetFileName (dsymDir)); Ditto (dsymDir, destDir); + + var msymDir = appex.ItemSpec + ".mSYM"; + destDir = Path.Combine (archiveDir, "mSYMs", Path.GetFileName (msymDir)); + + Ditto (msymDir, destDir); } void AddIconPaths (PArray icons, PArray iconFiles, string productsDir) @@ -135,14 +140,14 @@ public override bool Execute () var appDestDir = Path.Combine (productsDir, "Applications", Path.GetFileName (AppBundleDir.ItemSpec)); Ditto (AppBundleDir.ItemSpec, appDestDir); - // Archive the mSYMs... - var msymsDestDir = Path.Combine (archiveDir, "mSYMs", Path.GetFileName (MSYMDir)); - Ditto (MSYMDir, msymsDestDir); - // Archive the dSYMs... var dsymsDestDir = Path.Combine (archiveDir, "dSYMs", Path.GetFileName (DSYMDir)); Ditto (DSYMDir, dsymsDestDir); + // Archive the mSYMs... + var msymsDestDir = Path.Combine (archiveDir, "mSYMs", Path.GetFileName (MSYMDir)); + Ditto (MSYMDir, msymsDestDir); + // Archive the Bitcode symbol maps var bcSymbolMaps = Directory.GetFiles (Path.GetDirectoryName (DSYMDir), "*.bcsymbolmap"); if (bcSymbolMaps.Length > 0) { From 18109120ac883c3b51f941d16aa8d35632cbd4f9 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Tue, 24 May 2016 14:37:27 -0400 Subject: [PATCH 3/6] [msbuild] Default MonoSymbolArchive to false --- msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props index d0842aa9b64e..76fb2bc73950 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props @@ -36,7 +36,7 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. Resources - True + False False True From 82b44e72b24169ef3e8de425908d26126b35c480 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Tue, 24 May 2016 14:41:08 -0400 Subject: [PATCH 4/6] [msbuild] Make sure the mSYM dir exists before archiving --- .../Tasks/ArchiveTaskBase.cs | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs index 907acf191f7f..4258959db2c0 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs +++ b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ArchiveTaskBase.cs @@ -76,14 +76,18 @@ void ArchiveAppExtension (ITaskItem appex, string archiveDir) } var dsymDir = appex.ItemSpec + ".dSYM"; - var destDir = Path.Combine (archiveDir, "dSYMs", Path.GetFileName (dsymDir)); - Ditto (dsymDir, destDir); + if (Directory.Exists (dsymDir)) { + var destDir = Path.Combine (archiveDir, "dSYMs", Path.GetFileName (dsymDir)); + Ditto (dsymDir, destDir); + } var msymDir = appex.ItemSpec + ".mSYM"; - destDir = Path.Combine (archiveDir, "mSYMs", Path.GetFileName (msymDir)); - Ditto (msymDir, destDir); + if (Directory.Exists (msymDir)) { + var destDir = Path.Combine (archiveDir, "mSYMs", Path.GetFileName (msymDir)); + Ditto (msymDir, destDir); + } } void AddIconPaths (PArray icons, PArray iconFiles, string productsDir) @@ -141,12 +145,16 @@ public override bool Execute () Ditto (AppBundleDir.ItemSpec, appDestDir); // Archive the dSYMs... - var dsymsDestDir = Path.Combine (archiveDir, "dSYMs", Path.GetFileName (DSYMDir)); - Ditto (DSYMDir, dsymsDestDir); + if (Directory.Exists (DSYMDir)) { + var destDir = Path.Combine (archiveDir, "dSYMs", Path.GetFileName (DSYMDir)); + Ditto (DSYMDir, destDir); + } // Archive the mSYMs... - var msymsDestDir = Path.Combine (archiveDir, "mSYMs", Path.GetFileName (MSYMDir)); - Ditto (MSYMDir, msymsDestDir); + if (Directory.Exists (MSYMDir)) { + var destDir = Path.Combine (archiveDir, "mSYMs", Path.GetFileName (MSYMDir)); + Ditto (MSYMDir, destDir); + } // Archive the Bitcode symbol maps var bcSymbolMaps = Directory.GetFiles (Path.GetDirectoryName (DSYMDir), "*.bcsymbolmap"); From c4fd850e7d03942044dd41f1db5d9502b2033481 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Tue, 24 May 2016 15:28:19 -0400 Subject: [PATCH 5/6] [msbuild] Default MonoSymbolArchive to False for Mac as well --- msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props index 45ea0e7efef8..2a3c321fbaa8 100644 --- a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props +++ b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props @@ -34,7 +34,7 @@ Copyright (C) 2013-2014 Xamarin. All rights reserved. - True + False false From c2de101e16a191d49f9511f02b3c7c5dfed44219 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Fri, 27 May 2016 14:12:42 -0400 Subject: [PATCH 6/6] [msbuild] Only pass --msym if the value is explicitly set --- msbuild/Xamarin.Mac.Tasks/Tasks/Mmp.cs | 12 +++++++----- msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props | 1 - .../Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs | 6 ++++-- .../Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props | 2 -- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/msbuild/Xamarin.Mac.Tasks/Tasks/Mmp.cs b/msbuild/Xamarin.Mac.Tasks/Tasks/Mmp.cs index a6bfe2ca1431..b7ba02ae659d 100644 --- a/msbuild/Xamarin.Mac.Tasks/Tasks/Mmp.cs +++ b/msbuild/Xamarin.Mac.Tasks/Tasks/Mmp.cs @@ -57,7 +57,7 @@ protected override string ToolName { public string ApplicationName { get; set; } public string Architecture { get; set; } - public bool ArchiveSymbols { get; set; } + public string ArchiveSymbols { get; set; } public string LinkMode { get; set; } public bool Debug { get; set; } public bool Profiling { get; set; } @@ -77,12 +77,13 @@ protected override string GenerateFullPathToTool () protected override bool ValidateParameters () { XamMacArch arch; - return Enum.TryParse (Architecture, true, out arch); + return Enum.TryParse (Architecture, true, out arch); } protected override string GenerateCommandLineCommands () { var args = new ProcessArgumentBuilder (); + bool msym; args.Add ("/verbose"); @@ -102,7 +103,7 @@ protected override string GenerateCommandLineCommands () if (TargetFrameworkIdentifier == "Xamarin.Mac" || UseXamMacFullFramework) { XamMacArch arch; - if (!Enum.TryParse (Architecture, true, out arch)) + if (!Enum.TryParse (Architecture, true, out arch)) arch = XamMacArch.Default; if (arch == XamMacArch.Default) @@ -118,7 +119,8 @@ protected override string GenerateCommandLineCommands () args.Add ("/arch:i386"); } - args.Add ("/msym:" + (ArchiveSymbols ? "yes" : "no")); + if (!string.IsNullOrEmpty (ArchiveSymbols) && bool.TryParse (ArchiveSymbols.Trim (), out msym)) + args.Add ("--msym:" + (msym ? "yes" : "no")); args.Add (string.Format ("--http-message-handler={0}", HttpClientHandler)); @@ -147,7 +149,7 @@ protected override string GenerateCommandLineCommands () if (Profiling) args.Add ("/profiling"); - switch ((LinkMode ?? String.Empty).ToLower ()) { + switch ((LinkMode ?? string.Empty).ToLower ()) { case "full": break; case "sdkonly": diff --git a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props index 2a3c321fbaa8..6de19bd9d316 100644 --- a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props +++ b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props @@ -34,7 +34,6 @@ Copyright (C) 2013-2014 Xamarin. All rights reserved. - False false diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs index 17fa1220af80..1eb5c24e3398 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs +++ b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs @@ -67,7 +67,7 @@ public GccOptions () public string Architectures { get; set; } - public bool ArchiveSymbols { get; set; } + public string ArchiveSymbols { get; set; } [Required] public string CompiledEntitlements { get; set; } @@ -341,6 +341,7 @@ protected override string GenerateCommandLineCommands () { var args = new ProcessArgumentBuilder (); TargetArchitecture architectures; + bool msym; if (string.IsNullOrEmpty (Architectures) || !Enum.TryParse (Architectures, out architectures)) architectures = TargetArchitecture.Default; @@ -494,7 +495,8 @@ protected override string GenerateCommandLineCommands () // don't have mtouch generate the dsyms... args.Add ("--dsym=no"); - args.Add ("--msym=" + (ArchiveSymbols ? "yes" : "no")); + if (!string.IsNullOrEmpty (ArchiveSymbols) && bool.TryParse (ArchiveSymbols.Trim (), out msym)) + args.Add ("--msym=" + (msym ? "yes" : "no")); var gcc = new GccOptions (); diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props index 76fb2bc73950..4c1c1f8bb599 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.props @@ -36,8 +36,6 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. Resources - False - False True False