• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_frontend/es2panda/es2abc_config.gni")
15import("//arkcompiler/ets_runtime/js_runtime_config.gni")
16import("$build_root/config/sanitizers/sanitizers.gni")
17import("$build_root/toolchain/toolchain.gni")
18
19group("ark_js_packages") {
20  deps = []
21
22  deps += [
23    ":libark_jsruntime",
24    "ecmascript/compiler:stub.an",
25    "ecmascript/js_vm:ark_js_vm",
26    "ecmascript/quick_fix:quick_fix",
27  ]
28  if (is_clang && clang_version != "9.0.3" && current_cpu == "arm64" &&
29      is_ohos) {
30    deps += [
31      "ecmascript/compiler:ark_aot_compiler",
32      "ecmascript/pgo_profiler/prof_dump:profdump",
33    ]
34  }
35}
36
37group("ark_js_host_windows_tools_packages") {
38  deps = []
39  if (host_os != "mac" && target_os != "android") {
40    deps += [
41      "ecmascript/compiler:ark_aot_compiler($build_root/toolchain/mingw:mingw_x86_64)",
42      "ecmascript/js_vm:ark_js_vm($build_root/toolchain/mingw:mingw_x86_64)",
43      "ecmascript/pgo_profiler/prof_dump:profdump($build_root/toolchain/mingw:mingw_x86_64)",
44    ]
45  }
46}
47
48group("ark_js_host_mac_tools_packages") {
49  deps = []
50  if (host_os == "mac") {
51    if (host_cpu == "arm64") {
52      deps += [
53        "ecmascript/compiler:ark_aot_compiler($build_root/toolchain/mac:clang_arm64)",
54        "ecmascript/js_vm:ark_js_vm($build_root/toolchain/mac:clang_arm64)",
55        "ecmascript/pgo_profiler/prof_dump:profdump($build_root/toolchain/mac:clang_arm64)",
56      ]
57    } else {
58      deps += [
59        "ecmascript/compiler:ark_aot_compiler($build_root/toolchain/mac:clang_x64)",
60        "ecmascript/js_vm:ark_js_vm($build_root/toolchain/mac:clang_x64)",
61        "ecmascript/pgo_profiler/prof_dump:profdump($build_root/toolchain/mac:clang_x64)",
62      ]
63    }
64  }
65}
66
67group("ark_js_host_linux_tools_packages") {
68  deps = []
69
70  deps += [
71    "ecmascript/js_vm:ark_js_vm(${host_toolchain})",
72    "ecmascript/quick_fix:quick_fix(${host_toolchain})",
73  ]
74  if (is_standard_system) {
75    deps += [
76      "ecmascript/compiler:ark_aot_compiler(${host_toolchain})",
77      "ecmascript/compiler:ark_stub_compiler(${host_toolchain})",
78      "ecmascript/pgo_profiler/prof_dump:profdump(${host_toolchain})",
79    ]
80  }
81}
82
83group("ark_js_unittest") {
84  testonly = true
85  deps = []
86
87  deps += [
88    "ecmascript/base/tests:unittest",
89    "ecmascript/builtins/tests:unittest",
90    "ecmascript/containers/tests:unittest",
91    "ecmascript/debugger/tests:unittest",
92    "ecmascript/dfx/hprof/tests:unittest",
93    "ecmascript/ic/tests:unittest",
94    "ecmascript/jobs/tests:unittest",
95    "ecmascript/jspandafile/tests:unittest",
96    "ecmascript/module/tests:unittest",
97    "ecmascript/napi/test:unittest",
98    "ecmascript/napi/test:workload_test",
99    "ecmascript/regexp/tests:unittest",
100    "ecmascript/require/tests:unittest",
101    "ecmascript/serializer/tests:unittest",
102    "ecmascript/snapshot/tests:unittest",
103    "ecmascript/tests:unittest",
104    "ecmascript/ts_types/tests:unittest",
105  ]
106  if (is_ohos && is_standard_system) {
107    deps += [ "test/fuzztest:fuzztest" ]
108  }
109  if (current_cpu == "arm64") {
110    deps += [ "ecmascript/pgo_profiler/tests:unittest" ]
111  }
112}
113
114group("ark_js_perform") {
115  testonly = true
116  deps = []
117  deps += [ "//arkcompiler/ets_runtime/test/perform:perform" ]
118}
119
120group("ark_unittest") {
121  testonly = true
122  deps = []
123
124  # js unittest
125  deps += [
126    "ecmascript/base/tests:host_unittest",
127    "ecmascript/builtins/tests:host_unittest",
128    "ecmascript/containers/tests:host_unittest",
129    "ecmascript/dfx/hprof/tests:host_unittest",
130    "ecmascript/ic/tests:host_unittest",
131    "ecmascript/jobs/tests:host_unittest",
132    "ecmascript/jspandafile/tests:host_unittest",
133    "ecmascript/module/tests:host_unittest",
134    "ecmascript/napi/test:host_unittest",
135    "ecmascript/pgo_profiler/tests:host_unittest",
136    "ecmascript/regexp/tests:host_unittest",
137    "ecmascript/require/tests:host_unittest",
138    "ecmascript/serializer/tests:host_unittest",
139    "ecmascript/snapshot/tests:host_unittest",
140    "ecmascript/tests:host_unittest",
141    "ecmascript/ts_types/tests:host_unittest",
142  ]
143  if (!run_with_asan) {
144    if (!(ark_standalone_build && current_os == "ohos")) {
145      deps += [
146        "ecmascript/compiler/tests:host_unittest",
147        "ecmascript/ohos/tests:host_unittest",
148      ]
149    }
150  }
151}
152
153_builtins_dts_path_ = rebase_path("./ecmascript/ts_types/lib_ark_builtins.d.ts")
154
155_es2abc_builtins_d_abc_path_ =
156    "$target_out_dir/lib_ark_builtins/es2abc/lib_ark_builtins.d.abc"
157
158es2abc_gen_abc("es2abc_gen_builtins_d_abc") {
159  extra_visibility = [ "*" ]
160
161  # extra_dependencies = _deps_
162  src_js = rebase_path(_builtins_dts_path_)
163  dst_file = rebase_path(_es2abc_builtins_d_abc_path_)
164  extension = "ts"
165  extra_args = [
166    "--module",
167    "--merge-abc",
168    "--type-extractor",
169    "--type-dts-builtin",
170  ]
171
172  in_puts = [ _builtins_dts_path_ ]
173  out_puts = [ _es2abc_builtins_d_abc_path_ ]
174}
175
176group("ark_runtime_host_unittest") {
177  testonly = true
178  deps = []
179
180  # js unittest
181  deps += [
182    ":ark_unittest",
183    "$js_root/test/pgotypeinfer:ark_pgotypeinfer_test",
184  ]
185
186  # js bytecode test
187  deps += [ "$js_root/test/moduletest:ark_js_moduletest" ]
188
189  # quickfix test
190  deps += [ "$js_root/test/quickfix:ark_quickfix_test" ]
191  if (!ark_standalone_build && run_regress_test) {
192    deps += [ "$js_root/test/regresstest:ark_regress_test" ]
193  }
194
195  # execution test
196  deps += [ "$js_root/test/executiontest:ark_execution_test" ]
197
198  # ts aot test and asm test
199  if (!run_with_asan) {
200    deps += [
201      "$js_root/test/aottest:ark_aot_test",
202
203      #"$js_root/test/moduletest:ark_asm_single_step_test",
204      "$js_root/test/deopttest:ark_deopt_test",
205      "$js_root/test/moduletest:ark_asm_test",
206      "$js_root/test/typeinfer:ark_typeinfer_test",
207    ]
208
209    if (is_mac) {
210      deps -= [ "$js_root/test/moduletest:ark_asm_test" ]
211    }
212  }
213}
214
215config("ark_jsruntime_public_config") {
216  configs = [
217    "$ark_root/libpandabase:arkbase_public_config",
218    "$ark_root/libpandafile:arkfile_public_config",
219    "$ark_third_party_root/icu/icu4c:icu_config",
220    sdk_libc_secshared_config,
221  ]
222
223  include_dirs = [
224    "$js_root",
225    "$js_root/ecmascript/napi/include",
226  ]
227}
228
229intl_sources = []
230
231if (enable_ark_intl) {
232  intl_sources += [
233    "ecmascript/builtins/builtins_collator.cpp",
234    "ecmascript/builtins/builtins_date_time_format.cpp",
235    "ecmascript/builtins/builtins_displaynames.cpp",
236    "ecmascript/builtins/builtins_intl.cpp",
237    "ecmascript/builtins/builtins_list_format.cpp",
238    "ecmascript/builtins/builtins_locale.cpp",
239    "ecmascript/builtins/builtins_number_format.cpp",
240    "ecmascript/builtins/builtins_plural_rules.cpp",
241    "ecmascript/builtins/builtins_relative_time_format.cpp",
242    "ecmascript/js_collator.cpp",
243    "ecmascript/js_date_time_format.cpp",
244    "ecmascript/js_displaynames.cpp",
245    "ecmascript/js_list_format.cpp",
246    "ecmascript/js_locale.cpp",
247    "ecmascript/js_number_format.cpp",
248    "ecmascript/js_plural_rules.cpp",
249    "ecmascript/js_relative_time_format.cpp",
250  ]
251} else {
252  if (target_os != "android" && target_os != "ios") {
253    intl_sources += [ "ecmascript/intl/global_intl_helper.cpp" ]
254  }
255}
256
257config("ark_jsruntime_compiler_config") {
258  configs = [ "$js_root:ark_jsruntime_common_config" ]
259}
260
261config("hiviewdfx_config") {
262  defines = []
263  if (enable_dump_in_faultlog) {
264    defines += [ "ENABLE_DUMP_IN_FAULTLOG" ]
265  }
266  if (enable_bytrace) {
267    defines += [ "ENABLE_BYTRACE" ]
268    cflags_cc = [ "-Wno-gnu-zero-variadic-macro-arguments" ]
269  }
270  if (enable_hitrace) {
271    defines += [ "ENABLE_HITRACE" ]
272  }
273  if (enable_hilog) {
274    defines += [ "ENABLE_HILOG" ]
275  }
276
277  include_dirs = [ "$hilog_root/include" ]
278}
279
280config("ark_jsruntime_common_config") {
281  configs = [ ":hiviewdfx_config" ]
282
283  defines = [ "PANDA_ENABLE_LTO" ]
284  cflags_cc = [
285    "-Wall",
286    "-Wshadow",
287    "-Werror",
288    "-Wextra",
289    "-pedantic",
290    "-Wno-invalid-offsetof",
291    "-Wno-gnu-statement-expression",
292    "-pipe",
293    "-Wdate-time",
294    "-funwind-tables",
295    "-fno-rtti",
296    "-fasynchronous-unwind-tables",
297    "-Wformat=2",
298    "-std=c++17",
299    "-Wno-unused-but-set-variable",
300  ]
301
302  if (use_musl) {
303    defines += [ "PANDA_USE_MUSL" ]
304  }
305
306  if (build_public_version) {
307    defines += [ "IS_PUBLIC_VERSION" ]
308  }
309
310  if (ark_compile_mode != "release") {
311    ark_profiler_features = [
312      "ECMASCRIPT_SUPPORT_CPUPROFILER",
313      "ECMASCRIPT_SUPPORT_HEAPPROFILER",
314      "ECMASCRIPT_SUPPORT_HEAPSAMPLING",
315      "ECMASCRIPT_SUPPORT_SNAPSHOT",
316      "ECMASCRIPT_SUPPORT_TRACING",
317    ]
318    defines += [ "ECMASCRIPT_SUPPORT_DEBUGGER" ]
319    defines += ark_profiler_features
320  }
321
322  ldflags = []
323  if (is_linux) {
324    defines += [
325      "PANDA_TARGET_UNIX",
326      "PANDA_TARGET_LINUX",
327      "PANDA_USE_FUTEX",
328    ]
329  } else if (is_mingw) {
330    cflags_cc += [
331      "-std=c++17",
332      "-Wno-ignored-attributes",
333    ]
334    defines += [
335      "PANDA_TARGET_WINDOWS",
336      "_CRTBLD",
337      "__LIBMSVCRT__",
338    ]
339
340    ldflags += [ "-lshlwapi" ]
341
342    # not support profiler on Windows yet
343    if (ark_compile_mode != "release") {
344      defines -= ark_profiler_features
345    }
346  } else if (is_mac) {
347    cflags_cc += [ "-std=c++17" ]
348    defines += [
349      "PANDA_TARGET_UNIX",
350      "PANDA_TARGET_MACOS",
351    ]
352
353    # not support profiler on MacOS yet
354    if (ark_compile_mode != "release") {
355      defines -= ark_profiler_features
356    }
357  } else if (target_os == "android") {
358    defines += [
359      "PANDA_TARGET_ANDROID",
360      "PANDA_TARGET_UNIX",
361      "PANDA_USE_FUTEX",
362    ]
363    if (current_cpu == "arm64") {
364      defines += [ "EXCLUDE_C_INTERPRETER" ]
365    }
366    if (!ark_standalone_build) {
367      defines += [ "ENABLE_ANLOG" ]
368    }
369  } else if (target_os == "ios") {
370    defines += [
371      "PANDA_TARGET_IOS",
372      "PANDA_TARGET_UNIX",
373    ]
374
375    # not support profiler on iOS yet
376    if (ark_compile_mode != "release") {
377      defines -= ark_profiler_features
378    }
379  } else {
380    defines += [
381      "PANDA_TARGET_UNIX",
382      "PANDA_USE_FUTEX",
383    ]
384    if (!is_standard_system && (current_cpu != "arm" || is_wearable_product)) {
385      defines += [ "PANDA_TARGET_MOBILE" ]
386    }
387  }
388
389  if (is_ohos) {
390    defines += [ "PANDA_TARGET_OHOS" ]
391  }
392
393  if (!is_mac && target_os != "ios" && !use_libfuzzer && !enable_lto_O0) {
394    cflags_cc += [ "-flto=thin" ]
395    ldflags += [ "-flto=thin" ]
396  }
397
398  if (is_debug) {
399    cflags_cc += [
400      "-O0",
401      "-ggdb3",
402    ]
403  } else {
404    defines += [ "NDEBUG" ]
405  }
406
407  if (enable_asm_assert) {
408    defines += [ "ENABLE_ASM_ASSERT" ]
409  }
410
411  if (run_with_asan) {
412    defines += [ "RUN_WITH_ASAN" ]
413  }
414
415  if (enable_cow_array) {
416    defines += [ "ENABLE_COW_ARRAY" ]
417  }
418
419  if (run_with_asan && is_linux &&
420      (current_cpu == "x86" || current_cpu == "x64")) {
421    cflags_cc += [
422      "-fno-inline-functions",
423      "-fno-inline",
424      "-fsanitize=address",
425      "-fsanitize-address-use-after-scope",
426      "-fno-omit-frame-pointer",
427      "-fsanitize=leak",
428    ]
429
430    if (!use_musl) {
431      libs = [ "$clang_base_path/lib64/clang/$clang_version/lib/linux/libclang_rt.asan-x86_64.a" ]
432    } else {
433      libs = [ "$clang_base_path/lib/clang/$clang_version/lib/x86_64-linux-ohos/libclang_rt.asan.a" ]
434    }
435  }
436
437  if (current_cpu == "arm") {
438    defines += [
439      "PANDA_TARGET_ARM32_ABI_SOFT=1",
440      "PANDA_TARGET_ARM32",
441      "PANDA_TARGET_32",
442    ]
443  } else if (current_cpu == "arm64") {
444    defines += [
445      "PANDA_TARGET_ARM64",
446      "PANDA_TARGET_64",
447      "PANDA_ENABLE_GLOBAL_REGISTER_VARIABLES",
448      "PANDA_USE_32_BIT_POINTER",
449    ]
450  } else if (current_cpu == "x86") {
451    defines += [ "PANDA_TARGET_X86" ]
452  } else if (current_cpu == "amd64" || current_cpu == "x64" ||
453             current_cpu == "x86_64") {
454    defines += [
455      "PANDA_TARGET_64",
456      "PANDA_TARGET_AMD64",
457      "PANDA_USE_32_BIT_POINTER",
458    ]
459  }
460  if (enable_ark_intl) {
461    defines += [ "ARK_SUPPORT_INTL" ]
462  } else {
463    if (target_os == "android" || target_os == "ios") {
464      defines += [ "ARK_NOT_SUPPORT_INTL_GLOBAL" ]
465    } else {
466      configs += [ "$global_root/frameworks/intl:intl_util_config" ]
467    }
468  }
469
470  if (enable_leak_check || is_asan) {
471    defines += [ "ECMASCRIPT_ENABLE_HANDLE_LEAK_CHECK" ]
472  }
473
474  if (is_ohos && is_standard_system) {
475    defines += [ "ENABLE_EXCEPTION_BACKTRACE" ]
476
477    if (use_musl && (current_cpu == "arm" || current_cpu == "arm64") &&
478        !is_mac && !is_mingw && target_os != "ios" && !is_asan) {
479      defines += [ "HOOK_ENABLE" ]
480    }
481  }
482
483  # is_asan: skynet config; run_with_asan: est_runtime enable asan config
484  if (is_asan) {
485    defines += [ "ECMASCRIPT_ENABLE_DFX_CONFIG" ]
486  }
487
488  code_encrypto_enable = true
489  if (defined(global_parts_info) &&
490      !defined(global_parts_info.security_code_crypto_metadata_process)) {
491    code_encrypto_enable = false
492  }
493  if (code_encrypto_enable) {
494    defines += [ "CODE_ENCRYPTION_ENABLE" ]
495  }
496}
497
498# ecmascript unit testcase config
499config("ecma_test_config") {
500  visibility = [
501    "./ecmascript/*",
502    "./test/executiontest/*",
503    "./test/fuzztest/*",
504  ]
505
506  configs = [
507    "$js_root:ark_jsruntime_public_config",
508    "$js_root:ark_jsruntime_common_config",
509  ]
510
511  if (enable_leak_check || is_asan) {
512    defines = [ "ECMASCRIPT_ENABLE_HANDLE_LEAK_CHECK" ]
513  }
514  if (!is_mac) {
515    ldflags = [ "-Wl,-rpath=\$ORIGIN/" ]
516  } else {
517    ldflags = [ "-Wl" ]
518  }
519
520  if (!ark_standalone_build) {
521    ldflags += [ "-Wl,--lto-O0" ]
522  }
523}
524
525# ecmascript icu path for testcase config
526config("icu_path_test_config") {
527  icu_data_path = rebase_path("//third_party/icu/ohos_icu4j/data")
528  defines = [ "ICU_PATH=\"${icu_data_path}\"" ]
529}
530
531# asm interpreter enable config
532config("asm_interp_enable_config") {
533  if ((current_cpu == "amd64" || current_cpu == "x64" ||
534       current_cpu == "x86_64" || current_cpu == "arm64") && !is_mingw &&
535      !is_mac && target_os != "ios") {
536    defines = [ "SUPPORT_ENABLE_ASM_INTERP" ]
537  }
538}
539
540ecma_source = [
541  "ecmascript/base/array_helper.cpp",
542  "ecmascript/base/atomic_helper.cpp",
543  "ecmascript/base/builtins_base.cpp",
544  "ecmascript/base/error_helper.cpp",
545  "ecmascript/base/fast_json_stringifier.cpp",
546  "ecmascript/base/json_helper.cpp",
547  "ecmascript/base/json_parser.cpp",
548  "ecmascript/base/json_stringifier.cpp",
549  "ecmascript/base/number_helper.cpp",
550  "ecmascript/base/path_helper.cpp",
551  "ecmascript/base/string_helper.cpp",
552  "ecmascript/base/typed_array_helper.cpp",
553  "ecmascript/base/utf_helper.cpp",
554  "ecmascript/builtins/builtins.cpp",
555  "ecmascript/builtins/builtins_ark_tools.cpp",
556  "ecmascript/builtins/builtins_array.cpp",
557  "ecmascript/builtins/builtins_arraybuffer.cpp",
558  "ecmascript/builtins/builtins_async_from_sync_iterator.cpp",
559  "ecmascript/builtins/builtins_async_function.cpp",
560  "ecmascript/builtins/builtins_async_generator.cpp",
561  "ecmascript/builtins/builtins_atomics.cpp",
562  "ecmascript/builtins/builtins_bigint.cpp",
563  "ecmascript/builtins/builtins_boolean.cpp",
564  "ecmascript/builtins/builtins_dataview.cpp",
565  "ecmascript/builtins/builtins_date.cpp",
566  "ecmascript/builtins/builtins_errors.cpp",
567  "ecmascript/builtins/builtins_finalization_registry.cpp",
568  "ecmascript/builtins/builtins_function.cpp",
569  "ecmascript/builtins/builtins_generator.cpp",
570  "ecmascript/builtins/builtins_global.cpp",
571  "ecmascript/builtins/builtins_iterator.cpp",
572  "ecmascript/builtins/builtins_async_iterator.cpp",
573  "ecmascript/builtins/builtins_json.cpp",
574  "ecmascript/builtins/builtins_lazy_callback.cpp",
575  "ecmascript/builtins/builtins_map.cpp",
576  "ecmascript/builtins/builtins_math.cpp",
577  "ecmascript/builtins/builtins_number.cpp",
578  "ecmascript/builtins/builtins_object.cpp",
579  "ecmascript/builtins/builtins_promise.cpp",
580  "ecmascript/builtins/builtins_promise_handler.cpp",
581  "ecmascript/builtins/builtins_promise_job.cpp",
582  "ecmascript/builtins/builtins_proxy.cpp",
583  "ecmascript/builtins/builtins_reflect.cpp",
584  "ecmascript/builtins/builtins_regexp.cpp",
585  "ecmascript/builtins/builtins_set.cpp",
586  "ecmascript/builtins/builtins_sharedarraybuffer.cpp",
587  "ecmascript/builtins/builtins_string.cpp",
588  "ecmascript/builtins/builtins_shared_function.cpp",
589  "ecmascript/builtins/builtins_string_iterator.cpp",
590  "ecmascript/builtins/builtins_shared_object.cpp",
591  "ecmascript/builtins/builtins_symbol.cpp",
592  "ecmascript/builtins/builtins_typedarray.cpp",
593  "ecmascript/builtins/builtins_weak_map.cpp",
594  "ecmascript/builtins/builtins_weak_ref.cpp",
595  "ecmascript/builtins/builtins_weak_set.cpp",
596  "ecmascript/byte_array.cpp",
597  "ecmascript/ohos/code_decrypt.cpp",
598  "ecmascript/ohos/enable_aot_list_helper.cpp",
599  "ecmascript/compiler/aot_file/elf_builder.cpp",
600  "ecmascript/compiler/aot_file/elf_reader.cpp",
601  "ecmascript/compiler/aot_file/elf_checker.cpp",
602  "ecmascript/compiler/aot_file/an_file_data_manager.cpp",
603  "ecmascript/compiler/aot_file/an_file_info.cpp",
604  "ecmascript/compiler/aot_file/aot_file_info.cpp",
605  "ecmascript/compiler/aot_file/stub_file_info.cpp",
606  "ecmascript/compiler/aot_file/binary_buffer_parser.cpp",
607  "ecmascript/compiler/aot_file/module_section_des.cpp",
608  "ecmascript/compiler/aot_file/aot_file_manager.cpp",
609  "ecmascript/compiler/aot_snapshot/aot_snapshot.cpp",
610  "ecmascript/compiler/aot_snapshot/snapshot_constantpool_data.cpp",
611  "ecmascript/compiler/aot_snapshot/snapshot_global_data.cpp",
612  "ecmascript/compiler/pgo_bc_info.cpp",
613  "ecmascript/compiler/pgo_type/pgo_hclass_generator.cpp",
614  "ecmascript/compiler/pgo_type/pgo_type_manager.cpp",
615  "ecmascript/compiler/pgo_type/pgo_type_parser.cpp",
616  "ecmascript/compiler/pgo_type/pgo_type_recorder.cpp",
617  "ecmascript/containers/containers_arraylist.cpp",
618  "ecmascript/containers/containers_deque.cpp",
619  "ecmascript/containers/containers_errors.cpp",
620  "ecmascript/containers/containers_hashmap.cpp",
621  "ecmascript/containers/containers_hashset.cpp",
622  "ecmascript/containers/containers_lightweightmap.cpp",
623  "ecmascript/containers/containers_lightweightset.cpp",
624  "ecmascript/containers/containers_linked_list.cpp",
625  "ecmascript/containers/containers_list.cpp",
626  "ecmascript/containers/containers_plainarray.cpp",
627  "ecmascript/containers/containers_private.cpp",
628  "ecmascript/containers/containers_queue.cpp",
629  "ecmascript/containers/containers_stack.cpp",
630  "ecmascript/containers/containers_treemap.cpp",
631  "ecmascript/containers/containers_treeset.cpp",
632  "ecmascript/containers/containers_vector.cpp",
633  "ecmascript/date_parse.cpp",
634  "ecmascript/debugger/js_debugger_manager.cpp",
635  "ecmascript/deoptimizer/calleeReg.cpp",
636  "ecmascript/deoptimizer/deoptimizer.cpp",
637  "ecmascript/dfx/stackinfo/js_stackinfo.cpp",
638  "ecmascript/dfx/vmstat/caller_stat.cpp",
639  "ecmascript/dfx/vmstat/function_call_timer.cpp",
640  "ecmascript/dfx/vmstat/opt_code_profiler.cpp",
641  "ecmascript/dfx/vmstat/runtime_stat.cpp",
642  "ecmascript/dfx/vm_thread_control.cpp",
643  "ecmascript/dump.cpp",
644  "ecmascript/ecma_context.cpp",
645  "ecmascript/ecma_handle_scope.cpp",
646  "ecmascript/ecma_string.cpp",
647  "ecmascript/ecma_string_table.cpp",
648  "ecmascript/ecma_vm.cpp",
649  "ecmascript/element_accessor.cpp",
650  "ecmascript/elements.cpp",
651  "ecmascript/frames.cpp",
652  "ecmascript/free_object.cpp",
653  "ecmascript/generator_helper.cpp",
654  "ecmascript/async_generator_helper.cpp",
655  "ecmascript/global_env.cpp",
656  "ecmascript/global_env_constants.cpp",
657  "ecmascript/ic/ic_runtime.cpp",
658  "ecmascript/ic/ic_compare_op.cpp",
659  "ecmascript/ic/invoke_cache.cpp",
660  "ecmascript/ic/profile_type_info.cpp",
661  "ecmascript/ic/property_box.cpp",
662  "ecmascript/ic/proto_change_details.cpp",
663  "ecmascript/interpreter/frame_handler.cpp",
664  "ecmascript/interpreter/interpreter.cpp",
665  "ecmascript/interpreter/interpreter_assembly.cpp",
666  "ecmascript/interpreter/slow_runtime_stub.cpp",
667  "ecmascript/intl/locale_helper.cpp",
668  "ecmascript/jit/jit.cpp",
669  "ecmascript/jit/jit_task.cpp",
670  "ecmascript/jobs/micro_job_queue.cpp",
671  "ecmascript/jspandafile/js_pandafile.cpp",
672  "ecmascript/jspandafile/js_pandafile_manager.cpp",
673  "ecmascript/jspandafile/class_info_extractor.cpp",
674  "ecmascript/jspandafile/debug_info_extractor.cpp",
675  "ecmascript/jspandafile/literal_data_extractor.cpp",
676  "ecmascript/jspandafile/type_literal_extractor.cpp",
677  "ecmascript/jspandafile/accessor/module_data_accessor.cpp",
678  "ecmascript/jspandafile/panda_file_translator.cpp",
679  "ecmascript/jspandafile/js_pandafile_executor.cpp",
680  "ecmascript/jspandafile/scope_info_extractor.cpp",
681  "ecmascript/jspandafile/method_literal.cpp",
682  "ecmascript/jspandafile/program_object.cpp",
683  "ecmascript/js_api/js_api_arraylist.cpp",
684  "ecmascript/js_api/js_api_arraylist_iterator.cpp",
685  "ecmascript/js_api/js_api_deque.cpp",
686  "ecmascript/js_api/js_api_deque_iterator.cpp",
687  "ecmascript/js_api/js_api_hashmap.cpp",
688  "ecmascript/js_api/js_api_hashmap_iterator.cpp",
689  "ecmascript/js_api/js_api_hashset.cpp",
690  "ecmascript/js_api/js_api_hashset_iterator.cpp",
691  "ecmascript/js_api/js_api_lightweightmap.cpp",
692  "ecmascript/js_api/js_api_lightweightmap_iterator.cpp",
693  "ecmascript/js_api/js_api_lightweightset.cpp",
694  "ecmascript/js_api/js_api_lightweightset_iterator.cpp",
695  "ecmascript/js_api/js_api_linked_list.cpp",
696  "ecmascript/js_api/js_api_linked_list_iterator.cpp",
697  "ecmascript/js_api/js_api_list.cpp",
698  "ecmascript/js_api/js_api_list_iterator.cpp",
699  "ecmascript/js_api/js_api_plain_array.cpp",
700  "ecmascript/js_api/js_api_plain_array_iterator.cpp",
701  "ecmascript/js_api/js_api_queue.cpp",
702  "ecmascript/js_api/js_api_queue_iterator.cpp",
703  "ecmascript/js_api/js_api_stack.cpp",
704  "ecmascript/js_api/js_api_stack_iterator.cpp",
705  "ecmascript/js_api/js_api_tree_map.cpp",
706  "ecmascript/js_api/js_api_tree_map_iterator.cpp",
707  "ecmascript/js_api/js_api_tree_set.cpp",
708  "ecmascript/js_api/js_api_tree_set_iterator.cpp",
709  "ecmascript/js_api/js_api_vector.cpp",
710  "ecmascript/js_api/js_api_vector_iterator.cpp",
711  "ecmascript/js_arguments.cpp",
712  "ecmascript/js_array.cpp",
713  "ecmascript/js_array_iterator.cpp",
714  "ecmascript/js_arraybuffer.cpp",
715  "ecmascript/js_async_from_sync_iterator.cpp",
716  "ecmascript/js_async_function.cpp",
717  "ecmascript/js_bigint.cpp",
718  "ecmascript/js_dataview.cpp",
719  "ecmascript/js_date.cpp",
720  "ecmascript/js_for_in_iterator.cpp",
721  "ecmascript/js_finalization_registry.cpp",
722  "ecmascript/js_file_path.cpp",
723  "ecmascript/js_function.cpp",
724  "ecmascript/js_generator_object.cpp",
725  "ecmascript/js_async_generator_object.cpp",
726  "ecmascript/js_hclass.cpp",
727  "ecmascript/js_iterator.cpp",
728  "ecmascript/js_map.cpp",
729  "ecmascript/js_map_iterator.cpp",
730  "ecmascript/method.cpp",
731  "ecmascript/js_object.cpp",
732  "ecmascript/js_primitive_ref.cpp",
733  "ecmascript/js_promise.cpp",
734  "ecmascript/js_proxy.cpp",
735  "ecmascript/js_regexp_iterator.cpp",
736  "ecmascript/js_runtime_options.cpp",
737  "ecmascript/js_serializer.cpp",
738  "ecmascript/js_set.cpp",
739  "ecmascript/js_set_iterator.cpp",
740  "ecmascript/js_stable_array.cpp",
741  "ecmascript/js_string_iterator.cpp",
742  "ecmascript/js_tagged_value.cpp",
743  "ecmascript/js_thread.cpp",
744  "ecmascript/js_typed_array.cpp",
745  "ecmascript/js_weak_container.cpp",
746  "ecmascript/linked_hash_table.cpp",
747  "ecmascript/log.cpp",
748  "ecmascript/message_string.cpp",
749  "ecmascript/mem/barriers.cpp",
750  "ecmascript/mem/c_string.cpp",
751  "ecmascript/mem/chunk.cpp",
752  "ecmascript/mem/dyn_chunk.cpp",
753  "ecmascript/mem/full_gc.cpp",
754  "ecmascript/mem/concurrent_marker.cpp",
755  "ecmascript/mem/concurrent_sweeper.cpp",
756  "ecmascript/mem/free_object_list.cpp",
757  "ecmascript/mem/free_object_set.cpp",
758  "ecmascript/mem/gc_stats.cpp",
759  "ecmascript/mem/heap.cpp",
760  "ecmascript/mem/heap_region_allocator.cpp",
761  "ecmascript/mem/incremental_marker.cpp",
762  "ecmascript/mem/linear_space.cpp",
763  "ecmascript/mem/machine_code.cpp",
764  "ecmascript/mem/mem_controller.cpp",
765  "ecmascript/mem/mem_map_allocator.cpp",
766  "ecmascript/mem/native_area_allocator.cpp",
767  "ecmascript/mem/parallel_evacuator.cpp",
768  "ecmascript/mem/parallel_marker.cpp",
769  "ecmascript/mem/partial_gc.cpp",
770  "ecmascript/mem/regexp_cached_chunk.cpp",
771  "ecmascript/mem/stw_young_gc.cpp",
772  "ecmascript/mem/space.cpp",
773  "ecmascript/mem/sparse_space.cpp",
774  "ecmascript/mem/verification.cpp",
775  "ecmascript/mem/work_space_chunk.cpp",
776  "ecmascript/mem/work_manager.cpp",
777  "ecmascript/mem/allocation_inspector.cpp",
778  "ecmascript/module/js_module_manager.cpp",
779  "ecmascript/module/js_dynamic_import.cpp",
780  "ecmascript/module/js_module_namespace.cpp",
781  "ecmascript/module/js_module_record.cpp",
782  "ecmascript/module/js_module_source_text.cpp",
783  "ecmascript/module/js_module_deregister.cpp",
784  "ecmascript/module/module_data_extractor.cpp",
785  "ecmascript/module/module_path_helper.cpp",
786  "ecmascript/napi/jsnapi.cpp",
787  "ecmascript/napi/jsnapi_expo.cpp",
788  "ecmascript/object_factory.cpp",
789  "ecmascript/object_operator.cpp",
790  "ecmascript/patch/patch_loader.cpp",
791  "ecmascript/patch/quick_fix_manager.cpp",
792  "ecmascript/pgo_profiler/ap_file/pgo_file_info.cpp",
793  "ecmascript/pgo_profiler/pgo_profiler.cpp",
794  "ecmascript/pgo_profiler/pgo_profiler_decoder.cpp",
795  "ecmascript/pgo_profiler/pgo_profiler_encoder.cpp",
796  "ecmascript/pgo_profiler/pgo_profiler_info.cpp",
797  "ecmascript/pgo_profiler/pgo_profiler_layout.cpp",
798  "ecmascript/pgo_profiler/pgo_profiler_manager.cpp",
799  "ecmascript/pgo_profiler/pgo_utils.cpp",
800  "ecmascript/pgo_profiler/ap_file/pgo_method_type_set.cpp",
801  "ecmascript/pgo_profiler/types/pgo_profile_type.cpp",
802  "ecmascript/property_accessor.cpp",
803  "ecmascript/serializer/base_deserializer.cpp",
804  "ecmascript/serializer/base_serializer.cpp",
805  "ecmascript/serializer/value_serializer.cpp",
806  "ecmascript/stackmap/ark_stackmap_builder.cpp",
807  "ecmascript/stackmap/ark_stackmap_parser.cpp",
808  "ecmascript/stackmap/llvm_stackmap_parser.cpp",
809  "ecmascript/stackmap/llvm_stackmap_type.cpp",
810  "ecmascript/stackmap/litecg_stackmap_type.cpp",
811  "ecmascript/subtyping_operator.cpp",
812  "ecmascript/taskpool/taskpool.cpp",
813  "ecmascript/taskpool/runner.cpp",
814  "ecmascript/taskpool/task_queue.cpp",
815  "ecmascript/layout_info.cpp",
816  "ecmascript/regexp/regexp_executor.cpp",
817  "ecmascript/regexp/regexp_opcode.cpp",
818  "ecmascript/regexp/regexp_parser.cpp",
819  "ecmascript/regexp/regexp_parser_cache.cpp",
820  "ecmascript/global_index_map.cpp",
821  "ecmascript/shared_mm/shared_mm.cpp",
822  "ecmascript/tagged_dictionary.cpp",
823  "ecmascript/tagged_hash_array.cpp",
824  "ecmascript/tagged_list.cpp",
825  "ecmascript/tagged_node.cpp",
826  "ecmascript/tagged_tree.cpp",
827  "ecmascript/template_string.cpp",
828  "ecmascript/vtable.cpp",
829  "ecmascript/waiter_list.cpp",
830  "ecmascript/weak_vector.cpp",
831  "ecmascript/stubs/runtime_stubs.cpp",
832  "ecmascript/ts_types/ts_type.cpp",
833  "ecmascript/ts_types/ts_type_accessor.cpp",
834  "ecmascript/ts_types/ts_type_table.cpp",
835  "ecmascript/ts_types/ts_manager.cpp",
836  "ecmascript/ts_types/ts_obj_layout_info.cpp",
837  "ecmascript/ts_types/ts_type_parser.cpp",
838  "ecmascript/ts_types/ts_type_table_generator.cpp",
839  "ecmascript/stubs/test_runtime_stubs.cpp",
840  "ecmascript/builtins/builtins_cjs_module.cpp",
841  "ecmascript/builtins/builtins_cjs_require.cpp",
842  "ecmascript/builtins/builtins_cjs_exports.cpp",
843  "ecmascript/require/js_cjs_module_cache.cpp",
844  "ecmascript/require/js_cjs_module.cpp",
845  "ecmascript/require/js_require_manager.cpp",
846]
847
848hitrace_scope_source = []
849if (is_ohos && is_standard_system && enable_hitrace) {
850  hitrace_scope_source += [ "ecmascript/jobs/hitrace_scope.cpp" ]
851}
852
853ecma_debugger_source = [
854  "ecmascript/debugger/debugger_api.cpp",
855  "ecmascript/debugger/js_debugger.cpp",
856  "ecmascript/debugger/dropframe_manager.cpp",
857  "ecmascript/debugger/hot_reload_manager.cpp",
858]
859
860ecma_profiler_source = [ "ecmascript/napi/dfx_jsnapi.cpp" ]
861if (!is_mingw && !is_mac && target_os != "ios") {
862  if (ark_compile_mode == "debug") {
863    ecma_profiler_source += [
864      "ecmascript/dfx/cpu_profiler/cpu_profiler.cpp",
865      "ecmascript/dfx/cpu_profiler/sampling_processor.cpp",
866      "ecmascript/dfx/cpu_profiler/samples_record.cpp",
867      "ecmascript/dfx/hprof/file_stream.cpp",
868      "ecmascript/dfx/hprof/heap_profiler.cpp",
869      "ecmascript/dfx/hprof/heap_profiler_interface.cpp",
870      "ecmascript/dfx/hprof/heap_root_visitor.cpp",
871      "ecmascript/dfx/hprof/heap_sampling.cpp",
872      "ecmascript/dfx/hprof/heap_snapshot.cpp",
873      "ecmascript/dfx/hprof/heap_snapshot_json_serializer.cpp",
874      "ecmascript/dfx/hprof/heap_tracker.cpp",
875      "ecmascript/dfx/hprof/string_hashmap.cpp",
876      "ecmascript/dfx/stackinfo/js_stackgetter.cpp",
877      "ecmascript/base/block_hook_scope.cpp",
878      "ecmascript/dfx/tracing/tracing.cpp",
879    ]
880  }
881}
882
883ecma_profiler_source += [
884  "ecmascript/snapshot/mem/snapshot.cpp",
885  "ecmascript/snapshot/mem/snapshot_env.cpp",
886  "ecmascript/snapshot/mem/snapshot_processor.cpp",
887]
888
889ecma_stackinfo_source = []
890
891ecma_stackinfo_source = [
892  "ecmascript/extractortool/src/extractor.cpp",
893  "ecmascript/extractortool/src/file_mapper.cpp",
894  "ecmascript/extractortool/src/file_path_utils.cpp",
895  "ecmascript/extractortool/src/source_map.cpp",
896  "ecmascript/extractortool/src/zip_file_reader_io.cpp",
897  "ecmascript/extractortool/src/zip_file_reader_mem.cpp",
898  "ecmascript/extractortool/src/zip_file_reader.cpp",
899  "ecmascript/extractortool/src/zip_file.cpp",
900]
901
902ecma_platform_source = []
903
904ecma_platform_source += [
905  "ecmascript/platform/common/map.cpp",
906  "ecmascript/platform/common/mutex.cpp",
907]
908
909config("include_llvm") {
910  if (compile_llvm_online) {
911    include_dirs = [
912      "//third_party/third_party_llvm-project/build/include",
913      "//third_party/third_party_llvm-project/llvm/include/",
914    ]
915  } else {
916    if (is_mingw) {
917      include_dirs = [
918        "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_windows/llvm/include",
919        "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_windows/build/include",
920      ]
921    } else if (is_mac || is_ios) {
922      if (host_cpu == "arm64") {
923        include_dirs = [
924          "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_darwin_arm64/llvm/include",
925          "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_darwin_arm64/build/include",
926        ]
927      } else {
928        include_dirs = [
929          "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_darwin_x64/llvm/include",
930          "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_darwin_x64/build/include",
931        ]
932      }
933    } else {
934      if (current_cpu == "arm64") {
935        include_dirs = [
936          "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_aarch64/llvm/include",
937          "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_aarch64/build/include",
938        ]
939      } else {
940        include_dirs = [
941          "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts/llvm/include",
942          "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts/build/include",
943        ]
944      }
945    }
946  }
947}
948
949if (is_mingw) {
950  ecma_platform_source += [
951    "ecmascript/platform/windows/backtrace.cpp",
952    "ecmascript/platform/windows/map.cpp",
953    "ecmascript/platform/windows/file.cpp",
954    "ecmascript/platform/windows/os.cpp",
955    "ecmascript/platform/windows/time.cpp",
956    "ecmascript/platform/windows/log.cpp",
957  ]
958} else {
959  ecma_platform_source += [
960    "ecmascript/platform/unix/file.cpp",
961    "ecmascript/platform/unix/map.cpp",
962    "ecmascript/platform/unix/time.cpp",
963  ]
964  if (is_mac) {
965    ecma_platform_source += [
966      "ecmascript/platform/unix/mac/os.cpp",
967      "ecmascript/platform/unix/mac/backtrace.cpp",
968      "ecmascript/platform/unix/mac/log.cpp",
969    ]
970  } else if (target_os == "ios") {
971    ecma_platform_source += [
972      "ecmascript/platform/unix/mac/os.cpp",
973      "ecmascript/platform/unix/mac/backtrace.cpp",
974      "ecmascript/platform/common/log.cpp",
975    ]
976  } else if (is_ohos || target_os == "android") {
977    ecma_platform_source += [
978      "ecmascript/platform/unix/linux/os.cpp",
979      "ecmascript/platform/unix/ohos/backtrace.cpp",
980      "ecmascript/platform/common/log.cpp",
981    ]
982  } else if (is_linux) {
983    ecma_platform_source += [
984      "ecmascript/platform/unix/linux/os.cpp",
985      "ecmascript/platform/unix/linux/backtrace.cpp",
986      "ecmascript/platform/common/log.cpp",
987    ]
988  } else {
989    print("Invalid os!")
990    assert(false)
991  }
992}
993
994if (enable_target_compilation) {
995  ecma_platform_source += [ "ecmascript/platform/unix/ohos/directory.cpp" ]
996} else if (is_mingw) {
997  ecma_platform_source += [ "ecmascript/platform/windows/directory.cpp" ]
998} else {
999  ecma_platform_source += [ "ecmascript/platform/unix/directory.cpp" ]
1000}
1001
1002ohos_source_set("libark_jsruntime_set") {
1003  stack_protector_ret = false
1004  if (is_ohos && is_standard_system) {
1005    stub_an_file_path = "/system/lib64/${arkcompiler_relative_lib_path}/stub.an"
1006  } else {
1007    stub_an_file_path =
1008        rebase_path("$root_gen_dir/arkcompiler/ets_runtime/stub.an")
1009  }
1010  defines = [ "STUB_AN_FILE=\"${stub_an_file_path}\"" ]
1011  target_builtins_dts_path =
1012      "/system/lib64/${arkcompiler_relative_lib_path}/lib_ark_builtins.d.abc"
1013  defines += [ "TARGET_BUILTINS_DTS_PATH=\"${target_builtins_dts_path}\"" ]
1014
1015  if (current_cpu == "arm64") {
1016    defines += [ "ENABLE_POSTFORK_FORCEEXPAND" ]
1017  }
1018
1019  sources = ecma_source
1020  sources += ecma_profiler_source
1021  sources += ecma_debugger_source
1022  sources += hitrace_scope_source
1023  sources += ecma_platform_source
1024
1025  if (is_ohos) {
1026    sources += ecma_stackinfo_source
1027  }
1028
1029  public_configs = [ "$js_root:ark_jsruntime_public_config" ]
1030  public_configs += [ ":include_llvm" ]
1031
1032  configs = [
1033    "$js_root:ark_jsruntime_common_config",
1034    "$js_root:asm_interp_enable_config",
1035  ]
1036
1037  cflags_cc = []
1038  if (is_standard_system || target_os == "android" || target_os == "ios") {
1039    cflags_cc += [ "-fvisibility=hidden" ]
1040  }
1041
1042  external_deps = []
1043
1044  if (enable_dump_in_faultlog) {
1045    external_deps += [ "libuv:uv" ]
1046  }
1047
1048  deps = []
1049  if (!is_arkui_x) {
1050    external_deps += [ "runtime_core:arkfile_header_deps" ]
1051  } else {
1052    deps += [ "$ark_root/libpandafile:arkfile_header_deps" ]
1053  }
1054
1055  if (is_ohos && is_standard_system && !is_arkui_x &&
1056      defined(global_parts_info) &&
1057      defined(global_parts_info.resourceschedule_qos_manager)) {
1058    defines += [ "ENABLE_QOS" ]
1059    external_deps += [ "qos_manager:qos" ]
1060  }
1061
1062  if (enable_target_compilation) {
1063    external_deps += [ "c_utils:utils" ]
1064  }
1065
1066  # hiviewdfx libraries
1067  external_deps += hiviewdfx_ext_deps
1068  deps += hiviewdfx_deps
1069
1070  if (ark_standalone_build || is_arkui_x) {
1071    deps += [ "$ark_third_party_root/zlib:libz" ]
1072  } else {
1073    deps += [ "$ark_third_party_root/zlib:shared_libz" ]
1074  }
1075
1076  part_name = "ets_runtime"
1077  subsystem_name = "arkcompiler"
1078}
1079
1080ohos_source_set("libark_js_intl_set") {
1081  stack_protector_ret = false
1082  sources = intl_sources
1083
1084  public_configs = [ "$js_root:ark_jsruntime_public_config" ]
1085
1086  configs = [ "$js_root:ark_jsruntime_common_config" ]
1087
1088  cflags_cc = []
1089  if (is_standard_system || target_os == "android" || target_os == "ios") {
1090    cflags_cc += [ "-fvisibility=hidden" ]
1091  }
1092
1093  external_deps = []
1094  deps = []
1095  if (!is_arkui_x) {
1096    external_deps += [ "runtime_core:arkfile_header_deps" ]
1097  } else {
1098    deps += [ "$ark_root/libpandafile:arkfile_header_deps" ]
1099  }
1100
1101  # hiviewdfx libraries
1102  external_deps += hiviewdfx_ext_deps
1103  deps += hiviewdfx_deps
1104
1105  part_name = "ets_runtime"
1106  subsystem_name = "arkcompiler"
1107}
1108
1109config("ark_jsruntime_test_nolto") {
1110  cflags_cc = [ "-fno-lto" ]
1111}
1112
1113ohos_source_set("libark_jsruntime_test_set") {
1114  stack_protector_ret = false
1115  sources = ecma_source
1116  sources += intl_sources
1117  sources += ecma_profiler_source
1118  sources += ecma_debugger_source
1119  sources += hitrace_scope_source
1120  sources += ecma_platform_source
1121
1122  defines = [ "OHOS_UNIT_TEST" ]
1123
1124  if (is_ohos) {
1125    sources += ecma_stackinfo_source
1126  }
1127
1128  if (is_ohos && is_standard_system) {
1129    stub_an_file_path = "/system/lib64/${arkcompiler_relative_lib_path}/stub.an"
1130  } else {
1131    stub_an_file_path =
1132        rebase_path("$root_gen_dir/arkcompiler/ets_runtime/stub.an")
1133  }
1134  defines += [ "STUB_AN_FILE=\"${stub_an_file_path}\"" ]
1135  target_builtins_dts_path =
1136      "/system/lib64/${arkcompiler_relative_lib_path}/lib_ark_builtins.d.abc"
1137  defines += [ "TARGET_BUILTINS_DTS_PATH=\"${target_builtins_dts_path}\"" ]
1138
1139  deps = [
1140    "$ark_third_party_root/icu/icu4c:shared_icui18n",
1141    "$ark_third_party_root/icu/icu4c:shared_icuuc",
1142  ]
1143  external_deps = []
1144  if (enable_dump_in_faultlog) {
1145    external_deps += [ "libuv:uv" ]
1146  }
1147
1148  if (!is_arkui_x) {
1149    external_deps += [ "runtime_core:arkfile_header_deps" ]
1150  } else {
1151    deps += [ "$ark_root/libpandafile:arkfile_header_deps" ]
1152  }
1153
1154  if (enable_coverage) {
1155    ldflags = [ "--coverage" ]
1156    cflags_cc = [ "--coverage" ]
1157  }
1158
1159  if ((current_cpu == "amd64" || current_cpu == "x64" ||
1160       current_cpu == "x86_64" || current_cpu == "arm64") && !is_mingw &&
1161      !is_mac && target_os != "ios") {
1162    deps += [ "ecmascript/compiler:libark_stub_set" ]
1163  } else {
1164    deps += [ "$js_root/ecmascript/compiler:libark_mock_stub_set" ]
1165  }
1166
1167  if (enable_leak_check || is_asan) {
1168    defines += [ "ECMASCRIPT_ENABLE_HANDLE_LEAK_CHECK" ]
1169  }
1170
1171  public_configs = [ "$js_root:ark_jsruntime_public_config" ]
1172  public_configs += [ ":include_llvm" ]
1173
1174  configs = [
1175    "$js_root:ark_jsruntime_common_config",
1176    "$js_root:asm_interp_enable_config",
1177    "$js_root:icu_path_test_config",
1178    "$js_root:ark_jsruntime_test_nolto",
1179  ]
1180
1181  if (enable_target_compilation) {
1182    external_deps += [ "c_utils:utils" ]
1183  }
1184
1185  # hiviewdfx libraries
1186  external_deps += hiviewdfx_ext_deps
1187  deps += hiviewdfx_deps
1188  part_name = "ets_runtime"
1189  subsystem_name = "arkcompiler"
1190}
1191
1192ohos_source_set("libark_jsruntime_static") {
1193  stack_protector_ret = false
1194  deps = [
1195    ":libark_js_intl_set",
1196    ":libark_jsruntime_set",
1197  ]
1198  external_deps = []
1199  if (!is_arkui_x) {
1200    external_deps += [ "runtime_core:arkfile_header_deps" ]
1201  } else {
1202    deps += [ "$ark_root/libpandafile:arkfile_header_deps" ]
1203    all_dependent_configs = [ ":ark_jsruntime_public_config" ]
1204  }
1205
1206  public_configs = [ "$js_root:ark_jsruntime_public_config" ]
1207
1208  if ((current_cpu == "amd64" || current_cpu == "x64" ||
1209       current_cpu == "x86_64" || current_cpu == "arm64") && !is_mingw &&
1210      !is_mac && target_os != "ios") {
1211    deps += [ "ecmascript/compiler:libark_stub_set" ]
1212  } else {
1213    deps += [ "$js_root/ecmascript/compiler:libark_mock_stub_set" ]
1214  }
1215
1216  part_name = "ets_runtime"
1217  subsystem_name = "arkcompiler"
1218}
1219
1220ohos_shared_library("libark_jsruntime") {
1221  stack_protector_ret = false
1222  deps = [
1223    ":libark_jsruntime_static",
1224    sdk_libc_secshared_dep,
1225  ]
1226  external_deps = []
1227  if (!is_arkui_x) {
1228    external_deps += [ "runtime_core:libarkfile_static" ]
1229  } else {
1230    deps += [ "$ark_root/libpandafile:libarkfile_static" ]
1231  }
1232
1233  all_dependent_configs = [ ":ark_jsruntime_public_config" ]
1234
1235  if (is_ohos && is_standard_system && !is_debug) {
1236    version_script = "libark_jsruntime.map"
1237  }
1238
1239  # hiviewdfx libraries
1240  external_deps += hiviewdfx_ext_deps
1241  deps += hiviewdfx_deps
1242
1243  if (!enable_ark_intl) {
1244    external_deps += [ "i18n:intl_util" ]
1245  }
1246
1247  install_enable = true
1248
1249  if (!is_mingw && !is_mac) {
1250    output_extension = "so"
1251  }
1252  if (!is_standard_system) {
1253    relative_install_dir = "ark"
1254  }
1255
1256  if (target_os == "android" && !ark_standalone_build) {
1257    libs = [ "log" ]
1258    version_script = "libark_jsruntime.map"
1259  }
1260  if (target_os == "ios" || ark_standalone_build) {
1261    deps += [
1262      "$ark_third_party_root/icu/icu4c:static_icui18n",
1263      "$ark_third_party_root/icu/icu4c:static_icuuc",
1264    ]
1265  } else {
1266    deps += [
1267      "$ark_third_party_root/icu/icu4c:shared_icui18n",
1268      "$ark_third_party_root/icu/icu4c:shared_icuuc",
1269    ]
1270  }
1271  innerapi_tags = [ "platformsdk_indirect" ]
1272  part_name = "ets_runtime"
1273  subsystem_name = "arkcompiler"
1274}
1275
1276ohos_shared_library("libark_jsruntime_test") {
1277  stack_protector_ret = false
1278  deps = [
1279    ":libark_jsruntime_test_set",
1280    "$ark_root/libpandafile:libarkfile_static",
1281  ]
1282
1283  public_configs = [ "$js_root:ark_jsruntime_public_config" ]
1284  public_configs += [ ":include_llvm" ]
1285
1286  ldflags = []
1287  if (enable_coverage) {
1288    ldflags += [ "--coverage" ]
1289    cflags_cc = [ "--coverage" ]
1290  }
1291  if (!ark_standalone_build) {
1292    ldflags += [ "-Wl,--lto-O0" ]
1293  }
1294
1295  install_enable = false
1296  if (!is_mingw && !is_mac) {
1297    output_extension = "so"
1298  }
1299  subsystem_name = "test"
1300}
1301
1302ohos_prebuilt_etc("app_aot_enable_list") {
1303  relative_install_dir = "ark"
1304  source = "$js_root/ecmascript/ohos/app_aot_enable_list.conf"
1305
1306  # Set the subsystem name
1307  part_name = "ets_runtime"
1308  subsystem_name = "arkcompiler"
1309}
1310
1311ohos_prebuilt_etc("app_aot_disable_list") {
1312  relative_install_dir = "ark"
1313  source = "$js_root/ecmascript/ohos/app_aot_disable_list.conf"
1314
1315  # Set the subsystem name
1316  part_name = "ets_runtime"
1317  subsystem_name = "arkcompiler"
1318}
1319