blob: 46da42eb4380dbd7f6af0528d875dccda11bc768 [file] [edit]
# Copyright 2021 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Python Types for Assembly Configuration Files
This module contains Python classes for working with files that have the same
schema as `//src/developer/ffx/plugins/assembly`.
"""
from dataclasses import dataclass, field
from typing import TypeVar
import serialization
__all__ = ["ImageAssemblyConfig", "KernelInfo"]
from .common import FileEntry, FilePath
ExtendsImageAssemblyConfig = TypeVar(
"ExtendsImageAssemblyConfig", bound="ImageAssemblyConfig"
)
@dataclass
class ReleaseInfo:
name: str
repository: str
version: str
@dataclass
class ProductReleaseInfo:
info: ReleaseInfo
pibs: list[ReleaseInfo]
@dataclass
class BoardReleaseInfo:
info: ReleaseInfo
bib_sets: list[ReleaseInfo]
@dataclass
class SystemReleaseInfo:
platform: ReleaseInfo | None
product: ProductReleaseInfo | None
board: BoardReleaseInfo | None
@dataclass
class KernelInfo:
"""Information about the kernel"""
path: FilePath | None = None
args: set[str] = field(default_factory=set)
@dataclass
class BoardDriverArguments:
vendor_id: int
product_id: int
name: str
revision: int
@dataclass
class ImageAssemblyConfig:
"""The input configuration for the Image Assembly Operation
This describes all the packages, bootfs files, kernel args, kernel, etc.
that are to be combined into a complete set of assembled product images.
"""
base: set[FilePath] = field(default_factory=set)
cache: set[FilePath] = field(default_factory=set)
on_demand: set[FilePath] = field(default_factory=set)
anchored_automatic: set[FilePath] = field(default_factory=set)
anchored_on_demand: set[FilePath] = field(default_factory=set)
system: set[FilePath] = field(default_factory=set)
kernel: KernelInfo = field(default_factory=KernelInfo)
qemu_kernel: FilePath | None = None
boot_args: set[str] = field(default_factory=set)
bootfs_files: set[FileEntry] = field(default_factory=set)
bootfs_packages: set[FilePath] = field(default_factory=set)
board_driver_arguments: BoardDriverArguments | None = None
zbi_extra_items: FilePath | None = None
devicetree: FilePath | None = None
devicetree_overlay: FilePath | None = None
netboot_mode: bool = False
board_name: str | None = None
image_mode: str | None = None
system_release_info: SystemReleaseInfo | None = None
partitions_config: FilePath | None = None
build_type: str | None = None
# TODO: Flesh out the images_config with the actual types, if it's needed.
images_config: dict[str, list[str]] = field(default_factory=dict)
def __repr__(self) -> str:
"""Serialize to a JSON string"""
return serialization.json_dumps(self, indent=2)