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