public void CollectReferences(string path, bool withMethods, float progressValue, bool ignoreSystemDlls)
 {
     this.assemblyDefinitions = new HashSet <AssemblyDefinition>();
     string[] array  = (!Directory.Exists(path)) ? new string[0] : Directory.GetFiles(path);
     string[] array2 = array;
     for (int i = 0; i < array2.Length; i++)
     {
         string text = array2[i];
         if (!(Path.GetExtension(text) != ".dll"))
         {
             AssemblyDefinition assemblyDefinition = AssemblyDefinition.ReadAssembly(text);
             if (!ignoreSystemDlls || !this.IsiPhoneIgnoredSystemDll(assemblyDefinition.Name.Name))
             {
                 this.assemblyFileNames.Add(Path.GetFileName(text));
                 this.assemblyDefinitions.Add(assemblyDefinition);
             }
         }
     }
     AssemblyDefinition[] array3 = this.assemblyDefinitions.ToArray <AssemblyDefinition>();
     this.referencedTypes = MonoAOTRegistration.BuildReferencedTypeList(array3);
     if (withMethods)
     {
         this.CollectReferencedMethods(array3, this.referencedMethods, this.definedMethods, progressValue);
     }
 }
Exemplo n.º 2
0
        public void CollectReferences(string path, bool collectMethods, float progressValue, bool ignoreSystemDlls)
        {
            this._progressValue       = progressValue;
            this._assemblyDefinitions = new HashSet <AssemblyDefinition>();
            string[] array = (!Directory.Exists(path)) ? new string[0] : Directory.GetFiles(path);
            DefaultAssemblyResolver assemblyResolver = AssemblyReferenceChecker.AssemblyResolverFor(path);

            string[] array2 = array;
            for (int i = 0; i < array2.Length; i++)
            {
                string text = array2[i];
                if (!(Path.GetExtension(text) != ".dll"))
                {
                    AssemblyDefinition assemblyDefinition = AssemblyDefinition.ReadAssembly(text, new ReaderParameters
                    {
                        AssemblyResolver = assemblyResolver
                    });
                    if (!ignoreSystemDlls || !AssemblyReferenceChecker.IsIgnoredSystemDll(assemblyDefinition.Name.Name))
                    {
                        this._assemblyFileNames.Add(Path.GetFileName(text));
                        this._assemblyDefinitions.Add(assemblyDefinition);
                    }
                }
            }
            AssemblyDefinition[] array3 = this._assemblyDefinitions.ToArray <AssemblyDefinition>();
            this._referencedTypes = MonoAOTRegistration.BuildReferencedTypeList(array3);
            if (collectMethods)
            {
                this.CollectReferencedAndDefinedMethods(array3);
            }
        }
 private static void ExtractNativeMethodsFromTypes(ICollection <TypeDefinition> types, ArrayList res)
 {
     foreach (TypeDefinition current in types)
     {
         using (Collection <MethodDefinition> .Enumerator enumerator2 = current.get_Methods().GetEnumerator())
         {
             while (enumerator2.MoveNext())
             {
                 MethodDefinition current2 = enumerator2.get_Current();
                 if (current2.get_IsStatic() && current2.get_IsPInvokeImpl() && current2.get_PInvokeInfo().get_Module().get_Name().Equals("__Internal"))
                 {
                     if (res.Contains(current2.get_Name()))
                     {
                         throw new SystemException("Duplicate native method found : " + current2.get_Name() + ". Please check your source carefully.");
                     }
                     res.Add(current2.get_Name());
                 }
             }
         }
         if (current.get_HasNestedTypes())
         {
             MonoAOTRegistration.ExtractNativeMethodsFromTypes(current.get_NestedTypes(), res);
         }
     }
 }
 private static void ExtractNativeMethodsFromTypes(ICollection <TypeDefinition> types, ArrayList res)
 {
     using (IEnumerator <TypeDefinition> enumerator1 = ((IEnumerable <TypeDefinition>)types).GetEnumerator())
     {
         while (((IEnumerator)enumerator1).MoveNext())
         {
             TypeDefinition current1 = enumerator1.Current;
             using (Collection <MethodDefinition> .Enumerator enumerator2 = current1.get_Methods().GetEnumerator())
             {
                 // ISSUE: explicit reference operation
                 while (((Collection <MethodDefinition> .Enumerator)@enumerator2).MoveNext())
                 {
                     // ISSUE: explicit reference operation
                     MethodDefinition current2 = ((Collection <MethodDefinition> .Enumerator)@enumerator2).get_Current();
                     if (current2.get_IsStatic() && current2.get_IsPInvokeImpl() && current2.get_PInvokeInfo().get_Module().get_Name().Equals("__Internal"))
                     {
                         if (res.Contains((object)((MemberReference)current2).get_Name()))
                         {
                             throw new SystemException("Duplicate native method found : " + ((MemberReference)current2).get_Name() + ". Please check your source carefully.");
                         }
                         res.Add((object)((MemberReference)current2).get_Name());
                     }
                 }
             }
             if (current1.get_HasNestedTypes())
             {
                 MonoAOTRegistration.ExtractNativeMethodsFromTypes((ICollection <TypeDefinition>)current1.get_NestedTypes(), res);
             }
         }
     }
 }
 public string WhoReferencesClass(string klass, bool ignoreSystemDlls)
 {
     // ISSUE: object of a compiler-generated type is created
     // ISSUE: variable of a compiler-generated type
     AssemblyReferenceChecker.\u003CWhoReferencesClass\u003Ec__AnonStoreyBD classCAnonStoreyBd = new AssemblyReferenceChecker.\u003CWhoReferencesClass\u003Ec__AnonStoreyBD();
     // ISSUE: reference to a compiler-generated field
     classCAnonStoreyBd.klass = klass;
     using (HashSet <AssemblyDefinition> .Enumerator enumerator = this.assemblyDefinitions.GetEnumerator())
     {
         while (enumerator.MoveNext())
         {
             AssemblyDefinition current = enumerator.Current;
             if (!ignoreSystemDlls || !this.IsiPhoneIgnoredSystemDll(((AssemblyNameReference)current.get_Name()).get_Name()))
             {
                 // ISSUE: reference to a compiler-generated method
                 if (MonoAOTRegistration.BuildReferencedTypeList(new AssemblyDefinition[1] {
                     current
                 }).Any <string>(new Func <string, bool>(classCAnonStoreyBd.\u003C\u003Em__22C)))
                 {
                     return(((AssemblyNameReference)current.get_Name()).get_Name());
                 }
             }
         }
     }
     return((string)null);
 }
 public static void GenerateRegisterInternalCalls(AssemblyDefinition[] assemblies, TextWriter output)
 {
     output.Write("void RegisterAllStrippedInternalCalls ()\n{\n");
     foreach (AssemblyDefinition assembly in assemblies)
     {
         MonoAOTRegistration.GenerateRegisterInternalCallsForTypes((IEnumerable <TypeDefinition>)assembly.get_MainModule().get_Types(), output);
     }
     output.Write("\n}\n");
 }
 public static void GenerateRegisterInternalCalls(AssemblyDefinition[] assemblies, TextWriter output)
 {
     output.Write("void RegisterAllStrippedInternalCalls ()\n{\n");
     for (int i = 0; i < assemblies.Length; i++)
     {
         AssemblyDefinition assemblyDefinition = assemblies[i];
         MonoAOTRegistration.GenerateRegisterInternalCallsForTypes(assemblyDefinition.MainModule.Types, output);
     }
     output.Write("\n}\n");
 }
 public void CollectReferencesFromRoots(string dir, IEnumerable <string> roots, bool withMethods, float progressValue, bool ignoreSystemDlls)
 {
     this.CollectReferencesFromRootsRecursive(dir, roots, ignoreSystemDlls);
     AssemblyDefinition[] array = this.assemblyDefinitions.ToArray <AssemblyDefinition>();
     this.referencedTypes = MonoAOTRegistration.BuildReferencedTypeList(array);
     if (withMethods)
     {
         this.CollectReferencedMethods(array, this.referencedMethods, this.definedMethods, progressValue);
     }
 }
 private static void GenerateRegisterInternalCallsForTypes(IEnumerable <TypeDefinition> types, TextWriter output)
 {
     foreach (TypeDefinition current in types)
     {
         foreach (MethodDefinition current2 in current.Methods)
         {
             MonoAOTRegistration.GenerateInternalCallMethod(current, current2, output);
         }
         MonoAOTRegistration.GenerateRegisterInternalCallsForTypes(current.NestedTypes, output);
     }
 }
