public static void Run(ILibrary library) { var options = new DriverOptions(); var Log = new TextDiagnosticPrinter(); var driver = new Driver(options, Log); library.Setup(driver); driver.Setup(); if(driver.Options.Verbose) Log.Level = DiagnosticKind.Debug; if (!options.Quiet) Log.Message("Parsing libraries..."); if (!driver.ParseLibraries()) return; if (!options.Quiet) Log.Message("Indexing library symbols..."); driver.Symbols.IndexSymbols(); if (!options.Quiet) Log.Message("Parsing code..."); driver.SortModulesByDependencies(); driver.BuildParseOptions(); if (!driver.ParseCode()) { Log.Error("CppSharp has encountered an error while parsing code."); return; } new CleanUnitPass(options).VisitLibrary(driver.ASTContext); options.Modules.RemoveAll(m => m.Units.All(u => u.Declarations.Count == 0)); if (!options.Quiet) Log.Message("Processing code..."); library.Preprocess(driver, driver.ASTContext); driver.SetupPasses(library); driver.ProcessCode(); library.Postprocess(driver, driver.ASTContext); if (!options.Quiet) Log.Message("Generating code..."); var outputs = driver.GenerateCode(); foreach (var output in outputs) { foreach (var pass in driver.GeneratorOutputPasses.Passes) { pass.Driver = driver; pass.VisitGeneratorOutput(output); } } if (!driver.Options.DryRun) { driver.SaveCode(outputs); if (driver.Options.IsCSharpGenerator && driver.Options.CompileCode) foreach (var module in driver.Options.Modules) { driver.CompileCode(module); if (driver.HasCompilationErrors) break; } } driver.Generator.Dispose(); driver.TargetInfo.Dispose(); }