public DevirtualizationTests() { var target = new TargetDetails(TargetArchitecture.X64, TargetOS.Windows, TargetAbi.CoreRT); _context = new CompilerTypeSystemContext(target, SharedGenericsMode.CanonicalReferenceTypes, DelegateFeature.All); _context.InputFilePaths = new Dictionary <string, string> { { "Test.CoreLib", @"Test.CoreLib.dll" }, { "ILCompiler.Compiler.Tests.Assets", @"ILCompiler.Compiler.Tests.Assets.dll" }, }; _context.ReferenceFilePaths = new Dictionary <string, string>(); _context.SetSystemModule(_context.GetModuleForSimpleName("Test.CoreLib")); _testModule = _context.GetModuleForSimpleName("ILCompiler.Compiler.Tests.Assets"); }
public static IEnumerable <object[]> GetTestMethods() { var target = new TargetDetails(TargetArchitecture.X64, TargetOS.Windows, TargetAbi.NativeAot); var context = new CompilerTypeSystemContext(target, SharedGenericsMode.CanonicalReferenceTypes, DelegateFeature.All); context.InputFilePaths = new Dictionary <string, string> { { "Test.CoreLib", @"Test.CoreLib.dll" }, { "ILCompiler.Compiler.Tests.Assets", @"ILCompiler.Compiler.Tests.Assets.dll" }, }; context.ReferenceFilePaths = new Dictionary <string, string>(); context.SetSystemModule(context.GetModuleForSimpleName("Test.CoreLib")); var testModule = context.GetModuleForSimpleName("ILCompiler.Compiler.Tests.Assets"); bool foundSomethingToCheck = false; foreach (var type in testModule.GetType("ILCompiler.Compiler.Tests.Assets", "DependencyGraph").GetNestedTypes()) { foundSomethingToCheck = true; yield return(new object[] { type.GetMethod("Entrypoint", null) }); } Assert.True(foundSomethingToCheck, "No methods to check?"); }
public void Trim(ILCompilerOptions options, ILogWriter logWriter) { ComputeDefaultOptions(out var targetOS, out var targetArchitecture); var targetDetails = new TargetDetails(targetArchitecture, targetOS, TargetAbi.NativeAot); CompilerTypeSystemContext typeSystemContext = new CompilerTypeSystemContext(targetDetails, SharedGenericsMode.CanonicalReferenceTypes, DelegateFeature.All); typeSystemContext.InputFilePaths = options.InputFilePaths; typeSystemContext.ReferenceFilePaths = options.ReferenceFilePaths; typeSystemContext.SetSystemModule(typeSystemContext.GetModuleForSimpleName(DefaultSystemModule)); List <EcmaModule> inputModules = new List <EcmaModule> (); foreach (var inputFile in typeSystemContext.InputFilePaths) { EcmaModule module = typeSystemContext.GetModuleFromPath(inputFile.Value); inputModules.Add(module); } CompilationModuleGroup compilationGroup = new TestInfraMultiFileSharedCompilationModuleGroup(typeSystemContext, inputModules); List <ICompilationRootProvider> compilationRoots = new List <ICompilationRootProvider> (); EcmaModule?entrypointModule = null; foreach (var inputFile in typeSystemContext.InputFilePaths) { EcmaModule module = typeSystemContext.GetModuleFromPath(inputFile.Value); if (module.PEReader.PEHeaders.IsExe) { if (entrypointModule != null) { throw new Exception("Multiple EXE modules"); } entrypointModule = module; } compilationRoots.Add(new ExportedMethodsRootProvider(module)); } compilationRoots.Add(new MainMethodRootProvider(entrypointModule, CreateInitializerList(typeSystemContext, options))); ILProvider ilProvider = new NativeAotILProvider(); ilProvider = new FeatureSwitchManager(ilProvider, options.FeatureSwitches); Logger logger = new Logger(logWriter, ilProvider, isVerbose: true); CompilerGeneratedState compilerGeneratedState = new CompilerGeneratedState(ilProvider, logger); UsageBasedMetadataManager metadataManager = new UsageBasedMetadataManager( compilationGroup, typeSystemContext, new NoMetadataBlockingPolicy(), new ManifestResourceBlockingPolicy(options.FeatureSwitches), logFile: null, new NoStackTraceEmissionPolicy(), new NoDynamicInvokeThunkGenerationPolicy(), new FlowAnnotations(logger, ilProvider, compilerGeneratedState), UsageBasedMetadataGenerationOptions.ReflectionILScanning, logger, Array.Empty <KeyValuePair <string, bool> > (), Array.Empty <string> (), options.TrimAssemblies.ToArray()); CompilationBuilder builder = new RyuJitCompilationBuilder(typeSystemContext, compilationGroup) .UseILProvider(ilProvider) .UseCompilationUnitPrefix(""); IILScanner scanner = builder.GetILScannerBuilder() .UseCompilationRoots(compilationRoots) .UseMetadataManager(metadataManager) .UseParallelism(System.Diagnostics.Debugger.IsAttached ? 1 : -1) .ToILScanner(); ILScanResults results = scanner.Scan(); }