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