• 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("//arkcompiler/ets_frontend/ets_frontend_config.gni")
15
16es2abc_root = "//arkcompiler/ets_frontend/es2panda"
17es2abc_build_path = ""
18es2abc_build_deps = ""
19es2abc_out_root = ""
20
21if (host_toolchain == toolchain_mac) {
22  es2abc_out_root =
23      get_label_info("$es2abc_root:es2panda($toolchain_mac)", "root_out_dir")
24  es2abc_build_deps = [ "$es2abc_root:es2panda($toolchain_mac)" ]
25} else if (host_toolchain == toolchain_win) {
26  es2abc_out_root =
27      get_label_info("$es2abc_root:es2panda($toolchain_win)", "root_out_dir")
28  es2abc_build_deps = [ "$es2abc_root:es2panda($toolchain_win)" ]
29} else if (!ark_standalone_build && host_toolchain == toolchain_ohos) {
30  es2abc_out_root =
31      get_label_info("$es2abc_root:es2panda($toolchain_ohos)", "root_out_dir")
32  es2abc_build_deps = [ "$es2abc_root:es2panda($toolchain_ohos)" ]
33} else {
34  es2abc_out_root =
35      get_label_info("$es2abc_root:es2panda($toolchain_linux)", "root_out_dir")
36  es2abc_build_deps = [ "$es2abc_root:es2panda($toolchain_linux)" ]
37}
38es2abc_build_path = es2abc_out_root + "/arkcompiler/ets_frontend"
39
40# Generate abc.
41#
42# Mandatory arguments:
43# plugin_path -- plugin js file path
44# plugin_name -- name of js file, ex: BatteryPlugin.js
45# generat_file -- name of generated file
46# package_name -- name of generated file's package
47# extra_dependencies -- a list of files that should be considered as dependencies, must be label
48# out_puts
49template("es2abc_gen_abc") {
50  assert(defined(invoker.src_js), "src_js is required!")
51  assert(defined(invoker.dst_file), "dst_file is required!")
52  assert(defined(invoker.out_puts), "out_puts is required!")
53
54  extra_dependencies = []
55  if (defined(invoker.extra_dependencies)) {
56    extra_dependencies += invoker.extra_dependencies
57  }
58
59  action("$target_name") {
60    if (defined(invoker.extra_visibility)) {
61      visibility = invoker.extra_visibility
62    }
63
64    script = "${es2abc_root}/scripts/generate_js_bytecode.py"
65
66    deps = extra_dependencies
67    if (ark_standalone_build || is_arkui_x) {
68      deps += es2abc_build_deps
69    } else {
70      if (host_toolchain == toolchain_mac) {
71        external_deps = ["ets_frontend:es2panda($toolchain_mac)"]
72      } else if (host_toolchain == toolchain_win) {
73        external_deps = ["ets_frontend:es2panda(${host_toolchain})"]
74      } else {
75        external_deps = ["ets_frontend:es2panda($toolchain_linux)"]
76      }
77    }
78
79    args = [
80      "--src-js",
81      invoker.src_js,
82      "--dst-file",
83      invoker.dst_file,
84      "--frontend-tool-path",
85      rebase_path("${es2abc_build_path}"),
86    ]
87
88    if (defined(invoker.extension)) {
89      args += [
90        "--extension",
91        invoker.extension,
92      ]
93    }
94
95    if (defined(invoker.dump_symbol_table)) {
96      args += [
97        "--dump-symbol-table",
98        invoker.dump_symbol_table,
99      ]
100    }
101    if (defined(invoker.input_symbol_table)) {
102      args += [
103        "--input-symbol-table",
104        invoker.input_symbol_table,
105      ]
106    }
107
108    if (defined(invoker.extra_args)) {
109      args += invoker.extra_args
110    }
111
112    if (defined(invoker.in_puts)) {
113      inputs = invoker.in_puts
114    }
115
116    outputs = invoker.out_puts
117  }
118}
119
120template("es2abc_gen_newest_abc") {
121  assert(defined(invoker.src_js), "src_js is required!")
122  assert(defined(invoker.dst_file), "dst_file is required!")
123  assert(defined(invoker.out_puts), "out_puts is required!")
124
125  extra_dependencies = []
126  if (defined(invoker.extra_dependencies)) {
127    extra_dependencies += invoker.extra_dependencies
128  }
129
130  action("$target_name") {
131    if (defined(invoker.extra_visibility)) {
132      visibility = invoker.extra_visibility
133    }
134
135    script = "${es2abc_root}/scripts/generate_js_bytecode.py"
136
137    deps = extra_dependencies
138    if (host_toolchain == toolchain_mac) {
139      deps += es2abc_build_deps
140    } else if (host_toolchain == toolchain_win) {
141      external_deps = ["ets_frontend:es2panda(${host_toolchain})"]
142    } else if (ark_standalone_build) {
143      deps += es2abc_build_deps
144    } else {
145      external_deps = ["ets_frontend:es2panda($toolchain_linux)"]
146    }
147
148    args = [
149      "--src-js",
150      invoker.src_js,
151      "--dst-file",
152      invoker.dst_file,
153      "--frontend-tool-path",
154      rebase_path("${es2abc_build_path}"),
155    ]
156
157    if (defined(invoker.extension)) {
158      args += [
159        "--extension",
160        invoker.extension,
161      ]
162    }
163
164    if (defined(invoker.dump_symbol_table)) {
165      args += [
166        "--dump-symbol-table",
167        invoker.dump_symbol_table,
168      ]
169    }
170    if (defined(invoker.input_symbol_table)) {
171      args += [
172        "--input-symbol-table",
173        invoker.input_symbol_table,
174      ]
175    }
176
177    if (defined(invoker.extra_args)) {
178      args += invoker.extra_args
179    }
180
181    if (defined(invoker.in_puts)) {
182      inputs = invoker.in_puts
183    }
184
185    args += [ "--target-api-sub-version=beta3" ]
186
187    outputs = invoker.out_puts
188  }
189}
190