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