xref: /aosp_15_r20/external/cronet/build/ios/intent_definition.gni (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1# Copyright 2020 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import("//build/config/ios/ios_sdk.gni")
6
7# Template to compile an .intentdefinition file.
8#
9# Arguments
10#
11#   intent_file
12#     path to .intentdefinition file that must be compiled
13#
14#   intent_names
15#     list of string corresponding to the intent defined in intent_file;
16#     must include all the intents as only the intents listed will be
17#     compiled
18#
19#   developer_dir
20#     (optional) path to developer_dir to use
21#
22template("intent_definition") {
23  assert(defined(invoker.intent_file) && invoker.intent_file != "",
24         "intent_file must be defined for $target_name")
25
26  assert(defined(invoker.intent_names) && invoker.intent_names != [],
27         "intent_names must be defined for $target_name")
28
29  assert(xcode_version_int >= 1140,
30         "intent_definition requires Xcode 11.4 or higher")
31
32  _compile_intent_target = "${target_name}_compile_intent"
33  _compile_intent_output =
34      "$target_gen_dir/" + get_path_info(invoker.intent_file, "file")
35
36  action(_compile_intent_target) {
37    script = "//build/apple/xcrun.py"
38    inputs = [ invoker.intent_file ]
39    outputs = [ _compile_intent_output ]
40    args = [
41      "intentbuilderc",
42      "compile",
43      "-input",
44      rebase_path(invoker.intent_file, root_build_dir),
45      "-output",
46      rebase_path(target_gen_dir, root_build_dir),
47    ]
48
49    if (defined(invoker.developer_dir)) {
50      args += [
51        "--developer-dir",
52        rebase_path(invoker.developer_dir, root_build_dir),
53      ]
54    }
55  }
56
57  _compile_intent_bundle = "${target_name}_compile_intent_bundle"
58  bundle_data(_compile_intent_bundle) {
59    sources = [ _compile_intent_output ]
60    outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
61    public_deps = [ ":$_compile_intent_target" ]
62  }
63
64  _generate_source_target = "${target_name}_generate_source"
65  _generate_source_output = []
66  foreach(_intent, invoker.intent_names) {
67    _generate_source_output += [
68      "$target_gen_dir/$_intent.h",
69      "$target_gen_dir/$_intent.m",
70    ]
71  }
72
73  action(_generate_source_target) {
74    script = "//build/apple/xcrun.py"
75    inputs = [ invoker.intent_file ]
76    outputs = _generate_source_output
77    args = [
78      "intentbuilderc",
79      "generate",
80      "-input",
81      rebase_path(invoker.intent_file, root_build_dir),
82      "-output",
83      rebase_path(target_gen_dir, root_build_dir),
84      "-language",
85      "Objective-C",
86    ]
87
88    if (defined(invoker.developer_dir)) {
89      args += [
90        "--developer-dir",
91        rebase_path(invoker.developer_dir, root_build_dir),
92      ]
93    }
94  }
95
96  source_set(target_name) {
97    forward_variables_from(invoker,
98                           "*",
99                           [
100                             "developer_dir",
101                             "intent_file",
102                             "intent_names",
103                             "sources",
104                           ])
105
106    if (!defined(deps)) {
107      deps = []
108    }
109    if (!defined(frameworks)) {
110      frameworks = []
111    }
112
113    sources = _generate_source_output
114    deps += [
115      ":$_compile_intent_bundle",
116      ":$_generate_source_target",
117    ]
118    frameworks += [ "Intents.framework" ]
119  }
120}
121