Exemplo n.º 10
0
        private static ArrayList BuildNativeMethodList(AssemblyDefinition[] assemblies)
        {
            ArrayList res = new ArrayList();

            foreach (AssemblyDefinition assembly in assemblies)
            {
                if (!"System".Equals(((AssemblyNameReference)assembly.get_Name()).get_Name()))
                {
                    MonoAOTRegistration.ExtractNativeMethodsFromTypes((ICollection <TypeDefinition>)assembly.get_MainModule().get_Types(), res);
                }
            }
            return(res);
        }
Exemplo n.º 11
0
        private static ArrayList BuildNativeMethodList(AssemblyDefinition[] assemblies)
        {
            ArrayList arrayList = new ArrayList();

            for (int i = 0; i < assemblies.Length; i++)
            {
                AssemblyDefinition assemblyDefinition = assemblies[i];
                if (!"System".Equals(assemblyDefinition.Name.Name))
                {
                    MonoAOTRegistration.ExtractNativeMethodsFromTypes(assemblyDefinition.MainModule.Types, arrayList);
                }
            }
            return(arrayList);
        }
        // Follows actually referenced libraries only
        public void CollectReferencesFromRoots(string dir, IEnumerable <string> roots, bool collectMethods, float progressValue, bool ignoreSystemDlls)
        {
            _progressValue = progressValue;

            CollectReferencesFromRootsRecursive(dir, roots, ignoreSystemDlls);

            var assemblyDefinitionsAsArray = _assemblyDefinitions.ToArray();

            _referencedTypes = MonoAOTRegistration.BuildReferencedTypeList(assemblyDefinitionsAsArray);

            if (collectMethods)
            {
                CollectReferencedAndDefinedMethods(assemblyDefinitionsAsArray);
            }
        }
 private static void GenerateRegisterInternalCallsForTypes(IEnumerable <TypeDefinition> types, TextWriter output)
 {
     foreach (TypeDefinition current in types)
     {
         using (Collection <MethodDefinition> .Enumerator enumerator2 = current.get_Methods().GetEnumerator())
         {
             while (enumerator2.MoveNext())
             {
                 MethodDefinition current2 = enumerator2.get_Current();
                 MonoAOTRegistration.GenerateInternalCallMethod(current, current2, output);
             }
         }
         MonoAOTRegistration.GenerateRegisterInternalCallsForTypes(current.get_NestedTypes(), output);
     }
 }
