1e509ee18Sopenharmony_ci# Copyright (c) 2021-2024 Huawei Device Co., Ltd.
2e509ee18Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
3e509ee18Sopenharmony_ci# you may not use this file except in compliance with the License.
4e509ee18Sopenharmony_ci# You may obtain a copy of the License at
5e509ee18Sopenharmony_ci#
6e509ee18Sopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
7e509ee18Sopenharmony_ci#
8e509ee18Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
9e509ee18Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
10e509ee18Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11e509ee18Sopenharmony_ci# See the License for the specific language governing permissions and
12e509ee18Sopenharmony_ci# limitations under the License.
13e509ee18Sopenharmony_ci
14e509ee18Sopenharmony_ciimport("$build_root/config/components/ets_frontend/ets_frontend_config.gni")
15e509ee18Sopenharmony_ci
16e509ee18Sopenharmony_cies2abc_root = "//arkcompiler/ets_frontend/es2panda"
17e509ee18Sopenharmony_cies2abc_build_path = ""
18e509ee18Sopenharmony_cies2abc_build_deps = ""
19e509ee18Sopenharmony_cies2abc_out_root = ""
20e509ee18Sopenharmony_ci
21e509ee18Sopenharmony_ciif (host_toolchain == toolchain_mac) {
22e509ee18Sopenharmony_ci  es2abc_out_root =
23e509ee18Sopenharmony_ci      get_label_info("$es2abc_root:es2panda($toolchain_mac)", "root_out_dir")
24e509ee18Sopenharmony_ci  es2abc_build_deps = [ "$es2abc_root:es2panda($toolchain_mac)" ]
25e509ee18Sopenharmony_ci} else if (host_toolchain == toolchain_win) {
26e509ee18Sopenharmony_ci  es2abc_out_root =
27e509ee18Sopenharmony_ci      get_label_info("$es2abc_root:es2panda($toolchain_win)", "root_out_dir")
28e509ee18Sopenharmony_ci  es2abc_build_deps = [ "$es2abc_root:es2panda($toolchain_win)" ]
29e509ee18Sopenharmony_ci} else {
30e509ee18Sopenharmony_ci  es2abc_out_root =
31e509ee18Sopenharmony_ci      get_label_info("$es2abc_root:es2panda($toolchain_linux)", "root_out_dir")
32e509ee18Sopenharmony_ci  es2abc_build_deps = [ "$es2abc_root:es2panda($toolchain_linux)" ]
33e509ee18Sopenharmony_ci}
34e509ee18Sopenharmony_cies2abc_build_path = es2abc_out_root + "/arkcompiler/ets_frontend"
35e509ee18Sopenharmony_ci
36e509ee18Sopenharmony_ci# Generate abc.
37e509ee18Sopenharmony_ci#
38e509ee18Sopenharmony_ci# Mandatory arguments:
39e509ee18Sopenharmony_ci# plugin_path -- plugin js file path
40e509ee18Sopenharmony_ci# plugin_name -- name of js file, ex: BatteryPlugin.js
41e509ee18Sopenharmony_ci# generat_file -- name of generated file
42e509ee18Sopenharmony_ci# package_name -- name of generated file's package
43e509ee18Sopenharmony_ci# extra_dependencies -- a list of files that should be considered as dependencies, must be label
44e509ee18Sopenharmony_ci# out_puts
45e509ee18Sopenharmony_citemplate("es2abc_gen_abc") {
46e509ee18Sopenharmony_ci  assert(defined(invoker.src_js), "src_js is required!")
47e509ee18Sopenharmony_ci  assert(defined(invoker.dst_file), "dst_file is required!")
48e509ee18Sopenharmony_ci  assert(defined(invoker.out_puts), "out_puts is required!")
49e509ee18Sopenharmony_ci
50e509ee18Sopenharmony_ci  extra_dependencies = []
51e509ee18Sopenharmony_ci  if (defined(invoker.extra_dependencies)) {
52e509ee18Sopenharmony_ci    extra_dependencies += invoker.extra_dependencies
53e509ee18Sopenharmony_ci  }
54e509ee18Sopenharmony_ci
55e509ee18Sopenharmony_ci  action("$target_name") {
56e509ee18Sopenharmony_ci    if (defined(invoker.extra_visibility)) {
57e509ee18Sopenharmony_ci      visibility = invoker.extra_visibility
58e509ee18Sopenharmony_ci    }
59e509ee18Sopenharmony_ci
60e509ee18Sopenharmony_ci    script = "$build_root/scripts/generate_js_bytecode.py"
61e509ee18Sopenharmony_ci
62e509ee18Sopenharmony_ci    deps = extra_dependencies
63e509ee18Sopenharmony_ci    deps += es2abc_build_deps
64e509ee18Sopenharmony_ci
65e509ee18Sopenharmony_ci    args = [
66e509ee18Sopenharmony_ci      "--src-js",
67e509ee18Sopenharmony_ci      invoker.src_js,
68e509ee18Sopenharmony_ci      "--dst-file",
69e509ee18Sopenharmony_ci      invoker.dst_file,
70e509ee18Sopenharmony_ci      "--frontend-tool-path",
71e509ee18Sopenharmony_ci      rebase_path("${es2abc_build_path}"),
72e509ee18Sopenharmony_ci    ]
73e509ee18Sopenharmony_ci
74e509ee18Sopenharmony_ci    if (defined(invoker.extension)) {
75e509ee18Sopenharmony_ci      args += [
76e509ee18Sopenharmony_ci        "--extension",
77e509ee18Sopenharmony_ci        invoker.extension,
78e509ee18Sopenharmony_ci      ]
79e509ee18Sopenharmony_ci    }
80e509ee18Sopenharmony_ci
81e509ee18Sopenharmony_ci    if (defined(invoker.dump_symbol_table)) {
82e509ee18Sopenharmony_ci      args += [
83e509ee18Sopenharmony_ci        "--dump-symbol-table",
84e509ee18Sopenharmony_ci        invoker.dump_symbol_table,
85e509ee18Sopenharmony_ci      ]
86e509ee18Sopenharmony_ci    }
87e509ee18Sopenharmony_ci    if (defined(invoker.input_symbol_table)) {
88e509ee18Sopenharmony_ci      args += [
89e509ee18Sopenharmony_ci        "--input-symbol-table",
90e509ee18Sopenharmony_ci        invoker.input_symbol_table,
91e509ee18Sopenharmony_ci      ]
92e509ee18Sopenharmony_ci    }
93e509ee18Sopenharmony_ci
94e509ee18Sopenharmony_ci    if (defined(invoker.extra_args)) {
95e509ee18Sopenharmony_ci      args += invoker.extra_args
96e509ee18Sopenharmony_ci    }
97e509ee18Sopenharmony_ci
98e509ee18Sopenharmony_ci    if (defined(invoker.in_puts)) {
99e509ee18Sopenharmony_ci      inputs = invoker.in_puts
100e509ee18Sopenharmony_ci    }
101e509ee18Sopenharmony_ci
102e509ee18Sopenharmony_ci    outputs = invoker.out_puts
103e509ee18Sopenharmony_ci  }
104e509ee18Sopenharmony_ci}
105