1# Copyright (c) 2021-2025 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/runtime_core/static_core/ark_config.gni") 15_plugin_dir = get_path_info(".", "abspath") 16assert(string_replace(_plugin_dir, "//", "") != _plugin_dir) 17 18enable_bytecode_optimizer = true 19 20# TODO(nsizov): Fix after PR480 is merged 21srcs_assembler = [ "assembler/extension/ets_meta.cpp" ] 22 23srcs_compiler = [ 24 "compiler/ir_build_intrinsics_ets.cpp", 25 "compiler/optimizer/ir_builder/ets_inst_builder.cpp", 26 "compiler/optimizer/ets_codegen_extensions.cpp", 27 "compiler/optimizer/ets_intrinsics_inlining_expansion.cpp", 28 "compiler/optimizer/ets_intrinsics_peephole.cpp", 29] 30 31srcs_abc2program = [ "abc2program/abc2program_ets_plugin.cpp" ] 32 33srcs_compiler += [ "compiler/codegen_intrinsics_ets.cpp" ] 34 35srcs_disassembler = [ "disassembler/disasm_ets_plugin.cpp" ] 36 37srcs_isa = [ "isa/isa.yaml" ] 38 39srcs_verification = [ "verification/ets_plugin.cpp" ] 40 41runtime_yamls = [ 42 "runtime/ets_libbase_runtime.yaml", 43 "runtime/ets_compiler_intrinsics.yaml", 44] 45 46arkcompiler_deps = [] 47if (ark_ets_interop_js) { 48 srcs_compiler += [ 49 "compiler/optimizer/ir_builder/js_interop/js_interop_inst_builder.cpp", 50 "compiler/optimizer/optimizations/interop_js/interop_intrinsic_optimization.cpp", 51 ] 52 53 arkcompiler_deps += 54 [ "$ark_root/plugins/ets/runtime/interop_js:interop_intrinsic_kinds_h" ] 55 56 runtime_yamls += [ "runtime/interop_js/intrinsics/std_js_jsruntime.yaml" ] 57} 58 59option_yaml_path = "ets_plugin_options.yaml" 60 61runtime_option_yaml_path = [ "runtime_options.yaml" ] 62 63inst_templates_yaml_path = 64 "compiler/optimizer/ir_builder/ets_inst_templates.yaml" 65 66entrypoints_yaml_path = "runtime/ets_entrypoints.yaml" 67 68irtoc_scripts = [ 69 "irtoc_scripts/to_string_cache.irt", 70 "irtoc_scripts/typed_arrays.irt", 71] 72 73irtoc_plugins = [ 74 "irtoc_scripts/interpreter_handlers.irt", 75 "irtoc_scripts/interpreter_main_loop.irt", 76 "irtoc_scripts/string_builder.irt", 77 "irtoc_scripts/string.irt", 78 "irtoc_scripts/typed_arrays.irt" 79] 80 81arkbytecodeopt_deps = 82 [ "$_plugin_dir:isa_gen_ets_bytecodeopt_ets_codegen_intrinsics_gen_inc" ] 83 84arkruntime_deps = [ 85 "$ark_root/assembler:libarktsassembler_frontend_static", 86 "$ark_root/libpandafile:libarktsfile_frontend_static", 87] 88 89arkcompiler_deps += [ "$_plugin_dir/runtime/interop_js:interop_intrinsic_kinds_h(${default_toolchain})" ] 90 91srcs_runtime = [ 92 "runtime/ani/ani_interaction_api.cpp", 93 "runtime/ani/ani_mangle.cpp", 94 "runtime/ani/ani_vm_api.cpp", 95 "runtime/ets_annotation.cpp", 96 "runtime/ets_class_linker.cpp", 97 "runtime/ets_class_linker_context.cpp", 98 "runtime/ets_class_linker_extension.cpp", 99 "runtime/ets_coroutine.cpp", 100 "runtime/ets_entrypoints.cpp", 101 "runtime/ets_exceptions.cpp", 102 "runtime/ets_itable_builder.cpp", 103 "runtime/ets_language_context.cpp", 104 "runtime/ets_napi_env.cpp", 105 "runtime/ets_native_library.cpp", 106 "runtime/ets_native_library_provider.cpp", 107 "runtime/ets_namespace_manager.cpp", 108 "runtime/ets_namespace_manager_impl.cpp", 109 "runtime/ets_object_state_info.cpp", 110 "runtime/ets_object_state_table.cpp", 111 "runtime/ets_platform_types.cpp", 112 "runtime/ets_runtime_interface.cpp", 113 "runtime/ets_stubs.cpp", 114 "runtime/ets_vm.cpp", 115 "runtime/ets_vm_api.cpp", # TODO(nsizov): Take into account PR640, if needed 116 "runtime/ets_vtable_builder.cpp", 117 "runtime/finalreg/finalization_registry_manager.cpp", 118 "runtime/intrinsics/escompat_Array.cpp", 119 "runtime/integrate/ets_ani_expo.cpp", 120 "runtime/intrinsics/escompat_ArrayBuffer.cpp", 121 "runtime/intrinsics/escompat_TypedArrays.cpp", 122 "runtime/intrinsics/compiler_intrinsics.cpp", 123 "runtime/intrinsics/debugger_api.cpp", 124 "runtime/intrinsics/escompat_Date.cpp", 125 "runtime/intrinsics/escompat_JSON.cpp", 126 "runtime/intrinsics/escompat_RegExp.cpp", 127 "runtime/intrinsics/escompat_taskpool.cpp", 128 "runtime/intrinsics/escompat_Reflect.cpp", 129 "runtime/intrinsics/std_core.cpp", 130 "runtime/intrinsics/std_core_Char.cpp", 131 "runtime/intrinsics/std_core_Arrays.cpp", 132 "runtime/intrinsics/std_core_Job.cpp", 133 "runtime/intrinsics/std_concurrency_Launch.cpp", 134 "runtime/intrinsics/std_core_Class.cpp", 135 "runtime/intrinsics/std_core_AbcFile.cpp", 136 "runtime/intrinsics/std_core_AbcRuntimeLinker.cpp", 137 "runtime/intrinsics/std_core_Console.cpp", 138 "runtime/intrinsics/std_core_Byte.cpp", 139 "runtime/intrinsics/std_core_Short.cpp", 140 "runtime/intrinsics/std_core_Int.cpp", 141 "runtime/intrinsics/std_core_Long.cpp", 142 "runtime/intrinsics/std_core_Double.cpp", 143 "runtime/intrinsics/std_core_ExclusiveLauncher.cpp", 144 "runtime/intrinsics/std_core_Float.cpp", 145 "runtime/intrinsics/std_core_Promise.cpp", 146 "runtime/intrinsics/std_core_StackTrace.cpp", 147 "runtime/intrinsics/escompat_Atomics.cpp", 148 "runtime/intrinsics/gc_task_tracker.cpp", 149 "runtime/intrinsics/std_core_AniHelpers.cpp", 150 "runtime/intrinsics/std_core_Runtime.cpp", 151 "runtime/intrinsics/std_core_SyncPrimitives.cpp", 152 "runtime/intrinsics/std_core_String.cpp", 153 "runtime/intrinsics/std_core_StringBuilder.cpp", 154 "runtime/intrinsics/std_core_Type.cpp", 155 "runtime/intrinsics/std_core_TypeCreator.cpp", 156 "runtime/intrinsics/std_core_Method.cpp", 157 "runtime/intrinsics/std_core_Value.cpp", 158 "runtime/intrinsics/std_core_gc.cpp", 159 "runtime/intrinsics/std_core_finalization_registry.cpp", 160 "runtime/intrinsics/std_math.cpp", 161 "runtime/intrinsics/unsafe_memory.cpp", 162 "runtime/intrinsics/helpers/dtoa_helper.cpp", 163 "runtime/intrinsics/helpers/array_buffer_helper.cpp", 164 "runtime/intrinsics/helpers/ets_intrinsics_helpers.cpp", 165 "runtime/intrinsics/helpers/ets_to_string_cache.cpp", 166 "runtime/intrinsics/helpers/json_helper.cpp", 167 "runtime/mem/ets_reference_processor.cpp", 168 "runtime/napi/ets_napi_helpers.cpp", 169 "runtime/napi/ets_napi_invoke_interface.cpp", 170 "runtime/napi/ets_napi_native_interface.cpp", 171 "runtime/napi/ets_mangle.cpp", 172 "runtime/regexp/regexp.cpp", 173 "runtime/regexp/regexp_16.cpp", 174 "runtime/regexp/regexp_8.cpp", 175 "runtime/regexp/regexp_executor.cpp", 176 "runtime/types/ets_class.cpp", 177 "runtime/types/ets_field.cpp", 178 "runtime/types/ets_method.cpp", 179 "runtime/types/ets_job.cpp", 180 "runtime/types/ets_promise.cpp", 181 "runtime/types/ets_promise_ref.cpp", 182 "runtime/types/ets_object.cpp", 183 "runtime/types/ets_sync_primitives.cpp", 184 "runtime/types/ets_string_builder.cpp", 185 "runtime/types/ets_typeapi_parameter.cpp", 186 "runtime/types/ets_typeapi_method.cpp", 187 "runtime/types/ets_typeapi_field.cpp", 188 "runtime/types/ets_typeapi_create.cpp", 189 "runtime/types/ets_waiters_list.cpp", 190 "runtime/types/ets_weak_reference.cpp", 191 "runtime//types/ets_finalizable_weak_ref.cpp", 192 "runtime/ets_utils.cpp", 193 "stdlib/native/init_native_methods.cpp", 194 "stdlib/native/escompat/Process.cpp", 195 "stdlib/native/core/Intl.cpp", 196 "stdlib/native/core/IntlCommon.cpp", 197 "stdlib/native/core/IntlState.cpp", 198 "stdlib/native/core/IntlNumberFormat.cpp", 199 "stdlib/native/core/IntlNumberFormatters.cpp", 200 "stdlib/native/core/IntlFormattersCache.cpp", 201 "stdlib/native/core/IntlLocale.cpp", 202 "stdlib/native/core/IntlLocaleMatch.cpp", 203 "stdlib/native/core/IntlCollator.cpp", 204 "stdlib/native/core/IntlPluralRules.cpp", 205 "stdlib/native/core/IntlSegmenter.cpp", 206 "stdlib/native/core/IntlDisplayNames.cpp", 207 "stdlib/native/core/stdlib_ani_helpers.cpp", 208 "stdlib/native/etsstdlib.cpp", 209 "stdlib/native/core/IntlDateTimeFormat.cpp", 210 "stdlib/native/core/IntlListFormat.cpp", 211 "stdlib/native/core/IntlRelativeTimeFormat.cpp", 212 "stdlib/native/core/IntlLanguageTag.cpp", 213] 214 215if (ark_hybrid) { 216 srcs_runtime += [ 217 "runtime/hybrid/mem/external-gc.cpp", 218 "runtime/hybrid/mem/static_object_operator.cpp", 219 ] 220} 221 222if (is_ohos) { 223 srcs_runtime += [ "runtime/platform/ohos/logger.cpp" ] 224} 225 226configs_runtime = [] 227 228if (ark_ets_interop_js) { 229 runtime_option_yaml_path += [ "runtime/interop_js/runtime_options.yaml" ] 230 srcs_runtime += [ 231 "runtime/interop_js/call/call_ets.cpp", 232 "runtime/interop_js/call/call_js.cpp", 233 "runtime/interop_js/ets_proxy/ets_class_wrapper.cpp", 234 "runtime/interop_js/ets_proxy/ets_field_wrapper.cpp", 235 "runtime/interop_js/ets_proxy/ets_method_set.cpp", 236 "runtime/interop_js/ets_proxy/ets_method_wrapper.cpp", 237 "runtime/interop_js/ets_proxy/ets_proxy.cpp", 238 "runtime/interop_js/ets_proxy/shared_reference.cpp", 239 "runtime/interop_js/ets_proxy/shared_reference_storage.cpp", 240 "runtime/interop_js/ets_proxy/shared_reference_storage_verifier.cpp", 241 "runtime/interop_js/event_loop_module.cpp", 242 "runtime/interop_js/timer_helper/timer.cpp", 243 "runtime/interop_js/timer_helper/interop_timer_helper.cpp", 244 "runtime/interop_js/interop_common.cpp", 245 "runtime/interop_js/interop_context.cpp", 246 "runtime/interop_js/intrinsics/std_js_jsruntime.cpp", 247 "runtime/interop_js/intrinsics_api_impl.cpp", 248 "runtime/interop_js/js_job_queue.cpp", 249 "runtime/interop_js/js_proxy/js_proxy.cpp", 250 "runtime/interop_js/js_refconvert.cpp", 251 "runtime/interop_js/js_refconvert_builtin.cpp", 252 "runtime/interop_js/js_refconvert_function.cpp", 253 "runtime/interop_js/js_refconvert_record.cpp", 254 "runtime/interop_js/js_value.cpp", 255 "runtime/interop_js/napi_impl/napi_impl.cpp", 256 "runtime/interop_js/native_api/arkts_esvalue.cpp", 257 "runtime/interop_js/stack_info.cpp", 258 "runtime/interop_js/sts_vm_interface_impl.cpp", 259 "runtime/interop_js/timer_module.cpp", 260 "runtime/interop_js/xgc/xgc.cpp", 261 "runtime/interop_js/xgc/xgc_vm_adaptor.cpp", 262 ] 263 264 if (ark_ets_hybrid) { 265 srcs_runtime += [ "runtime/interop_js/handshake.cpp" ] 266 } 267 268 if (current_cpu == "amd64" || current_cpu == "x64" || 269 current_cpu == "x86_64") { 270 srcs_runtime += [ "runtime/interop_js/arch/amd64/call_bridge_amd64.S" ] 271 } else if (current_cpu == "arm64") { 272 srcs_runtime += [ "runtime/interop_js/arch/arm64/call_bridge_aarch64.S" ] 273 } else if (current_cpu == "arm") { 274 srcs_runtime += [ "runtime/interop_js/arch/arm32/call_bridge_arm32.S" ] 275 } 276 277 configs_runtime += [ "runtime/interop_js:interop_js_public_config" ] 278 279 arkruntime_deps += [ "$arkplatform_root:libarkplatform" ] 280 281 if (ark_standalone_build && ark_ets_hybrid) { 282 arkruntime_deps += [ 283 "$ark_third_party_root/libuv:uv", 284 "$arkui_root/napi:ace_napi", 285 ] 286 } 287} 288 289if (current_cpu == "amd64" || current_cpu == "x64" || current_cpu == "x86_64") { 290 srcs_runtime += [ 291 "runtime/napi/arch/amd64/ets_napi_entry_point_amd64.S", 292 "runtime/napi/arch/amd64/ets_async_entry_point_amd64.S", 293 ] 294} else if (current_cpu == "arm64") { 295 srcs_runtime += [ 296 "runtime/napi/arch/arm64/ets_napi_entry_point_aarch64.S", 297 "runtime/napi/arch/arm64/ets_async_entry_point_aarch64.S", 298 ] 299} else if (current_cpu == "arm") { 300 srcs_runtime += [ 301 "runtime/napi/arch/arm32/ets_napi_entry_point_arm32.S", 302 "runtime/napi/arch/arm32/ets_async_entry_point_arm32.S", 303 ] 304} 305# TODO(nsizov): Support 32-bit ARM 306