Exemplo n.º 14
0
 public static void GenerateRegisterInternalCalls(AssemblyDefinition[] assemblies, TextWriter output)
 {
     output.Write("void RegisterAllStrippedInternalCalls ()\n{\n");
     for (int i = 0; i < assemblies.Length; i++)
     {
         AssemblyDefinition assemblyDefinition = assemblies[i];
         foreach (TypeDefinition current in assemblyDefinition.MainModule.Types)
         {
             foreach (MethodDefinition current2 in current.Methods)
             {
                 MonoAOTRegistration.GenerateInternalCallMethod(current, current2, output);
             }
         }
     }
     output.Write("\n}\n");
 }
 public string WhoReferencesClass(string klass, bool ignoreSystemDlls)
 {
     foreach (AssemblyDefinition current in this.assemblyDefinitions)
     {
         if (!ignoreSystemDlls || !this.IsiPhoneIgnoredSystemDll(current.Name.Name))
         {
             AssemblyDefinition[] assemblies = new AssemblyDefinition[]
             {
                 current
             };
             HashSet <string> source = MonoAOTRegistration.BuildReferencedTypeList(assemblies);
             if (source.Any((string item) => item.StartsWith(klass)))
             {
                 return(current.Name.Name);
             }
         }
     }
     return(null);
 }
        public string WhoReferencesClass(string klass, bool ignoreSystemDlls)
        {
            foreach (var assembly in _assemblyDefinitions)
            {
                if (ignoreSystemDlls && IsIgnoredSystemDll(assembly))
                {
                    continue;
                }

                var assemblyDefinitionsAsArray = new[] { assembly };
                var types = MonoAOTRegistration.BuildReferencedTypeList(assemblyDefinitionsAsArray);

                if (types.Any(item => item.StartsWith(klass)))
                {
                    return(assembly.Name.Name);
                }
            }

            return(null);
        }
Exemplo n.º 17
0
 private static void GenerateRegisterInternalCallsForTypes(IEnumerable <TypeDefinition> types, TextWriter output)
 {
     using (IEnumerator <TypeDefinition> enumerator1 = types.GetEnumerator())
     {
         while (((IEnumerator)enumerator1).MoveNext())
         {
             TypeDefinition current1 = enumerator1.Current;
             using (Collection <MethodDefinition> .Enumerator enumerator2 = current1.get_Methods().GetEnumerator())
             {
                 // ISSUE: explicit reference operation
                 while (((Collection <MethodDefinition> .Enumerator)@enumerator2).MoveNext())
                 {
                     // ISSUE: explicit reference operation
                     MethodDefinition current2 = ((Collection <MethodDefinition> .Enumerator)@enumerator2).get_Current();
                     MonoAOTRegistration.GenerateInternalCallMethod(current1, current2, output);
                 }
             }
             MonoAOTRegistration.GenerateRegisterInternalCallsForTypes((IEnumerable <TypeDefinition>)current1.get_NestedTypes(), output);
         }
     }
 }
Exemplo n.º 18
0
 private static void ExtractNativeMethodsFromTypes(ICollection <TypeDefinition> types, ArrayList res)
 {
     foreach (TypeDefinition current in types)
     {
         foreach (MethodDefinition current2 in current.Methods)
         {
             if (current2.IsStatic && current2.IsPInvokeImpl && current2.PInvokeInfo.Module.Name.Equals("__Internal"))
             {
                 if (res.Contains(current2.Name))
                 {
                     throw new SystemException("Duplicate native method found : " + current2.Name + ". Please check your source carefully.");
                 }
                 res.Add(current2.Name);
             }
         }
         if (current.HasNestedTypes)
         {
             MonoAOTRegistration.ExtractNativeMethodsFromTypes(current.NestedTypes, res);
         }
     }
 }
        public void CollectReferences(string path, bool collectMethods, float progressValue, bool ignoreSystemDlls)
        {
            _progressValue = progressValue;

            _assemblyDefinitions = new HashSet <AssemblyDefinition>();

            var filePaths = Directory.Exists(path) ? Directory.GetFiles(path) : new string[0];

            using (var resolver = AssemblyResolverFor(path))
            {
                foreach (var filePath in filePaths)
                {
                    if (Path.GetExtension(filePath) != ".dll")
                    {
                        continue;
                    }

                    var assembly = AssemblyDefinition.ReadAssembly(filePath, new ReaderParameters {
                        AssemblyResolver = resolver
                    });

                    if (ignoreSystemDlls && IsIgnoredSystemDll(assembly))
                    {
                        continue;
                    }

                    _assemblyFileNames.Add(Path.GetFileName(filePath));
                    _assemblyDefinitions.Add(assembly);
                }
            }

            var assemblyDefinitionsAsArray = _assemblyDefinitions.ToArray();

            _referencedTypes = MonoAOTRegistration.BuildReferencedTypeList(assemblyDefinitionsAsArray);

            if (collectMethods)
            {
                CollectReferencedAndDefinedMethods(assemblyDefinitionsAsArray);
            }
        }
