feat: strengthen BSP and PSP validation and handoff
This commit is contained in:
1 parent
bcea35a91e
commit
1641fac631
39 files changed
+2695
-90
No files matched your search
@@ -0,0 +1,105 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Regression checks for CV181X split layout and opt-in read-only SDK mapping."""
|
||||
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
import bsp_preflight
|
||||
import inspect_cv181x_sdk
|
||||
|
||||
|
||||
def write(path: Path, value: str = "test\n") -> None:
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
path.write_text(value, encoding="utf-8")
|
||||
|
||||
|
||||
def main() -> int:
|
||||
with TemporaryDirectory() as temporary:
|
||||
root = Path(temporary) / "EmxRes"
|
||||
root.mkdir()
|
||||
board = "cv1815ja_wevb_0020a_spinand"
|
||||
project = root / "CV1815JA-TEST"
|
||||
project.mkdir()
|
||||
write(project / "buildEnvConfig.sh", "EP_CHIP=CV1815JA\nEP_COMPANY=Cvitek\nEP_FLASH_TYPE=nand\nEP_SDK_VER=v4.1.6_beta\n")
|
||||
write(project / "configs/uboot" / f"{board}_defconfig", "CONFIG_ENABLE_FREERTOS=y\nCONFIG_CHIP_CV1815JA=y\n")
|
||||
write(project / "configs/uboot" / f"cvitek_{board}_defconfig")
|
||||
write(project / "configs/kernel" / f"cvitek_{board}_defconfig")
|
||||
write(project / "configs/uboot/cvi_board_init.c")
|
||||
write(project / "configs/uboot/partition_spinand.xml")
|
||||
write(project / "configs/kernel/memmap.py")
|
||||
write(project / "configs/kernel" / f"{board}.dts")
|
||||
write(project / "configs/kernel/cv181x_base.dtsi")
|
||||
write(project / "configs/kernel/ep_kernel.sh", "\n".join((
|
||||
"EP_KERNEL_BUILD_TOP=build/boards/cv181x/$CV_BUILD_TYPE",
|
||||
"EP_KERNEL_BASE_DTSI=build/boards/default/dts/cv181x",
|
||||
"cp $EP_KERNEL_CONFIGS_PATH/memmap.py $EP_KERNEL_BUILD_TOP/memmap.py",
|
||||
'cp $EP_KERNEL_CONFIGS_PATH/cvitek_$CV_BUILD_TYPE"_defconfig" $EP_KERNEL_BUILD_TOP/linux/cvitek_$CV_BUILD_TYPE"_defconfig"',
|
||||
"cp $EP_KERNEL_CONFIGS_PATH/*.dts $EP_KERNEL_BUILD_TOP/dts_arm/",
|
||||
"cp $EP_KERNEL_CONFIGS_PATH/*.dtsi $EP_KERNEL_BASE_DTSI/",
|
||||
)))
|
||||
write(project / "configs/uboot/ep_uboot.sh", "\n".join((
|
||||
"EP_UBOOT_BUILD_TOP=build/boards/cv181x/$CV_BUILD_TYPE",
|
||||
'cp $EP_UBOOT_CONFIGS_PATH/$CV_BUILD_TYPE"_defconfig" $EP_UBOOT_BUILD_TOP/',
|
||||
'cp $EP_UBOOT_CONFIGS_PATH/cvitek_$CV_BUILD_TYPE"_defconfig" $EP_UBOOT_BUILD_TOP/u-boot/cvitek_$CV_BUILD_TYPE"_defconfig"',
|
||||
"cp $EP_UBOOT_CONFIGS_PATH/partition_spinand.xml $EP_UBOOT_BUILD_TOP/partition/partition_spinand.xml",
|
||||
"cp $EP_UBOOT_CONFIGS_PATH/cvi_board_init.c $EP_UBOOT_BUILD_TOP/u-boot/cvi_board_init.c",
|
||||
)))
|
||||
write(root / "tools/BuildCvitekSDKTool.sh", "defconfig $CV_BUILD_TYPE\nEp_Uboot_Config_Func\nEp_Kernel_Config_Func\n")
|
||||
|
||||
layout = bsp_preflight.resolve_board_layout(project, "CV1815JA")
|
||||
assert layout["layout"] == "split-kernel-uboot", layout
|
||||
assert layout["board_build_type"] == board, layout
|
||||
assert layout["system_form"] == "single-os", layout
|
||||
report = bsp_preflight.project_preflight(project.name, "CV1815JA-NEW", root)
|
||||
assert report["passed"] is True, report
|
||||
assert report["facts"]["config_layout"] == "split-kernel-uboot", report
|
||||
assert len(report["bounded_paths"]["sync_scripts"]) == 2, report
|
||||
assert bsp_preflight.resolve_board_layout(project, "CV1841CP")["error"]
|
||||
write(root / "tools/script_completion.sh")
|
||||
project.joinpath("imgs").symlink_to(f"/epbuild/EMX2.0/EmxRes/{project.name}/imgs")
|
||||
build_report = bsp_preflight.build_preflight(project.name, "20260923_1", root, Path(temporary) / "output")
|
||||
assert build_report["passed"] is True, build_report
|
||||
assert build_report["config_layout"] == "split-kernel-uboot", build_report
|
||||
assert build_report["requires_patch_precheck"] is False, build_report
|
||||
|
||||
sdk = Path(temporary) / "v4.1.6_beta"
|
||||
for source_rel, dest_rel in inspect_cv181x_sdk.mapped_files(board, project):
|
||||
write(sdk / dest_rel, (project / source_rel).read_text(encoding="utf-8"))
|
||||
shared = sdk / "build/boards/default/memmap/shared.py"
|
||||
write(shared, "test\n")
|
||||
memmap = sdk / "build/boards/cv181x" / board / "memmap.py"
|
||||
memmap.unlink()
|
||||
memmap.symlink_to(shared)
|
||||
write(sdk / "build/.config", "CONFIG_CHIP_CV1815JA=n\n")
|
||||
result = inspect_cv181x_sdk.inspect(project, sdk)
|
||||
codes = {item["code"] for item in result["alerts"]}
|
||||
assert {"shared_sdk_target", "generated_config_differs", "sync_after_defconfig"} <= codes, codes
|
||||
assert len(result["mappings"]) == 8, result
|
||||
try:
|
||||
inspect_cv181x_sdk.inspect(project, Path(temporary))
|
||||
except ValueError as exc:
|
||||
assert "EP_SDK_VER" in str(exc)
|
||||
else:
|
||||
raise AssertionError("mismatched SDK root must fail")
|
||||
|
||||
(project / "configs/kernel" / f"cvitek_{board}_defconfig").unlink()
|
||||
assert bsp_preflight.resolve_board_layout(project, "CV1815JA")["error"]
|
||||
assert bsp_preflight.build_preflight(project.name, "20260923_2", root, Path(temporary) / "output")["passed"] is False
|
||||
|
||||
cv184 = root / "CV1841CP-TEST"
|
||||
write(cv184 / "configs/cv1841cp_wevb_0015a_spinand/board_defconfig")
|
||||
old = bsp_preflight.resolve_board_layout(cv184, "CV1841CP")
|
||||
assert old["layout"] == "board-directory", old
|
||||
assert old["board_build_type"] == "cv1841cp_wevb_0015a_spinand", old
|
||||
assert bsp_preflight.resolve_board_layout(cv184, "CV1815JA")["error"]
|
||||
write(cv184 / "buildEnvConfig.sh", "EP_CHIP=CV1841CP\n")
|
||||
cv184.joinpath("imgs").symlink_to(f"/epbuild/EMX2.0/EmxRes/{cv184.name}/imgs")
|
||||
cv184_build = bsp_preflight.build_preflight(cv184.name, "20260923_1", root, Path(temporary) / "output")
|
||||
assert cv184_build["requires_patch_precheck"] is True, cv184_build
|
||||
assert any("--applypatch --force" in item for item in cv184_build["warnings"]), cv184_build
|
||||
print("CV181X layout and SDK read-only inspection tests passed")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in new issue
Block a user