From 9c00d375be34f6e89cac27f7b9e507e789966331 Mon Sep 17 00:00:00 2001 From: Stephen Hawley Date: Thu, 27 Apr 2023 16:06:09 -0400 Subject: [PATCH] Use the type_map_path arg --- tools/common/Application.cs | 5 +++-- tools/common/Driver.cs | 1 + tools/common/StaticRegistrar.cs | 8 ++++---- tools/dotnet-linker/Steps/RegistrarStep.cs | 2 +- tools/mmp/driver.cs | 2 +- tools/mtouch/BuildTasks.mtouch.cs | 2 +- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/tools/common/Application.cs b/tools/common/Application.cs index 5ba7a1ad06d0..d88d832d0afa 100644 --- a/tools/common/Application.cs +++ b/tools/common/Application.cs @@ -166,6 +166,7 @@ public bool IsDefaultMarshalManagedExceptionMode { public bool EnableBitCode { get { return BitCodeMode != BitCodeMode.None; } } public bool SkipMarkingNSObjectsInUserAssemblies { get; set; } + public string ClassMapPath = ""; // assembly_build_targets describes what kind of native code each assembly should be compiled into for mobile targets (iOS, tvOS, watchOS). // An assembly can be compiled into: static object (.o), dynamic library (.dylib) or a framework (.framework). @@ -1028,9 +1029,9 @@ public void RunRegistrar () #endif var registrar = new Registrar.StaticRegistrar (this); if (RootAssemblies.Count == 1) - registrar.GenerateSingleAssembly (resolver, resolvedAssemblies.Values, Path.ChangeExtension (registrar_m, "h"), registrar_m, Path.GetFileNameWithoutExtension (RootAssembly), out var _); + registrar.GenerateSingleAssembly (resolver, resolvedAssemblies.Values, Path.ChangeExtension (registrar_m, "h"), registrar_m, Path.GetFileNameWithoutExtension (RootAssembly), out var _, ClassMapPath); else - registrar.Generate (resolver, resolvedAssemblies.Values, Path.ChangeExtension (registrar_m, "h"), registrar_m, out var _); + registrar.Generate (resolver, resolvedAssemblies.Values, Path.ChangeExtension (registrar_m, "h"), registrar_m, out var _, ClassMapPath); } public IEnumerable Abis { diff --git a/tools/common/Driver.cs b/tools/common/Driver.cs index b0570a8b3d5b..6cf032079a18 100644 --- a/tools/common/Driver.cs +++ b/tools/common/Driver.cs @@ -257,6 +257,7 @@ static bool ParseOptions (Application app, Mono.Options.OptionSet options, strin options.Add ("skip-marking-nsobjects-in-user-assemblies:", "Don't mark NSObject (and any subclass of NSObject) in user assemblies in the linker. This may break your app, use at own risk.", v => { app.SkipMarkingNSObjectsInUserAssemblies = ParseBool (v, "--skip-marking-nsobjects-in-user-assemblies"); }); + options.Add ("class-map-path=", "Sets the path for an output path to generate a class map XML file used to optimize class handle access when the static registrar has been used.", v => { app.ClassMapPath = v; }); // Keep the ResponseFileSource option at the end. diff --git a/tools/common/StaticRegistrar.cs b/tools/common/StaticRegistrar.cs index a3c1299a8088..af1ed405fb39 100644 --- a/tools/common/StaticRegistrar.cs +++ b/tools/common/StaticRegistrar.cs @@ -5145,18 +5145,18 @@ public void GeneratePInvokeWrapper (PInvokeWrapperGenerator state, MethodDefinit pinfo.EntryPoint = wrapperName; } - public void GenerateSingleAssembly (PlatformResolver resolver, IEnumerable assemblies, string header_path, string source_path, string assembly, out string initialization_method, string type_map_path = null) + public void GenerateSingleAssembly (PlatformResolver resolver, IEnumerable assemblies, string header_path, string source_path, string assembly, out string initialization_method, string type_map_path) { single_assembly = assembly; Generate (resolver, assemblies, header_path, source_path, out initialization_method, type_map_path); } - public void Generate (IEnumerable assemblies, string header_path, string source_path, out string initialization_method, string type_map_path = null) + public void Generate (IEnumerable assemblies, string header_path, string source_path, out string initialization_method, string type_map_path) { Generate (null, assemblies, header_path, source_path, out initialization_method, type_map_path); } - public void Generate (PlatformResolver resolver, IEnumerable assemblies, string header_path, string source_path, out string initialization_method, string type_map_path = null) + public void Generate (PlatformResolver resolver, IEnumerable assemblies, string header_path, string source_path, out string initialization_method, string type_map_path) { this.resolver = resolver; @@ -5173,7 +5173,7 @@ public void Generate (PlatformResolver resolver, IEnumerable Generate (header_path, source_path, out initialization_method, type_map_path); } - void Generate (string header_path, string source_path, out string initialization_method, string type_map_path = null) + void Generate (string header_path, string source_path, out string initialization_method, string type_map_path) { var sb = new AutoIndentStringBuilder (); header = new AutoIndentStringBuilder (); diff --git a/tools/dotnet-linker/Steps/RegistrarStep.cs b/tools/dotnet-linker/Steps/RegistrarStep.cs index c4aa42b95b00..7ac3a2410b3f 100644 --- a/tools/dotnet-linker/Steps/RegistrarStep.cs +++ b/tools/dotnet-linker/Steps/RegistrarStep.cs @@ -36,7 +36,7 @@ protected override void TryEndProcess () if (Annotations.GetAction (assembly) != Mono.Linker.AssemblyAction.Delete) bundled_assemblies.Add (assembly); } - Configuration.Target.StaticRegistrar.Generate (bundled_assemblies, header, code, out var initialization_method); + Configuration.Target.StaticRegistrar.Generate (bundled_assemblies, header, code, out var initialization_method, app.ClassMapPath); var items = new List (); foreach (var abi in Configuration.Abis) { diff --git a/tools/mmp/driver.cs b/tools/mmp/driver.cs index 99786134dc5b..59e54025f1d8 100644 --- a/tools/mmp/driver.cs +++ b/tools/mmp/driver.cs @@ -794,7 +794,7 @@ static void Compile () if (App.Registrar == RegistrarMode.Static) { registrarPath = Path.Combine (App.Cache.Location, "registrar.m"); var registrarH = Path.Combine (App.Cache.Location, "registrar.h"); - BuildTarget.StaticRegistrar.Generate (BuildTarget.Resolver.ResolverCache.Values, registrarH, registrarPath, out initialization_method); + BuildTarget.StaticRegistrar.Generate (BuildTarget.Resolver.ResolverCache.Values, registrarH, registrarPath, out initialization_method, App.ClassMapPath); var platform_assembly = BuildTarget.Resolver.ResolverCache.First ((v) => v.Value.Name.Name == BuildTarget.StaticRegistrar.PlatformAssembly).Value; Frameworks.Gather (App, platform_assembly, BuildTarget.Frameworks, BuildTarget.WeakFrameworks); diff --git a/tools/mtouch/BuildTasks.mtouch.cs b/tools/mtouch/BuildTasks.mtouch.cs index 2f5e6317d93b..0f7afb509285 100644 --- a/tools/mtouch/BuildTasks.mtouch.cs +++ b/tools/mtouch/BuildTasks.mtouch.cs @@ -120,7 +120,7 @@ public override IEnumerable Outputs { protected override void Execute () { - Target.StaticRegistrar.Generate (Target.Assemblies.Select ((a) => a.AssemblyDefinition), RegistrarHeaderPath, RegistrarCodePath, out var initialization_name); + Target.StaticRegistrar.Generate (Target.Assemblies.Select ((a) => a.AssemblyDefinition), RegistrarHeaderPath, RegistrarCodePath, out var initialization_name, Target.App.ClassMapPath); RegistrationMethods.Add (initialization_name); } }