#llvm #clang #compile

compile_commands

Work with compile_commands.json and compile_flags.txt in Rust programs

4 releases (2 breaking)

0.3.0 Sep 4, 2024
0.2.0 Jul 16, 2024
0.1.1 Jul 14, 2024
0.1.0 Jul 10, 2024

#454 in Development tools

Download history 198/week @ 2024-07-08 773/week @ 2024-07-15 624/week @ 2024-07-22 506/week @ 2024-07-29 472/week @ 2024-08-05 435/week @ 2024-08-12 452/week @ 2024-08-19 459/week @ 2024-08-26 1120/week @ 2024-09-02 668/week @ 2024-09-09 557/week @ 2024-09-16 499/week @ 2024-09-23 482/week @ 2024-09-30 493/week @ 2024-10-07 817/week @ 2024-10-14 451/week @ 2024-10-21

2,296 downloads per month
Used in asm-lsp

Apache-2.0

14KB
219 lines

Use compile_commands.json and compile_flags.txt in Rust Programs

Goal

Provide a thin wrapper type around the compile_commands.json and compile_flags.txt standards as provided by the LLVM project.

Sample usage

Given the following compile_commands.json file:

[
  { "directory": "/home/user/llvm/build",
    "arguments": ["/usr/bin/clang++", "-Irelative", "-DSOMEDEF=With spaces, quotes and \\-es.", "-c", "-o", "file.o", "file.cc"],
    "file": "file.cc" },

  { "directory": "/home/user/llvm/build",
    "command": "/usr/bin/clang++ -Irelative -DSOMEDEF=\"With spaces, quotes and \\-es.\" -c -o file.o file.cc",
    "file": "file2.cc" }
]

Or the following compile_flags.txt file:

-xc++
-I
libwidget/include/

Parse it and use as a type-safe object in your Rust project:

use std::path::PathBuf;

use compile_commands::CompilationDatabase;

fn main() {
    // Create a `CompilationDatabase` object directly from a compile_commands.json file
    let comp_cmds = include_str!("compile_commands.json");
    let comp_data = serde_json::from_str::<CompilationDatabase>(&comp_cmds).unwrap();
    _ = comp_data;

    // Or create a `CompilationDatabase` object from a compile_flags.txt file
    let comp_flags = include_str!("compile_flags.txt");
    let comp_data =
        compile_commands::from_compile_flags_txt(&PathBuf::from("~/foo/build"), &comp_flags);
    _ = comp_data;
}

Usage in the Wild

asm-lsp

Used to provide inline error diagnostics and additional per-project include directories

Dependencies

~0.7–1.6MB
~34K SLoC