• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6#     http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14import("//build/config/python.gni")
15import("//build/ohos_var.gni")
16import("//build/templates/metadata/module_info.gni")
17
18template("merge_profile") {
19  forward_variables_from(invoker, [ "testonly" ])
20  assert(defined(invoker.hap_profile),
21         "hap_profile must be defined for compile_resources")
22  action(target_name) {
23    forward_variables_from(invoker,
24                           [
25                             "meta_data",
26                             "hap_profile",
27                             "generated_profile",
28                             "deps",
29                           ])
30    script = "//build/scripts/merge_profile.py"
31    depfile = "$target_gen_dir/$target_name.d"
32
33    _rebased_metadata = rebase_path(meta_data, root_build_dir)
34    inputs = [
35      meta_data,
36      restool,
37      hap_profile,
38    ]
39    args = [
40      "--resources-dir=@FileArg($_rebased_metadata:root:resources)",
41      "--depfile",
42      rebase_path(depfile, root_build_dir),
43      "--app-profile=@FileArg($_rebased_metadata:root:app_profile)",
44      "--hap-profile",
45      rebase_path(hap_profile, root_build_dir),
46      "--generated-profile",
47      rebase_path(generated_profile, root_build_dir),
48    ]
49    outputs = [ generated_profile ]
50  }
51}
52
53template("compile_resources") {
54  forward_variables_from(invoker, [ "testonly" ])
55  assert(defined(invoker.hap_profile),
56         "hap_profile must be defined for compile_resources")
57  assert(
58      defined(invoker.packaged_resources) ||
59          defined(invoker.generated_header_dir),
60      "hap_profile or generated_header_dir must be defined for compile_resources")
61  _generate_resource = defined(invoker.packaged_resources)
62  if (_generate_resource) {
63    _packaged_resources = invoker.packaged_resources
64  }
65  _generate_header = defined(invoker.generated_header_dir)
66  if (_generate_header) {
67    _generated_header_file = invoker.generated_header_dir + "/ResourceTable.h"
68  }
69  action_with_pydeps(target_name) {
70    forward_variables_from(invoker,
71                           [
72                             "meta_data",
73                             "hap_profile",
74                             "deps",
75                           ])
76    script = "//build/scripts/compile_resources.py"
77    depfile = "$target_gen_dir/$target_name.d"
78
79    _rebased_metadata = rebase_path(meta_data, root_build_dir)
80    inputs = [
81      meta_data,
82      restool,
83      hap_profile,
84    ]
85    args = [
86      "--resources-dir=@FileArg($_rebased_metadata:root:resources)",
87      "--depfile",
88      rebase_path(depfile, root_build_dir),
89      "--restool-path",
90      rebase_path(restool, root_build_dir),
91      "--hap-profile=@FileArg($_rebased_metadata:root:hap_profile)",
92      "--app-profile=@FileArg($_rebased_metadata:root:app_profile)",
93    ]
94    outputs = []
95    if (_generate_resource) {
96      outputs += [ _packaged_resources ]
97      args += [
98        "--output-resources-zipfile",
99        rebase_path(_packaged_resources, root_build_dir),
100      ]
101    }
102    if (_generate_header) {
103      outputs += [ _generated_header_file ]
104      args += [
105        "--output-header-file",
106        rebase_path(_generated_header_file, root_build_dir),
107      ]
108    }
109  }
110}
111
112template("package_app") {
113  forward_variables_from(invoker, [ "testonly" ])
114  assert(defined(invoker.hap_profile),
115         "hap_profile must be defined for $target_name")
116  assert(defined(invoker.hap_path), "hap_path must be defined for $target_name")
117  action_with_pydeps(target_name) {
118    forward_variables_from(invoker,
119                           [
120                             "deps",
121                             "shared_libraries",
122                             "hap_profile",
123                             "hap_path",
124                             "packaged_resources",
125                             "packaged_js_assets",
126                             "meta_data",
127                             "private_key_path",
128                             "signature_algorithm",
129                             "certificate_profile",
130                             "keystore_path",
131                             "keystore_password",
132                             "key_alias",
133                             "certificate_file",
134                             "install_module_info",
135                             "enable_ark",
136                             "build_mode",
137                           ])
138    script = "//build/scripts/hapbuilder.py"
139    depfile = "$target_gen_dir/$target_name.d"
140    _rebased_metadata = rebase_path(meta_data, root_build_dir)
141    outputs = [ hap_path ]
142    args = [
143      "--depfile",
144      rebase_path(depfile, root_build_dir),
145      "--hap-profile=@FileArg($_rebased_metadata:root:hap_profile)",
146      "--hapsigner",
147      rebase_path(hapsigner, root_build_dir),
148      "--hap-packing-tool",
149      rebase_path(hap_packing_tool, root_build_dir),
150      "--hap-path",
151      rebase_path(hap_path, root_build_dir),
152      "--packaged-resources",
153      rebase_path(packaged_resources, root_build_dir),
154      "--packaged-js-assets",
155      rebase_path(packaged_js_assets, root_build_dir),
156      "--assets=@FileArg($_rebased_metadata:root:assets)",
157      "--app-profile=@FileArg($_rebased_metadata:root:app_profile)",
158      "--build-mode",
159      build_mode,
160    ]
161
162    inputs = [
163      hap_profile,
164      hapsigner,
165      hap_packing_tool,
166      packaged_js_assets,
167      packaged_resources,
168      meta_data,
169    ]
170
171    _private_key_path = default_hap_private_key_path
172    if (defined(private_key_path)) {
173      _private_key_path = private_key_path
174    }
175    _signature_algorithm = default_signature_algorithm
176    if (defined(signature_algorithm)) {
177      _signature_algorithm = signature_algorithm
178    }
179    _key_alias = default_key_alias
180    if (defined(key_alias)) {
181      _key_alias = key_alias
182    }
183    _keystore_path = default_keystore_path
184    if (defined(keystore_path)) {
185      _keystore_path = keystore_path
186    }
187    _keystore_password = default_keystore_password
188    if (defined(keystore_password)) {
189      _keystore_password = keystore_password
190    }
191    _certificate_file = default_hap_certificate_file
192    if (defined(certificate_file)) {
193      _certificate_file = certificate_file
194    }
195
196    inputs += [
197      certificate_profile,
198      _keystore_path,
199      _certificate_file,
200    ]
201
202    args += [
203      "--private-key-path",
204      _private_key_path,
205      "--sign-algo",
206      _signature_algorithm,
207      "--certificate-profile",
208      rebase_path(certificate_profile, root_build_dir),
209      "--keyalias",
210      _key_alias,
211      "--keystore-path",
212      rebase_path(_keystore_path, root_build_dir),
213      "--keystorepasswd",
214      _keystore_password,
215      "--certificate-file",
216      rebase_path(_certificate_file, root_build_dir),
217    ]
218
219    if (defined(shared_libraries)) {
220      foreach(lib, shared_libraries) {
221        _module_info = get_label_info(lib, "target_out_dir") + "/" +
222                       get_label_info(lib, "name") + "_module_info.json"
223        _rebased_module_info = rebase_path(_module_info, root_build_dir)
224        args += [ "--dso=@FileArg($_rebased_module_info:source)" ]
225      }
226    }
227
228    if (defined(install_module_info)) {
229      metadata = {
230        install_modules = [ install_module_info ]
231      }
232    }
233    if (defined(enable_ark) && enable_ark) {
234      _ark_dpes = [
235        "//ark/ts2abc/ts2panda:ts2abc_js_file($host_toolchain)",
236        "//ark/ts2abc/ts2panda:ark_ts2abc_build($host_toolchain)",
237      ]
238      if (defined(deps)) {
239        deps += _ark_dpes
240      } else {
241        deps = _ark_dpes
242      }
243      _js2abc_js = get_label_info(
244                       "//ark/ts2abc/ts2panda:ts2abc_js_file($host_toolchain)",
245                       "target_out_dir") + "/ts2abc.js"
246      args += [
247        "--nodejs-path",
248        rebase_path(nodejs, root_build_dir),
249        "--js2abc-js",
250        rebase_path(_js2abc_js, root_build_dir),
251        "--enable-ark",
252      ]
253      inputs += [
254        nodejs,
255        _js2abc_js,
256      ]
257    }
258  }
259}
260
261template("compile_js_assets") {
262  forward_variables_from(invoker, [ "testonly" ])
263  assert(defined(invoker.meta_data) && defined(invoker.packaged_js_assets),
264         "meta_data and packaged_js_assets must be for compile_js_assets")
265
266  _packaged_js_assets = invoker.packaged_js_assets
267  action_with_pydeps(target_name) {
268    forward_variables_from(invoker,
269                           [
270                             "deps",
271                             "meta_data",
272                             "hap_profile",
273                             "build_mode",
274                             "js2abc",
275                             "ets2abc",
276                             "main_target_name",
277                           ])
278    script = "//build/scripts/build_js_assets.py"
279    depfile = "$target_gen_dir/$target_name.d"
280    outputs = [ _packaged_js_assets ]
281
282    _rebased_metadata = rebase_path(meta_data, root_build_dir)
283
284    if (!defined(deps)) {
285      deps = []
286    }
287    deps += [
288      "//ark/ts2abc/ts2panda:ark_ts2abc_build($host_toolchain)",
289      "//developtools/ace-ets2bundle:ets_loader_node_modules",
290      "//developtools/ace-js2bundle:ace_loader_node_modules",
291    ]
292    _ace_loader_home =
293        get_label_info("//developtools/ace-js2bundle:ace_loader_node_modules",
294                       "target_out_dir") + "/ace_loader_ark"
295    _webpack_config_js = "${_ace_loader_home}/webpack.rich.config.js"
296    _ets_loader_home =
297        get_label_info("//developtools/ace-ets2bundle:ets_loader_node_modules",
298                       "target_out_dir") + "/ets_loader_ark"
299    _webpack_config_ets = "${_ets_loader_home}/webpack.config.js"
300    _webpack_js = "${_ace_loader_home}/node_modules/webpack/bin/webpack.js"
301
302    inputs = [
303      meta_data,
304      nodejs,
305    ]
306
307    args = [
308      "--js-assets-dir=@FileArg($_rebased_metadata:root:js_assets)",
309      "--ets-assets-dir=@FileArg($_rebased_metadata:root:ets_assets)",
310      "--output",
311      rebase_path(_packaged_js_assets, root_build_dir),
312      "--depfile",
313      rebase_path(depfile, root_build_dir),
314      "--nodejs-path",
315      rebase_path(nodejs, root_build_dir),
316      "--webpack-js",
317      rebase_path(_webpack_js, root_build_dir),
318      "--webpack-config-js",
319      rebase_path(_webpack_config_js, root_build_dir),
320      "--webpack-config-ets",
321      rebase_path(_webpack_config_ets, root_build_dir),
322      "--build-mode",
323      build_mode,
324      "--ace-loader-home",
325      rebase_path(_ace_loader_home, root_build_dir),
326      "--ets-loader-home",
327      rebase_path(_ets_loader_home, root_build_dir),
328      "--hap-profile=@FileArg($_rebased_metadata:root:hap_profile)",
329      "--app-profile=@FileArg($_rebased_metadata:root:app_profile)",
330    ]
331    if (defined(testonly) && testonly == true) {
332      _js_sources_file = target_gen_dir + "/$main_target_name.sources"
333      args += [
334        "--js-sources-file",
335        rebase_path(_js_sources_file, root_build_dir),
336      ]
337      outputs += [ _js_sources_file ]
338    }
339
340    if (js2abc || ets2abc) {
341      _ark_dir = get_label_info(
342              "//ark/ts2abc/ts2panda:ark_ts2abc_build($host_toolchain)",
343              "target_out_dir")
344      if (ets2abc) {
345        args += [ "--ets2abc" ]
346      } else if (js2abc) {
347        args += [ "--js2abc" ]
348      }
349      args += [
350        "--ark-frontend-dir",
351        rebase_path(_ark_dir, root_build_dir),
352      ]
353    }
354
355    if (defined(hap_profile)) {
356      inputs += [ hap_profile ]
357    }
358  }
359}
360