Exemplo n.º 20
0
 public void CollectReferences(string path, bool withMethods, float progressValue, bool ignoreSystemDlls)
 {
     this.assemblyDefinitions = new HashSet <AssemblyDefinition>();
     string[] strArray = !Directory.Exists(path) ? new string[0] : Directory.GetFiles(path);
     foreach (string str in strArray)
     {
         if (Path.GetExtension(str) == ".dll")
         {
             AssemblyDefinition item = AssemblyDefinition.ReadAssembly(str);
             if (!ignoreSystemDlls || !this.IsiPhoneIgnoredSystemDll(item.Name.Name))
             {
                 this.assemblyFileNames.Add(Path.GetFileName(str));
                 this.assemblyDefinitions.Add(item);
             }
         }
     }
     AssemblyDefinition[] assemblies = this.assemblyDefinitions.ToArray <AssemblyDefinition>();
     this.referencedTypes = MonoAOTRegistration.BuildReferencedTypeList(assemblies);
     if (withMethods)
     {
         this.CollectReferencedMethods(assemblies, this.referencedMethods, this.definedMethods, progressValue);
     }
 }
Exemplo n.º 21
0
        public string WhoReferencesClass(string klass, bool ignoreSystemDlls)
        {
            string result;

            foreach (AssemblyDefinition current in this._assemblyDefinitions)
            {
                if (!ignoreSystemDlls || !AssemblyReferenceChecker.IsIgnoredSystemDll(current.Name.Name))
                {
                    AssemblyDefinition[] assemblies = new AssemblyDefinition[]
                    {
                        current
                    };
                    HashSet <string> source = MonoAOTRegistration.BuildReferencedTypeList(assemblies);
                    if (source.Any((string item) => item.StartsWith(klass)))
                    {
                        result = current.Name.Name;
                        return(result);
                    }
                }
            }
            result = null;
            return(result);
        }
 public void CollectReferences(string path, bool withMethods, float progressValue, bool ignoreSystemDlls)
 {
     this.assemblyDefinitions = new HashSet <AssemblyDefinition>();
     foreach (string path1 in !Directory.Exists(path) ? new string[0] : Directory.GetFiles(path))
     {
         if (!(Path.GetExtension(path1) != ".dll"))
         {
             AssemblyDefinition assemblyDefinition = AssemblyDefinition.ReadAssembly(path1);
             if (!ignoreSystemDlls || !this.IsiPhoneIgnoredSystemDll(((AssemblyNameReference)assemblyDefinition.get_Name()).get_Name()))
             {
                 this.assemblyFileNames.Add(Path.GetFileName(path1));
                 this.assemblyDefinitions.Add(assemblyDefinition);
             }
         }
     }
     AssemblyDefinition[] array = ((IEnumerable <AssemblyDefinition>) this.assemblyDefinitions).ToArray <AssemblyDefinition>();
     this.referencedTypes = MonoAOTRegistration.BuildReferencedTypeList(array);
     if (!withMethods)
     {
         return;
     }
     this.CollectReferencedMethods(array, this.referencedMethods, this.definedMethods, progressValue);
 }
