# Copyright 2022 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.

load("@fuchsia_build_info//:args.bzl", "authorized_ssh_keys_label")
load("//build/info:info.bzl", "DEFAULT_PRODUCT_BUILD_INFO")
load(
    "@fuchsia_sdk//fuchsia:assembly.bzl",
    "ARCH",
    "BUILD_TYPES",
    "INPUT_DEVICE_TYPE",
    "fuchsia_elf_sizes",
    "fuchsia_product",
    "fuchsia_product_bundle",
    "fuchsia_product_configuration",
    "fuchsia_virtual_device",
)

package(default_visibility = ["//visibility:public"])

_PRODUCT_CONFIG_BASE_JSON = {
    "platform": {
        "build_type": BUILD_TYPES.ENG,
        "development_support": {
            "authorized_ssh_keys_path": "LABEL(%s)" % authorized_ssh_keys_label if authorized_ssh_keys_label else None,
        },
        "fonts": {
            "enabled": False,
        },
        "ui": {
            "supported_input_devices": [
                INPUT_DEVICE_TYPE.BUTTON,
                INPUT_DEVICE_TYPE.TOUCHSCREEN,
            ],
        },
    },
    "product": {
        "build_info": DEFAULT_PRODUCT_BUILD_INFO,
    },
}

fuchsia_product_configuration(
    name = "product_config",
    product_config_json = _PRODUCT_CONFIG_BASE_JSON,
)

fuchsia_product(
    name = "image.x64",
    board_config = "//boards:x64",
    legacy_bundle = "//build/bazel/assembly/assembly_input_bundles:legacy_fuchsia",
    platform_artifacts = "//build/bazel/assembly/assembly_input_bundles:platform_eng",
    product_config = ":product_config",
)

fuchsia_virtual_device(
    name = "minimal_emu",
    arch = ARCH.X64,
    device_name = "minimal_emu",
    window_height_px = 1200,
    window_width_px = 720,
)

fuchsia_elf_sizes(
    name = "elf_sizes.x64",
    product = ":image.x64",
)

fuchsia_product_bundle(
    name = "product_bundle.x64",
    board_name = "x64",
    main = ":image.x64",
    partitions_config = "//build/bazel/assembly/partitions_configurations:x64",
    product_bundle_name = "fuchsia",
    recovery = "//products/zedboot:x64",
    repository_keys = "//src/sys/pkg/repositories/devhost/keys",
    update_epoch = "1",
    update_version_file = "//build/info:version",
    virtual_devices = [
        ":minimal_emu",
    ],
)

fuchsia_product(
    name = "image.arm64",
    board_config = "//boards:arm64",
    legacy_bundle = "//build/bazel/assembly/assembly_input_bundles:legacy_fuchsia",
    platform_artifacts = "//build/bazel/assembly/assembly_input_bundles:platform_eng",
    product_config = ":product_config",
)

fuchsia_elf_sizes(
    name = "elf_sizes.arm64",
    product = ":image.arm64",
)

fuchsia_product_bundle(
    name = "product_bundle.arm64",
    board_name = "arm64",
    main = ":image.arm64",
    partitions_config = "//build/bazel/assembly/partitions_configurations:arm64",
    product_bundle_name = "fuchsia",
    recovery = "//products/zedboot:arm64",
    repository_keys = "//src/sys/pkg/repositories/devhost/keys",
    update_epoch = "1",
    update_version_file = "//build/info:version",
)

fuchsia_product(
    name = "image.qemu-x64",
    board_config = "//boards:qemu-x64",
    legacy_bundle = "//build/bazel/assembly/assembly_input_bundles:legacy_fuchsia",
    platform_artifacts = "//build/bazel/assembly/assembly_input_bundles:platform_eng",
    product_config = ":product_config",
)

fuchsia_elf_sizes(
    name = "elf_sizes.qemu-x64",
    product = ":image.qemu-x64",
)

fuchsia_product_bundle(
    name = "product_bundle.qemu-x64",
    board_name = "qemu-x64",
    main = ":image.qemu-x64",
    partitions_config = "//build/bazel/assembly/partitions_configurations:x64",
    product_bundle_name = "fuchsia",
    recovery = "//products/zedboot:qemu-x64",
    repository_keys = "//src/sys/pkg/repositories/devhost/keys",
    update_epoch = "1",
    update_version_file = "//build/info:version",
)

fuchsia_product(
    name = "image.vim3",
    board_config = "//boards:vim3",
    legacy_bundle = "//build/bazel/assembly/assembly_input_bundles:legacy_fuchsia",
    platform_artifacts = "//build/bazel/assembly/assembly_input_bundles:platform_eng",
    product_config = ":product_config",
)

fuchsia_elf_sizes(
    name = "elf_sizes.vim3",
    product = ":image.vim3",
)

fuchsia_product_bundle(
    name = "product_bundle.vim3",
    board_name = "vim3",
    main = ":image.vim3",
    partitions_config = "//build/bazel/assembly/partitions_configurations:vim3",
    product_bundle_name = "fuchsia",
    recovery = "//products/zedboot:vim3",
    repository_keys = "//src/sys/pkg/repositories/devhost/keys",
    update_epoch = "1",
)

fuchsia_product(
    name = "image.emac",
    board_config = "//boards/emac",
    legacy_bundle = "//build/bazel/assembly/assembly_input_bundles:legacy_fuchsia",
    platform_artifacts = "//build/bazel/assembly/assembly_input_bundles:platform_eng",
    product_config = ":product_config",
)

fuchsia_elf_sizes(
    name = "elf_sizes.emac",
    product = ":image.emac",
)

fuchsia_product_bundle(
    name = "product_bundle.emac",
    board_name = "emac",
    main = ":image.emac",
    partitions_config = "//build/bazel/assembly/partitions_configurations:vim3",
    product_bundle_name = "fuchsia",
    repository_keys = "//src/sys/pkg/repositories/devhost/keys",
    update_epoch = "1",
    update_version_file = "//build/info:version",
)

fuchsia_product(
    name = "image.riscv64",
    board_config = "//boards:riscv64",
    legacy_bundle = "//build/bazel/assembly/assembly_input_bundles:legacy_fuchsia",
    platform_artifacts = "//build/bazel/assembly/assembly_input_bundles:platform_eng",
    product_config = ":product_config",
)

fuchsia_elf_sizes(
    name = "elf_sizes.riscv64",
    product = ":image.riscv64",
)

fuchsia_product_bundle(
    name = "product_bundle.riscv64",
    board_name = "riscv64",
    main = ":image.riscv64",
    partitions_config = "//build/bazel/assembly/partitions_configurations:riscv64",
    product_bundle_name = "fuchsia",
    recovery = "//products/zedboot:riscv64",
    repository_keys = "//src/sys/pkg/repositories/devhost/keys",
    update_epoch = "1",
    update_version_file = "//build/info:version",
)
