# Copyright 2022 The Fuchsia Authors.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/assembly/product_assembly_configuration.gni")
import("//build/assembly/sshd_config.gni")
import("//build/info/info.gni")

assert(
    is_fuchsia,
    "Product definitions and assemblies should only be defined in the fuchsia toolchain")

_base_driver_packages = [
  {
    package_target = "//src/graphics/drivers/msd-intel-gen:msd-intel-gen-test"
    driver_components = [ "meta/libmsd_intel_test.cm" ]
  },
  {
    package_target = "//src/graphics/drivers/msd-vsi-vip:msd-vsi-vip-test"
    driver_components = [ "meta/libmsd_vsi_test.cm" ]
  },
]

# This is the base platform configuration used by core
_platform_configuration_base = {
  build_type = "eng"

  bluetooth = {
    type = "standard"
    snoop = "lazy"
  }

  input_groups = {
    group1 = true
  }

  fonts = {
    # See base_packages below.
    font_collection = "small-open-fonts-collection"
  }

  media = {
    audio = {
      full_stack = {
      }
    }
  }

  setui = {
  }

  ui = {
    supported_input_devices = [
      "button",
      "touchscreen",
    ]
  }

  # If the 'authorized_ssh_keys_path' GN arg has been set, then pass that path
  # as part of the platform configuration.
  if (authorized_ssh_keys_path != false) {
    development_support = {
      authorized_ssh_keys_path =
          rebase_path(authorized_ssh_keys_path, root_build_dir)
    }
  }
}

_storage_f2fs = {
  storage = {
    filesystems = {
      volume = {
        fvm = {
          data = {
            data_filesystem_format = "f2fs"
          }
          blob = {
          }
        }
      }
    }
  }
}

_storage_minfs = {
  storage = {
    filesystems = {
      volume = {
        fvm = {
          data = {
            data_filesystem_format = "minfs"
          }
          blob = {
          }
        }
      }
    }
  }
}

_base_packages = [
  {
    # Provides font assets for `platform.fonts.font_collection` above.
    package_target = "//src/fonts/asset_providers:small-open-fonts-collection.asset-provider.package"
  },
]

product_assembly_configuration("core") {
  testonly = true
  platform = {
    forward_variables_from(_platform_configuration_base, "*")
  }
  product = {
    build_info = default_product_build_info
  }

  base_driver_packages = _base_driver_packages
  base_packages = _base_packages
  deps = [ "//build/info:build_info_files" ]
}

product_assembly_configuration("core_with_f2fs") {
  testonly = true
  platform = {
    forward_variables_from(_platform_configuration_base, "*")
    forward_variables_from(_storage_f2fs, "*")
  }
  product = {
    build_info = default_product_build_info
  }

  base_driver_packages = _base_driver_packages
  base_packages = _base_packages
  deps = [ "//build/info:build_info_files" ]
}

product_assembly_configuration("core_with_minfs") {
  testonly = true
  platform = {
    forward_variables_from(_platform_configuration_base, "*")
    forward_variables_from(_storage_minfs, "*")
  }
  product = {
    build_info = default_product_build_info
  }

  base_driver_packages = _base_driver_packages
  base_packages = _base_packages
  deps = [ "//build/info:build_info_files" ]
}

product_assembly_configuration("core_with_netstack3") {
  testonly = true
  platform = {
    forward_variables_from(_platform_configuration_base, "*")

    connectivity = {
      network = {
        netstack_version = "netstack3"
      }
    }
  }
  product = {
    build_info = default_product_build_info
  }

  base_driver_packages = _base_driver_packages
  base_packages = _base_packages
  deps = [ "//build/info:build_info_files" ]
}

product_assembly_configuration("core_with_dfv2_fuzzing") {
  testonly = true
  platform = {
    forward_variables_from(_platform_configuration_base, "*")

    driver_framework = {
      test_fuzzing_config = {
        enable_load_fuzzer = true
        max_load_delay_ms = 300
        enable_test_shutdown_delays = true
      }
    }
  }
  product = {
    build_info = default_product_build_info
  }

  base_driver_packages = _base_driver_packages
  base_packages = _base_packages
  deps = [ "//build/info:build_info_files" ]
}