Exemplo n.º 23
0
 public static void WriteCPlusPlusFileForStaticAOTModuleRegistration(BuildTarget buildTarget, string file, CrossCompileOptions crossCompileOptions, bool advancedLic, string targetDevice, bool stripping, RuntimeClassRegistry usedClassRegistry, AssemblyReferenceChecker checker)
 {
     using (TextWriter output = (TextWriter) new StreamWriter(file))
     {
         string[]             assemblyFileNames   = checker.GetAssemblyFileNames();
         AssemblyDefinition[] assemblyDefinitions = checker.GetAssemblyDefinitions();
         bool      flag      = (crossCompileOptions & CrossCompileOptions.FastICall) != CrossCompileOptions.Dynamic;
         ArrayList arrayList = MonoAOTRegistration.BuildNativeMethodList(assemblyDefinitions);
         if (buildTarget == BuildTarget.iOS)
         {
             output.WriteLine("#include \"RegisterMonoModules.h\"");
             output.WriteLine("#include <stdio.h>");
         }
         output.WriteLine(string.Empty);
         output.WriteLine("#if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR");
         output.WriteLine("    #define DECL_USER_FUNC(f) void f() __attribute__((weak_import))");
         output.WriteLine("    #define REGISTER_USER_FUNC(f)\\");
         output.WriteLine("        do {\\");
         output.WriteLine("        if(f != NULL)\\");
         output.WriteLine("            mono_dl_register_symbol(#f, (void*)f);\\");
         output.WriteLine("        else\\");
         output.WriteLine("            ::printf_console(\"Symbol '%s' not found. Maybe missing implementation for Simulator?\\n\", #f);\\");
         output.WriteLine("        }while(0)");
         output.WriteLine("#else");
         output.WriteLine("    #define DECL_USER_FUNC(f) void f() ");
         output.WriteLine("    #if !defined(__arm64__)");
         output.WriteLine("    #define REGISTER_USER_FUNC(f) mono_dl_register_symbol(#f, (void*)&f)");
         output.WriteLine("    #else");
         output.WriteLine("        #define REGISTER_USER_FUNC(f)");
         output.WriteLine("    #endif");
         output.WriteLine("#endif");
         output.WriteLine("extern \"C\"\n{");
         output.WriteLine("    typedef void* gpointer;");
         output.WriteLine("    typedef int gboolean;");
         if (buildTarget == BuildTarget.iOS)
         {
             output.WriteLine("    const char*         UnityIPhoneRuntimeVersion = \"{0}\";", (object)Application.unityVersion);
             output.WriteLine("    void                mono_dl_register_symbol (const char* name, void *addr);");
             output.WriteLine("#if !defined(__arm64__)");
             output.WriteLine("    extern int          mono_ficall_flag;");
             output.WriteLine("#endif");
         }
         output.WriteLine("    void                mono_aot_register_module(gpointer *aot_info);");
         output.WriteLine("#if __ORBIS__ || SN_TARGET_PSP2");
         output.WriteLine("#define DLL_EXPORT __declspec(dllexport)");
         output.WriteLine("#else");
         output.WriteLine("#define DLL_EXPORT");
         output.WriteLine("#endif");
         output.WriteLine("#if !(TARGET_IPHONE_SIMULATOR)");
         output.WriteLine("    extern gboolean     mono_aot_only;");
         for (int index = 0; index < assemblyFileNames.Length; ++index)
         {
             string str1 = assemblyFileNames[index];
             string str2 = ((AssemblyNameReference)assemblyDefinitions[index].get_Name()).get_Name().Replace(".", "_").Replace("-", "_").Replace(" ", "_");
             output.WriteLine("    extern gpointer*    mono_aot_module_{0}_info; // {1}", (object)str2, (object)str1);
         }
         output.WriteLine("#endif // !(TARGET_IPHONE_SIMULATOR)");
         foreach (string str in arrayList)
         {
             output.WriteLine("    DECL_USER_FUNC({0});", (object)str);
         }
         output.WriteLine("}");
         output.WriteLine("DLL_EXPORT void RegisterMonoModules()");
         output.WriteLine("{");
         output.WriteLine("#if !(TARGET_IPHONE_SIMULATOR) && !defined(__arm64__)");
         output.WriteLine("    mono_aot_only = true;");
         if (buildTarget == BuildTarget.iOS)
         {
             output.WriteLine("    mono_ficall_flag = {0};", !flag ? (object)"false" : (object)"true");
         }
         foreach (AssemblyDefinition assemblyDefinition in assemblyDefinitions)
         {
             string str = ((AssemblyNameReference)assemblyDefinition.get_Name()).get_Name().Replace(".", "_").Replace("-", "_").Replace(" ", "_");
             output.WriteLine("    mono_aot_register_module(mono_aot_module_{0}_info);", (object)str);
         }
         output.WriteLine("#endif // !(TARGET_IPHONE_SIMULATOR) && !defined(__arm64__)");
         output.WriteLine(string.Empty);
         if (buildTarget == BuildTarget.iOS)
         {
             foreach (string str in arrayList)
             {
                 output.WriteLine("    REGISTER_USER_FUNC({0});", (object)str);
             }
         }
         output.WriteLine("}");
         output.WriteLine(string.Empty);
         AssemblyDefinition unityEngine = (AssemblyDefinition)null;
         for (int index = 0; index < assemblyFileNames.Length; ++index)
         {
             if (assemblyFileNames[index] == "UnityEngine.dll")
             {
                 unityEngine = assemblyDefinitions[index];
             }
         }
         if (buildTarget == BuildTarget.iOS)
         {
             AssemblyDefinition[] assemblies = new AssemblyDefinition[1] {
                 unityEngine
             };
             MonoAOTRegistration.GenerateRegisterInternalCalls(assemblies, output);
             MonoAOTRegistration.ResolveDefinedNativeClassesFromMono(assemblies, usedClassRegistry);
             MonoAOTRegistration.ResolveReferencedUnityEngineClassesFromMono(assemblyDefinitions, unityEngine, usedClassRegistry);
             MonoAOTRegistration.GenerateRegisterModules(usedClassRegistry, output, stripping);
             if (stripping && usedClassRegistry != null)
             {
                 MonoAOTRegistration.GenerateRegisterClassesForStripping(usedClassRegistry, output);
             }
             else
             {
                 MonoAOTRegistration.GenerateRegisterClasses(usedClassRegistry, output);
             }
         }
         output.Close();
     }
 }
Exemplo n.º 24
0
 public static void WriteCPlusPlusFileForStaticAOTModuleRegistration(BuildTarget buildTarget, string file, CrossCompileOptions crossCompileOptions, bool advancedLic, string targetDevice, bool stripping, RuntimeClassRegistry usedClassRegistry, AssemblyReferenceChecker checker, string stagingAreaDataManaged)
 {
     MonoAOTRegistration.WriteCPlusPlusFileForStaticAOTModuleRegistration(buildTarget, file, crossCompileOptions, advancedLic, targetDevice, stripping, usedClassRegistry, checker, stagingAreaDataManaged, null);
 }
