# Copyright (c) 2021-2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import("//ark/js_runtime/js_runtime_config.gni") import("//build/ohos.gni") group("ark_js_packages") { deps = [] if (host_os != "mac") { deps += [ "//ark/js_runtime:libark_jsruntime", "//ark/js_runtime/ecmascript/js_vm:ark_js_vm", "//ark/js_runtime/ecmascript/tooling:libark_ecma_debugger", ] } } group("ark_js_host_windows_tools_packages") { deps = [] if (host_os != "mac") { deps += [ "//ark/js_runtime/ecmascript/js_vm:ark_js_vm(//build/toolchain/mingw:mingw_x86_64)" ] } } group("ark_js_host_linux_tools_packages") { deps = [] if (host_os != "mac") { deps += [ "//ark/js_runtime/ecmascript/js_vm:ark_js_vm(${host_toolchain})" ] if (is_standard_system) { deps += [ "//ark/js_runtime/ecmascript/compiler:ark_aot_compiler(${host_toolchain})", "//ark/js_runtime/ecmascript/compiler:ark_stub_compiler(${host_toolchain})", ] } } } group("ark_js_unittest") { testonly = true deps = [] if (host_os != "mac") { deps += [ "//ark/js_runtime/ecmascript/base/tests:unittest", "//ark/js_runtime/ecmascript/builtins/tests:unittest", "//ark/js_runtime/ecmascript/containers/tests:unittest", "//ark/js_runtime/ecmascript/dfx/hprof/tests:unittest", "//ark/js_runtime/ecmascript/ic/tests:unittest", "//ark/js_runtime/ecmascript/jobs/tests:unittest", "//ark/js_runtime/ecmascript/napi/test:unittest", "//ark/js_runtime/ecmascript/regexp/tests:unittest", "//ark/js_runtime/ecmascript/snapshot/tests:unittest", "//ark/js_runtime/ecmascript/tests:unittest", "//ark/js_runtime/ecmascript/tooling/test:unittest", "//ark/js_runtime/ecmascript/ts_types/tests:unittest", ] } } group("ark_js_host_unittest") { testonly = true deps = [] if (host_os != "mac") { # js unittest deps += [ "//ark/js_runtime/ecmascript/base/tests:host_unittest", "//ark/js_runtime/ecmascript/builtins/tests:host_unittest", "//ark/js_runtime/ecmascript/containers/tests:host_unittest", "//ark/js_runtime/ecmascript/dfx/hprof/tests:host_unittest", "//ark/js_runtime/ecmascript/ic/tests:host_unittest", "//ark/js_runtime/ecmascript/jobs/tests:host_unittest", "//ark/js_runtime/ecmascript/napi/test:host_unittest", "//ark/js_runtime/ecmascript/regexp/tests:host_unittest", "//ark/js_runtime/ecmascript/snapshot/tests:host_unittest", "//ark/js_runtime/ecmascript/tests:host_unittest", "//ark/js_runtime/ecmascript/tooling/test:host_unittest", "//ark/js_runtime/ecmascript/ts_types/tests:host_unittest", ] if (is_standard_system) { deps += [ "//ark/js_runtime/ecmascript/compiler/tests:host_unittest" ] } # js bytecode test deps += [ "//ark/js_runtime/test/moduletest:ark_js_moduletest" ] # ts bytecode test # deps += [ "//ark/js_runtime/test/aottest:ark_aottest"] } } config("ark_jsruntime_public_config") { configs = [ "$ark_root/libpandabase:arkbase_public_config", "$ark_root/libpandafile:arkfile_public_config", "//third_party/icu/icu4c:icu_config", sdk_libc_secshared_config, ] defines = [] if (!is_mingw) { defines += [ "ECMASCRIPT_SUPPORT_CPUPROFILER", "ECMASCRIPT_SUPPORT_SNAPSHOT", "ECMASCRIPT_SUPPORT_DEBUGGER", ] } include_dirs = [ "//ark/js_runtime", # Dependent on runtime_core include "$ark_root/runtime", "$ark_root", ] } intl_sources = [ "ecmascript/builtins/builtins_collator.cpp", "ecmascript/builtins/builtins_date_time_format.cpp", "ecmascript/builtins/builtins_displaynames.cpp", "ecmascript/builtins/builtins_intl.cpp", "ecmascript/builtins/builtins_locale.cpp", "ecmascript/builtins/builtins_number_format.cpp", "ecmascript/builtins/builtins_plural_rules.cpp", "ecmascript/builtins/builtins_relative_time_format.cpp", "ecmascript/js_collator.cpp", "ecmascript/js_date_time_format.cpp", "ecmascript/js_displaynames.cpp", "ecmascript/js_locale.cpp", "ecmascript/js_number_format.cpp", "ecmascript/js_plural_rules.cpp", "ecmascript/js_relative_time_format.cpp", ] source_set("libark_js_intl_static") { sources = intl_sources public_configs = [ "//ark/js_runtime:ark_jsruntime_common_config", "//ark/js_runtime:ark_jsruntime_public_config", ] deps = [ "$ark_root/libpandabase:libarkbase", "$ark_root/libpandafile:libarkfile", "//third_party/icu/icu4c:shared_icui18n", "//third_party/icu/icu4c:shared_icuuc", sdk_libc_secshared_dep, ] } config("ark_jsruntime_compiler_config") { configs = [ "//ark/js_runtime:ark_jsruntime_common_config" ] } config("ark_jsruntime_common_config") { defines = [ "PANDA_ENABLE_LTO" ] cflags_cc = [ "-Wall", "-Wshadow", "-Werror", "-Wextra", "-pedantic", "-Wno-invalid-offsetof", "-Wno-gnu-statement-expression", "-pipe", "-Wdate-time", "-Wformat=2", ] if (enable_asm_interp) { defines += [ "ECMASCRIPT_COMPILE_ASM_INTERPRETER" ] } if (enable_test_stub) { defines += [ "ECMASCRIPT_ENABLE_TEST_STUB" ] } if (use_musl) { defines += [ "PANDA_USE_MUSL" ] } if (is_standard_system) { defines += [ "IS_STANDARD_SYSTEM" ] } if (build_public_version) { defines += [ "IS_PUBLIC_VERSION" ] } if (is_linux) { defines += [ "PANDA_TARGET_UNIX", "PANDA_TARGET_LINUX", "PANDA_USE_FUTEX", ] } else if (is_mingw) { cflags_cc += [ "-std=c++17", "-Wno-ignored-attributes", ] defines += [ "PANDA_TARGET_WINDOWS", "_CRTBLD", "__LIBMSVCRT__", ] } else if (is_mac) { defines += [ "PANDA_TARGET_UNIX", "PANDA_TARGET_MACOS", "PANDA_USE_FUTEX", ] } else { defines += [ "PANDA_TARGET_UNIX", "PANDA_USE_FUTEX", ] if (!is_standard_system && (current_cpu != "arm" || is_wearable_product)) { defines += [ "PANDA_TARGET_MOBILE" ] } } if (!use_libfuzzer) { cflags_cc += [ "-flto" ] ldflags = [ "-flto" ] } if (is_debug) { cflags_cc += [ "-Og", "-O0", "-ggdb3", ] if (is_linux && (current_cpu == "x86" || current_cpu == "x64") && run_with_asan) { cflags_cc += [ "-fsanitize=address", "-fno-omit-frame-pointer", ] ldflags += [ "-L" + rebase_path("${root_out_dir}/ark/ark_js_runtime") ] libs = [ "clang_rt.asan-x86_64" ] } } else { defines += [ "NDEBUG" ] } if (current_cpu == "arm") { defines += [ "PANDA_TARGET_ARM32_ABI_SOFT=1", "PANDA_TARGET_ARM32", "PANDA_TARGET_32", ] } else if (current_cpu == "arm64") { defines += [ "PANDA_TARGET_ARM64", "PANDA_TARGET_64", "PANDA_ENABLE_GLOBAL_REGISTER_VARIABLES", "PANDA_USE_32_BIT_POINTER", ] } else if (current_cpu == "x86") { defines += [ "PANDA_TARGET_X86" ] } else if (current_cpu == "amd64" || current_cpu == "x64" || current_cpu == "x86_64") { defines += [ "PANDA_TARGET_64", "PANDA_TARGET_AMD64", "PANDA_USE_32_BIT_POINTER", ] } if (!is_linux) { if (build_public_version && enable_bytrace) { defines += [ "ENABLE_BYTRACE" ] include_dirs = [ "//developtools/bytrace_standard/interfaces/innerkits/native/include", ] } cflags_cc += [ "-Wno-gnu-zero-variadic-macro-arguments" ] } } # ecmascript unit testcase config config("ecma_test_config") { visibility = [ ":*" ] configs = [ "//ark/js_runtime:ark_jsruntime_public_config", "//ark/js_runtime:ark_jsruntime_common_config", ] ldflags = [ "-Wl,-rpath=\$ORIGIN/" ] } ecma_source = [ "ecmascript/base/array_helper.cpp", "ecmascript/base/builtins_base.cpp", "ecmascript/base/error_helper.cpp", "ecmascript/base/json_parser.cpp", "ecmascript/base/json_stringifier.cpp", "ecmascript/base/number_helper.cpp", "ecmascript/base/string_helper.cpp", "ecmascript/base/typed_array_helper.cpp", "ecmascript/base/utf_helper.cpp", "ecmascript/builtins.cpp", "ecmascript/builtins/builtins_ark_tools.cpp", "ecmascript/builtins/builtins_array.cpp", "ecmascript/builtins/builtins_arraybuffer.cpp", "ecmascript/builtins/builtins_async_function.cpp", "ecmascript/builtins/builtins_bigint.cpp", "ecmascript/builtins/builtins_boolean.cpp", "ecmascript/builtins/builtins_dataview.cpp", "ecmascript/builtins/builtins_date.cpp", "ecmascript/builtins/builtins_errors.cpp", "ecmascript/builtins/builtins_function.cpp", "ecmascript/builtins/builtins_generator.cpp", "ecmascript/builtins/builtins_global.cpp", "ecmascript/builtins/builtins_iterator.cpp", "ecmascript/builtins/builtins_json.cpp", "ecmascript/builtins/builtins_map.cpp", "ecmascript/builtins/builtins_math.cpp", "ecmascript/builtins/builtins_number.cpp", "ecmascript/builtins/builtins_object.cpp", "ecmascript/builtins/builtins_promise.cpp", "ecmascript/builtins/builtins_promise_handler.cpp", "ecmascript/builtins/builtins_promise_job.cpp", "ecmascript/builtins/builtins_proxy.cpp", "ecmascript/builtins/builtins_reflect.cpp", "ecmascript/builtins/builtins_regexp.cpp", "ecmascript/builtins/builtins_set.cpp", "ecmascript/builtins/builtins_sharedarraybuffer.cpp", "ecmascript/builtins/builtins_string.cpp", "ecmascript/builtins/builtins_string_iterator.cpp", "ecmascript/builtins/builtins_symbol.cpp", "ecmascript/builtins/builtins_typedarray.cpp", "ecmascript/builtins/builtins_weak_map.cpp", "ecmascript/builtins/builtins_weak_set.cpp", "ecmascript/containers/containers_arraylist.cpp", "ecmascript/containers/containers_deque.cpp", "ecmascript/containers/containers_plainarray.cpp", "ecmascript/containers/containers_private.cpp", "ecmascript/containers/containers_queue.cpp", "ecmascript/containers/containers_stack.cpp", "ecmascript/containers/containers_treemap.cpp", "ecmascript/containers/containers_treeset.cpp", "ecmascript/dfx/vmstat/caller_stat.cpp", "ecmascript/dfx/vmstat/runtime_stat.cpp", "ecmascript/dfx/vm_thread_control.cpp", "ecmascript/dump.cpp", "ecmascript/ecma_exceptions.cpp", "ecmascript/ecma_string.cpp", "ecmascript/ecma_string_table.cpp", "ecmascript/ecma_vm.cpp", "ecmascript/free_object.cpp", "ecmascript/generator_helper.cpp", "ecmascript/global_env.cpp", "ecmascript/global_env_constants.cpp", "ecmascript/ic/ic_runtime.cpp", "ecmascript/ic/ic_compare_op.cpp", "ecmascript/ic/invoke_cache.cpp", "ecmascript/ic/profile_type_info.cpp", "ecmascript/ic/property_box.cpp", "ecmascript/ic/proto_change_details.cpp", "ecmascript/interpreter/frame_handler.cpp", "ecmascript/interpreter/interpreter.cpp", "ecmascript/interpreter/interpreter_assembly.cpp", "ecmascript/interpreter/slow_runtime_helper.cpp", "ecmascript/interpreter/slow_runtime_stub.cpp", "ecmascript/jobs/micro_job_queue.cpp", "ecmascript/jspandafile/js_pandafile.cpp", "ecmascript/jspandafile/js_pandafile_manager.cpp", "ecmascript/jspandafile/class_info_extractor.cpp", "ecmascript/jspandafile/debug_info_extractor.cpp", "ecmascript/jspandafile/literal_data_extractor.cpp", "ecmascript/jspandafile/module_data_extractor.cpp", "ecmascript/jspandafile/accessor/module_data_accessor.cpp", "ecmascript/jspandafile/panda_file_translator.cpp", "ecmascript/jspandafile/js_pandafile_executor.cpp", "ecmascript/jspandafile/scope_info_extractor.cpp", "ecmascript/js_api_arraylist.cpp", "ecmascript/js_api_arraylist_iterator.cpp", "ecmascript/js_api_deque.cpp", "ecmascript/js_api_deque_iterator.cpp", "ecmascript/js_api_plain_array.cpp", "ecmascript/js_api_plain_array_iterator.cpp", "ecmascript/js_api_queue.cpp", "ecmascript/js_api_queue_iterator.cpp", "ecmascript/js_api_stack.cpp", "ecmascript/js_api_stack_iterator.cpp", "ecmascript/js_api_tree_map.cpp", "ecmascript/js_api_tree_map_iterator.cpp", "ecmascript/js_api_tree_set.cpp", "ecmascript/js_api_tree_set_iterator.cpp", "ecmascript/js_arguments.cpp", "ecmascript/js_array.cpp", "ecmascript/js_array_iterator.cpp", "ecmascript/js_arraybuffer.cpp", "ecmascript/js_async_function.cpp", "ecmascript/js_bigint.cpp", "ecmascript/js_dataview.cpp", "ecmascript/js_date.cpp", "ecmascript/js_for_in_iterator.cpp", "ecmascript/js_function.cpp", "ecmascript/js_generator_object.cpp", "ecmascript/js_hclass.cpp", "ecmascript/js_iterator.cpp", "ecmascript/js_map.cpp", "ecmascript/js_map_iterator.cpp", "ecmascript/js_method.cpp", "ecmascript/js_object.cpp", "ecmascript/js_primitive_ref.cpp", "ecmascript/js_promise.cpp", "ecmascript/js_proxy.cpp", "ecmascript/js_serializer.cpp", "ecmascript/js_set.cpp", "ecmascript/js_set_iterator.cpp", "ecmascript/js_stable_array.cpp", "ecmascript/js_string_iterator.cpp", "ecmascript/js_tagged_value.cpp", "ecmascript/js_thread.cpp", "ecmascript/js_typed_array.cpp", "ecmascript/js_weak_container.cpp", "ecmascript/linked_hash_table.cpp", "ecmascript/message_string.cpp", "ecmascript/mem/barriers.cpp", "ecmascript/mem/c_string.cpp", "ecmascript/mem/chunk.cpp", "ecmascript/mem/dyn_chunk.cpp", "ecmascript/mem/full_gc.cpp", "ecmascript/mem/concurrent_marker.cpp", "ecmascript/mem/concurrent_sweeper.cpp", "ecmascript/mem/free_object_list.cpp", "ecmascript/mem/free_object_set.cpp", "ecmascript/mem/gc_stats.cpp", "ecmascript/mem/heap.cpp", "ecmascript/mem/heap_region_allocator.cpp", "ecmascript/mem/linear_space.cpp", "ecmascript/mem/machine_code.cpp", "ecmascript/mem/mem_controller.cpp", "ecmascript/mem/mem_map_allocator.cpp", "ecmascript/mem/mix_gc.cpp", "ecmascript/mem/native_area_allocator.cpp", "ecmascript/mem/parallel_work_helper.cpp", "ecmascript/mem/parallel_evacuation.cpp", "ecmascript/mem/parallel_marker.cpp", "ecmascript/mem/stw_young_gc_for_testing.cpp", "ecmascript/mem/space.cpp", "ecmascript/mem/sparse_space.cpp", "ecmascript/mem/verification.cpp", "ecmascript/module/js_module_manager.cpp", "ecmascript/module/js_module_namespace.cpp", "ecmascript/module/js_module_record.cpp", "ecmascript/module/js_module_source_text.cpp", "ecmascript/napi/jsnapi.cpp", "ecmascript/object_factory.cpp", "ecmascript/object_operator.cpp", "ecmascript/taskpool/taskpool.cpp", "ecmascript/taskpool/runner.cpp", "ecmascript/taskpool/task_queue.cpp", "ecmascript/layout_info.cpp", "ecmascript/regexp/regexp_executor.cpp", "ecmascript/regexp/regexp_opcode.cpp", "ecmascript/regexp/regexp_parser.cpp", "ecmascript/regexp/regexp_parser_cache.cpp", "ecmascript/shared_mm/shared_mm.cpp", "ecmascript/tagged_dictionary.cpp", "ecmascript/tagged_tree.cpp", "ecmascript/template_string.cpp", "ecmascript/weak_vector.cpp", "ecmascript/compiler/llvm/llvm_stackmap_parser.cpp", "ecmascript/stubs/runtime_stubs.cpp", "ecmascript/ts_types/ts_type.cpp", "ecmascript/ts_types/ts_type_table.cpp", "ecmascript/ts_types/ts_loader.cpp", "ecmascript/ts_types/ts_obj_layout_info.cpp", ] if (!is_mingw) { ecma_source += [ "ecmascript/napi/dfx_jsnapi.cpp" ] } if (enable_test_stub) { ecma_source += [ "ecmascript/stubs/test_runtime_stubs.cpp" ] } ecma_debugger_source = [] if (!is_mingw) { ecma_debugger_source += [ "ecmascript/tooling/interface/debugger_api.cpp", "ecmascript/tooling/interface/js_debugger.cpp", ] } ecma_profiler_source = [] if (!is_mingw) { ecma_profiler_source += [ "ecmascript/dfx/cpu_profiler/cpu_profiler.cpp", "ecmascript/dfx/cpu_profiler/profile_processor.cpp", "ecmascript/dfx/cpu_profiler/profile_generator.cpp", "ecmascript/dfx/hprof/heap_profiler.cpp", "ecmascript/dfx/hprof/heap_profiler_interface.cpp", "ecmascript/dfx/hprof/heap_root_visitor.cpp", "ecmascript/dfx/hprof/heap_snapshot.cpp", "ecmascript/dfx/hprof/heap_snapshot_json_serializer.cpp", "ecmascript/dfx/hprof/heap_tracker.cpp", "ecmascript/dfx/hprof/string_hashmap.cpp", "ecmascript/snapshot/mem/snapshot.cpp", "ecmascript/snapshot/mem/snapshot_serialize.cpp", ] } if (current_cpu == "arm") { ecma_source += [ "ecmascript/trampoline/arm32/call.S" ] } else if (current_cpu == "arm64") { ecma_source += [ "ecmascript/trampoline/aarch64/call.S" ] } else if (current_cpu == "amd64" || current_cpu == "x64" || current_cpu == "x86_64") { if (is_linux) { ecma_source += [ "ecmascript/trampoline/x64/call.S" ] } } source_set("libark_jsruntime_static") { sources = ecma_source sources += ecma_profiler_source sources += ecma_debugger_source public_configs = [ "//ark/js_runtime:ark_jsruntime_common_config", "//ark/js_runtime:ark_jsruntime_public_config", ] if (is_standard_system) { cflags_cc = [ "-fvisibility=hidden" ] } deps = [ "$ark_root/libpandabase:libarkbase", "$ark_root/libpandafile:libarkfile", sdk_libc_secshared_dep, ] if (is_debug && is_linux && (current_cpu == "x86" || current_cpu == "x64") && run_with_asan) { deps += [ ":copy_asan_runtime" ] } } source_set("libark_jsruntime_set_static") { if (is_mingw) { ldflags = [ "-lshlwapi" ] } deps = [ ":libark_js_intl_static", ":libark_jsruntime_static", ] } ohos_shared_library("libark_jsruntime") { deps = [ ":libark_jsruntime_set_static" ] defines = [] if (!is_linux && !is_mingw && !is_mac) { if (build_public_version && enable_bytrace) { defines += [ "ENABLE_BYTRACE" ] external_deps = [ "bytrace_standard:bytrace_core" ] } } install_enable = true part_name = "ark_js_runtime" if (!is_mingw) { output_extension = "so" } if (!is_standard_system) { relative_install_dir = "ark" } subsystem_name = "ark" } source_set("libark_jsruntime_test_static") { sources = ecma_source sources += intl_sources sources += ecma_profiler_source sources += ecma_debugger_source deps = [ "$ark_root/libpandabase:libarkbase", "$ark_root/libpandafile:libarkfile", "//third_party/icu/icu4c:shared_icui18n", "//third_party/icu/icu4c:shared_icuuc", sdk_libc_secshared_dep, ] if (is_debug && is_linux && (current_cpu == "x86" || current_cpu == "x64") && run_with_asan) { deps += [ ":copy_asan_runtime" ] } public_configs = [ "//ark/js_runtime:ark_jsruntime_common_config", "//ark/js_runtime:ark_jsruntime_public_config", ] } source_set("libark_jsruntime_test_set_static") { public_configs = [ "//ark/js_runtime:ark_jsruntime_common_config", "//ark/js_runtime:ark_jsruntime_public_config", ] deps = [ ":libark_jsruntime_test_static" ] } ohos_shared_library("libark_jsruntime_test") { deps = [ ":libark_jsruntime_test_set_static" ] defines = [] if (!is_linux && !is_mingw && !is_mac) { if (build_public_version && enable_bytrace) { defines += [ "ENABLE_BYTRACE" ] external_deps = [ "bytrace_standard:bytrace_core" ] } } output_extension = "so" subsystem_name = "test" } if (is_debug && is_linux && (current_cpu == "x86" || current_cpu == "x64") && run_with_asan) { ohos_copy("copy_asan_runtime") { sources = [ "${asan_lib_path}/libclang_rt.asan-x86_64.a" ] outputs = [ "${root_out_dir}/ark/ark_js_runtime/{{source_file_part}}" ] } }