• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""Functions related to flat config payloads
2
3See proto definitions for descriptions of arguments.
4"""
5
6load(
7    "@proto//chromiumos/config/payload/flat_config.proto",
8    flat_config_pb = "chromiumos.config.payload",
9)
10
11def _read(file_path):
12    return proto.from_jsonpb(
13        flat_config_pb.FlatConfigList,
14        io.read_file(file_path),
15    )
16
17def _get_designs_by_overlay(design_configs):
18    """Returns dict of {overlay1: [design1, design2], overlay2...}"""
19    overlay_to_designs = {}
20    for design_config in design_configs.values:
21        design_name = design_config.hw_design.name
22        build_target = design_config.sw_config.system_build_target
23        program_id = design_config.hw_design.program_id.value
24        program_name = design_config.program.name.lower() or program_id.lower()
25        overlay = build_target.portage_build_target.overlay_name or program_name
26        designs = overlay_to_designs.setdefault(overlay, [])
27        designs.append(design_name)
28
29        # Add an explicit entry for all earlier projects with explicit overlays
30        overlay_to_designs.setdefault(design_name, []).append(design_name)
31
32    overlay_to_unique_designs = {}
33    for overlay in overlay_to_designs:
34        overlay_to_unique_designs[overlay] = set(overlay_to_designs[overlay])
35    return overlay_to_unique_designs
36
37def _get_configs_by_design(design_configs):
38    """Returns all config that is common to a given design
39
40     Args:
41       design_configs: A FlatConfigList proto. Required.
42
43    Returns: dict of {design1:
44       (program, hw_design, odm, hw_components), design2...}
45    """
46    designs_to_configs = {}
47    for design_config in design_configs.values:
48        design_name = design_config.hw_design.name
49
50        # Components are common across all designs, so just pull the first
51        if design_name not in designs_to_configs:
52            designs_to_configs[design_name] = struct(
53                program = design_config.program,
54                odm = design_config.odm,
55                hw_design = design_config.hw_design,
56                hw_components = design_config.hw_components,
57            )
58    return designs_to_configs
59
60def _create(
61        program,
62        hw_design,
63        odm,
64        hw_design_config,
65        hw_components = None,
66        device_brand = None,
67        oem = None,
68        sw_config = None,
69        brand_sw_config = None):
70    return flat_config_pb.FlatConfig(
71        program = program,
72        hw_design = hw_design,
73        odm = odm,
74        hw_design_config = hw_design_config,
75        hw_components = hw_components,
76        device_brand = device_brand,
77        oem = oem,
78        sw_config = sw_config,
79        brand_sw_config = brand_sw_config,
80    )
81
82def _create_list(flat_configs):
83    return flat_config_pb.FlatConfigList(values = flat_configs)
84
85flat_config = struct(
86    read = _read,
87    create = _create,
88    create_list = _create_list,
89    get_designs_by_overlay = _get_designs_by_overlay,
90    get_configs_by_design = _get_configs_by_design,
91)
92