1# Copyright (c) 2021-2022 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_runtime/js_runtime_config.gni") 15import("$build_root/toolchain/toolchain.gni") 16 17group("ark_js_packages") { 18 deps = [] 19 if (host_os != "mac") { 20 deps += [ 21 "//arkcompiler/ets_runtime:libark_jsruntime", 22 "//arkcompiler/ets_runtime/ecmascript/js_vm:ark_js_vm", 23 ] 24 if (is_clang && clang_version != "9.0.3" && current_cpu == "arm64" && 25 is_ohos) { 26 deps += [ 27 "ecmascript/compiler:ark_aot_compiler($build_root/toolchain/ohos:ohos_clang_arm64)", 28 "ecmascript/pgo_profiler/prof_dump:profdump($build_root/toolchain/ohos:ohos_clang_arm64)", 29 ] 30 } 31 } 32} 33 34group("ark_js_host_windows_tools_packages") { 35 deps = [] 36 if (host_os != "mac" && target_os != "android") { 37 deps += [ 38 "ecmascript/pgo_profiler/prof_dump:profdump($build_root/toolchain/mingw:mingw_x86_64)", 39 "//arkcompiler/ets_runtime/ecmascript/compiler:ark_aot_compiler($build_root/toolchain/mingw:mingw_x86_64)", 40 "//arkcompiler/ets_runtime/ecmascript/js_vm:ark_js_vm($build_root/toolchain/mingw:mingw_x86_64)", 41 ] 42 } 43} 44 45group("ark_js_host_mac_tools_packages") { 46 deps = [] 47 if (host_os == "mac") { 48 if (host_cpu == "arm64") { 49 deps += [ 50 "ecmascript/compiler:ark_aot_compiler($build_root/toolchain/mac:clang_arm64)", 51 "ecmascript/js_vm:ark_js_vm($build_root/toolchain/mac:clang_arm64)", 52 "ecmascript/pgo_profiler/prof_dump:profdump($build_root/toolchain/mac:clang_arm64)", 53 ] 54 } else { 55 deps += [ 56 "ecmascript/compiler:ark_aot_compiler($build_root/toolchain/mac:clang_x64)", 57 "ecmascript/js_vm:ark_js_vm($build_root/toolchain/mac:clang_x64)", 58 "ecmascript/pgo_profiler/prof_dump:profdump($build_root/toolchain/mac:clang_x64)", 59 ] 60 } 61 } 62} 63 64group("ark_js_host_linux_tools_packages") { 65 deps = [] 66 if (host_os != "mac") { 67 deps += [ 68 "//arkcompiler/ets_runtime/ecmascript/js_vm:ark_js_vm(${host_toolchain})", 69 "//arkcompiler/ets_runtime/ecmascript/quick_fix:quick_fix(${host_toolchain})", 70 ] 71 if (is_standard_system) { 72 deps += [ 73 "ecmascript/pgo_profiler/prof_dump:profdump(${host_toolchain})", 74 "//arkcompiler/ets_runtime/ecmascript/compiler:ark_aot_compiler(${host_toolchain})", 75 "//arkcompiler/ets_runtime/ecmascript/compiler:ark_stub_compiler(${host_toolchain})", 76 ] 77 } 78 } 79} 80 81group("ark_js_unittest") { 82 testonly = true 83 deps = [] 84 if (host_os != "mac") { 85 deps += [ 86 "ecmascript/pgo_profiler/tests:unittest", 87 "//arkcompiler/ets_runtime/ecmascript/base/tests:unittest", 88 "//arkcompiler/ets_runtime/ecmascript/builtins/tests:unittest", 89 "//arkcompiler/ets_runtime/ecmascript/containers/tests:unittest", 90 "//arkcompiler/ets_runtime/ecmascript/debugger/tests:unittest", 91 "//arkcompiler/ets_runtime/ecmascript/dfx/hprof/tests:unittest", 92 "//arkcompiler/ets_runtime/ecmascript/ic/tests:unittest", 93 "//arkcompiler/ets_runtime/ecmascript/interpreter/tests:unittest", 94 "//arkcompiler/ets_runtime/ecmascript/jobs/tests:unittest", 95 "//arkcompiler/ets_runtime/ecmascript/jspandafile/tests:unittest", 96 "//arkcompiler/ets_runtime/ecmascript/module/tests:unittest", 97 "//arkcompiler/ets_runtime/ecmascript/napi/test:unittest", 98 "//arkcompiler/ets_runtime/ecmascript/regexp/tests:unittest", 99 "//arkcompiler/ets_runtime/ecmascript/require/tests:unittest", 100 "//arkcompiler/ets_runtime/ecmascript/snapshot/tests:unittest", 101 "//arkcompiler/ets_runtime/ecmascript/stubs/tests:unittest", 102 "//arkcompiler/ets_runtime/ecmascript/tests:unittest", 103 "//arkcompiler/ets_runtime/ecmascript/ts_types/tests:unittest", 104 ] 105 if (is_ohos && is_standard_system) { 106 deps += [ "//arkcompiler/ets_runtime/test/fuzztest:fuzztest" ] 107 } 108 } 109} 110 111group("ark_js_perform") { 112 testonly = true 113 deps = [] 114 deps += [ "//arkcompiler/ets_runtime/test/perform:perform" ] 115} 116 117group("ark_unittest") { 118 testonly = true 119 deps = [] 120 if (host_os != "mac") { 121 # js unittest 122 deps += [ 123 "ecmascript/pgo_profiler/tests:host_unittest", 124 "//arkcompiler/ets_runtime/ecmascript/base/tests:host_unittest", 125 "//arkcompiler/ets_runtime/ecmascript/builtins/tests:host_unittest", 126 "//arkcompiler/ets_runtime/ecmascript/containers/tests:host_unittest", 127 "//arkcompiler/ets_runtime/ecmascript/dfx/hprof/tests:host_unittest", 128 "//arkcompiler/ets_runtime/ecmascript/ic/tests:host_unittest", 129 "//arkcompiler/ets_runtime/ecmascript/interpreter/tests:host_unittest", 130 "//arkcompiler/ets_runtime/ecmascript/jobs/tests:host_unittest", 131 "//arkcompiler/ets_runtime/ecmascript/jspandafile/tests:host_unittest", 132 "//arkcompiler/ets_runtime/ecmascript/module/tests:host_unittest", 133 "//arkcompiler/ets_runtime/ecmascript/napi/test:host_unittest", 134 "//arkcompiler/ets_runtime/ecmascript/regexp/tests:host_unittest", 135 "//arkcompiler/ets_runtime/ecmascript/require/tests:host_unittest", 136 "//arkcompiler/ets_runtime/ecmascript/snapshot/tests:host_unittest", 137 "//arkcompiler/ets_runtime/ecmascript/stubs/tests:host_unittest", 138 "//arkcompiler/ets_runtime/ecmascript/tests:host_unittest", 139 "//arkcompiler/ets_runtime/ecmascript/ts_types/tests:host_unittest", 140 ] 141 if (is_standard_system && !run_with_asan) { 142 deps += [ 143 "//arkcompiler/ets_runtime/ecmascript/compiler/tests:host_unittest", 144 ] 145 } 146 } 147} 148 149group("ark_runtime_host_unittest") { 150 testonly = true 151 deps = [] 152 if (host_os != "mac") { 153 # js unittest 154 deps += [ ":ark_unittest" ] 155 156 # js bytecode test 157 deps += [ "//arkcompiler/ets_runtime/test/moduletest:ark_js_moduletest" ] 158 159 # quickfix test 160 deps += [ "//arkcompiler/ets_runtime/test/quickfix:ark_quickfix_test" ] 161 162 # ts aot test and asm test 163 if (is_standard_system && !run_with_asan && !ark_standalone_build) { 164 deps += [ 165 "//arkcompiler/ets_runtime/test/aottest:ark_aot_js_test", 166 "//arkcompiler/ets_runtime/test/aottest:ark_aot_test", 167 168 #"//arkcompiler/ets_runtime/test/moduletest:ark_asm_single_step_test", 169 "//arkcompiler/ets_runtime/test/moduletest:ark_asm_test", 170 "//arkcompiler/ets_runtime/test/typeinfer:ark_typeinfer_test", 171 ] 172 } 173 } 174} 175 176config("ark_jsruntime_public_config") { 177 configs = [ 178 "$ark_root/libpandabase:arkbase_public_config", 179 "$ark_root/libpandafile:arkfile_public_config", 180 "$ark_third_party_root/icu/icu4c:icu_config", 181 sdk_libc_secshared_config, 182 ] 183 184 defines = [] 185 if (!is_mingw && !is_mac && target_os != "android" && target_os != "ios") { 186 defines += [ 187 "ECMASCRIPT_SUPPORT_CPUPROFILER", 188 "ECMASCRIPT_SUPPORT_HEAPPROFILER", 189 "ECMASCRIPT_SUPPORT_SNAPSHOT", 190 "ECMASCRIPT_SUPPORT_DEBUGGER", 191 ] 192 } else if (target_os == "android") { 193 defines += [ 194 "ECMASCRIPT_SUPPORT_CPUPROFILER", 195 "ECMASCRIPT_SUPPORT_DEBUGGER", 196 ] 197 } else if (target_os == "ios") { 198 defines += [ "ECMASCRIPT_SUPPORT_DEBUGGER" ] 199 } 200 201 include_dirs = [ 202 "$js_root", 203 204 # Dependent on runtime_core include 205 "$ark_root", 206 ] 207} 208 209intl_sources = [ 210 "ecmascript/builtins/builtins_collator.cpp", 211 "ecmascript/builtins/builtins_date_time_format.cpp", 212 "ecmascript/builtins/builtins_displaynames.cpp", 213 "ecmascript/builtins/builtins_intl.cpp", 214 "ecmascript/builtins/builtins_list_format.cpp", 215 "ecmascript/builtins/builtins_locale.cpp", 216 "ecmascript/builtins/builtins_number_format.cpp", 217 "ecmascript/builtins/builtins_plural_rules.cpp", 218 "ecmascript/builtins/builtins_relative_time_format.cpp", 219 "ecmascript/js_collator.cpp", 220 "ecmascript/js_date_time_format.cpp", 221 "ecmascript/js_displaynames.cpp", 222 "ecmascript/js_list_format.cpp", 223 "ecmascript/js_locale.cpp", 224 "ecmascript/js_number_format.cpp", 225 "ecmascript/js_plural_rules.cpp", 226 "ecmascript/js_relative_time_format.cpp", 227] 228 229config("ark_jsruntime_compiler_config") { 230 configs = [ "$js_root:ark_jsruntime_common_config" ] 231} 232 233config("ark_jsruntime_windows_config") { 234 ldflags = [ "-lshlwapi" ] 235 if (enable_hilog) { 236 defines = [ "ENABLE_HILOG" ] 237 include_dirs = 238 [ "//base/hiviewdfx/hilog/interfaces/native/innerkits/include" ] 239 } 240} 241 242config("ark_jsruntime_common_config") { 243 defines = [ "PANDA_ENABLE_LTO" ] 244 cflags_cc = [ 245 "-Wall", 246 "-Wshadow", 247 "-Werror", 248 "-Wextra", 249 "-pedantic", 250 "-Wno-invalid-offsetof", 251 "-Wno-gnu-statement-expression", 252 "-pipe", 253 "-Wdate-time", 254 "-funwind-tables", 255 "-fasynchronous-unwind-tables", 256 "-Wformat=2", 257 ] 258 if (ark_standalone_build) { 259 cflags_cc += [ 260 "-std=c++17", 261 "-fno-rtti", 262 ] 263 } else { 264 if (use_musl) { 265 defines += [ "PANDA_USE_MUSL" ] 266 } 267 } 268 269 if (build_public_version) { 270 defines += [ "IS_PUBLIC_VERSION" ] 271 } 272 273 if (is_linux) { 274 defines += [ 275 "PANDA_TARGET_UNIX", 276 "PANDA_TARGET_LINUX", 277 "PANDA_USE_FUTEX", 278 ] 279 } else if (is_mingw) { 280 cflags_cc += [ 281 "-std=c++17", 282 "-Wno-ignored-attributes", 283 ] 284 defines += [ 285 "PANDA_TARGET_WINDOWS", 286 "_CRTBLD", 287 "__LIBMSVCRT__", 288 ] 289 } else if (is_mac) { 290 defines += [ 291 "PANDA_TARGET_UNIX", 292 "PANDA_TARGET_MACOS", 293 ] 294 295 if (enable_hilog) { 296 defines += [ "ENABLE_HILOG" ] 297 include_dirs = 298 [ "//base/hiviewdfx/hilog/interfaces/native/innerkits/include" ] 299 } 300 } else if (target_os == "android") { 301 defines += [ 302 "PANDA_TARGET_ANDROID", 303 "PANDA_TARGET_UNIX", 304 "PANDA_USE_FUTEX", 305 ] 306 if (host_os == "mac") { 307 defines += [ "DISABLE_ASM_INTERPRETER" ] 308 } 309 } else if (target_os == "ios") { 310 defines += [ 311 "PANDA_TARGET_IOS", 312 "PANDA_TARGET_UNIX", 313 ] 314 } else { 315 defines += [ 316 "PANDA_TARGET_UNIX", 317 "PANDA_USE_FUTEX", 318 ] 319 if (!is_standard_system && (current_cpu != "arm" || is_wearable_product)) { 320 defines += [ "PANDA_TARGET_MOBILE" ] 321 } 322 } 323 324 if (!ark_standalone_build && !is_mac && target_os != "ios") { 325 if (!use_libfuzzer) { 326 cflags_cc += [ "-flto" ] 327 ldflags = [ "-flto" ] 328 } 329 } 330 331 if (is_debug) { 332 cflags_cc += [ 333 "-O0", 334 "-ggdb3", 335 ] 336 } else { 337 defines += [ "NDEBUG" ] 338 } 339 340 if (enable_asm_assert) { 341 defines += [ "ENABLE_ASM_ASSERT" ] 342 } 343 344 if (run_with_asan) { 345 defines += [ "RUN_WITH_ASAN" ] 346 } 347 348 if (enable_cow_array) { 349 defines += [ "ENABLE_COW_ARRAY" ] 350 } 351 352 if (run_with_asan && is_linux && 353 (current_cpu == "x86" || current_cpu == "x64")) { 354 cflags_cc += [ 355 "-fno-inline-functions", 356 "-fno-inline", 357 "-fsanitize=address", 358 "-fsanitize-address-use-after-scope", 359 "-fno-omit-frame-pointer", 360 "-fsanitize=leak", 361 ] 362 363 if (!use_musl) { 364 libs = [ "$clang_base_path/lib64/clang/$clang_version/lib/linux/libclang_rt.asan-x86_64.a" ] 365 } else { 366 libs = [ "$clang_base_path/lib/clang/$clang_version/lib/x86_64-linux-ohos/libclang_rt.asan.a" ] 367 } 368 } 369 370 if (current_cpu == "arm") { 371 defines += [ 372 "PANDA_TARGET_ARM32_ABI_SOFT=1", 373 "PANDA_TARGET_ARM32", 374 "PANDA_TARGET_32", 375 ] 376 } else if (current_cpu == "arm64") { 377 defines += [ 378 "PANDA_TARGET_ARM64", 379 "PANDA_TARGET_64", 380 "PANDA_ENABLE_GLOBAL_REGISTER_VARIABLES", 381 "PANDA_USE_32_BIT_POINTER", 382 ] 383 } else if (current_cpu == "x86") { 384 defines += [ "PANDA_TARGET_X86" ] 385 } else if (current_cpu == "amd64" || current_cpu == "x64" || 386 current_cpu == "x86_64") { 387 defines += [ 388 "PANDA_TARGET_64", 389 "PANDA_TARGET_AMD64", 390 "PANDA_USE_32_BIT_POINTER", 391 ] 392 } 393} 394 395# ecmascript unit testcase config 396config("ecma_test_config") { 397 visibility = [ ":*" ] 398 399 configs = [ 400 "$js_root:ark_jsruntime_public_config", 401 "$js_root:ark_jsruntime_common_config", 402 ] 403 404 if (enable_leak_check) { 405 defines = [ "ECMASCRIPT_ENABLE_HANDLE_LEAK_CHECK" ] 406 } 407 408 ldflags = [ "-Wl,-rpath=\$ORIGIN/" ] 409} 410 411# ecmascript icu path for testcase config 412config("icu_path_test_config") { 413 icu_data_path = rebase_path("//third_party/icu/ohos_icu4j/data") 414 defines = [ "ICU_PATH=\"${icu_data_path}\"" ] 415} 416 417# asm interpreter enable config 418config("asm_interp_enable_config") { 419 if ((current_cpu == "amd64" || current_cpu == "x64" || 420 current_cpu == "x86_64" || current_cpu == "arm64") && !is_mingw && 421 !is_mac && !is_emulator) { 422 defines = [ "SUPPORT_ENABLE_ASM_INTERP" ] 423 } 424} 425 426ecma_source = [ 427 "ecmascript/base/array_helper.cpp", 428 "ecmascript/base/atomic_helper.cpp", 429 "ecmascript/base/builtins_base.cpp", 430 "ecmascript/base/error_helper.cpp", 431 "ecmascript/base/json_parser.cpp", 432 "ecmascript/base/json_stringifier.cpp", 433 "ecmascript/base/number_helper.cpp", 434 "ecmascript/base/string_helper.cpp", 435 "ecmascript/base/typed_array_helper.cpp", 436 "ecmascript/base/utf_helper.cpp", 437 "ecmascript/builtins/builtins.cpp", 438 "ecmascript/builtins/builtins_ark_tools.cpp", 439 "ecmascript/builtins/builtins_array.cpp", 440 "ecmascript/builtins/builtins_arraybuffer.cpp", 441 "ecmascript/builtins/builtins_async_from_sync_iterator.cpp", 442 "ecmascript/builtins/builtins_async_function.cpp", 443 "ecmascript/builtins/builtins_async_generator.cpp", 444 "ecmascript/builtins/builtins_atomics.cpp", 445 "ecmascript/builtins/builtins_bigint.cpp", 446 "ecmascript/builtins/builtins_boolean.cpp", 447 "ecmascript/builtins/builtins_dataview.cpp", 448 "ecmascript/builtins/builtins_date.cpp", 449 "ecmascript/builtins/builtins_errors.cpp", 450 "ecmascript/builtins/builtins_finalization_registry.cpp", 451 "ecmascript/builtins/builtins_function.cpp", 452 "ecmascript/builtins/builtins_generator.cpp", 453 "ecmascript/builtins/builtins_global.cpp", 454 "ecmascript/builtins/builtins_iterator.cpp", 455 "ecmascript/builtins/builtins_async_iterator.cpp", 456 "ecmascript/builtins/builtins_json.cpp", 457 "ecmascript/builtins/builtins_map.cpp", 458 "ecmascript/builtins/builtins_math.cpp", 459 "ecmascript/builtins/builtins_number.cpp", 460 "ecmascript/builtins/builtins_object.cpp", 461 "ecmascript/builtins/builtins_promise.cpp", 462 "ecmascript/builtins/builtins_promise_handler.cpp", 463 "ecmascript/builtins/builtins_promise_job.cpp", 464 "ecmascript/builtins/builtins_proxy.cpp", 465 "ecmascript/builtins/builtins_reflect.cpp", 466 "ecmascript/builtins/builtins_regexp.cpp", 467 "ecmascript/builtins/builtins_set.cpp", 468 "ecmascript/builtins/builtins_sharedarraybuffer.cpp", 469 "ecmascript/builtins/builtins_string.cpp", 470 "ecmascript/builtins/builtins_string_iterator.cpp", 471 "ecmascript/builtins/builtins_symbol.cpp", 472 "ecmascript/builtins/builtins_typedarray.cpp", 473 "ecmascript/builtins/builtins_weak_map.cpp", 474 "ecmascript/builtins/builtins_weak_ref.cpp", 475 "ecmascript/builtins/builtins_weak_set.cpp", 476 "ecmascript/byte_array.cpp", 477 "ecmascript/containers/containers_arraylist.cpp", 478 "ecmascript/containers/containers_deque.cpp", 479 "ecmascript/containers/containers_errors.cpp", 480 "ecmascript/containers/containers_hashmap.cpp", 481 "ecmascript/containers/containers_hashset.cpp", 482 "ecmascript/containers/containers_lightweightmap.cpp", 483 "ecmascript/containers/containers_lightweightset.cpp", 484 "ecmascript/containers/containers_linked_list.cpp", 485 "ecmascript/containers/containers_list.cpp", 486 "ecmascript/containers/containers_plainarray.cpp", 487 "ecmascript/containers/containers_private.cpp", 488 "ecmascript/containers/containers_queue.cpp", 489 "ecmascript/containers/containers_stack.cpp", 490 "ecmascript/containers/containers_treemap.cpp", 491 "ecmascript/containers/containers_treeset.cpp", 492 "ecmascript/containers/containers_vector.cpp", 493 "ecmascript/date_parse.cpp", 494 "ecmascript/deoptimizer/calleeReg.cpp", 495 "ecmascript/deoptimizer/deoptimizer.cpp", 496 "ecmascript/deoptimizer/relocator.cpp", 497 "ecmascript/dfx/stackinfo/js_stackinfo.cpp", 498 "ecmascript/dfx/vmstat/caller_stat.cpp", 499 "ecmascript/dfx/vmstat/opt_code_profiler.cpp", 500 "ecmascript/dfx/vmstat/runtime_stat.cpp", 501 "ecmascript/dfx/vm_thread_control.cpp", 502 "ecmascript/dump.cpp", 503 "ecmascript/ecma_string.cpp", 504 "ecmascript/ecma_string_table.cpp", 505 "ecmascript/ecma_vm.cpp", 506 "ecmascript/frames.cpp", 507 "ecmascript/free_object.cpp", 508 "ecmascript/aot_file_manager.cpp", 509 "ecmascript/generator_helper.cpp", 510 "ecmascript/async_generator_helper.cpp", 511 "ecmascript/global_env.cpp", 512 "ecmascript/global_env_constants.cpp", 513 "ecmascript/ic/ic_runtime.cpp", 514 "ecmascript/ic/ic_compare_op.cpp", 515 "ecmascript/ic/invoke_cache.cpp", 516 "ecmascript/ic/profile_type_info.cpp", 517 "ecmascript/ic/property_box.cpp", 518 "ecmascript/ic/proto_change_details.cpp", 519 "ecmascript/interpreter/frame_handler.cpp", 520 "ecmascript/interpreter/interpreter.cpp", 521 "ecmascript/interpreter/interpreter_assembly.cpp", 522 "ecmascript/interpreter/slow_runtime_stub.cpp", 523 "ecmascript/jobs/micro_job_queue.cpp", 524 "ecmascript/jspandafile/js_pandafile.cpp", 525 "ecmascript/jspandafile/js_pandafile_manager.cpp", 526 "ecmascript/jspandafile/class_info_extractor.cpp", 527 "ecmascript/jspandafile/debug_info_extractor.cpp", 528 "ecmascript/jspandafile/literal_data_extractor.cpp", 529 "ecmascript/jspandafile/module_data_extractor.cpp", 530 "ecmascript/jspandafile/accessor/module_data_accessor.cpp", 531 "ecmascript/jspandafile/panda_file_translator.cpp", 532 "ecmascript/jspandafile/js_pandafile_executor.cpp", 533 "ecmascript/jspandafile/scope_info_extractor.cpp", 534 "ecmascript/jspandafile/method_literal.cpp", 535 "ecmascript/jspandafile/program_object.cpp", 536 "ecmascript/jspandafile/quick_fix_loader.cpp", 537 "ecmascript/jspandafile/quick_fix_manager.cpp", 538 "ecmascript/js_api/js_api_arraylist.cpp", 539 "ecmascript/js_api/js_api_arraylist_iterator.cpp", 540 "ecmascript/js_api/js_api_deque.cpp", 541 "ecmascript/js_api/js_api_deque_iterator.cpp", 542 "ecmascript/js_api/js_api_hashmap.cpp", 543 "ecmascript/js_api/js_api_hashmap_iterator.cpp", 544 "ecmascript/js_api/js_api_hashset.cpp", 545 "ecmascript/js_api/js_api_hashset_iterator.cpp", 546 "ecmascript/js_api/js_api_lightweightmap.cpp", 547 "ecmascript/js_api/js_api_lightweightmap_iterator.cpp", 548 "ecmascript/js_api/js_api_lightweightset.cpp", 549 "ecmascript/js_api/js_api_lightweightset_iterator.cpp", 550 "ecmascript/js_api/js_api_linked_list.cpp", 551 "ecmascript/js_api/js_api_linked_list_iterator.cpp", 552 "ecmascript/js_api/js_api_list.cpp", 553 "ecmascript/js_api/js_api_list_iterator.cpp", 554 "ecmascript/js_api/js_api_plain_array.cpp", 555 "ecmascript/js_api/js_api_plain_array_iterator.cpp", 556 "ecmascript/js_api/js_api_queue.cpp", 557 "ecmascript/js_api/js_api_queue_iterator.cpp", 558 "ecmascript/js_api/js_api_stack.cpp", 559 "ecmascript/js_api/js_api_stack_iterator.cpp", 560 "ecmascript/js_api/js_api_tree_map.cpp", 561 "ecmascript/js_api/js_api_tree_map_iterator.cpp", 562 "ecmascript/js_api/js_api_tree_set.cpp", 563 "ecmascript/js_api/js_api_tree_set_iterator.cpp", 564 "ecmascript/js_api/js_api_vector.cpp", 565 "ecmascript/js_api/js_api_vector_iterator.cpp", 566 "ecmascript/js_arguments.cpp", 567 "ecmascript/js_array.cpp", 568 "ecmascript/js_array_iterator.cpp", 569 "ecmascript/js_arraybuffer.cpp", 570 "ecmascript/js_async_from_sync_iterator.cpp", 571 "ecmascript/js_async_function.cpp", 572 "ecmascript/js_bigint.cpp", 573 "ecmascript/js_dataview.cpp", 574 "ecmascript/js_date.cpp", 575 "ecmascript/js_for_in_iterator.cpp", 576 "ecmascript/js_finalization_registry.cpp", 577 "ecmascript/js_file_path.cpp", 578 "ecmascript/js_function.cpp", 579 "ecmascript/js_generator_object.cpp", 580 "ecmascript/js_async_generator_object.cpp", 581 "ecmascript/js_hclass.cpp", 582 "ecmascript/js_iterator.cpp", 583 "ecmascript/js_map.cpp", 584 "ecmascript/js_map_iterator.cpp", 585 "ecmascript/method.cpp", 586 "ecmascript/js_object.cpp", 587 "ecmascript/js_primitive_ref.cpp", 588 "ecmascript/js_promise.cpp", 589 "ecmascript/js_proxy.cpp", 590 "ecmascript/js_regexp_iterator.cpp", 591 "ecmascript/js_runtime_options.cpp", 592 "ecmascript/js_serializer.cpp", 593 "ecmascript/js_set.cpp", 594 "ecmascript/js_set_iterator.cpp", 595 "ecmascript/js_stable_array.cpp", 596 "ecmascript/js_string_iterator.cpp", 597 "ecmascript/js_tagged_value.cpp", 598 "ecmascript/js_thread.cpp", 599 "ecmascript/js_typed_array.cpp", 600 "ecmascript/js_weak_container.cpp", 601 "ecmascript/linked_hash_table.cpp", 602 "ecmascript/log.cpp", 603 "ecmascript/message_string.cpp", 604 "ecmascript/mem/barriers.cpp", 605 "ecmascript/mem/c_string.cpp", 606 "ecmascript/mem/chunk.cpp", 607 "ecmascript/mem/dyn_chunk.cpp", 608 "ecmascript/mem/full_gc.cpp", 609 "ecmascript/mem/concurrent_marker.cpp", 610 "ecmascript/mem/concurrent_sweeper.cpp", 611 "ecmascript/mem/free_object_list.cpp", 612 "ecmascript/mem/free_object_set.cpp", 613 "ecmascript/mem/gc_stats.cpp", 614 "ecmascript/mem/heap.cpp", 615 "ecmascript/mem/heap_region_allocator.cpp", 616 "ecmascript/mem/linear_space.cpp", 617 "ecmascript/mem/mem_controller.cpp", 618 "ecmascript/mem/mem_map_allocator.cpp", 619 "ecmascript/mem/native_area_allocator.cpp", 620 "ecmascript/mem/parallel_evacuator.cpp", 621 "ecmascript/mem/parallel_marker.cpp", 622 "ecmascript/mem/partial_gc.cpp", 623 "ecmascript/mem/stw_young_gc.cpp", 624 "ecmascript/mem/space.cpp", 625 "ecmascript/mem/sparse_space.cpp", 626 "ecmascript/mem/verification.cpp", 627 "ecmascript/mem/work_manager.cpp", 628 "ecmascript/module/js_module_manager.cpp", 629 "ecmascript/module/js_module_namespace.cpp", 630 "ecmascript/module/js_module_record.cpp", 631 "ecmascript/module/js_module_source_text.cpp", 632 "ecmascript/napi/jsnapi.cpp", 633 "ecmascript/object_factory.cpp", 634 "ecmascript/object_operator.cpp", 635 "ecmascript/pgo_profiler/pgo_profiler.cpp", 636 "ecmascript/pgo_profiler/pgo_profiler_info.cpp", 637 "ecmascript/pgo_profiler/pgo_profiler_loader.cpp", 638 "ecmascript/pgo_profiler/pgo_profiler_saver.cpp", 639 "ecmascript/stackmap/ark_stackmap_builder.cpp", 640 "ecmascript/stackmap/ark_stackmap_parser.cpp", 641 "ecmascript/stackmap/llvm_stackmap_parser.cpp", 642 "ecmascript/taskpool/taskpool.cpp", 643 "ecmascript/taskpool/runner.cpp", 644 "ecmascript/taskpool/task_queue.cpp", 645 "ecmascript/layout_info.cpp", 646 "ecmascript/regexp/regexp_executor.cpp", 647 "ecmascript/regexp/regexp_opcode.cpp", 648 "ecmascript/regexp/regexp_parser.cpp", 649 "ecmascript/regexp/regexp_parser_cache.cpp", 650 "ecmascript/shared_mm/shared_mm.cpp", 651 "ecmascript/tagged_dictionary.cpp", 652 "ecmascript/tagged_hash_array.cpp", 653 "ecmascript/tagged_list.cpp", 654 "ecmascript/tagged_node.cpp", 655 "ecmascript/tagged_tree.cpp", 656 "ecmascript/template_string.cpp", 657 "ecmascript/waiter_list.cpp", 658 "ecmascript/weak_vector.cpp", 659 "ecmascript/stubs/runtime_stubs.cpp", 660 "ecmascript/ts_types/ts_type.cpp", 661 "ecmascript/ts_types/ts_type_table.cpp", 662 "ecmascript/ts_types/ts_manager.cpp", 663 "ecmascript/ts_types/ts_obj_layout_info.cpp", 664 "ecmascript/ts_types/ts_type_parser.cpp", 665 "ecmascript/ts_types/ts_type_table_generator.cpp", 666 "ecmascript/stubs/test_runtime_stubs.cpp", 667 "ecmascript/builtins/builtins_cjs_module.cpp", 668 "ecmascript/builtins/builtins_cjs_require.cpp", 669 "ecmascript/builtins/builtins_cjs_exports.cpp", 670 "ecmascript/require/js_cjs_module_cache.cpp", 671 "ecmascript/require/js_cjs_module.cpp", 672 "ecmascript/require/js_require_manager.cpp", 673] 674 675if (!is_mingw && !is_mac && target_os != "ios") { 676 ecma_source += [ "ecmascript/napi/dfx_jsnapi.cpp" ] 677 ecma_source += [ "ecmascript/dfx/hprof/file_stream.cpp" ] 678} 679 680hitrace_scope_source = [] 681if (is_ohos && is_standard_system && enable_hitrace) { 682 hitrace_scope_source += [ "ecmascript/jobs/hitrace_scope.cpp" ] 683} 684 685ecma_debugger_source = [ 686 "ecmascript/debugger/debugger_api.cpp", 687 "ecmascript/debugger/js_debugger.cpp", 688 "ecmascript/debugger/hot_reload_manager.cpp", 689] 690 691ecma_profiler_source = [] 692if (!is_mingw && !is_mac && target_os != "ios") { 693 ecma_profiler_source += [ 694 "ecmascript/dfx/cpu_profiler/cpu_profiler.cpp", 695 "ecmascript/dfx/cpu_profiler/sampling_processor.cpp", 696 "ecmascript/dfx/cpu_profiler/samples_record.cpp", 697 "ecmascript/dfx/hprof/heap_profiler.cpp", 698 "ecmascript/dfx/hprof/heap_profiler_interface.cpp", 699 "ecmascript/dfx/hprof/heap_root_visitor.cpp", 700 "ecmascript/dfx/hprof/heap_snapshot.cpp", 701 "ecmascript/dfx/hprof/heap_snapshot_json_serializer.cpp", 702 "ecmascript/dfx/hprof/heap_tracker.cpp", 703 "ecmascript/dfx/hprof/string_hashmap.cpp", 704 "ecmascript/base/block_hook_scope.cpp", 705 ] 706} 707 708ecma_profiler_source += [ 709 "ecmascript/snapshot/mem/snapshot.cpp", 710 "ecmascript/snapshot/mem/snapshot_env.cpp", 711 "ecmascript/snapshot/mem/snapshot_processor.cpp", 712] 713 714ecma_platform_source = [] 715if (is_mingw) { 716 ecma_platform_source += [ 717 "ecmascript/platform/common/elf.cpp", 718 "ecmascript/platform/windows/backtrace.cpp", 719 "ecmascript/platform/windows/map.cpp", 720 "ecmascript/platform/windows/file.cpp", 721 "ecmascript/platform/windows/os.cpp", 722 "ecmascript/platform/windows/time.cpp", 723 ] 724} else { 725 ecma_platform_source += [ 726 "ecmascript/platform/unix/file.cpp", 727 "ecmascript/platform/unix/map.cpp", 728 "ecmascript/platform/unix/time.cpp", 729 ] 730 if (is_mac || target_os == "ios") { 731 ecma_platform_source += [ 732 "ecmascript/platform/common/elf.cpp", 733 "ecmascript/platform/unix/mac/os.cpp", 734 "ecmascript/platform/unix/mac/backtrace.cpp", 735 ] 736 } else { 737 ecma_platform_source += [ 738 "ecmascript/platform/unix/linux/os.cpp", 739 "ecmascript/platform/unix/elf.cpp", 740 ] 741 if (is_ohos && is_standard_system) { 742 ecma_platform_source += [ "ecmascript/platform/unix/ohos/backtrace.cpp" ] 743 } else { 744 ecma_platform_source += [ "ecmascript/platform/unix/linux/backtrace.cpp" ] 745 } 746 } 747} 748 749source_set("libark_jsruntime_set") { 750 sources = ecma_source 751 sources += ecma_profiler_source 752 sources += ecma_debugger_source 753 sources += hitrace_scope_source 754 sources += ecma_platform_source 755 756 public_configs = [ 757 "$js_root:ark_jsruntime_common_config", 758 "$js_root:ark_jsruntime_public_config", 759 "$js_root:asm_interp_enable_config", 760 ] 761 762 deps = [] 763 if (is_mingw) { 764 public_configs += [ ":ark_jsruntime_windows_config" ] 765 } 766 if (is_mingw || is_mac) { 767 defines = [ "ECMASCRIPT_SUPPORT_DEBUGGER" ] 768 } 769 cflags_cc = [] 770 if (is_standard_system) { 771 cflags_cc += [ "-fvisibility=hidden" ] 772 } 773 774 deps += [ 775 "$ark_root/libpandafile:arkfile_header_deps", 776 sdk_libc_secshared_dep, 777 ] 778 779 if (is_ohos && is_standard_system) { 780 defines = [ "ENABLE_EXCEPTION_BACKTRACE" ] 781 include_dirs = [] 782 if (enable_bytrace) { 783 defines += [ "ENABLE_BYTRACE" ] 784 include_dirs += [ "//base/hiviewdfx/hitrace/interfaces/native/innerkits/include/hitrace_meter" ] 785 cflags_cc += [ "-Wno-gnu-zero-variadic-macro-arguments" ] 786 } 787 if (enable_hitrace) { 788 defines += [ "ENABLE_HITRACE" ] 789 include_dirs += 790 [ "//base/hiviewdfx/hitrace/interfaces/native/innerkits/include" ] 791 } 792 if (enable_dump_in_faultlog) { 793 defines += [ "ENABLE_DUMP_IN_FAULTLOG" ] 794 include_dirs += [ "//base/hiviewdfx/faultloggerd/interfaces/innerkits/faultloggerd_client" ] 795 } 796 if (enable_hilog) { 797 defines += [ "ENABLE_HILOG" ] 798 include_dirs += 799 [ "//base/hiviewdfx/hilog/interfaces/native/innerkits/include" ] 800 } 801 if (enable_leak_check) { 802 defines += [ "ECMASCRIPT_ENABLE_HANDLE_LEAK_CHECK" ] 803 } 804 if (use_musl && current_cpu == "arm" && !is_mac && !is_mingw && 805 target_os != "ios") { 806 defines += [ "BLOCK_HOOK" ] 807 } 808 } 809} 810 811source_set("libark_js_intl_set") { 812 sources = intl_sources 813 814 public_configs = [ 815 "$js_root:ark_jsruntime_common_config", 816 "$js_root:ark_jsruntime_public_config", 817 ] 818 819 deps = [ 820 "$ark_root/libpandafile:arkfile_header_deps", 821 sdk_libc_secshared_dep, 822 ] 823} 824 825source_set("libark_jsruntime_test_set") { 826 sources = ecma_source 827 sources += intl_sources 828 sources += ecma_profiler_source 829 sources += ecma_debugger_source 830 sources += ecma_platform_source 831 832 defines = [ "OHOS_UNIT_TEST" ] 833 deps = [ 834 "$ark_root/libpandafile:arkfile_header_deps", 835 "$ark_third_party_root/icu/icu4c:shared_icui18n", 836 "$ark_third_party_root/icu/icu4c:shared_icuuc", 837 sdk_libc_secshared_dep, 838 ] 839 840 if (enable_coverage) { 841 ldflags = [ "--coverage" ] 842 cflags_cc = [ "--coverage" ] 843 } 844 845 if ((current_cpu == "amd64" || current_cpu == "x64" || 846 current_cpu == "x86_64" || current_cpu == "arm64") && !is_mingw && 847 !is_mac && target_os != "ios" && host_os != "mac") { 848 deps += [ "$js_root/ecmascript/compiler:libark_stub_set" ] 849 } else { 850 deps += [ "$js_root/ecmascript/compiler:libark_mock_stub_set" ] 851 } 852 853 if (enable_leak_check) { 854 defines += [ "ECMASCRIPT_ENABLE_HANDLE_LEAK_CHECK" ] 855 } 856 857 public_configs = [ 858 "$js_root:ark_jsruntime_common_config", 859 "$js_root:ark_jsruntime_public_config", 860 "$js_root:asm_interp_enable_config", 861 "$js_root:icu_path_test_config", 862 ] 863} 864 865source_set("libark_jsruntime_static") { 866 deps = [ 867 ":libark_js_intl_set", 868 ":libark_jsruntime_set", 869 "$ark_root/libpandafile:libarkfile_static", 870 ] 871 872 if ((current_cpu == "amd64" || current_cpu == "x64" || 873 current_cpu == "x86_64" || current_cpu == "arm64") && !is_mingw && 874 !is_mac && target_os != "ios" && host_os != "mac") { 875 deps += [ "$js_root/ecmascript/compiler:libark_stub_set" ] 876 } else { 877 deps += [ "$js_root/ecmascript/compiler:libark_mock_stub_set" ] 878 } 879} 880 881ohos_shared_library("libark_jsruntime") { 882 deps = [ ":libark_jsruntime_static" ] 883 884 if (is_ohos && is_standard_system) { 885 if (!is_debug) { 886 version_script = "libark_jsruntime.map" 887 } 888 if (enable_dump_in_faultlog || enable_bytrace || enable_hitrace || 889 enable_hilog) { 890 external_deps = [] 891 } 892 if (enable_dump_in_faultlog) { 893 external_deps += [ "faultloggerd:libfaultloggerd" ] 894 } 895 if (enable_bytrace) { 896 external_deps += [ "hitrace_native:hitrace_meter" ] 897 } 898 if (enable_hitrace) { 899 external_deps += [ "hitrace_native:libhitracechain" ] 900 } 901 if (enable_hilog) { 902 external_deps += [ "hiviewdfx_hilog_native:libhilog" ] 903 } 904 } 905 906 install_enable = true 907 908 if (!is_mingw && !is_mac) { 909 output_extension = "so" 910 } 911 if (!is_standard_system) { 912 relative_install_dir = "ark" 913 } 914 915 if (target_os == "android") { 916 aosp_deps = [ "shared_library:liblog" ] 917 } 918 if (is_mingw) { 919 deps += [ 920 "//base/hiviewdfx/hilog/interfaces/native/innerkits:libhilog_windows", 921 ] 922 } 923 if (is_mac && !ark_standalone_build) { 924 deps += [ 925 "//base/hiviewdfx/hilog/interfaces/native/innerkits:libhilog_mac", 926 ] 927 } 928 if (target_os == "ios" || ark_standalone_build) { 929 deps += [ 930 "$ark_third_party_root/icu/icu4c:static_icui18n", 931 "$ark_third_party_root/icu/icu4c:static_icuuc", 932 ] 933 } else { 934 deps += [ 935 "$ark_third_party_root/icu/icu4c:shared_icui18n", 936 "$ark_third_party_root/icu/icu4c:shared_icuuc", 937 ] 938 } 939 940 part_name = "ets_runtime" 941 subsystem_name = "arkcompiler" 942} 943 944ohos_shared_library("libark_jsruntime_test") { 945 deps = [ ":libark_jsruntime_test_set" ] 946 public_deps = [ "$ark_root/libpandafile:libarkfile_static" ] 947 948 ldflags = [] 949 if (enable_coverage) { 950 ldflags += [ "--coverage" ] 951 cflags_cc = [ "--coverage" ] 952 } 953 if (!ark_standalone_build) { 954 ldflags += [ "-Wl,--lto-O0" ] 955 } 956 957 install_enable = false 958 if (!is_mingw && !is_mac) { 959 output_extension = "so" 960 } 961 subsystem_name = "test" 962} 963