Re: [PATCH v1] clang_tools:gen_compile_commands: Change the default source directory

From: Nathan Chancellor
Date: Wed Feb 10 2021 - 13:37:09 EST


On Wed, Feb 10, 2021 at 08:15:27PM +0800, Stephen Zhang wrote:
> Nathan Chancellor <nathan@xxxxxxxxxx> 于2021年2月10日周三 上午3:27写道:
>
> > Just as an FYI, your email was HTML, which means it won't hit LKML.
>
>
> Thanks for pointing that out. The existence of a GFW makes it difficult for
> me to connect
> to the mail server. so I use git client to send patches only and reply to
> emails with
> gmail web client.

You can configure your Gmail web client to send text responses by
default by clicking on the three dot menu in the compose window then
chose the "plain text mode" option.

> $ mkdir -p /tmp/build/perf
> >
> > $ make -C tools/perf -skj"$(nproc)" O=/tmp/build/perf
> >
> > $ cd /tmp/build/perf
> >
> > $ ~/cbl/src/linux/scripts/clang-tools/gen_compile_commands.py --log_level
> > INFO -d .
> > ...
> >
>
> According to the code logic, the source directory is specified by
> parameters “-d”.

Yes and no. '-d' is supposed to be the build directory but the logic of
the script clearly does not work when the build and source directories
are in completely separate tree paths. In other works:

$ make

and

$ make O=build

will work with '-d .' because the .cmd files are in '.' and the source
files will be placed relative to '.', which is correct. Your command
does not work for two reasons:

1. You are using a build directory that is not a subpath of the source
directory. In other words, this script would not work for

$ make O=/tmp/build

because '-d /tmp/build' needs to be used to find the .cmd files but then
the relative path of the source files is messed up, as you point out.

2. The source files are in tools/perf, not .

> def process_line(root_directory, command_prefix, file_path):
> ...
> abs_path = os.path.abspath(os.path.join(root_directory, file_path))
> ...
>
> The "root_directory" is passed by "-d", which finally become the prefix
> like "/tmp/build/perf/"
> of "File /tmp/build/perf/arch/x86/tests/bp-modify.c not found".so the
> command is:
>
> $ ~/cbl/src/linux/scripts/clang-tools/gen_compile_commands.py --log_level
> INFO -d ~/cbl/src/linux/tools/perf/
>
> Maybe we should make an updated version, in which the help message of "-d"
> can be changed
> to specify the source directory instead, or I am just misunderstanding the
> code logic.
>

The build directory needs to be involved because that is where the .cmd
files will be but the source directory needs to be known because the
source files in the .cmd files are relative to the source directory, not
the build directory. This happens to work in most situations like I
point out above but not always.

I think that my patch is most likely the way to go unless others feel
differently. It would be nice if you could give it a go.

Cheers,
Nathan