fix compile_commands.json generation
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,3 +1,5 @@
|
|||||||
/obj
|
/obj
|
||||||
/files/cfg
|
/files/cfg
|
||||||
/.direnv
|
/.direnv
|
||||||
|
.cache
|
||||||
|
compile_commands.json
|
||||||
|
|||||||
71
src/l4/tool/bin/gen_ccj
Executable file
71
src/l4/tool/bin/gen_ccj
Executable file
@@ -0,0 +1,71 @@
|
|||||||
|
#! /usr/bin/env perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use File::Basename;
|
||||||
|
use File::Find;
|
||||||
|
|
||||||
|
my $searchdir = shift;
|
||||||
|
my $outfile = shift;
|
||||||
|
|
||||||
|
if (not defined $outfile)
|
||||||
|
{
|
||||||
|
print "Usage: $0 search-dir outfile\n";
|
||||||
|
print "\n";
|
||||||
|
print "Example: $0 /path/to/obj-dir /path/to/your/l4re/src/dir/compile_commands.json\n";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
open(my $out, ">$outfile") or die "Cannot open '$outfile': $!";
|
||||||
|
|
||||||
|
my @db;
|
||||||
|
|
||||||
|
sub add_cmd
|
||||||
|
{
|
||||||
|
return unless /\.cmd$/;
|
||||||
|
|
||||||
|
open(my $fh_cmd, $_) or die "Cannot open '$File::Find::name': $!";
|
||||||
|
my $cmd;
|
||||||
|
my $source;
|
||||||
|
my $obj;
|
||||||
|
while (<$fh_cmd>)
|
||||||
|
{
|
||||||
|
chomp;
|
||||||
|
$cmd = $1 if /^savedcmd_\S+\s+:=\s+(.+)/;
|
||||||
|
$source = $1 if /^source_\S+\s+:=\s+(.+)/;
|
||||||
|
$obj = $1 if /^savedcmd_(\S+)\s+:=\s+.+/;
|
||||||
|
}
|
||||||
|
|
||||||
|
return unless defined $cmd and defined $source and defined $obj;
|
||||||
|
|
||||||
|
my $obj_dir = dirname($obj);
|
||||||
|
my $obj_path = $File::Find::dir =~ s|\Q/$obj_dir\E$||r;
|
||||||
|
|
||||||
|
sub json_escape { return shift =~ s/(["\\])/\\$1/gr; }
|
||||||
|
|
||||||
|
push @db, {
|
||||||
|
"file" => json_escape($source),
|
||||||
|
"directory" => json_escape($obj_path),
|
||||||
|
"command" => json_escape($cmd),
|
||||||
|
"output" => json_escape("$obj_path/$obj"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
find(\&add_cmd, $searchdir);
|
||||||
|
|
||||||
|
my @sorted = sort { $b->{file} cmp $a->{file} } @db;
|
||||||
|
|
||||||
|
print $out "[\n";
|
||||||
|
my $comma = "";
|
||||||
|
for my $entry (@sorted)
|
||||||
|
{
|
||||||
|
print $out $comma;
|
||||||
|
print $out " {\n";
|
||||||
|
print $out " \"file\": \"$entry->{file}\",\n";
|
||||||
|
print $out " \"directory\": \"$entry->{directory}\",\n";
|
||||||
|
print $out " \"command\": \"$entry->{command}\",\n";
|
||||||
|
print $out " \"output\": \"$entry->{output}\"\n";
|
||||||
|
print $out " }";
|
||||||
|
$comma = ",\n";
|
||||||
|
}
|
||||||
|
print $out "\n]\n";
|
||||||
Reference in New Issue
Block a user