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