diff --git a/mk/xamarin.mk b/mk/xamarin.mk index 9c58b25aadc1..77e034db3d70 100644 --- a/mk/xamarin.mk +++ b/mk/xamarin.mk @@ -1,5 +1,5 @@ ifdef ENABLE_XAMARIN -NEEDED_MACCORE_VERSION := 9a5e6f02f305d1b580229b37c7775c4897738f4d +NEEDED_MACCORE_VERSION := 190c67d8551def7bef9aa89c3100805ca57761ab NEEDED_MACCORE_BRANCH := master MACCORE_DIRECTORY := maccore diff --git a/tools/mmp/Tuning.cs b/tools/mmp/Tuning.cs index 5e2ad438bea6..80164970916c 100644 --- a/tools/mmp/Tuning.cs +++ b/tools/mmp/Tuning.cs @@ -123,7 +123,7 @@ static Pipeline CreatePipeline (LinkerOptions options) { var pipeline = new Pipeline (); - pipeline.AppendStep (new LoadReferencesStep ()); + pipeline.AppendStep (options.LinkMode == LinkMode.None ? new LoadOptionalReferencesStep () : new LoadReferencesStep ()); if (options.I18nAssemblies != I18nAssemblies.None) pipeline.AppendStep (new LoadI18nAssemblies (options.I18nAssemblies)); @@ -240,4 +240,31 @@ protected override void ProcessAssembly (AssemblyDefinition assembly) base.ProcessAssembly (assembly); } } + + class LoadOptionalReferencesStep : LoadReferencesStep + { + HashSet _references = new HashSet (); + + protected override void ProcessAssembly (AssemblyDefinition assembly) + { + ProcessReferences (assembly); + } + + void ProcessReferences (AssemblyDefinition assembly) + { + if (_references.Contains (assembly.Name)) + return; + + _references.Add (assembly.Name); + + foreach (AssemblyNameReference reference in assembly.MainModule.AssemblyReferences) { + try { + ProcessReferences (Context.Resolve (reference)); + } catch (AssemblyResolutionException fnfe) { + ErrorHelper.Warning (2013, fnfe, "Failed to resolve the reference to \"{0}\", referenced in \"{1}\". The app will not include the referenced assembly, and may fail at runtime.", fnfe.AssemblyReference.FullName, assembly.Name.FullName); + } + } + } + } + } diff --git a/tools/mmp/error.cs b/tools/mmp/error.cs index 618461424b4b..e8688b58c095 100644 --- a/tools/mmp/error.cs +++ b/tools/mmp/error.cs @@ -62,6 +62,7 @@ namespace Xamarin.Bundler { // MM2010 Unknown HttpMessageHandler `{0}`. Valid values are HttpClientHandler (default), CFNetworkHandler or NSUrlSessionHandler // MM2011 Unknown TLSProvider `{0}. Valid values are default, legacy or appletls // MM2012 Only first {0} of {1} "Referenced by" warnings shown. ** This message related to 2009 ** + // Warning MM2013 Failed to resolve the reference to "{0}", referenced in "{1}". The app will not include the referenced assembly, and may fail at runtime. // MM4xxx code generation // MM40xx driver.m // MM4001 The main template could not be expansed to `{0}`. diff --git a/tools/mtouch/error.cs b/tools/mtouch/error.cs index 90f138f70eb1..e09c306b68fd 100644 --- a/tools/mtouch/error.cs +++ b/tools/mtouch/error.cs @@ -198,6 +198,7 @@ namespace Xamarin.Bundler { // MT2010 Unknown HttpMessageHandler `{0}`. Valid values are HttpClientHandler (default), CFNetworkHandler or NSUrlSessionHandler // MT2011 Unknown TlsProvider `{0}`. Valid values are default, legacy or appletls. // MT2012 ** reserved Xamarin.Mac ** + // MT2013 ** reserved Xamarin.Mac ** // MT3xxx AOT // MT30xx AOT (general) errors // MT3001 Could not AOT the assembly '{0}'