aboutsummaryrefslogtreecommitdiff
path: root/scripts/gen_compile_commands.py
diff options
context:
space:
mode:
authorBrandon Maier <brandon.maier@collins.com>2024-01-22 18:45:50 +0000
committerTom Rini <trini@konsulko.com>2024-02-06 16:31:06 -0500
commitcb6f4d6510b83ad8aa393633b470a64a9a58b658 (patch)
treeb912d2ba1e7f278265882940cd70f46217fe9165 /scripts/gen_compile_commands.py
parentdaa3100250839dd30626f7f4b7daf041f1114f1c (diff)
downloadu-boot-cb6f4d6510b83ad8aa393633b470a64a9a58b658.zip
u-boot-cb6f4d6510b83ad8aa393633b470a64a9a58b658.tar.gz
u-boot-cb6f4d6510b83ad8aa393633b470a64a9a58b658.tar.bz2
scripts/gen_compile_commands: update to Linux v6.7
Adds support for assembly files and updates the LINE_PATTERN so it supports both "cmd" and "savedcmd", which allows reverting the U-Boot modification in commit 97fbb2eb016b ("scripts/gen_compile_commands.py: adapt _LINE_PATTERN"). Upstream commits: - 880946158b011 gen_compile_commands.py: fix path resolve with symlinks in it - 9e56d3be4bfd2 gen_compile_commands: Sort output compile commands by file name - 52c15e7e79285 gen_compile_commands: Allow the line prefix to still be cmd_ - 1c67921444bf6 gen_compile_commands: add assembly files to compilation database Signed-off-by: Brandon Maier <brandon.maier@collins.com> Cc: Joao Marcos Costa <jmcosta944@gmail.com>
Diffstat (limited to 'scripts/gen_compile_commands.py')
-rwxr-xr-xscripts/gen_compile_commands.py14
1 files changed, 7 insertions, 7 deletions
diff --git a/scripts/gen_compile_commands.py b/scripts/gen_compile_commands.py
index cdca85e..fec513e 100755
--- a/scripts/gen_compile_commands.py
+++ b/scripts/gen_compile_commands.py
@@ -21,7 +21,7 @@ _DEFAULT_OUTPUT = 'compile_commands.json'
_DEFAULT_LOG_LEVEL = 'WARNING'
_FILENAME_PATTERN = r'^\..*\.cmd$'
-_LINE_PATTERN = r'^cmd_[^ ]*\.o := (.* )([^ ]*\.c) *(;|$)'
+_LINE_PATTERN = r'^(saved)?cmd_[^ ]*\.o := (?P<command_prefix>.* )(?P<file_path>[^ ]*\.[cS]) *(;|$)'
_VALID_LOG_LEVELS = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
# The tools/ directory adopts a different build system, and produces .cmd
# files in a different format. Do not support it.
@@ -66,7 +66,7 @@ def parse_arguments():
args = parser.parse_args()
return (args.log_level,
- os.path.abspath(args.directory),
+ os.path.realpath(args.directory),
args.output,
args.ar,
args.paths if len(args.paths) > 0 else [args.directory])
@@ -174,8 +174,8 @@ def process_line(root_directory, command_prefix, file_path):
# by Make, so this code replaces the escaped version with '#'.
prefix = command_prefix.replace('\#', '#').replace('$(pound)', '#')
- # Use os.path.abspath() to normalize the path resolving '.' and '..' .
- abs_path = os.path.abspath(os.path.join(root_directory, file_path))
+ # Return the canonical path, eliminating any symbolic links encountered in the path.
+ abs_path = os.path.realpath(os.path.join(root_directory, file_path))
if not os.path.exists(abs_path):
raise ValueError('File %s not found' % abs_path)
return {
@@ -215,15 +215,15 @@ def main():
result = line_matcher.match(f.readline())
if result:
try:
- entry = process_line(directory, result.group(1),
- result.group(2))
+ entry = process_line(directory, result.group('command_prefix'),
+ result.group('file_path'))
compile_commands.append(entry)
except ValueError as err:
logging.info('Could not add line from %s: %s',
cmdfile, err)
with open(output, 'wt') as f:
- json.dump(compile_commands, f, indent=2, sort_keys=True)
+ json.dump(sorted(compile_commands, key=lambda x: x["file"]), f, indent=2, sort_keys=True)
if __name__ == '__main__':