fuchsia_archive.gni 3.8 KB
Newer Older
1 2 3 4
# Copyright 2013 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

5 6
import("//flutter/tools/fuchsia/fuchsia_debug_symbols.gni")
import("//flutter/tools/fuchsia/fuchsia_libs.gni")
7

8 9
# Creates a Fuchsia archive (.far) file using PM from the Fuchsia SDK.
template("fuchsia_archive") {
10
  assert(defined(invoker.binary), "package must define binary")
11
  assert(defined(invoker.meta_dir), "package must define meta_dir")
12

13
  pkg_testonly = defined(invoker.testonly) && invoker.testonly
14 15 16 17 18 19 20 21 22
  pkg_target_name = target_name
  pkg = {
    package_version = "0"  # placeholder
    forward_variables_from(invoker,
                           [
                             "binary",
                             "deps",
                             "meta",
                             "resources",
23
                             "libraries",
24
                             "meta_dir",
25 26 27 28 29 30 31 32 33 34 35 36 37
                           ])
    if (!defined(package_name)) {
      package_name = pkg_target_name
    }
    if (!defined(meta)) {
      meta = []
    }
    if (!defined(deps)) {
      deps = []
    }
    if (!defined(resources)) {
      resources = []
    }
38 39 40
    if (!defined(libraries)) {
      libraries = []
    }
41 42 43 44 45
  }

  far_base_dir = "$root_out_dir/${pkg_target_name}_far"

  copy_sources = [ "$root_out_dir/${invoker.binary}" ]
46
  copy_outputs = [ "$far_base_dir/bin/app" ]
47 48 49 50 51 52

  foreach(res, pkg.resources) {
    copy_sources += [ res.path ]
    copy_outputs += [ "$far_base_dir/data/${res.dest}" ]
  }

53 54 55 56 57
  foreach(lib, pkg.libraries) {
    copy_sources += [ "${lib.path}/${lib.name}" ]
    copy_outputs += [ "$far_base_dir/lib/${lib.name}" ]
  }

58 59
  cmx_target = "$pkg_target_name.copy_cmx"

60 61 62 63 64 65
  if (defined(invoker.cmx_file)) {
    cmx_file = invoker.cmx_file
  } else {
    cmx_file = "${pkg.meta_dir}/${pkg_target_name}.cmx"
  }

66
  copy("$cmx_target") {
67
    sources = [
68
      "$cmx_file",
69 70
    ]
    outputs = [
71
      "$far_base_dir/meta/${pkg_target_name}.cmx",
72 73 74
    ]
  }

75 76 77 78 79 80 81
  write_file("${far_base_dir}/meta/package",
             {
               name = pkg.package_name
               version = pkg.package_version
             },
             "json")

82 83 84 85 86 87 88
  _dbg_symbols_target = "${target_name}_dbg_symbols"
  fuchsia_debug_symbols(_dbg_symbols_target) {
    deps = pkg.deps
    testonly = pkg_testonly
    binary = invoker.binary
  }

89 90 91
  pkg_dir_deps = pkg.deps + [ ":$cmx_target" ]

  action("${target_name}_dir") {
92
    script = "//flutter/tools/fuchsia/copy_path.py"
K
Kaushik Iska 已提交
93
    sources = copy_sources
94
    response_file_contents = rebase_path(copy_sources + copy_outputs)
95
    deps = pkg_dir_deps
96 97
    args = [ "--file-list={{response_file_name}}" ]
    outputs = copy_outputs
98
    testonly = pkg_testonly
99
  }
100 101

  action(target_name) {
102
    script = "//flutter/tools/fuchsia/gen_package.py"
103 104 105 106
    deps = pkg_dir_deps + [
             ":${target_name}_dir",
             ":${_dbg_symbols_target}",
           ]
107
    sources = copy_outputs
K
Kaushik Iska 已提交
108

109 110
    inputs = []
    if (defined(invoker.inputs)) {
K
Kaushik Iska 已提交
111
      inputs += invoker.inputs
112
    }
K
Kaushik Iska 已提交
113

114 115 116 117 118 119 120 121 122 123 124 125
    args = [
      "--pm-bin",
      rebase_path("//fuchsia/sdk/$host_os/tools/pm"),
      "--package-dir",
      rebase_path(far_base_dir),
      "--signing-key",
      rebase_path("//flutter/tools/fuchsia/development.key"),
      "--far-name",
      target_name,
    ]
    outputs = [
      "${far_base_dir}.manifest",
126
      "$root_out_dir/${target_name}-0.far",
127 128 129
    ]
    testonly = pkg_testonly
  }
130
}
131 132 133 134 135 136 137 138 139 140 141

template("fuchsia_test_archive") {
  fuchsia_archive(target_name) {
    testonly = true
    libraries = common_libs

    assert(defined(invoker.deps), "package must define deps")

    deps = invoker.deps
    binary = invoker.binary

142 143 144 145
    if (defined(invoker.resources)) {
      resources = invoker.resources
    }

146
    meta_dir = "//flutter/testing/fuchsia/meta"
147 148 149
    cmx_file = "$meta_dir/fuchsia_test.cmx"
  }
}