private IEnumerable <IDictionary <string, object> > GetEntries(Builder builder, Project.Configuration projectConfiguration, CompileCommandFormat format) { var context = new CompileCommandGenerationContext(builder, projectConfiguration.Project, projectConfiguration); var resolverParams = new[] { new VariableAssignment("project", context.Project), new VariableAssignment("target", context.Configuration.Target), new VariableAssignment("conf", context.Configuration) }; context.EnvironmentVariableResolver = PlatformRegistry.Get <IPlatformDescriptor>(projectConfiguration.Platform).GetPlatformEnvironmentResolver(resolverParams); var factory = new CompileCommandFactory(context); var database = projectConfiguration.Project.GetSourceFilesForConfigurations(new[] { projectConfiguration }) .Except(projectConfiguration.ResolvedSourceFilesBuildExclude) .Where(f => projectConfiguration.Project.SourceFilesCPPExtensions.Contains(Path.GetExtension(f))) .Select(factory.CreateCompileCommand); foreach (var cc in database) { CompileCommandGenerated?.Invoke(context, cc); if (format == CompileCommandFormat.Arguments) { yield return(new Dictionary <string, object> { { "directory", cc.Directory }, { "arguments", cc.Arguments }, { "file", cc.File }, }); } else { yield return(new Dictionary <string, object> { { "directory", cc.Directory }, { "command", cc.Command }, { "file", cc.File }, }); } } }
private static void GenerateDatabase(string outdir, IEnumerable <Project.Configuration> configs, CompileCommandFormat format) { var builder = Builder.Instance; if (builder == null) { System.Console.Error.WriteLine("CompilationDatabase: No builder instance."); return; } var generator = new JsonCompilationDatabase(); generator.Generate(builder, outdir, configs, format, new List <string>(), new List <string>()); }
public void Generate(Builder builder, string path, IEnumerable <Project.Configuration> projectConfigurations, CompileCommandFormat format, List <string> generatedFiles, List <string> skipFiles) { var database = new List <IDictionary <string, object> >(); foreach (var configuration in projectConfigurations) { database.AddRange(GetEntries(builder, configuration, format)); } if (database.Count > 0) { WriteGeneratedFile(builder, path, database, generatedFiles, skipFiles); } }