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