15f9996aaSopenharmony_ci# Copyright (c) 2021 Huawei Device Co., Ltd.
25f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
35f9996aaSopenharmony_ci# you may not use this file except in compliance with the License.
45f9996aaSopenharmony_ci# You may obtain a copy of the License at
55f9996aaSopenharmony_ci#
65f9996aaSopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
75f9996aaSopenharmony_ci#
85f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software
95f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
105f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
115f9996aaSopenharmony_ci# See the License for the specific language governing permissions and
125f9996aaSopenharmony_ci# limitations under the License.
135f9996aaSopenharmony_ci
145f9996aaSopenharmony_ciimport("//build/config/components/ets_frontend/ets_frontend_config.gni")
155f9996aaSopenharmony_ci
165f9996aaSopenharmony_cies2abc_root = "//arkcompiler/ets_frontend/es2panda"
175f9996aaSopenharmony_cies2abc_build_path = ""
185f9996aaSopenharmony_cies2abc_build_deps = []
195f9996aaSopenharmony_cies2abc_out_root = ""
205f9996aaSopenharmony_cies2abc_indep_path =
215f9996aaSopenharmony_ci    "//binarys/arkcompiler/ets_frontend/innerapis/es2panda/clang_x64/libs"
225f9996aaSopenharmony_ci
235f9996aaSopenharmony_ciif (ohos_indep_compiler_enable) {
245f9996aaSopenharmony_ci  es2abc_build_path = es2abc_indep_path
255f9996aaSopenharmony_ci} else {
265f9996aaSopenharmony_ci  if (host_toolchain == toolchain_mac) {
275f9996aaSopenharmony_ci    es2abc_out_root =
285f9996aaSopenharmony_ci        get_label_info("$es2abc_root:es2panda($toolchain_mac)", "root_out_dir")
295f9996aaSopenharmony_ci    es2abc_build_deps += [ "$es2abc_root:es2panda($toolchain_mac)" ]
305f9996aaSopenharmony_ci  } else if (host_toolchain == toolchain_win) {
315f9996aaSopenharmony_ci    es2abc_out_root =
325f9996aaSopenharmony_ci        get_label_info("$es2abc_root:es2panda($toolchain_win)", "root_out_dir")
335f9996aaSopenharmony_ci    es2abc_build_deps += [ "$es2abc_root:es2panda($toolchain_win)" ]
345f9996aaSopenharmony_ci  } else {
355f9996aaSopenharmony_ci    es2abc_out_root = get_label_info("$es2abc_root:es2panda($toolchain_linux)",
365f9996aaSopenharmony_ci                                     "root_out_dir")
375f9996aaSopenharmony_ci    es2abc_build_deps += [ "$es2abc_root:es2panda($toolchain_linux)" ]
385f9996aaSopenharmony_ci  }
395f9996aaSopenharmony_ci  es2abc_build_path = es2abc_out_root + "/arkcompiler/ets_frontend"
405f9996aaSopenharmony_ci}
415f9996aaSopenharmony_ci
425f9996aaSopenharmony_ci# Generate abc.
435f9996aaSopenharmony_ci#
445f9996aaSopenharmony_ci# Mandatory arguments:
455f9996aaSopenharmony_ci# plugin_path -- plugin js file path
465f9996aaSopenharmony_ci# plugin_name -- name of js file, ex: BatteryPlugin.js
475f9996aaSopenharmony_ci# generat_file -- name of generated file
485f9996aaSopenharmony_ci# package_name -- name of generated file's package
495f9996aaSopenharmony_ci# extra_dependencies -- a list of files that should be considered as dependencies, must be label
505f9996aaSopenharmony_ci# out_puts
515f9996aaSopenharmony_citemplate("es2abc_gen_abc") {
525f9996aaSopenharmony_ci  assert(defined(invoker.src_js), "src_js is required!")
535f9996aaSopenharmony_ci  assert(defined(invoker.dst_file), "dst_file is required!")
545f9996aaSopenharmony_ci  assert(defined(invoker.out_puts), "out_puts is required!")
555f9996aaSopenharmony_ci
565f9996aaSopenharmony_ci  extra_dependencies = []
575f9996aaSopenharmony_ci  if (defined(invoker.extra_dependencies)) {
585f9996aaSopenharmony_ci    extra_dependencies += invoker.extra_dependencies
595f9996aaSopenharmony_ci  }
605f9996aaSopenharmony_ci
615f9996aaSopenharmony_ci  action("$target_name") {
625f9996aaSopenharmony_ci    if (defined(invoker.extra_visibility)) {
635f9996aaSopenharmony_ci      visibility = invoker.extra_visibility
645f9996aaSopenharmony_ci    }
655f9996aaSopenharmony_ci
665f9996aaSopenharmony_ci    script = "//build/scripts/generate_js_bytecode.py"
675f9996aaSopenharmony_ci
685f9996aaSopenharmony_ci    deps = extra_dependencies
695f9996aaSopenharmony_ci    deps += es2abc_build_deps
705f9996aaSopenharmony_ci
715f9996aaSopenharmony_ci    args = [
725f9996aaSopenharmony_ci      "--src-js",
735f9996aaSopenharmony_ci      invoker.src_js,
745f9996aaSopenharmony_ci      "--dst-file",
755f9996aaSopenharmony_ci      invoker.dst_file,
765f9996aaSopenharmony_ci      "--frontend-tool-path",
775f9996aaSopenharmony_ci      rebase_path("${es2abc_build_path}"),
785f9996aaSopenharmony_ci    ]
795f9996aaSopenharmony_ci
805f9996aaSopenharmony_ci    if (defined(invoker.extension)) {
815f9996aaSopenharmony_ci      args += [
825f9996aaSopenharmony_ci        "--extension",
835f9996aaSopenharmony_ci        invoker.extension,
845f9996aaSopenharmony_ci      ]
855f9996aaSopenharmony_ci    }
865f9996aaSopenharmony_ci
875f9996aaSopenharmony_ci    if (defined(invoker.dump_symbol_table)) {
885f9996aaSopenharmony_ci      args += [
895f9996aaSopenharmony_ci        "--dump-symbol-table",
905f9996aaSopenharmony_ci        invoker.dump_symbol_table,
915f9996aaSopenharmony_ci      ]
925f9996aaSopenharmony_ci    }
935f9996aaSopenharmony_ci    if (defined(invoker.input_symbol_table)) {
945f9996aaSopenharmony_ci      args += [
955f9996aaSopenharmony_ci        "--input-symbol-table",
965f9996aaSopenharmony_ci        invoker.input_symbol_table,
975f9996aaSopenharmony_ci      ]
985f9996aaSopenharmony_ci    }
995f9996aaSopenharmony_ci
1005f9996aaSopenharmony_ci    if (defined(invoker.extra_args)) {
1015f9996aaSopenharmony_ci      args += invoker.extra_args
1025f9996aaSopenharmony_ci    }
1035f9996aaSopenharmony_ci
1045f9996aaSopenharmony_ci    if (defined(invoker.in_puts)) {
1055f9996aaSopenharmony_ci      inputs = invoker.in_puts
1065f9996aaSopenharmony_ci    }
1075f9996aaSopenharmony_ci
1085f9996aaSopenharmony_ci    outputs = invoker.out_puts
1095f9996aaSopenharmony_ci  }
1105f9996aaSopenharmony_ci}
1115f9996aaSopenharmony_ci
1125f9996aaSopenharmony_citemplate("es2abc_gen_newest_abc") {
1135f9996aaSopenharmony_ci  assert(defined(invoker.src_js), "src_js is required!")
1145f9996aaSopenharmony_ci  assert(defined(invoker.dst_file), "dst_file is required!")
1155f9996aaSopenharmony_ci  assert(defined(invoker.out_puts), "out_puts is required!")
1165f9996aaSopenharmony_ci
1175f9996aaSopenharmony_ci  extra_dependencies = []
1185f9996aaSopenharmony_ci  if (defined(invoker.extra_dependencies)) {
1195f9996aaSopenharmony_ci    extra_dependencies += invoker.extra_dependencies
1205f9996aaSopenharmony_ci  }
1215f9996aaSopenharmony_ci
1225f9996aaSopenharmony_ci  action("$target_name") {
1235f9996aaSopenharmony_ci    if (defined(invoker.extra_visibility)) {
1245f9996aaSopenharmony_ci      visibility = invoker.extra_visibility
1255f9996aaSopenharmony_ci    }
1265f9996aaSopenharmony_ci
1275f9996aaSopenharmony_ci    script = "//build/scripts/generate_js_bytecode.py"
1285f9996aaSopenharmony_ci
1295f9996aaSopenharmony_ci    deps = extra_dependencies
1305f9996aaSopenharmony_ci    deps += es2abc_build_deps
1315f9996aaSopenharmony_ci
1325f9996aaSopenharmony_ci    args = [
1335f9996aaSopenharmony_ci      "--src-js",
1345f9996aaSopenharmony_ci      invoker.src_js,
1355f9996aaSopenharmony_ci      "--dst-file",
1365f9996aaSopenharmony_ci      invoker.dst_file,
1375f9996aaSopenharmony_ci      "--frontend-tool-path",
1385f9996aaSopenharmony_ci      rebase_path("${es2abc_build_path}"),
1395f9996aaSopenharmony_ci    ]
1405f9996aaSopenharmony_ci
1415f9996aaSopenharmony_ci    if (defined(invoker.extension)) {
1425f9996aaSopenharmony_ci      args += [
1435f9996aaSopenharmony_ci        "--extension",
1445f9996aaSopenharmony_ci        invoker.extension,
1455f9996aaSopenharmony_ci      ]
1465f9996aaSopenharmony_ci    }
1475f9996aaSopenharmony_ci
1485f9996aaSopenharmony_ci    if (defined(invoker.dump_symbol_table)) {
1495f9996aaSopenharmony_ci      args += [
1505f9996aaSopenharmony_ci        "--dump-symbol-table",
1515f9996aaSopenharmony_ci        invoker.dump_symbol_table,
1525f9996aaSopenharmony_ci      ]
1535f9996aaSopenharmony_ci    }
1545f9996aaSopenharmony_ci    if (defined(invoker.input_symbol_table)) {
1555f9996aaSopenharmony_ci      args += [
1565f9996aaSopenharmony_ci        "--input-symbol-table",
1575f9996aaSopenharmony_ci        invoker.input_symbol_table,
1585f9996aaSopenharmony_ci      ]
1595f9996aaSopenharmony_ci    }
1605f9996aaSopenharmony_ci
1615f9996aaSopenharmony_ci    if (defined(invoker.extra_args)) {
1625f9996aaSopenharmony_ci      args += invoker.extra_args
1635f9996aaSopenharmony_ci    }
1645f9996aaSopenharmony_ci
1655f9996aaSopenharmony_ci    if (defined(invoker.in_puts)) {
1665f9996aaSopenharmony_ci      inputs = invoker.in_puts
1675f9996aaSopenharmony_ci    }
1685f9996aaSopenharmony_ci
1695f9996aaSopenharmony_ci    args += [ "--target-api-sub-version=beta3" ]
1705f9996aaSopenharmony_ci
1715f9996aaSopenharmony_ci    outputs = invoker.out_puts
1725f9996aaSopenharmony_ci  }
1735f9996aaSopenharmony_ci}
174