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