Exemplo n.º 1
0
        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>());
        }
Exemplo n.º 3
0
        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);
            }
        }