tan-cli 0.7.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tan/__init__.py +0 -0
- tan/__main__.py +120 -0
- tan/cli.py +939 -0
- tan/command_table.py +265 -0
- tan/commands/__init__.py +8 -0
- tan/commands/bootstrap_cmd.py +4856 -0
- tan/commands/bootstrap_patches.py +164 -0
- tan/commands/bootstrap_toolchain_fetch.py +155 -0
- tan/commands/bootstrap_toolchain_pin.py +36 -0
- tan/commands/build/__init__.py +1 -0
- tan/commands/build/configure_inputs.py +277 -0
- tan/commands/build/execute.py +1852 -0
- tan/commands/build/host_python.py +59 -0
- tan/commands/build/link_stale.py +78 -0
- tan/commands/build/manifest.py +428 -0
- tan/commands/build/materialise.py +81 -0
- tan/commands/build/token_substitution.py +381 -0
- tan/commands/build/toolchain.py +482 -0
- tan/commands/build/user_defines_wipe.py +115 -0
- tan/commands/build/workspace_patches.py +65 -0
- tan/commands/build_cmd.py +2236 -0
- tan/commands/build_output.py +331 -0
- tan/commands/clean_cmd.py +1183 -0
- tan/commands/completion_cmd.py +786 -0
- tan/commands/debug_config_cmd.py +2425 -0
- tan/commands/diff_cmd.py +940 -0
- tan/commands/doctor_cmd.py +4767 -0
- tan/commands/examples_cmd.py +644 -0
- tan/commands/explain_cmd.py +1319 -0
- tan/commands/faultdecode_cmd.py +931 -0
- tan/commands/flash_atoc_guard.py +240 -0
- tan/commands/flash_cmd.py +5731 -0
- tan/commands/flash_mram_guard.py +150 -0
- tan/commands/flash_ram.py +578 -0
- tan/commands/flash_raw.py +583 -0
- tan/commands/generate_cmd.py +1456 -0
- tan/commands/image_cmd.py +753 -0
- tan/commands/init_cmd.py +1740 -0
- tan/commands/inspect_cmd.py +377 -0
- tan/commands/kconfig_cmd.py +734 -0
- tan/commands/model_cmd.py +1514 -0
- tan/commands/model_device_cmd.py +351 -0
- tan/commands/model_device_live.py +234 -0
- tan/commands/model_host_cmd.py +430 -0
- tan/commands/model_zoo_cmd.py +363 -0
- tan/commands/monitor_actions.py +125 -0
- tan/commands/monitor_cmd.py +626 -0
- tan/commands/monitor_session.py +505 -0
- tan/commands/new_som_cmd.py +1522 -0
- tan/commands/pinmux_cmd.py +568 -0
- tan/commands/presets_cmd.py +1123 -0
- tan/commands/probe_cmd.py +421 -0
- tan/commands/reset_cmd.py +354 -0
- tan/commands/reset_confirm.py +168 -0
- tan/commands/run_cmd.py +637 -0
- tan/commands/scaffold_cmd.py +490 -0
- tan/commands/sdk_cmd.py +1723 -0
- tan/commands/size_cmd.py +1020 -0
- tan/commands/support_bundle_cmd.py +1073 -0
- tan/commands/trace_cmd.py +341 -0
- tan/commands/validate_cmd.py +2009 -0
- tan/commands/west_forward_cmd.py +736 -0
- tan/commands/workspace_patch_check.py +296 -0
- tan/core/__init__.py +1 -0
- tan/core/alp_conf_pregen.py +100 -0
- tan/core/artifact_provenance.py +240 -0
- tan/core/atoc_guard.py +276 -0
- tan/core/atoc_guard_messages.py +232 -0
- tan/core/atoc_replacement.py +118 -0
- tan/core/atomic_write.py +178 -0
- tan/core/board_context.py +351 -0
- tan/core/board_diagnostic.py +111 -0
- tan/core/board_files.py +221 -0
- tan/core/board_validator.py +542 -0
- tan/core/board_validator_compat.py +196 -0
- tan/core/board_validator_run.py +129 -0
- tan/core/board_validator_schema.py +186 -0
- tan/core/board_validator_skew.py +46 -0
- tan/core/board_yaml_edit.py +295 -0
- tan/core/board_yaml_pos.py +118 -0
- tan/core/bootstrap.py +2572 -0
- tan/core/build_plan.py +625 -0
- tan/core/consent.py +104 -0
- tan/core/console_filter.py +245 -0
- tan/core/debug_launch.py +1803 -0
- tan/core/devicetree_lint.py +168 -0
- tan/core/dir_removal.py +229 -0
- tan/core/doctor_git.py +172 -0
- tan/core/doctor_libraries.py +253 -0
- tan/core/doctor_render.py +185 -0
- tan/core/doctor_scope.py +66 -0
- tan/core/doctor_setools.py +237 -0
- tan/core/doctor_stale.py +180 -0
- tan/core/document_guards.py +723 -0
- tan/core/dp_id.py +97 -0
- tan/core/elf_load.py +63 -0
- tan/core/error_catalog.py +171 -0
- tan/core/example_catalog.py +499 -0
- tan/core/example_facets.py +151 -0
- tan/core/faultdecode.py +521 -0
- tan/core/flash_plan.py +2501 -0
- tan/core/flow_d_report.py +381 -0
- tan/core/flow_d_uptime.py +164 -0
- tan/core/fs_confine.py +130 -0
- tan/core/global_flags.py +230 -0
- tan/core/host_python.py +210 -0
- tan/core/image_bundle.py +247 -0
- tan/core/inert.py +147 -0
- tan/core/jlink_binary.py +128 -0
- tan/core/jlink_probe.py +481 -0
- tan/core/jsonc_splice.py +404 -0
- tan/core/launch_provenance.py +257 -0
- tan/core/link_refusal.py +76 -0
- tan/core/metadata_schema.py +376 -0
- tan/core/model_check.py +227 -0
- tan/core/model_device.py +449 -0
- tan/core/model_doctor.py +198 -0
- tan/core/model_host.py +48 -0
- tan/core/model_list.py +112 -0
- tan/core/model_zoo.py +353 -0
- tan/core/module_template.py +340 -0
- tan/core/mram_link.py +87 -0
- tan/core/new_som_ospi.py +94 -0
- tan/core/os_class.py +159 -0
- tan/core/patch_paths.py +87 -0
- tan/core/pending.py +40 -0
- tan/core/plain_zephyr_plan.py +138 -0
- tan/core/plan_exec.py +373 -0
- tan/core/plan_tokens.py +600 -0
- tan/core/probe.py +155 -0
- tan/core/probe_plan.py +237 -0
- tan/core/proxy.py +168 -0
- tan/core/publish.py +31 -0
- tan/core/python_floor.py +178 -0
- tan/core/ram_run.py +694 -0
- tan/core/ram_watch.py +231 -0
- tan/core/raw_write.py +160 -0
- tan/core/reset_plan.py +56 -0
- tan/core/run.py +161 -0
- tan/core/scaffold.py +2203 -0
- tan/core/scaffold_selftest_identity.py +225 -0
- tan/core/sdk_default_registry.py +565 -0
- tan/core/sdk_discovery.py +996 -0
- tan/core/sdk_removal.py +465 -0
- tan/core/serial_actions.py +175 -0
- tan/core/serial_capture.py +185 -0
- tan/core/serial_url.py +45 -0
- tan/core/setools.py +608 -0
- tan/core/setools_scratch.py +243 -0
- tan/core/shapes.py +194 -0
- tan/core/size.py +610 -0
- tan/core/som_buildability.py +204 -0
- tan/core/som_schema_version.py +62 -0
- tan/core/subprocess_env.py +201 -0
- tan/core/sysbuild_image.py +94 -0
- tan/core/system_manifest.py +827 -0
- tan/core/text_layout.py +73 -0
- tan/core/timestamp.py +182 -0
- tan/core/tool_lookup.py +383 -0
- tan/core/toolchain_pin.py +117 -0
- tan/core/toolchain_provision.py +1224 -0
- tan/core/trusted_path.py +134 -0
- tan/core/uboot_breakin.py +154 -0
- tan/core/uri_reference.py +415 -0
- tan/core/user_defines.py +152 -0
- tan/core/venv.py +332 -0
- tan/core/west_patches.py +143 -0
- tan/core/west_workspace_refusal.py +159 -0
- tan/core/zephyr_env.py +124 -0
- tan/env.py +185 -0
- tan/envelope.py +647 -0
- tan/exit_codes.py +12 -0
- tan/lazy_typer.py +185 -0
- tan/model/__init__.py +2 -0
- tan/model/_gen_fixture.py +132 -0
- tan/model/adapters/__init__.py +116 -0
- tan/model/adapters/cpu.py +26 -0
- tan/model/adapters/deepx.py +94 -0
- tan/model/adapters/drpai.py +242 -0
- tan/model/adapters/ethos_u.py +951 -0
- tan/model/adapters/executorch.py +55 -0
- tan/model/analyze.py +694 -0
- tan/model/build.py +304 -0
- tan/model/check.py +682 -0
- tan/model/manifest.py +625 -0
- tan/model/measure.py +216 -0
- tan/model/npu_ops_validate.py +130 -0
- tan/model/package.py +125 -0
- tan/model/perf.py +635 -0
- tan/model/perf_apply.py +721 -0
- tan/model/prep.py +193 -0
- tan/model/sram_fit.py +502 -0
- tan/model/targets.py +374 -0
- tan/model/tensorio.py +287 -0
- tan/net.py +73 -0
- tan/output_format.py +213 -0
- tan/planner/__init__.py +219 -0
- tan/planner/aperture.py +202 -0
- tan/planner/buildplan.py +1092 -0
- tan/planner/camera_owner.py +192 -0
- tan/planner/cameras.py +132 -0
- tan/planner/carveout.py +755 -0
- tan/planner/cli.py +274 -0
- tan/planner/headers.py +315 -0
- tan/planner/kconfig.py +2435 -0
- tan/planner/kconfig_symbols.py +473 -0
- tan/planner/libraries.py +677 -0
- tan/planner/link_target.py +237 -0
- tan/planner/linux_ownership.py +216 -0
- tan/planner/loader.py +1525 -0
- tan/planner/manifest.py +116 -0
- tan/planner/memory.py +161 -0
- tan/planner/memregion.py +56 -0
- tan/planner/models.py +533 -0
- tan/planner/orchestrator.py +874 -0
- tan/planner/ownership.py +203 -0
- tan/planner/partition.py +1160 -0
- tan/planner/paths.py +32 -0
- tan/planner/plain_slice.py +139 -0
- tan/planner/project_emit/__init__.py +60 -0
- tan/planner/project_emit/bom_netlist.py +375 -0
- tan/planner/project_emit/dts.py +580 -0
- tan/planner/project_emit/hw_info.py +221 -0
- tan/planner/project_emit/native_sim.py +136 -0
- tan/planner/project_emit/west_libs.py +213 -0
- tan/planner/project_loader.py +264 -0
- tan/planner/sdk_capability.py +203 -0
- tan/planner/sdk_compat.py +395 -0
- tan/planner/secure.py +350 -0
- tan/planner/slugs.py +394 -0
- tan/planner/som_metadata.py +325 -0
- tan/planner/strict_loaders.py +131 -0
- tan/planner/template.py +1037 -0
- tan/planner/template_pins.py +535 -0
- tan/planner/template_rewrite.py +714 -0
- tan/planner/topology.py +208 -0
- tan/planner/validate.py +365 -0
- tan/planner/whole_device_alias.py +67 -0
- tan/planner/zephyr_board.py +3510 -0
- tan/planner_cli.py +97 -0
- tan/planner_emit.py +617 -0
- tan/planner_root.py +119 -0
- tan/soc_ref.py +58 -0
- tan/templates/__init__.py +34 -0
- tan/templates/vendored/MANIFEST.md +1862 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/CMakeLists.txt +8 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/README.md +112 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/board.yaml +38 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/boards/native_sim_native_64.conf +11 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/boards/native_sim_native_64.overlay +29 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/prj.conf +5 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/src/main.c +266 -0
- tan/templates/vendored/diagnostics/E1M-AEN801/testcase.yaml +53 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/CMakeLists.txt +8 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/README.md +112 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/board.yaml +38 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/boards/native_sim_native_64.conf +11 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/boards/native_sim_native_64.overlay +29 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/prj.conf +5 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/src/main.c +266 -0
- tan/templates/vendored/diagnostics/E1M-V2N101/testcase.yaml +53 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/CMakeLists.txt +10 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/README.md +75 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/board.yaml +38 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/prj.conf +8 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/src/cold_chain.c +371 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/src/cold_chain.h +178 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/src/main.c +373 -0
- tan/templates/vendored/edge-ai/E1M-AEN801/testcase.yaml +62 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/CMakeLists.txt +10 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/README.md +75 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/board.yaml +37 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/prj.conf +8 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/src/cold_chain.c +371 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/src/cold_chain.h +178 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/src/main.c +373 -0
- tan/templates/vendored/edge-ai/E1M-V2N101/testcase.yaml +62 -0
- tan/templates/vendored/iot/E1M-AEN801/CMakeLists.txt +14 -0
- tan/templates/vendored/iot/E1M-AEN801/README.md +103 -0
- tan/templates/vendored/iot/E1M-AEN801/board.yaml +69 -0
- tan/templates/vendored/iot/E1M-AEN801/prj.conf +15 -0
- tan/templates/vendored/iot/E1M-AEN801/src/cc3501e_bridge.c +196 -0
- tan/templates/vendored/iot/E1M-AEN801/src/cc3501e_bridge.h +173 -0
- tan/templates/vendored/iot/E1M-AEN801/src/main.c +262 -0
- tan/templates/vendored/iot/E1M-AEN801/testcase.yaml +68 -0
- tan/templates/vendored/minimal/E1M-AEN801/CMakeLists.txt +8 -0
- tan/templates/vendored/minimal/E1M-AEN801/README.md +108 -0
- tan/templates/vendored/minimal/E1M-AEN801/board.yaml +32 -0
- tan/templates/vendored/minimal/E1M-AEN801/prj.conf +8 -0
- tan/templates/vendored/minimal/E1M-AEN801/src/main.c +111 -0
- tan/templates/vendored/minimal/E1M-AEN801/testcase.yaml +49 -0
- tan/templates/vendored/minimal/E1M-V2N101/CMakeLists.txt +8 -0
- tan/templates/vendored/minimal/E1M-V2N101/README.md +108 -0
- tan/templates/vendored/minimal/E1M-V2N101/board.yaml +32 -0
- tan/templates/vendored/minimal/E1M-V2N101/prj.conf +8 -0
- tan/templates/vendored/minimal/E1M-V2N101/src/main.c +111 -0
- tan/templates/vendored/minimal/E1M-V2N101/testcase.yaml +49 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/CMakeLists.txt +8 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/README.md +120 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/board.yaml +57 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/boards/native_sim_native_64.overlay +40 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/peer/CMakeLists.txt +13 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/peer/main.c +171 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/peer/prj.conf +17 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/peer/testcase.yaml +23 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/prj.conf +22 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/src/main.c +185 -0
- tan/templates/vendored/multicore-mailbox/E1M-AEN801/testcase.yaml +26 -0
- tan/templates/vendored/sensor/E1M-AEN801/CMakeLists.txt +8 -0
- tan/templates/vendored/sensor/E1M-AEN801/README.md +112 -0
- tan/templates/vendored/sensor/E1M-AEN801/board.yaml +57 -0
- tan/templates/vendored/sensor/E1M-AEN801/boards/native_sim_native_64.conf +10 -0
- tan/templates/vendored/sensor/E1M-AEN801/boards/native_sim_native_64.overlay +28 -0
- tan/templates/vendored/sensor/E1M-AEN801/prj.conf +5 -0
- tan/templates/vendored/sensor/E1M-AEN801/src/main.c +186 -0
- tan/templates/vendored/sensor/E1M-AEN801/testcase.yaml +52 -0
- tan/templates/vendored/sensor/E1M-V2N101/CMakeLists.txt +8 -0
- tan/templates/vendored/sensor/E1M-V2N101/README.md +112 -0
- tan/templates/vendored/sensor/E1M-V2N101/board.yaml +57 -0
- tan/templates/vendored/sensor/E1M-V2N101/boards/native_sim_native_64.conf +10 -0
- tan/templates/vendored/sensor/E1M-V2N101/boards/native_sim_native_64.overlay +28 -0
- tan/templates/vendored/sensor/E1M-V2N101/prj.conf +5 -0
- tan/templates/vendored/sensor/E1M-V2N101/src/main.c +186 -0
- tan/templates/vendored/sensor/E1M-V2N101/testcase.yaml +52 -0
- tan/version.py +102 -0
- tan_cli-0.7.0.dist-info/METADATA +125 -0
- tan_cli-0.7.0.dist-info/RECORD +330 -0
- tan_cli-0.7.0.dist-info/WHEEL +5 -0
- tan_cli-0.7.0.dist-info/entry_points.txt +2 -0
- tan_cli-0.7.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
"""SoM/SoC-identity retargeting for `tan.core.scaffold` -- the phrases
|
|
3
|
+
currently live only in README.md / src/main.c, but every `retarget_*`
|
|
4
|
+
function here runs UNCONDITIONALLY over `scaffold._vendored_files`'s
|
|
5
|
+
per-file loop, the same as `retarget_selftest_som_identity`'s own
|
|
6
|
+
no-SKU-list, general-anchored design: they are never gated to those two
|
|
7
|
+
paths in code, only narrowed by which phrases they anchor on
|
|
8
|
+
(`_selftest_som_identity_edits`, `# Example for <SKU>:`, the literal
|
|
9
|
+
`_AEN_TREE_SOC_REF` value) happening to appear nowhere else in the vendored
|
|
10
|
+
trees today. A future vendored file that happens to contain one of those
|
|
11
|
+
same anchor phrases for an unrelated reason would be rewritten too, not
|
|
12
|
+
skipped.
|
|
13
|
+
|
|
14
|
+
Split out of `scaffold.py` itself (tan-cli#932 review round) purely to keep
|
|
15
|
+
that module under its recorded size budget -- every function here is called
|
|
16
|
+
from exactly one place, `scaffold._vendored_files`'s per-file loop, and carry
|
|
17
|
+
no dependency on anything else in this package. Not a new layer of
|
|
18
|
+
abstraction: it is the same `retarget_*` functions that would otherwise
|
|
19
|
+
live beside `retarget_board_yaml_som`/`retarget_board_yaml_cores`, moved
|
|
20
|
+
verbatim because the module they were written next to was already at its
|
|
21
|
+
line cap. `retarget_selftest_soc_identity` (tan-cli#952) is the one function
|
|
22
|
+
added here since the split rather than moved -- the SoC-identity half of
|
|
23
|
+
`retarget_selftest_som_identity`'s own gap, deliberately left for a
|
|
24
|
+
follow-up by tan-cli#946's docstring.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
from __future__ import annotations
|
|
28
|
+
|
|
29
|
+
#: Anchored substring pairs `(source-text, target-text)` factory, keyed on
|
|
30
|
+
#: `source_sku` -- the three shapes `diagnostics/<family>/README.md` and
|
|
31
|
+
#: `src/main.c` use to name the tree's own SKU in their "what a real board
|
|
32
|
+
#: prints" documentation (tan-cli#932 review round). Anchored to the whole
|
|
33
|
+
#: phrase around the token, not the bare SKU string: a bare
|
|
34
|
+
#: `content.replace(source_sku, sku)` would also rewrite `# Example for
|
|
35
|
+
#: <SKU>:` immediately above a `west build -b alp_e1m_<sku>_...` line that
|
|
36
|
+
#: does NOT get renamed (that Zephyr board target is a real, separately
|
|
37
|
+
#: vendored artefact -- e.g. no `alp_e1m_v2n102_m33_sm` board exists at all --
|
|
38
|
+
#: so relabelling the comment above it while leaving the command itself
|
|
39
|
+
#: pointed at the tree's OWN board would tell a V2N102 customer the
|
|
40
|
+
#: `v2n101` target below is theirs). Anchoring to these three phrases means
|
|
41
|
+
#: only the SoM-identity documentation moves; the build instructions, which
|
|
42
|
+
#: this function never touches, keep naming the tree's real vendored board.
|
|
43
|
+
#: The `# Example for <SKU>:` comment ITSELF is a separate, narrower edit --
|
|
44
|
+
#: see `retarget_example_build_target_comment` below.
|
|
45
|
+
def _selftest_som_identity_edits(source_sku: str, sku: str) -> tuple[tuple[str, str], ...]:
|
|
46
|
+
return (
|
|
47
|
+
(f"SoM identity: {source_sku} rev", f"SoM identity: {sku} rev"),
|
|
48
|
+
(f"Real hardware ({source_sku},", f"Real hardware ({sku},"),
|
|
49
|
+
(f"(real hardware, {source_sku})", f"(real hardware, {sku})"),
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def retarget_selftest_som_identity(content: str, sku: str, source_sku: str) -> str:
|
|
54
|
+
"""Rewrite `diagnostics`' "what a real board prints" documentation onto
|
|
55
|
+
`sku` -- the SoM-identity half of tan-cli#932 that the issue's own fix
|
|
56
|
+
left uncovered.
|
|
57
|
+
|
|
58
|
+
#932 hand-substituted `diagnostics/E1M-V2N101`'s vendored bytes so the
|
|
59
|
+
tree is correct FOR THAT SKU (its `SoM identity:`/`Real hardware (...)`
|
|
60
|
+
lines name `E1M-V2N101`, its `SoC identity:` lines name
|
|
61
|
+
`renesas:rzv2n:n44`). But E1M-V2N101/E1M-V2N102/E1M-V2M101/E1M-V2M102 are
|
|
62
|
+
"the same PCB, variant-populated" (`scaffold._SOM_FAMILIES`) and all four
|
|
63
|
+
render this ONE tree -- so `--som E1M-V2M101` scaffolded a project whose
|
|
64
|
+
`board.yaml` correctly said `sku: E1M-V2M101` (`retarget_board_yaml_som`)
|
|
65
|
+
but whose README and `src/main.c` still told the customer to expect
|
|
66
|
+
`SoM identity: E1M-V2N101 ...` from their own selftest binary. Measured:
|
|
67
|
+
`tan init --template board-diagnostics --som E1M-V2M101` before this fix.
|
|
68
|
+
|
|
69
|
+
A per-SKU substitution table -- a fifth (sixth, ...) hand-written
|
|
70
|
+
`un_edit_*` entry per new SKU -- is exactly the shape that produced the
|
|
71
|
+
original bug: #932 fixed the SKU line for `E1M-V2N101` alone, because
|
|
72
|
+
nothing generalised the fix to the family. This is the general form
|
|
73
|
+
instead: it fires for ANY `sku != source_sku` sharing a tree (every
|
|
74
|
+
E1M-AEN* SKU sharing `E1M-AEN801`'s tree gets the identical treatment,
|
|
75
|
+
not just the two families named in #932's own issue), reads no SKU list
|
|
76
|
+
of its own, and costs nothing to extend -- a fifth SKU added to
|
|
77
|
+
`scaffold._SOM_FAMILIES` needs no matching edit here.
|
|
78
|
+
|
|
79
|
+
Deliberately narrow in WHAT it rewrites (see `_selftest_som_identity_edits`):
|
|
80
|
+
only the SoM-identity phrase, never the `SoC identity:` line -- that is
|
|
81
|
+
`retarget_selftest_soc_identity`'s job, a SEPARATE function (added
|
|
82
|
+
tan-cli#952) rather than a fourth entry in
|
|
83
|
+
`_selftest_som_identity_edits`, because it NEUTRALIZES rather than
|
|
84
|
+
substitutes (see its own docstring for why) and needs its own anchor
|
|
85
|
+
(`_AEN_TREE_SOC_REF`) and its own no-op shape (V2N/V2M share one SoC, so
|
|
86
|
+
it never fires for that family by construction; AEN's SKUs are
|
|
87
|
+
different Ensemble variants, so it fires for every non-source AEN SKU).
|
|
88
|
+
This function never touches the placeholder serial either
|
|
89
|
+
(`<factory-serial>`/`AEN0000123` name no real SKU, so there is nothing
|
|
90
|
+
to retarget). NO-OP when `sku == source_sku`, matching
|
|
91
|
+
`retarget_board_yaml_cores`'s convention -- byte-exact passthrough for
|
|
92
|
+
the tree's own two representative SKUs, so neither vendored-capture
|
|
93
|
+
fixture nor the byte-parity gate's `DELIBERATE_EDITS` needs to change.
|
|
94
|
+
"""
|
|
95
|
+
if sku == source_sku:
|
|
96
|
+
return content
|
|
97
|
+
for old, new in _selftest_som_identity_edits(source_sku, sku):
|
|
98
|
+
content = content.replace(old, new)
|
|
99
|
+
return content
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
#: What a non-source SKU's `SoC identity:` line reads after neutralizing.
|
|
103
|
+
#: Mirrors `retarget_example_build_target_comment`'s wording on purpose --
|
|
104
|
+
#: same disclosure shape ("this template's own vendored X -- substitute
|
|
105
|
+
#: your SoM's Y"), same reason: this module carries NO per-SKU SoC-ref
|
|
106
|
+
#: table (see `retarget_selftest_soc_identity`'s docstring for why one was
|
|
107
|
+
#: rejected), so it cannot assert a correct replacement value, only flag
|
|
108
|
+
#: the tree's own value as not-yours.
|
|
109
|
+
_SOC_IDENTITY_PLACEHOLDER = (
|
|
110
|
+
"this template's own vendored SoC -- substitute your SoM's Ensemble variant"
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
#: The AEN family's own `SoC identity:` value, literal in the vendored
|
|
114
|
+
#: `E1M-AEN801` tree today. This is the ONE anchor `retarget_selftest_soc_
|
|
115
|
+
#: identity` needs -- not a SKU-keyed fact table, ADR-0017/I-26 territory
|
|
116
|
+
#: `test_no_new_hardware_facts.py` enforces (measured: a `dict[sku, soc_ref]`
|
|
117
|
+
#: version of this fix reds that gate, `tan/core/scaffold_selftest_identity.py
|
|
118
|
+
#: (stripped line N): E1M-AEN301` etc., one finding per SKU literal). Used
|
|
119
|
+
#: purely to DETECT and ERASE the tree's own value for every OTHER SKU, never
|
|
120
|
+
#: to assert what a different SKU's real value is -- the same "anchor a
|
|
121
|
+
#: phrase, don't assert a fact" shape `_selftest_som_identity_edits` and
|
|
122
|
+
#: `retarget_example_build_target_comment` already use. Naturally a no-op
|
|
123
|
+
#: against the V2N/V2M tree, which never contains this literal at all, so no
|
|
124
|
+
#: `source_sku` branch is needed to keep this scoped to the AEN family.
|
|
125
|
+
_AEN_TREE_SOC_REF = "alif:ensemble:e8"
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def retarget_selftest_soc_identity(content: str, sku: str, source_sku: str) -> str:
|
|
129
|
+
"""Neutralize `diagnostics`' "what a real board prints" `SoC identity:`
|
|
130
|
+
line(s) for every SKU that is NOT the tree's own -- the half of
|
|
131
|
+
tan-cli#932's family widening that tan-cli#946 deliberately left
|
|
132
|
+
uncovered (tracked as tan-cli#952).
|
|
133
|
+
|
|
134
|
+
`retarget_selftest_som_identity` above fixes the `SoM identity:`/`Real
|
|
135
|
+
hardware (...)` lines for every SKU sharing a vendored tree, but never
|
|
136
|
+
touches `SoC identity:` -- correct for the V2N/V2M family (one shared
|
|
137
|
+
SoC) but wrong for AEN: `E1M-AEN301`..`E1M-AEN701` render
|
|
138
|
+
`E1M-AEN801`'s tree and, before this function, kept ITS `SoC identity:
|
|
139
|
+
alif:ensemble:e8` line verbatim even though `E1M-AEN301`'s own silicon is
|
|
140
|
+
a DIFFERENT Ensemble variant. Measured: `tan init --template
|
|
141
|
+
board-diagnostics --som E1M-AEN301` before this fix printed a `SoM
|
|
142
|
+
identity: E1M-AEN301` line (tan-cli#946 already corrected that half)
|
|
143
|
+
directly beside a `SoC identity: alif:ensemble:e8` line -- a
|
|
144
|
+
HALF-corrected identity block, which tan-cli#952 argues reads as MORE
|
|
145
|
+
misleading than the fully uncorrected block on `dev` before #946: a
|
|
146
|
+
reader can no longer tell the SoC line is foreign just by noticing the
|
|
147
|
+
whole block belongs to another SoM.
|
|
148
|
+
|
|
149
|
+
Neutralizes rather than retargets -- tan-cli#952's own issue weighed
|
|
150
|
+
both shapes and flagged this one "probably right". A retarget (assert
|
|
151
|
+
`sku`'s own SoC ref) needs a SKU -> SoC-ref fact table this SDK-free
|
|
152
|
+
package is not allowed to carry: ADR-0017/invariant I-26, enforced by
|
|
153
|
+
`test_no_new_hardware_facts.py`, exists precisely so `tan` never becomes
|
|
154
|
+
a second source of truth for a fact `metadata/e1m_modules/<SKU>.yaml`'s
|
|
155
|
+
`silicon:` key already owns (measured: a `dict[sku, soc_ref]` version of
|
|
156
|
+
this fix reds that gate, one finding per SKU literal). This function
|
|
157
|
+
asserts nothing about what `sku`'s real SoC is -- it only erases the
|
|
158
|
+
OTHER SKU's value, the same disclose-don't-invent choice
|
|
159
|
+
`retarget_example_build_target_comment` already made for the build-target
|
|
160
|
+
comment (and for the identical reason: several sibling SKUs reaching that
|
|
161
|
+
comment have no board of their own at all, so a guessed replacement would
|
|
162
|
+
sometimes be provably wrong, not merely unverified).
|
|
163
|
+
|
|
164
|
+
NO-OP when `sku == source_sku` (byte-exact passthrough for the tree's
|
|
165
|
+
own representative SKU, matching every other `retarget_*` here) and,
|
|
166
|
+
by construction, for the V2N/V2M tree (see `_AEN_TREE_SOC_REF`'s own
|
|
167
|
+
comment -- its `SoC identity:` line is unconditionally correct for
|
|
168
|
+
every SKU that shares that tree, so nothing here should ever touch it).
|
|
169
|
+
"""
|
|
170
|
+
if sku == source_sku:
|
|
171
|
+
return content
|
|
172
|
+
return content.replace(
|
|
173
|
+
f"SoC identity: {_AEN_TREE_SOC_REF}",
|
|
174
|
+
f"SoC identity: <{_SOC_IDENTITY_PLACEHOLDER}>",
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def retarget_example_build_target_comment(content: str, sku: str, source_sku: str) -> str:
|
|
179
|
+
"""Neutralize `# Example for <source_sku>:` -- the comment `minimal`/
|
|
180
|
+
`sensor`/`diagnostics` READMEs put directly above their one real-silicon
|
|
181
|
+
`west build -b alp_e1m_<source_sku>_..._sm/...` line -- for every OTHER
|
|
182
|
+
SKU sharing the tree.
|
|
183
|
+
|
|
184
|
+
Discovered widening `test_template_integrity.py`'s `CASES` to the full
|
|
185
|
+
SKU catalogue (tan-cli#932 review round): with `retarget_selftest_som_
|
|
186
|
+
identity` deliberately leaving this comment alone (see its own docstring
|
|
187
|
+
-- the Zephyr board target below it is a real, separate artefact this
|
|
188
|
+
SDK-free module cannot safely rename; several sibling SKUs, e.g.
|
|
189
|
+
`E1M-V2N102`, have no board of their own at all, and one that DOES --
|
|
190
|
+
`E1M-V2M101` -- is not something this module can discover), the comment
|
|
191
|
+
still read "Example for E1M-V2N101" while scaffolding `E1M-V2M101`. Not
|
|
192
|
+
the SoM-identity gap tan-cli#932 is about (nothing here claims a real
|
|
193
|
+
board printed anything), but the SAME shape of claim: a specific SKU
|
|
194
|
+
named beside a fact that is not that SKU's.
|
|
195
|
+
|
|
196
|
+
Relabelling the comment onto `sku` would be worse, not better: it would
|
|
197
|
+
claim the UNCHANGED command below it (still `source_sku`'s real board)
|
|
198
|
+
is `sku`'s own. So this drops the SKU-specific claim rather than moving
|
|
199
|
+
it -- but going fully generic (bare `# Example:`) would ALSO lose real
|
|
200
|
+
information the customer needs: without any qualifier, a `sku` whose own
|
|
201
|
+
`alp_e1m_<sku>_..._sm` target genuinely exists (e.g. `E1M-V2M101`, unlike
|
|
202
|
+
several other siblings sharing this tree such as `E1M-V2N102`) has no
|
|
203
|
+
way to tell, from the comment alone, that the line below it is a
|
|
204
|
+
DIFFERENT SoM's board target rather than a generic placeholder.
|
|
205
|
+
|
|
206
|
+
"Substitute your SoM's" (tan-cli#946 round-1 review's own suggested
|
|
207
|
+
wording) is wrong for HALF the SKUs that reach this line: measured at
|
|
208
|
+
`zephyr/boards/alp/`, only `e1m_v2n101_m33_sm` and `e1m_v2m101_m33_sm`
|
|
209
|
+
exist -- `E1M-V2N102` and `E1M-V2M102` have no board tree of their own AT
|
|
210
|
+
ALL (the fact this module's own docstring above cites), so telling those
|
|
211
|
+
customers to "substitute your SoM's" points at a target that does not
|
|
212
|
+
exist. Rewritten to qualify that instead: `# Example (this template's
|
|
213
|
+
own vendored board target -- substitute your SoM's, where one exists):`,
|
|
214
|
+
true for every SKU that reaches this line, with the one real vendored
|
|
215
|
+
board target it introduces left exactly as documented. NO-OP when
|
|
216
|
+
`sku == source_sku` (byte-exact passthrough for the tree's own two
|
|
217
|
+
representative SKUs, same convention as every retarget_* above).
|
|
218
|
+
"""
|
|
219
|
+
if sku == source_sku:
|
|
220
|
+
return content
|
|
221
|
+
return content.replace(
|
|
222
|
+
f"# Example for {source_sku}:",
|
|
223
|
+
"# Example (this template's own vendored board target -- substitute "
|
|
224
|
+
"your SoM's, where one exists):",
|
|
225
|
+
)
|