objdiff.json output fixes

Ensures that most unit fields are written even
when missing the source file or auto-generated
This commit is contained in:
Luke Street 2024-09-04 21:02:42 -06:00
parent f54d479e6f
commit 2f052e0982
1 changed files with 28 additions and 14 deletions

View File

@ -1236,14 +1236,19 @@ def generate_objdiff_config(
"target_path": obj_path, "target_path": obj_path,
"metadata": { "metadata": {
"auto_generated": build_obj["autogenerated"], "auto_generated": build_obj["autogenerated"],
"progress_categories": progress_categories,
}, },
} }
obj = objects.get(obj_name) obj = objects.get(obj_name)
if obj is None or not obj.src_path or not obj.src_path.exists(): if obj is None:
objdiff_config["units"].append(unit_config) objdiff_config["units"].append(unit_config)
return return
src_exists = obj.src_path is not None and obj.src_path.exists()
if src_exists:
unit_config["base_path"] = obj.src_obj_path
cflags = obj.options["cflags"] cflags = obj.options["cflags"]
reverse_fn_order = False reverse_fn_order = False
if type(cflags) is list: if type(cflags) is list:
@ -1263,12 +1268,14 @@ def generate_objdiff_config(
cflags = list(filter(keep_flag, cflags)) cflags = list(filter(keep_flag, cflags))
# Add appropriate lang flag # Add appropriate lang flag
if obj.src_path is not None and not any(
flag.startswith("-lang") for flag in cflags
):
if obj.src_path.suffix in (".cp", ".cpp"): if obj.src_path.suffix in (".cp", ".cpp"):
cflags.insert(0, "-lang=c++") cflags.insert(0, "-lang=c++")
else: else:
cflags.insert(0, "-lang=c") cflags.insert(0, "-lang=c")
unit_config["base_path"] = obj.src_obj_path
compiler_version = COMPILER_MAP.get(obj.options["mw_version"]) compiler_version = COMPILER_MAP.get(obj.options["mw_version"])
if compiler_version is None: if compiler_version is None:
print(f"Missing scratch compiler mapping for {obj.options['mw_version']}") print(f"Missing scratch compiler mapping for {obj.options['mw_version']}")
@ -1281,20 +1288,27 @@ def generate_objdiff_config(
"platform": "gc_wii", "platform": "gc_wii",
"compiler": compiler_version, "compiler": compiler_version,
"c_flags": cflags_str, "c_flags": cflags_str,
}
if src_exists:
unit_config["scratch"].update(
{
"ctx_path": obj.ctx_path, "ctx_path": obj.ctx_path,
"build_ctx": True, "build_ctx": True,
} }
)
category_opt: List[str] | str = obj.options["progress_category"] category_opt: List[str] | str = obj.options["progress_category"]
if isinstance(category_opt, list): if isinstance(category_opt, list):
progress_categories.extend(category_opt) progress_categories.extend(category_opt)
elif category_opt is not None: elif category_opt is not None:
progress_categories.append(category_opt) progress_categories.append(category_opt)
unit_config["metadata"].update({ unit_config["metadata"].update(
{
"complete": obj.completed, "complete": obj.completed,
"reverse_fn_order": reverse_fn_order, "reverse_fn_order": reverse_fn_order,
"source_path": obj.src_path, "source_path": obj.src_path,
"progress_categories": progress_categories, "progress_categories": progress_categories,
}) }
)
objdiff_config["units"].append(unit_config) objdiff_config["units"].append(unit_config)
# Add DOL units # Add DOL units