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("//ark/js_runtime/js_runtime_config.gni") 15import("//build/ohos.gni") 16 17group("ark_js_packages") { 18 deps = [] 19 if (host_os != "mac") { 20 deps += [ 21 "//ark/js_runtime:libark_jsruntime", 22 "//ark/js_runtime/ecmascript/js_vm:ark_js_vm", 23 "//ark/js_runtime/ecmascript/tooling:libark_ecma_debugger", 24 ] 25 } 26} 27 28group("ark_js_host_linux_tools_packages") { 29 deps = [] 30 if (host_os != "mac") { 31 deps += [ "//ark/js_runtime/ecmascript/js_vm:ark_js_vm(${host_toolchain})" ] 32 if (is_standard_system) { 33 deps += [ 34 "//ark/js_runtime/ecmascript/compiler:ark_stub_opt(${host_toolchain})", 35 "//ark/js_runtime/ecmascript/compiler:ark_ts_aot(${host_toolchain})", 36 ] 37 } 38 } 39} 40 41group("ark_js_unittest") { 42 testonly = true 43 deps = [] 44 if (host_os != "mac") { 45 deps += [ 46 "//ark/js_runtime/ecmascript/base/tests:unittest", 47 "//ark/js_runtime/ecmascript/builtins/tests:unittest", 48 "//ark/js_runtime/ecmascript/containers/tests:unittest", 49 "//ark/js_runtime/ecmascript/hprof/tests:unittest", 50 "//ark/js_runtime/ecmascript/ic/tests:unittest", 51 "//ark/js_runtime/ecmascript/napi/test:unittest", 52 "//ark/js_runtime/ecmascript/regexp/tests:unittest", 53 "//ark/js_runtime/ecmascript/snapshot/tests:unittest", 54 "//ark/js_runtime/ecmascript/tests:unittest", 55 "//ark/js_runtime/ecmascript/tooling/test:unittest", 56 "//ark/js_runtime/ecmascript/ts_types/tests:unittest", 57 ] 58 } 59} 60 61group("ark_js_host_unittest") { 62 testonly = true 63 deps = [] 64 if (host_os != "mac") { 65 # js unittest 66 deps += [ 67 "//ark/js_runtime/ecmascript/base/tests:host_unittest", 68 "//ark/js_runtime/ecmascript/builtins/tests:host_unittest", 69 "//ark/js_runtime/ecmascript/containers/tests:host_unittest", 70 "//ark/js_runtime/ecmascript/hprof/tests:host_unittest", 71 "//ark/js_runtime/ecmascript/ic/tests:host_unittest", 72 "//ark/js_runtime/ecmascript/napi/test:host_unittest", 73 "//ark/js_runtime/ecmascript/regexp/tests:host_unittest", 74 "//ark/js_runtime/ecmascript/snapshot/tests:host_unittest", 75 "//ark/js_runtime/ecmascript/tests:host_unittest", 76 "//ark/js_runtime/ecmascript/tooling/test:host_unittest", 77 "//ark/js_runtime/ecmascript/ts_types/tests:host_unittest", 78 ] 79 if (is_standard_system) { 80 deps += [ "//ark/js_runtime/ecmascript/compiler/tests:host_unittest" ] 81 } 82 83 # js bytecode test 84 deps += [ "//ark/js_runtime/test/moduletest:ark_js_moduletest" ] 85 } 86} 87 88config("ark_jsruntime_public_config") { 89 configs = [ 90 "$ark_root/libpandabase:arkbase_public_config", 91 "$ark_root/libpandafile:arkfile_public_config", 92 sdk_libc_secshared_config, 93 ] 94 95 include_dirs = [ 96 "//ark/js_runtime", 97 "$ark_root", 98 ] 99} 100 101intl_sources = [ 102 "ecmascript/builtins/builtins_collator.cpp", 103 "ecmascript/builtins/builtins_date_time_format.cpp", 104 "ecmascript/builtins/builtins_intl.cpp", 105 "ecmascript/builtins/builtins_locale.cpp", 106 "ecmascript/builtins/builtins_number_format.cpp", 107 "ecmascript/builtins/builtins_plural_rules.cpp", 108 "ecmascript/builtins/builtins_relative_time_format.cpp", 109 "ecmascript/js_collator.cpp", 110 "ecmascript/js_date_time_format.cpp", 111 "ecmascript/js_locale.cpp", 112 "ecmascript/js_number_format.cpp", 113 "ecmascript/js_plural_rules.cpp", 114 "ecmascript/js_relative_time_format.cpp", 115] 116 117source_set("libark_js_intl_static") { 118 sources = intl_sources 119 120 public_configs = [ 121 ":ark_jsruntime_public_config", 122 ":ark_jsruntime_common_config", 123 "$ark_root/runtime:arkruntime_public_config", 124 ] 125 126 deps = [ 127 "$ark_root/libpandabase:libarkbase", 128 "$ark_root/libpandafile:libarkfile", 129 "$ark_root/runtime:arkruntime_header_deps", 130 "//third_party/icu/icu4c:shared_icui18n", 131 "//third_party/icu/icu4c:shared_icuuc", 132 sdk_libc_secshared_dep, 133 ] 134} 135 136config("ark_jsruntime_common_config") { 137 defines = [ "PANDA_ENABLE_LTO" ] 138 if (enable_stub_aot) { 139 defines += [ "ECMASCRIPT_ENABLE_STUB_AOT" ] 140 } 141 142 if (is_standard_system) { 143 defines += [ "IS_STANDARD_SYSTEM" ] 144 } 145 146 if (build_public_version) { 147 defines += [ "IS_PUBLIC_VERSION" ] 148 } 149 150 if (is_linux) { 151 defines += [ 152 "PANDA_TARGET_UNIX", 153 "PANDA_TARGET_LINUX", 154 "PANDA_USE_FUTEX", 155 ] 156 } else if (is_mingw) { 157 defines += [ 158 "PANDA_TARGET_WINDOWS", 159 "_CRTBLD", 160 "__LIBMSVCRT__", 161 ] 162 } else if (is_mac) { 163 defines += [ 164 "PANDA_TARGET_UNIX", 165 "PANDA_TARGET_MACOS", 166 "PANDA_USE_FUTEX", 167 ] 168 } else { 169 defines += [ 170 "PANDA_TARGET_UNIX", 171 "PANDA_USE_FUTEX", 172 ] 173 if (!is_standard_system && (current_cpu != "arm" || is_wearable_product)) { 174 defines += [ "PANDA_TARGET_MOBILE" ] 175 } 176 } 177 178 cflags_cc = [ 179 "-pedantic", 180 "-Wno-invalid-offsetof", 181 "-Wno-gnu-statement-expression", 182 "-pipe", 183 "-Wdate-time", 184 "-Wformat=2", 185 ] 186 187 if (!use_libfuzzer) { 188 cflags_cc += [ "-flto" ] 189 ldflags = [ "-flto" ] 190 } 191 192 if (is_debug) { 193 cflags_cc += [ 194 "-Og", 195 "-O0", 196 "-ggdb3", 197 ] 198 if (is_linux && (current_cpu == "x86" || current_cpu == "x64") && 199 run_with_asan) { 200 cflags_cc += [ 201 "-fsanitize=address", 202 "-fno-omit-frame-pointer", 203 ] 204 ldflags += [ "-L" + rebase_path("${root_out_dir}/ark/ark_js_runtime") ] 205 libs = [ "clang_rt.asan-x86_64" ] 206 } 207 } else { 208 defines += [ "NDEBUG" ] 209 } 210 211 if (current_cpu == "arm") { 212 defines += [ 213 "PANDA_TARGET_ARM32_ABI_SOFT=1", 214 "PANDA_TARGET_ARM32", 215 "PANDA_TARGET_32", 216 ] 217 } else if (current_cpu == "arm64") { 218 defines += [ 219 "PANDA_TARGET_ARM64", 220 "PANDA_TARGET_64", 221 "PANDA_ENABLE_GLOBAL_REGISTER_VARIABLES", 222 "PANDA_USE_32_BIT_POINTER", 223 ] 224 } else if (current_cpu == "x86") { 225 defines += [ "PANDA_TARGET_X86" ] 226 } else if (current_cpu == "amd64" || current_cpu == "x64" || 227 current_cpu == "x86_64") { 228 defines += [ 229 "PANDA_TARGET_64", 230 "PANDA_TARGET_AMD64", 231 "PANDA_USE_32_BIT_POINTER", 232 ] 233 } 234 235 if (!is_linux) { 236 if (build_public_version) { 237 include_dirs = [ 238 "//base/hiviewdfx/hitrace/interfaces/native/innerkits/include", 239 "//developtools/bytrace_standard/interfaces/innerkits/native/include", 240 ] 241 } 242 cflags_cc += [ "-Wno-gnu-zero-variadic-macro-arguments" ] 243 } 244} 245 246config("ark_jsruntime_config") { 247 configs = [ ":ark_jsruntime_common_config" ] 248 cflags_cc = [ "-Wshadow" ] 249} 250 251# ecmascript unit testcase config 252config("ecma_test_config") { 253 visibility = [ ":*" ] 254 255 cflags_cc = [ "-Wno-sign-compare" ] 256 257 ldflags = [ "-Wl,-rpath=\$ORIGIN/" ] 258} 259 260ecma_source = [ 261 "ecmascript/base/array_helper.cpp", 262 "ecmascript/base/builtins_base.cpp", 263 "ecmascript/base/error_helper.cpp", 264 "ecmascript/base/json_parser.cpp", 265 "ecmascript/base/json_stringifier.cpp", 266 "ecmascript/base/number_helper.cpp", 267 "ecmascript/base/string_helper.cpp", 268 "ecmascript/base/typed_array_helper.cpp", 269 "ecmascript/base/utf_helper.cpp", 270 "ecmascript/builtins.cpp", 271 "ecmascript/builtins/builtins_ark_tools.cpp", 272 "ecmascript/builtins/builtins_array.cpp", 273 "ecmascript/builtins/builtins_arraybuffer.cpp", 274 "ecmascript/builtins/builtins_async_function.cpp", 275 "ecmascript/builtins/builtins_bigint.cpp", 276 "ecmascript/builtins/builtins_boolean.cpp", 277 "ecmascript/builtins/builtins_dataview.cpp", 278 "ecmascript/builtins/builtins_date.cpp", 279 "ecmascript/builtins/builtins_errors.cpp", 280 "ecmascript/builtins/builtins_function.cpp", 281 "ecmascript/builtins/builtins_generator.cpp", 282 "ecmascript/builtins/builtins_global.cpp", 283 "ecmascript/builtins/builtins_iterator.cpp", 284 "ecmascript/builtins/builtins_json.cpp", 285 "ecmascript/builtins/builtins_map.cpp", 286 "ecmascript/builtins/builtins_math.cpp", 287 "ecmascript/builtins/builtins_number.cpp", 288 "ecmascript/builtins/builtins_object.cpp", 289 "ecmascript/builtins/builtins_promise.cpp", 290 "ecmascript/builtins/builtins_promise_handler.cpp", 291 "ecmascript/builtins/builtins_promise_job.cpp", 292 "ecmascript/builtins/builtins_proxy.cpp", 293 "ecmascript/builtins/builtins_reflect.cpp", 294 "ecmascript/builtins/builtins_regexp.cpp", 295 "ecmascript/builtins/builtins_set.cpp", 296 "ecmascript/builtins/builtins_string.cpp", 297 "ecmascript/builtins/builtins_string_iterator.cpp", 298 "ecmascript/builtins/builtins_symbol.cpp", 299 "ecmascript/builtins/builtins_typedarray.cpp", 300 "ecmascript/builtins/builtins_weak_map.cpp", 301 "ecmascript/builtins/builtins_weak_set.cpp", 302 "ecmascript/class_linker/panda_file_translator.cpp", 303 "ecmascript/containers/containers_arraylist.cpp", 304 "ecmascript/containers/containers_private.cpp", 305 "ecmascript/containers/containers_treemap.cpp", 306 "ecmascript/containers/containers_treeset.cpp", 307 "ecmascript/cpu_profiler/cpu_profiler.cpp", 308 "ecmascript/cpu_profiler/profile_processor.cpp", 309 "ecmascript/cpu_profiler/profile_generator.cpp", 310 "ecmascript/dump.cpp", 311 "ecmascript/ecma_class_linker_extension.cpp", 312 "ecmascript/ecma_exceptions.cpp", 313 "ecmascript/ecma_language_context.cpp", 314 "ecmascript/ecma_module.cpp", 315 "ecmascript/ecma_string.cpp", 316 "ecmascript/ecma_string_table.cpp", 317 "ecmascript/ecma_vm.cpp", 318 "ecmascript/free_object.cpp", 319 "ecmascript/generator_helper.cpp", 320 "ecmascript/global_env.cpp", 321 "ecmascript/global_env_constants.cpp", 322 "ecmascript/hprof/heap_profiler.cpp", 323 "ecmascript/hprof/heap_profiler_interface.cpp", 324 "ecmascript/hprof/heap_root_visitor.cpp", 325 "ecmascript/hprof/heap_snapshot.cpp", 326 "ecmascript/hprof/heap_snapshot_json_serializer.cpp", 327 "ecmascript/hprof/heap_tracker.cpp", 328 "ecmascript/hprof/string_hashmap.cpp", 329 "ecmascript/ic/ic_runtime.cpp", 330 "ecmascript/ic/ic_compare_op.cpp", 331 "ecmascript/ic/invoke_cache.cpp", 332 "ecmascript/ic/profile_type_info.cpp", 333 "ecmascript/ic/property_box.cpp", 334 "ecmascript/ic/proto_change_details.cpp", 335 "ecmascript/internal_call_params.cpp", 336 "ecmascript/interpreter/frame_handler.cpp", 337 "ecmascript/interpreter/interpreter_assembly.cpp", 338 "ecmascript/interpreter/slow_runtime_helper.cpp", 339 "ecmascript/interpreter/slow_runtime_stub.cpp", 340 "ecmascript/jobs/micro_job_queue.cpp", 341 "ecmascript/jspandafile/debug_info_extractor.cpp", 342 "ecmascript/jspandafile/js_pandafile.cpp", 343 "ecmascript/jspandafile/js_pandafile_manager.cpp", 344 "ecmascript/jspandafile/scope_info_extractor.cpp", 345 "ecmascript/js_api_tree_map.cpp", 346 "ecmascript/js_api_tree_map_iterator.cpp", 347 "ecmascript/js_api_tree_set.cpp", 348 "ecmascript/js_api_tree_set_iterator.cpp", 349 "ecmascript/js_arguments.cpp", 350 "ecmascript/js_array.cpp", 351 "ecmascript/js_array_iterator.cpp", 352 "ecmascript/js_arraybuffer.cpp", 353 "ecmascript/js_api_arraylist.cpp", 354 "ecmascript/js_api_arraylist_iterator.cpp", 355 "ecmascript/js_async_function.cpp", 356 "ecmascript/js_bigint.cpp", 357 "ecmascript/js_dataview.cpp", 358 "ecmascript/js_date.cpp", 359 "ecmascript/js_for_in_iterator.cpp", 360 "ecmascript/js_function.cpp", 361 "ecmascript/js_generator_object.cpp", 362 "ecmascript/js_hclass.cpp", 363 "ecmascript/js_invoker.cpp", 364 "ecmascript/js_iterator.cpp", 365 "ecmascript/js_map.cpp", 366 "ecmascript/js_map_iterator.cpp", 367 "ecmascript/js_method.cpp", 368 "ecmascript/js_object.cpp", 369 "ecmascript/js_primitive_ref.cpp", 370 "ecmascript/js_promise.cpp", 371 "ecmascript/js_proxy.cpp", 372 "ecmascript/js_serializer.cpp", 373 "ecmascript/js_set.cpp", 374 "ecmascript/js_set_iterator.cpp", 375 "ecmascript/js_stable_array.cpp", 376 "ecmascript/js_string_iterator.cpp", 377 "ecmascript/js_tagged_value.cpp", 378 "ecmascript/js_thread.cpp", 379 "ecmascript/js_typed_array.cpp", 380 "ecmascript/js_weak_container.cpp", 381 "ecmascript/linked_hash_table.cpp", 382 "ecmascript/literal_data_extractor.cpp", 383 "ecmascript/message_string.cpp", 384 "ecmascript/mem/c_string.cpp", 385 "ecmascript/mem/chunk.cpp", 386 "ecmascript/mem/full_gc.cpp", 387 "ecmascript/mem/concurrent_marker.cpp", 388 "ecmascript/mem/concurrent_sweeper.cpp", 389 "ecmascript/mem/free_object_list.cpp", 390 "ecmascript/mem/free_object_set.cpp", 391 "ecmascript/mem/gc_stats.cpp", 392 "ecmascript/mem/heap.cpp", 393 "ecmascript/mem/heap_region_allocator.cpp", 394 "ecmascript/mem/linear_space.cpp", 395 "ecmascript/mem/mem_controller.cpp", 396 "ecmascript/mem/mix_gc.cpp", 397 "ecmascript/mem/native_area_allocator.cpp", 398 "ecmascript/mem/parallel_work_helper.cpp", 399 "ecmascript/mem/parallel_evacuation.cpp", 400 "ecmascript/mem/parallel_marker.cpp", 401 "ecmascript/mem/stw_young_gc_for_testing.cpp", 402 "ecmascript/mem/space.cpp", 403 "ecmascript/mem/sparse_space.cpp", 404 "ecmascript/mem/verification.cpp", 405 "ecmascript/napi/jsnapi.cpp", 406 "ecmascript/napi/dfx_jsnapi.cpp", 407 "ecmascript/object_factory.cpp", 408 "ecmascript/object_operator.cpp", 409 "ecmascript/platform/platform.cpp", 410 "ecmascript/platform/runner.cpp", 411 "ecmascript/platform/task_queue.cpp", 412 "ecmascript/layout_info.cpp", 413 "ecmascript/regexp/dyn_chunk.cpp", 414 "ecmascript/regexp/regexp_executor.cpp", 415 "ecmascript/regexp/regexp_opcode.cpp", 416 "ecmascript/regexp/regexp_parser.cpp", 417 "ecmascript/regexp/regexp_parser_cache.cpp", 418 "ecmascript/runtime_api.cpp", 419 "ecmascript/runtime_trampolines.cpp", 420 "ecmascript/snapshot/mem/slot_bit.cpp", 421 "ecmascript/snapshot/mem/snapshot.cpp", 422 "ecmascript/snapshot/mem/snapshot_serialize.cpp", 423 "ecmascript/stub_module.cpp", 424 "ecmascript/tagged_dictionary.cpp", 425 "ecmascript/tagged_tree.cpp", 426 "ecmascript/template_string.cpp", 427 "ecmascript/vmstat/caller_stat.cpp", 428 "ecmascript/vmstat/runtime_stat.cpp", 429 "ecmascript/weak_vector.cpp", 430 "ecmascript/compiler/llvm/llvm_stackmap_parser.cpp", 431 "ecmascript/class_info_extractor.cpp", 432 "ecmascript/ts_types/ts_type.cpp", 433 "ecmascript/ts_types/ts_type_table.cpp", 434 "ecmascript/ts_types/ts_loader.cpp", 435 "ecmascript/ts_types/ts_obj_layout_info.cpp", 436] 437 438ecma_source += [ 439 "ecmascript/tooling/backend/debugger_api.cpp", 440 "ecmascript/tooling/backend/js_debugger.cpp", 441] 442 443if (current_cpu == "arm") { 444 ecma_source += [ "ecmascript/trampoline/call_trampoline_arm32.S" ] 445} else if (current_cpu == "arm64") { 446 ecma_source += [ "ecmascript/trampoline/call_trampoline_aarch64.S" ] 447} else if (current_cpu == "amd64" || current_cpu == "x64" || 448 current_cpu == "x86_64") { 449 ecma_source += [ "ecmascript/trampoline/call_trampoline_amd64.S" ] 450} 451source_set("libark_jsruntime_set") { 452 sources = ecma_source 453 454 public_configs = [ 455 ":ark_jsruntime_public_config", # should add before 456 # arkruntime_public_config 457 ":ark_jsruntime_config", 458 "$ark_root/runtime:arkruntime_public_config", 459 ] 460 461 deps = [ 462 "$ark_root/libpandabase:libarkbase", 463 "$ark_root/libpandafile:libarkfile", 464 sdk_libc_secshared_dep, 465 ] 466 467 if (is_standard_system) { 468 cflags_cc = [ "-fvisibility=hidden" ] 469 deps += [ "$ark_root/runtime:libarkruntime_static" ] 470 } else { 471 deps += [ "$ark_root/runtime:libarkruntime" ] 472 } 473 474 if (is_debug && is_linux && (current_cpu == "x86" || current_cpu == "x64") && 475 run_with_asan) { 476 deps += [ ":copy_asan_runtime" ] 477 } 478} 479 480ohos_shared_library("libark_jsruntime") { 481 deps = [ 482 ":libark_js_intl_static", 483 ":libark_jsruntime_set", 484 ] 485 486 if (!is_linux) { 487 if (build_public_version) { 488 external_deps = [ 489 "bytrace_standard:bytrace_core", 490 "hitrace_native:libhitrace", 491 ] 492 } 493 } 494 495 configs = [ ":ark_jsruntime_config" ] 496 497 install_enable = true 498 part_name = "ark_js_runtime" 499 500 output_extension = "so" 501 if (!is_standard_system) { 502 relative_install_dir = "ark" 503 } 504 subsystem_name = "ark" 505} 506 507source_set("libark_jsruntime_test_set") { 508 sources = ecma_source 509 sources += intl_sources 510 511 deps = [ 512 "$ark_root/libpandabase:libarkbase", 513 "$ark_root/libpandafile:libarkfile", 514 "$ark_root/runtime:arkruntime_header_deps", 515 "//third_party/icu/icu4c:shared_icui18n", 516 "//third_party/icu/icu4c:shared_icuuc", 517 sdk_libc_secshared_dep, 518 ] 519 520 if (is_debug && is_linux && (current_cpu == "x86" || current_cpu == "x64") && 521 run_with_asan) { 522 deps += [ ":copy_asan_runtime" ] 523 } 524 525 public_configs = [ 526 ":ark_jsruntime_public_config", # should add before 527 # arkruntime_public_config 528 ":ark_jsruntime_common_config", 529 "$ark_root/runtime:arkruntime_public_config", 530 ] 531} 532 533ohos_shared_library("libark_jsruntime_test") { 534 configs = [ 535 ":ark_jsruntime_public_config", # should add before 536 # arkruntime_public_config 537 ":ark_jsruntime_common_config", 538 "$ark_root/runtime:arkruntime_public_config", 539 ] 540 541 deps = [ ":libark_jsruntime_test_set" ] 542 543 if (!is_linux) { 544 if (build_public_version) { 545 external_deps = [ 546 "bytrace_standard:bytrace_core", 547 "hitrace_native:libhitrace", 548 ] 549 } 550 } 551 552 if (is_standard_system) { 553 deps += [ "$ark_root/runtime:libarkruntime_static" ] 554 } else { 555 deps += [ "$ark_root/runtime:libarkruntime" ] 556 } 557 558 output_extension = "so" 559 subsystem_name = "test" 560} 561 562if (is_debug && is_linux && (current_cpu == "x86" || current_cpu == "x64") && 563 run_with_asan) { 564 ohos_copy("copy_asan_runtime") { 565 sources = [ "${asan_lib_path}/libclang_rt.asan-x86_64.a" ] 566 outputs = [ "${root_out_dir}/ark/ark_js_runtime/{{source_file_part}}" ] 567 } 568} 569