xref: /aosp_15_r20/external/angle/build/cipd/cipd.gni (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker# Copyright 2020 The Chromium Authors
2*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file.
4*8975f5c5SAndroid Build Coastguard Worker
5*8975f5c5SAndroid Build Coastguard Worker# Build targets for constructing CIPD packages.
6*8975f5c5SAndroid Build Coastguard Worker#
7*8975f5c5SAndroid Build Coastguard Worker# Prepares a CIPD archive and generates a manifest file.
8*8975f5c5SAndroid Build Coastguard Worker#
9*8975f5c5SAndroid Build Coastguard Worker# TODO(crbug.com/40115002): Add support for including directories.
10*8975f5c5SAndroid Build Coastguard Worker#
11*8975f5c5SAndroid Build Coastguard Worker# Parameters:
12*8975f5c5SAndroid Build Coastguard Worker#   package_definition_yaml: CIPD package definition filename. "cipd.yaml"
13*8975f5c5SAndroid Build Coastguard Worker#                            if unspecified.
14*8975f5c5SAndroid Build Coastguard Worker#   package: The path where the package will be located inside the CIPD
15*8975f5c5SAndroid Build Coastguard Worker#            repository.
16*8975f5c5SAndroid Build Coastguard Worker#   description: Sets the "description" field in CIPD package definition.
17*8975f5c5SAndroid Build Coastguard Worker#   install_mode: String, should be either "symlink" or "copy". Defaults to
18*8975f5c5SAndroid Build Coastguard Worker#                 "symlink".
19*8975f5c5SAndroid Build Coastguard Worker#   deps: A list of targets to build prior to copying files.
20*8975f5c5SAndroid Build Coastguard Worker#   sources: A list of files to copy into the staging root.
21*8975f5c5SAndroid Build Coastguard Worker#   source_directories: A list of directories to include in the package. Should
22*8975f5c5SAndroid Build Coastguard Worker#                       only be used when listing out all the files (in a given
23*8975f5c5SAndroid Build Coastguard Worker#                       directory) in |sources| is unfeasible.
24*8975f5c5SAndroid Build Coastguard Worker#
25*8975f5c5SAndroid Build Coastguard Worker# Example:
26*8975f5c5SAndroid Build Coastguard Worker#   cipd_package_definition("chromedriver") {
27*8975f5c5SAndroid Build Coastguard Worker#     package = "path/to/cipd/package"
28*8975f5c5SAndroid Build Coastguard Worker#     description = "Prebuilt test binary."
29*8975f5c5SAndroid Build Coastguard Worker#     install_mode = "copy"
30*8975f5c5SAndroid Build Coastguard Worker#     deps = [ "//path/to:test_binary_target" ]
31*8975f5c5SAndroid Build Coastguard Worker#     sources = [ "//path/to:test_binary_file" ]
32*8975f5c5SAndroid Build Coastguard Worker#   }
33*8975f5c5SAndroid Build Coastguard Worker#
34*8975f5c5SAndroid Build Coastguard Workertemplate("cipd_package_definition") {
35*8975f5c5SAndroid Build Coastguard Worker  forward_variables_from(invoker,
36*8975f5c5SAndroid Build Coastguard Worker                         [
37*8975f5c5SAndroid Build Coastguard Worker                           "deps",
38*8975f5c5SAndroid Build Coastguard Worker                           "data",
39*8975f5c5SAndroid Build Coastguard Worker                           "source_directories",
40*8975f5c5SAndroid Build Coastguard Worker                           "data_deps",
41*8975f5c5SAndroid Build Coastguard Worker                           "sources",
42*8975f5c5SAndroid Build Coastguard Worker                           "testonly",
43*8975f5c5SAndroid Build Coastguard Worker                         ])
44*8975f5c5SAndroid Build Coastguard Worker
45*8975f5c5SAndroid Build Coastguard Worker  assert(defined(sources) || defined(source_directories),
46*8975f5c5SAndroid Build Coastguard Worker         "At least one sources input must be specified.")
47*8975f5c5SAndroid Build Coastguard Worker
48*8975f5c5SAndroid Build Coastguard Worker  _install_mode = "symlink"
49*8975f5c5SAndroid Build Coastguard Worker  if (defined(invoker.install_mode)) {
50*8975f5c5SAndroid Build Coastguard Worker    _install_mode = invoker.install_mode
51*8975f5c5SAndroid Build Coastguard Worker  }
52*8975f5c5SAndroid Build Coastguard Worker  assert(_install_mode == "copy" || _install_mode == "symlink",
53*8975f5c5SAndroid Build Coastguard Worker         "\"install_mode\" arg should be either \"copy\" or \"symlink\".")
54*8975f5c5SAndroid Build Coastguard Worker
55*8975f5c5SAndroid Build Coastguard Worker  _cipd_definition_yaml = "cipd.yaml"
56*8975f5c5SAndroid Build Coastguard Worker  if (defined(invoker.package_definition_yaml)) {
57*8975f5c5SAndroid Build Coastguard Worker    _cipd_definition_yaml = invoker.package_definition_yaml
58*8975f5c5SAndroid Build Coastguard Worker  }
59*8975f5c5SAndroid Build Coastguard Worker
60*8975f5c5SAndroid Build Coastguard Worker  _package_staging_dir = "${target_gen_dir}/${target_name}"
61*8975f5c5SAndroid Build Coastguard Worker
62*8975f5c5SAndroid Build Coastguard Worker  _yaml_contents = [
63*8975f5c5SAndroid Build Coastguard Worker    "package: ${invoker.package}",
64*8975f5c5SAndroid Build Coastguard Worker    "description: ${invoker.description}",
65*8975f5c5SAndroid Build Coastguard Worker    "root: " + rebase_path(_package_staging_dir),
66*8975f5c5SAndroid Build Coastguard Worker    "install_mode: ${_install_mode}",
67*8975f5c5SAndroid Build Coastguard Worker    "data:",
68*8975f5c5SAndroid Build Coastguard Worker  ]
69*8975f5c5SAndroid Build Coastguard Worker
70*8975f5c5SAndroid Build Coastguard Worker  if (defined(sources)) {
71*8975f5c5SAndroid Build Coastguard Worker    foreach(source, sources) {
72*8975f5c5SAndroid Build Coastguard Worker      _yaml_contents += [ "  - file: " + get_path_info(source, "file") ]
73*8975f5c5SAndroid Build Coastguard Worker    }
74*8975f5c5SAndroid Build Coastguard Worker    copy(target_name) {
75*8975f5c5SAndroid Build Coastguard Worker      outputs = [ "${_package_staging_dir}/{{source_file_part}}" ]
76*8975f5c5SAndroid Build Coastguard Worker    }
77*8975f5c5SAndroid Build Coastguard Worker  }
78*8975f5c5SAndroid Build Coastguard Worker
79*8975f5c5SAndroid Build Coastguard Worker  if (defined(source_directories)) {
80*8975f5c5SAndroid Build Coastguard Worker    foreach(directory, source_directories) {
81*8975f5c5SAndroid Build Coastguard Worker      _yaml_contents += [ "  - dir: " + directory ]
82*8975f5c5SAndroid Build Coastguard Worker    }
83*8975f5c5SAndroid Build Coastguard Worker  }
84*8975f5c5SAndroid Build Coastguard Worker
85*8975f5c5SAndroid Build Coastguard Worker  write_file("${_package_staging_dir}/${_cipd_definition_yaml}", _yaml_contents)
86*8975f5c5SAndroid Build Coastguard Worker}
87*8975f5c5SAndroid Build Coastguard Worker
88*8975f5c5SAndroid Build Coastguard Worker# Create a cipd file based on inputs and FILES.cfg config. Most of the arguments
89*8975f5c5SAndroid Build Coastguard Worker# are similar with |cipd_package_definition| above.
90*8975f5c5SAndroid Build Coastguard Worker#
91*8975f5c5SAndroid Build Coastguard Worker# Additional parameters:
92*8975f5c5SAndroid Build Coastguard Worker#
93*8975f5c5SAndroid Build Coastguard Worker#   package_definition_yaml: The output yaml file. Default is
94*8975f5c5SAndroid Build Coastguard Worker#                            ${target_name}_cipd.yaml.
95*8975f5c5SAndroid Build Coastguard Worker#   files_file: The file defines what files and directories to include.
96*8975f5c5SAndroid Build Coastguard Worker#               Example: //tools/build/chromeos/FILES.cfg.
97*8975f5c5SAndroid Build Coastguard Worker#   buildtype: str, required. It can be "dev" or "official".
98*8975f5c5SAndroid Build Coastguard Worker#              Only when the file has the same buildtype, it will be included.
99*8975f5c5SAndroid Build Coastguard Worker#   arch: str, required. It can be "32bit", "64bit", "arm".
100*8975f5c5SAndroid Build Coastguard Worker#
101*8975f5c5SAndroid Build Coastguard Worker# Example:
102*8975f5c5SAndroid Build Coastguard Worker# cipd_package_definition_by_file("chrome_cipd") {
103*8975f5c5SAndroid Build Coastguard Worker#     package = "path/to/cipd/package"
104*8975f5c5SAndroid Build Coastguard Worker#     description = "Prebuilt test binary."
105*8975f5c5SAndroid Build Coastguard Worker#     install_mode = "copy"
106*8975f5c5SAndroid Build Coastguard Worker#     files_file = "//chrome/tools/build/chromeos/FILES.json"
107*8975f5c5SAndroid Build Coastguard Worker#     buildtype = "dev"
108*8975f5c5SAndroid Build Coastguard Worker#     arch = "64bit"
109*8975f5c5SAndroid Build Coastguard Worker#     deps = [ "//path/to:test_binary_target" ]
110*8975f5c5SAndroid Build Coastguard Worker#   }
111*8975f5c5SAndroid Build Coastguard Workertemplate("cipd_package_definition_by_file") {
112*8975f5c5SAndroid Build Coastguard Worker  forward_variables_from(invoker,
113*8975f5c5SAndroid Build Coastguard Worker                         [
114*8975f5c5SAndroid Build Coastguard Worker                           "deps",
115*8975f5c5SAndroid Build Coastguard Worker                           "data",
116*8975f5c5SAndroid Build Coastguard Worker                           "data_deps",
117*8975f5c5SAndroid Build Coastguard Worker                           "sources",
118*8975f5c5SAndroid Build Coastguard Worker                           "testonly",
119*8975f5c5SAndroid Build Coastguard Worker                         ])
120*8975f5c5SAndroid Build Coastguard Worker  _output_yaml_filename = "${target_name}_cipd.yaml"
121*8975f5c5SAndroid Build Coastguard Worker  if (defined(invoker.package_definition_yaml)) {
122*8975f5c5SAndroid Build Coastguard Worker    _output_yaml_filename = invoker.package_definition_yaml
123*8975f5c5SAndroid Build Coastguard Worker  }
124*8975f5c5SAndroid Build Coastguard Worker  action(target_name) {
125*8975f5c5SAndroid Build Coastguard Worker    script = "//build/cipd/cipd_from_file.py"
126*8975f5c5SAndroid Build Coastguard Worker    inputs = [ invoker.files_file ]
127*8975f5c5SAndroid Build Coastguard Worker    args = [
128*8975f5c5SAndroid Build Coastguard Worker      "--description=" + invoker.description,
129*8975f5c5SAndroid Build Coastguard Worker      "--buildtype=" + invoker.buildtype,
130*8975f5c5SAndroid Build Coastguard Worker      "--arch=" + invoker.arch,
131*8975f5c5SAndroid Build Coastguard Worker      "--files_file=" + rebase_path(invoker.files_file, root_build_dir),
132*8975f5c5SAndroid Build Coastguard Worker      "--package=" + invoker.package,
133*8975f5c5SAndroid Build Coastguard Worker      "--install_mode=" + invoker.install_mode,
134*8975f5c5SAndroid Build Coastguard Worker      "--output_yaml_file=" +
135*8975f5c5SAndroid Build Coastguard Worker          rebase_path("${root_out_dir}/" + _output_yaml_filename,
136*8975f5c5SAndroid Build Coastguard Worker                      root_build_dir),
137*8975f5c5SAndroid Build Coastguard Worker    ]
138*8975f5c5SAndroid Build Coastguard Worker    outputs = [ "${root_out_dir}/" + _output_yaml_filename ]
139*8975f5c5SAndroid Build Coastguard Worker  }
140*8975f5c5SAndroid Build Coastguard Worker}
141