Exemplo n.º 25
0
        public static void WriteCPlusPlusFileForStaticAOTModuleRegistration(BuildTarget buildTarget, string file, CrossCompileOptions crossCompileOptions, bool advancedLic, string targetDevice, bool stripping, RuntimeClassRegistry usedClassRegistry, AssemblyReferenceChecker checker, string stagingAreaDataManaged, IIl2CppPlatformProvider platformProvider)
        {
            string text = Path.Combine(stagingAreaDataManaged, "ICallSummary.txt");
            string exe  = Path.Combine(MonoInstallationFinder.GetFrameWorksFolder(), "Tools/InternalCallRegistrationWriter/InternalCallRegistrationWriter.exe");
            string args = string.Format("-assembly=\"{0}\" -summary=\"{1}\"", Path.Combine(stagingAreaDataManaged, "UnityEngine.dll"), text);

            Runner.RunManagedProgram(exe, args);
            HashSet <UnityType> hashSet;
            HashSet <string>    nativeModules;

            CodeStrippingUtils.GenerateDependencies(Path.GetDirectoryName(stagingAreaDataManaged), text, usedClassRegistry, stripping, out hashSet, out nativeModules, platformProvider);
            using (TextWriter textWriter = new StreamWriter(file))
            {
                string[]             assemblyFileNames   = checker.GetAssemblyFileNames();
                AssemblyDefinition[] assemblyDefinitions = checker.GetAssemblyDefinitions();
                bool      flag      = (crossCompileOptions & CrossCompileOptions.FastICall) != CrossCompileOptions.Dynamic;
                ArrayList arrayList = MonoAOTRegistration.BuildNativeMethodList(assemblyDefinitions);
                if (buildTarget == BuildTarget.iOS)
                {
                    textWriter.WriteLine("#include \"RegisterMonoModules.h\"");
                    textWriter.WriteLine("#include <stdio.h>");
                }
                textWriter.WriteLine("");
                textWriter.WriteLine("#if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR");
                textWriter.WriteLine("    #define DECL_USER_FUNC(f) void f() __attribute__((weak_import))");
                textWriter.WriteLine("    #define REGISTER_USER_FUNC(f)\\");
                textWriter.WriteLine("        do {\\");
                textWriter.WriteLine("        if(f != NULL)\\");
                textWriter.WriteLine("            mono_dl_register_symbol(#f, (void*)f);\\");
                textWriter.WriteLine("        else\\");
                textWriter.WriteLine("            ::printf_console(\"Symbol '%s' not found. Maybe missing implementation for Simulator?\\n\", #f);\\");
                textWriter.WriteLine("        }while(0)");
                textWriter.WriteLine("#else");
                textWriter.WriteLine("    #define DECL_USER_FUNC(f) void f() ");
                textWriter.WriteLine("    #if !defined(__arm64__)");
                textWriter.WriteLine("    #define REGISTER_USER_FUNC(f) mono_dl_register_symbol(#f, (void*)&f)");
                textWriter.WriteLine("    #else");
                textWriter.WriteLine("        #define REGISTER_USER_FUNC(f)");
                textWriter.WriteLine("    #endif");
                textWriter.WriteLine("#endif");
                textWriter.WriteLine("extern \"C\"\n{");
                textWriter.WriteLine("    typedef void* gpointer;");
                textWriter.WriteLine("    typedef int gboolean;");
                if (buildTarget == BuildTarget.iOS)
                {
                    textWriter.WriteLine("    const char*         UnityIPhoneRuntimeVersion = \"{0}\";", Application.unityVersion);
                    textWriter.WriteLine("    void                mono_dl_register_symbol (const char* name, void *addr);");
                    textWriter.WriteLine("#if !defined(__arm64__)");
                    textWriter.WriteLine("    extern int          mono_ficall_flag;");
                    textWriter.WriteLine("#endif");
                }
                textWriter.WriteLine("    void                mono_aot_register_module(gpointer *aot_info);");
                textWriter.WriteLine("#if __ORBIS__ || SN_TARGET_PSP2");
                textWriter.WriteLine("#define DLL_EXPORT __declspec(dllexport)");
                textWriter.WriteLine("#else");
                textWriter.WriteLine("#define DLL_EXPORT");
                textWriter.WriteLine("#endif");
                textWriter.WriteLine("#if !(TARGET_IPHONE_SIMULATOR)");
                textWriter.WriteLine("    extern gboolean     mono_aot_only;");
                for (int i = 0; i < assemblyFileNames.Length; i++)
                {
                    string arg   = assemblyFileNames[i];
                    string text2 = assemblyDefinitions[i].Name.Name;
                    text2 = text2.Replace(".", "_");
                    text2 = text2.Replace("-", "_");
                    text2 = text2.Replace(" ", "_");
                    textWriter.WriteLine("    extern gpointer*    mono_aot_module_{0}_info; // {1}", text2, arg);
                }
                textWriter.WriteLine("#endif // !(TARGET_IPHONE_SIMULATOR)");
                IEnumerator enumerator = arrayList.GetEnumerator();
                try
                {
                    while (enumerator.MoveNext())
                    {
                        string arg2 = (string)enumerator.Current;
                        textWriter.WriteLine("    DECL_USER_FUNC({0});", arg2);
                    }
                }
                finally
                {
                    IDisposable disposable;
                    if ((disposable = (enumerator as IDisposable)) != null)
                    {
                        disposable.Dispose();
                    }
                }
                textWriter.WriteLine("}");
                textWriter.WriteLine("DLL_EXPORT void RegisterMonoModules()");
                textWriter.WriteLine("{");
                textWriter.WriteLine("#if !(TARGET_IPHONE_SIMULATOR) && !defined(__arm64__)");
                textWriter.WriteLine("    mono_aot_only = true;");
                if (buildTarget == BuildTarget.iOS)
                {
                    textWriter.WriteLine("    mono_ficall_flag = {0};", (!flag) ? "false" : "true");
                }
                AssemblyDefinition[] array = assemblyDefinitions;
                for (int j = 0; j < array.Length; j++)
                {
                    AssemblyDefinition assemblyDefinition = array[j];
                    string             text3 = assemblyDefinition.Name.Name;
                    text3 = text3.Replace(".", "_");
                    text3 = text3.Replace("-", "_");
                    text3 = text3.Replace(" ", "_");
                    textWriter.WriteLine("    mono_aot_register_module(mono_aot_module_{0}_info);", text3);
                }
                textWriter.WriteLine("#endif // !(TARGET_IPHONE_SIMULATOR) && !defined(__arm64__)");
                textWriter.WriteLine("");
                if (buildTarget == BuildTarget.iOS)
                {
                    IEnumerator enumerator2 = arrayList.GetEnumerator();
                    try
                    {
                        while (enumerator2.MoveNext())
                        {
                            string arg3 = (string)enumerator2.Current;
                            textWriter.WriteLine("    REGISTER_USER_FUNC({0});", arg3);
                        }
                    }
                    finally
                    {
                        IDisposable disposable2;
                        if ((disposable2 = (enumerator2 as IDisposable)) != null)
                        {
                            disposable2.Dispose();
                        }
                    }
                }
                textWriter.WriteLine("}");
                textWriter.WriteLine("");
                AssemblyDefinition assemblyDefinition2 = null;
                for (int k = 0; k < assemblyFileNames.Length; k++)
                {
                    if (assemblyFileNames[k] == "UnityEngine.dll")
                    {
                        assemblyDefinition2 = assemblyDefinitions[k];
                    }
                }
                if (buildTarget == BuildTarget.iOS)
                {
                    AssemblyDefinition[] assemblies = new AssemblyDefinition[]
                    {
                        assemblyDefinition2
                    };
                    MonoAOTRegistration.GenerateRegisterInternalCalls(assemblies, textWriter);
                    MonoAOTRegistration.GenerateRegisterModules(hashSet, nativeModules, textWriter, stripping);
                    if (stripping && usedClassRegistry != null)
                    {
                        MonoAOTRegistration.GenerateRegisterClassesForStripping(hashSet, textWriter);
                    }
                    else
                    {
                        MonoAOTRegistration.GenerateRegisterClasses(hashSet, textWriter);
                    }
                }
                textWriter.Close();
            }
        }
