Added option to inject custom compile flags to compilation database (fixes #112)

This commit is contained in:
Bartek Kryza
2023-03-26 17:20:43 +02:00
parent 5b60a30855
commit 6513d27e4b
7 changed files with 28 additions and 0 deletions

View File

@@ -53,6 +53,9 @@
```yaml ```yaml
# Directory containing the compile_commands.json file # Directory containing the compile_commands.json file
compilation_database_dir: debug compilation_database_dir: debug
# Inject additional compile commands to the compilation database entries
add_compile_flags:
- '-Wno-vla-extension'
# The directory where *.puml files will be generated # The directory where *.puml files will be generated
output_directory: docs/diagrams output_directory: docs/diagrams
# Set this as default for all diagrams # Set this as default for all diagrams

View File

@@ -183,4 +183,17 @@ void generate_diagrams(const std::vector<std::string> &diagram_names,
} }
} }
void adjust_compilation_database(const clanguml::config::config &config,
clang::tooling::CompilationDatabase &db)
{
if (config.add_compile_flags && !config.add_compile_flags().empty()) {
for (auto &compile_command : db.getAllCompileCommands()) {
compile_command.CommandLine.insert(
compile_command.CommandLine.begin() + 1,
config.add_compile_flags().begin(),
config.add_compile_flags().end());
}
}
}
} // namespace clanguml::common::generators } // namespace clanguml::common::generators

View File

@@ -139,6 +139,9 @@ void find_translation_units_for_diagrams(
const std::vector<std::string> &compilation_database_files, const std::vector<std::string> &compilation_database_files,
std::map<std::string, std::vector<std::string>> &translation_units_map); std::map<std::string, std::vector<std::string>> &translation_units_map);
void adjust_compilation_database(const clanguml::config::config &config,
clang::tooling::CompilationDatabase &db);
template <typename DiagramModel, typename DiagramConfig, template <typename DiagramModel, typename DiagramConfig,
typename TranslationUnitVisitor> typename TranslationUnitVisitor>
class diagram_ast_consumer : public clang::ASTConsumer { class diagram_ast_consumer : public clang::ASTConsumer {

View File

@@ -222,6 +222,7 @@ struct config : public inheritable_diagram_options {
// directory // directory
option<std::string> compilation_database_dir{ option<std::string> compilation_database_dir{
"compilation_database_dir", "."}; "compilation_database_dir", "."};
option<std::vector<std::string>> add_compile_flags{"add_compile_flags"};
option<std::string> output_directory{"output_directory"}; option<std::string> output_directory{"output_directory"};
option<std::map<std::string, diagram_template>> diagram_templates{ option<std::map<std::string, diagram_template>> diagram_templates{

View File

@@ -585,6 +585,7 @@ template <> struct convert<config> {
get_option(node, rhs.using_namespace); get_option(node, rhs.using_namespace);
get_option(node, rhs.output_directory); get_option(node, rhs.output_directory);
get_option(node, rhs.compilation_database_dir); get_option(node, rhs.compilation_database_dir);
get_option(node, rhs.add_compile_flags);
get_option(node, rhs.include_relations_also_as_members); get_option(node, rhs.include_relations_also_as_members);
get_option(node, rhs.puml); get_option(node, rhs.puml);
get_option(node, rhs.generate_method_arguments); get_option(node, rhs.generate_method_arguments);

View File

@@ -187,6 +187,7 @@ YAML::Emitter &operator<<(YAML::Emitter &out, const config &c)
out << c.compilation_database_dir; out << c.compilation_database_dir;
out << c.output_directory; out << c.output_directory;
out << c.add_compile_flags;
out << dynamic_cast<const inheritable_diagram_options &>(c); out << dynamic_cast<const inheritable_diagram_options &>(c);

View File

@@ -76,6 +76,12 @@ int main(int argc, const char *argv[])
cli.diagram_names, cli.config, compilation_database_files, cli.diagram_names, cli.config, compilation_database_files,
translation_units_map); translation_units_map);
//
// Inject any additional compilation flags from the config to the
// compilation database
//
clanguml::common::generators::adjust_compilation_database(cli.config, *db);
clanguml::common::generators::generate_diagrams(cli.diagram_names, clanguml::common::generators::generate_diagrams(cli.diagram_names,
cli.config, cli.effective_output_directory, db, cli.verbose, cli.config, cli.effective_output_directory, db, cli.verbose,
cli.thread_count, cli.generators, translation_units_map); cli.thread_count, cli.generators, translation_units_map);