summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Brasen <jbrasen@nvidia.com>2024-02-07 23:42:09 -0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2024-06-15 11:07:28 +0000
commitaa99d36be9ad68d8d0a99896332a9b5da10cf343 (patch)
tree4850f8c9e192e18ae469ca670938d66b1d9f4a4a
parentd8095b36abc521970dd930449a8ae8ddc431314c (diff)
downloadedk2-aa99d36be9ad68d8d0a99896332a9b5da10cf343.zip
edk2-aa99d36be9ad68d8d0a99896332a9b5da10cf343.tar.gz
edk2-aa99d36be9ad68d8d0a99896332a9b5da10cf343.tar.bz2
BaseTools/BuildReport: Improve compile_commands generation
This produces output that matches CodeChecker log command - Set directory to build output path - Set build destination to the object created instead of the path - Add recursive macro support - Add lookup in module.Macros dictionary - Add leading include flag to include list - Add source file to compile commands Signed-off-by: Jeff Brasen <jbrasen@nvidia.com>
-rw-r--r--BaseTools/Source/Python/build/BuildReport.py19
1 files changed, 13 insertions, 6 deletions
diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py
index 26dfe53..497bbbd 100644
--- a/BaseTools/Source/Python/build/BuildReport.py
+++ b/BaseTools/Source/Python/build/BuildReport.py
@@ -2416,20 +2416,27 @@ class BuildReport(object):
# Generate compile command for each c file
#
compile_command["file"] = source.Path
- compile_command["directory"] = source.Dir
+ compile_command["directory"] = module.BuildDir
build_command = module.BuildRules[source.Ext].CommandList[0]
+ destination = os.path.join (module.OutputDir, os.path.join (source.SubDir, source.BaseName + ".obj"))
build_command_variables = re.findall(r"\$\((.*?)\)", build_command)
- for var in build_command_variables:
+ while build_command_variables:
+ var = build_command_variables.pop()
var_tokens = var.split("_")
var_main = var_tokens[0]
- if len(var_tokens) == 1:
+ if var == "INC":
+ var_value = inc_flag + f" {inc_flag}".join(module.IncludePathList)
+ elif var in module.Macros:
+ var_value = module.Macros[var]
+ elif len(var_tokens) == 1:
var_value = module.BuildOption[var_main]["PATH"]
else:
var_value = module.BuildOption[var_main][var_tokens[1]]
build_command = build_command.replace(f"$({var})", var_value)
- include_files = f" {inc_flag}".join(module.IncludePathList)
- build_command = build_command.replace("${src}", include_files)
- build_command = build_command.replace("${dst}", module.OutputDir)
+ build_command = build_command.replace("${src}", source.Path)
+ build_command = build_command.replace("${dst}", destination)
+ build_command = build_command.replace("$@", destination)
+ build_command_variables.extend (re.findall(r"\$\((.*?)\)", var_value))
# Remove un defined macros
compile_command["command"] = re.sub(r"\$\(.*?\)", "", build_command)