| # Copyright 2025 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. |
| |
| import("//build/components.gni") |
| import("//src/starnix/tools/gen_docker_container/gen_docker_container.gni") |
| import("//src/starnix/tools/tar_to_pkg/tar_to_pkg.gni") |
| |
| # Create a fuchsia package from a Docker archive. |
| # |
| # The component URL of the Starnix container created from the Docker archive is: |
| # |
| # fuchsia-pkg://fuchsia.com/${package_name}#meta/${package_name}_container.cm |
| # |
| # The default command component URL is: |
| # |
| # fuchsia-pkg://fuchsia.com/${package_name}#meta/${package_name}_default_command.cm |
| # |
| # Parameters: |
| # |
| # input_path (required) |
| # The path to the docker archive. |
| # |
| # package_name (required) |
| # The name of the package to create. |
| # |
| # features (optional) |
| # The features to add to the container. |
| # |
| # deps |
| # testonly |
| template("starnix_docker_container") { |
| assert(defined(invoker.input_path), |
| "input_path must be defined for starnix_docker_container") |
| assert(defined(invoker.package_name), |
| "package_name must be defined for starnix_docker_container") |
| |
| _target_name = target_name |
| container_manifest_path = "$target_gen_dir/${target_name}_container.cml" |
| default_command_manifest_path = |
| "$target_gen_dir/${target_name}_default_command.cml" |
| |
| tar_to_pkg("${_target_name}_system_image") { |
| input = invoker.input_path |
| prefix = "data/system" |
| format = "docker-archive" |
| } |
| |
| group("${_target_name}_container_resources") { |
| deps = [ |
| ":${_target_name}_system_image", |
| "//src/starnix/containers:default_init", |
| ] |
| } |
| |
| gen_docker_container("${_target_name}_container_manifests") { |
| input_path = invoker.input_path |
| container_name = invoker.package_name |
| container_manifest = container_manifest_path |
| default_command_manifest = default_command_manifest_path |
| forward_variables_from(invoker, [ "features" ]) |
| } |
| |
| fuchsia_component("${_target_name}_container") { |
| manifest = container_manifest_path |
| component_name = "${invoker.package_name}_container" |
| |
| deps = [ ":${_target_name}_container_manifests" ] |
| } |
| |
| fuchsia_component("${_target_name}_default_command") { |
| manifest = default_command_manifest_path |
| component_name = "${invoker.package_name}_default_command" |
| deps = [ ":${_target_name}_container_manifests" ] |
| } |
| |
| fuchsia_package(_target_name) { |
| package_name = invoker.package_name |
| forward_variables_from(invoker, [ "testonly" ]) |
| deps = [ |
| ":${_target_name}_container", |
| ":${_target_name}_container_resources", |
| ":${_target_name}_default_command", |
| ] |
| |
| if (defined(invoker.deps)) { |
| deps += invoker.deps |
| } |
| } |
| } |