Exemplo n.º 26
0
 public static void WriteCPlusPlusFileForStaticAOTModuleRegistration(BuildTarget buildTarget, string file, CrossCompileOptions crossCompileOptions, bool advancedLic, string targetDevice, bool stripping, RuntimeClassRegistry usedClassRegistry, AssemblyReferenceChecker checker)
 {
     using (TextWriter textWriter = new StreamWriter(file))
     {
         string[]             assemblyFileNames   = checker.GetAssemblyFileNames();
         AssemblyDefinition[] assemblyDefinitions = checker.GetAssemblyDefinitions();
         bool      flag      = (crossCompileOptions & CrossCompileOptions.FastICall) != CrossCompileOptions.Dynamic;
         ArrayList arrayList = MonoAOTRegistration.BuildNativeMethodList(assemblyDefinitions);
         if (buildTarget == BuildTarget.iOS)
         {
             textWriter.WriteLine("#include \"RegisterMonoModules.h\"");
             textWriter.WriteLine("#include <stdio.h>");
         }
         textWriter.WriteLine(string.Empty);
         textWriter.WriteLine("#if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR");
         textWriter.WriteLine("\t#define DECL_USER_FUNC(f) void f() __attribute__((weak_import))");
         textWriter.WriteLine("\t#define REGISTER_USER_FUNC(f)\\");
         textWriter.WriteLine("\t\tdo {\\");
         textWriter.WriteLine("\t\tif(f != NULL)\\");
         textWriter.WriteLine("\t\t\tmono_dl_register_symbol(#f, (void*)f);\\");
         textWriter.WriteLine("\t\telse\\");
         textWriter.WriteLine("\t\t\t::printf_console(\"Symbol '%s' not found. Maybe missing implementation for Simulator?\\n\", #f);\\");
         textWriter.WriteLine("\t\t}while(0)");
         textWriter.WriteLine("#else");
         textWriter.WriteLine("\t#define DECL_USER_FUNC(f) void f() ");
         textWriter.WriteLine("\t#if !defined(__arm64__)");
         textWriter.WriteLine("\t#define REGISTER_USER_FUNC(f) mono_dl_register_symbol(#f, (void*)&f)");
         textWriter.WriteLine("\t#else");
         textWriter.WriteLine("\t\t#define REGISTER_USER_FUNC(f)");
         textWriter.WriteLine("\t#endif");
         textWriter.WriteLine("#endif");
         textWriter.WriteLine("extern \"C\"\n{");
         textWriter.WriteLine("\ttypedef void* gpointer;");
         textWriter.WriteLine("\ttypedef int gboolean;");
         if (buildTarget == BuildTarget.iOS)
         {
             textWriter.WriteLine("\tconst char*\t\t\tUnityIPhoneRuntimeVersion = \"{0}\";", Application.unityVersion);
             textWriter.WriteLine("\tvoid\t\t\t\tmono_dl_register_symbol (const char* name, void *addr);");
             textWriter.WriteLine("#if !defined(__arm64__)");
             textWriter.WriteLine("\textern int\t\t\tmono_ficall_flag;");
             textWriter.WriteLine("#endif");
         }
         textWriter.WriteLine("\tvoid\t\t\t\tmono_aot_register_module(gpointer *aot_info);");
         textWriter.WriteLine("#if !(__ORBIS__)");
         textWriter.WriteLine("#define DLL_EXPORT");
         textWriter.WriteLine("#else");
         textWriter.WriteLine("#define DLL_EXPORT __declspec(dllexport)");
         textWriter.WriteLine("#endif");
         textWriter.WriteLine("#if !(TARGET_IPHONE_SIMULATOR)");
         textWriter.WriteLine("\textern gboolean\t\tmono_aot_only;");
         for (int i = 0; i < assemblyFileNames.Length; i++)
         {
             string arg  = assemblyFileNames[i];
             string text = assemblyDefinitions[i].Name.Name;
             text = text.Replace(".", "_");
             text = text.Replace("-", "_");
             text = text.Replace(" ", "_");
             textWriter.WriteLine("\textern gpointer*\tmono_aot_module_{0}_info; // {1}", text, arg);
         }
         textWriter.WriteLine("#endif // !(TARGET_IPHONE_SIMULATOR)");
         foreach (string arg2 in arrayList)
         {
             textWriter.WriteLine("\tDECL_USER_FUNC({0});", arg2);
         }
         textWriter.WriteLine("}");
         textWriter.WriteLine("DLL_EXPORT void RegisterMonoModules()");
         textWriter.WriteLine("{");
         textWriter.WriteLine("#if !(TARGET_IPHONE_SIMULATOR) && !defined(__arm64__)");
         textWriter.WriteLine("\tmono_aot_only = true;");
         if (buildTarget == BuildTarget.iOS)
         {
             textWriter.WriteLine("\tmono_ficall_flag = {0};", (!flag) ? "false" : "true");
         }
         AssemblyDefinition[] array = assemblyDefinitions;
         for (int j = 0; j < array.Length; j++)
         {
             AssemblyDefinition assemblyDefinition = array[j];
             string             text2 = assemblyDefinition.Name.Name;
             text2 = text2.Replace(".", "_");
             text2 = text2.Replace("-", "_");
             text2 = text2.Replace(" ", "_");
             textWriter.WriteLine("\tmono_aot_register_module(mono_aot_module_{0}_info);", text2);
         }
         textWriter.WriteLine("#endif // !(TARGET_IPHONE_SIMULATOR) && !defined(__arm64__)");
         textWriter.WriteLine(string.Empty);
         if (buildTarget == BuildTarget.iOS)
         {
             foreach (string arg3 in arrayList)
             {
                 textWriter.WriteLine("\tREGISTER_USER_FUNC({0});", arg3);
             }
         }
         textWriter.WriteLine("}");
         textWriter.WriteLine(string.Empty);
         AssemblyDefinition assemblyDefinition2 = null;
         for (int k = 0; k < assemblyFileNames.Length; k++)
         {
             if (assemblyFileNames[k] == "UnityEngine.dll")
             {
                 assemblyDefinition2 = assemblyDefinitions[k];
             }
         }
         if (buildTarget == BuildTarget.iOS)
         {
             AssemblyDefinition[] assemblies = new AssemblyDefinition[]
             {
                 assemblyDefinition2
             };
             MonoAOTRegistration.GenerateRegisterInternalCalls(assemblies, textWriter);
             MonoAOTRegistration.ResolveDefinedNativeClassesFromMono(assemblies, usedClassRegistry);
             MonoAOTRegistration.ResolveReferencedUnityEngineClassesFromMono(assemblyDefinitions, assemblyDefinition2, usedClassRegistry);
             if (stripping && usedClassRegistry != null)
             {
                 MonoAOTRegistration.GenerateRegisterClassesForStripping(usedClassRegistry, textWriter);
             }
             else
             {
                 MonoAOTRegistration.GenerateRegisterClasses(usedClassRegistry, textWriter);
             }
         }
         textWriter.Close();
     }
 }