• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2025 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/runtime_core/static_core/ark_config.gni")
15import("$ark_root/plugins/plugins.gni")
16import("$ark_root/verification/verification.gni")
17
18if (ark_standalone_build) {
19  import("$build_root/ark.gni")
20} else {
21  import("//build/ohos.gni")
22}
23
24runtime_yaml = [ "runtime.yaml" ]
25if (enable_irtoc) {
26  runtime_yaml += [ "$ark_root/irtoc/intrinsics.yaml" ]
27}
28runtime_yaml += plugin_runtime_yamls
29
30config("arkruntime_public_config") {
31  include_dirs = [
32    "$ark_root/runtime",
33
34    # The line below needed only for stdlib. It must be removed after stdlib separation from runtime is implemented(#18135).
35    "$ark_root/plugins/ets/runtime/ani/",
36    get_label_info(
37        "$ark_root/cross_values:cross_values_getters_generate(${default_toolchain})",
38        "target_gen_dir"),
39    "$target_gen_dir",
40    "$target_gen_dir/generated",
41    "$target_gen_dir/include",
42  ]
43
44  include_dirs += platform_include_dirs
45
46  if (ark_hybrid) {
47    include_dirs += [ "$ark_root/../common_interfaces" ]
48    cflags_cc = [
49      "-Wno-gnu-anonymous-struct",
50      "-Wno-nested-anon-types",
51    ]
52  }
53
54  configs = [
55    "$ark_root/libpandabase:arkbase_public_config",
56    "$ark_root/libpandafile:arkfile_public_config",
57    "$ark_root/verification/gen:verification_public_config",
58    "$ark_root/compiler:arkcompiler_public_config",
59  ]
60  configs += plugin_runtime_configs
61}
62
63if (!ark_static_standalone_build) {
64  ohos_shared_headers("runtime_headers") {
65    include_dirs = [
66      "$ark_root/runtime",
67      "$ark_root/plugins/ets/runtime/ani/",
68      "$target_gen_dir",
69      "$target_gen_dir/generated",
70      "$target_gen_dir/include",
71    ]
72    include_dirs += [get_label_info("$ark_root/cross_values:cross_values_getters_generate(${default_toolchain})", "target_gen_dir")]
73    deps = ["$ark_root/cross_values:cross_values_getters_generate(${default_toolchain})"]
74
75    include_dirs += platform_include_dirs
76
77    part_name = ark_part_name
78    subsystem_name = "$ark_subsystem_name"
79  }
80}
81
82config("arkruntime_config") {
83  include_dirs = [
84    "$ark_root/compiler",
85    "$ark_root/dprof/libdprof",
86  ]
87  if (ark_standalone_build) {
88    include_dirs += [ "//third_party/icu/icu4c/source" ]
89  }
90
91  cflags_cc = [
92    "-Wno-invalid-offsetof",
93    "-Wno-unused-parameter",
94  ]
95
96  if (current_cpu == "arm64") {
97    asmflags = [ "-march=armv8-a+crc" ]
98  }
99
100  configs = [
101    "$build_root/config/compiler:optimize_speed",
102    "$build_root/config/compiler:no_exceptions",
103    "$build_root/config/compiler:no_rtti",
104  ]
105}
106
107group("arkruntime_header_deps") {
108  deps = [
109    ":arkruntime_gen_entrypoints_entrypoints_gen_S",
110    ":arkruntime_gen_entrypoints_entrypoints_gen_h",
111    ":arkruntime_gen_intrinsics_intrinsics_enum_h",
112    ":arkruntime_gen_intrinsics_intrinsics_gen_h",
113    ":arkruntime_gen_intrinsics_intrinsics_h",
114    ":arkruntime_gen_intrinsics_unimplemented_intrinsics-inl_cpp",
115    ":arkruntime_gen_intrinsics_yaml",
116    ":intrinsics_inl_h",
117    ":isa_gen_libarkruntime_interpreter-inl_gen_h",
118    ":isa_gen_libarkruntime_isa_constants_gen_h",
119    ":language_config_gen_inc",
120    ":libarkruntime_options_gen_h",
121    ":libarkruntime_shorty_values_h",
122    ":plugin_clear_profile_h",
123    ":plugin_destroy_profile_h",
124    ":plugin_dump_profile_h",
125    ":plugin_find_method_in_profile_h",
126    ":plugin_profiling_includes_disasm_h",
127    ":plugin_profiling_includes_h",
128    ":plugin_read_profile_h",
129    ":plugins_asm_defines_def",
130    ":plugins_defines_h",
131    ":plugins_entrypoints_gen_h",
132    ":plugins_inc",
133    ":plugins_interpreters_inl_h",
134    ":profiling_gen_profiling_gen_h",
135    ":substitute_icu_path",
136    "$ark_root/libpandabase:base_options_h",
137    "$ark_root/verification/gen:isa_gen_verification_gen_abs_int_inl_gen_h",
138    "$ark_root/verification/gen:isa_gen_verification_gen_cflow_iterate_inl_gen_h",
139    "$ark_root/verification/gen:isa_gen_verification_gen_handle_gen_h",
140    "$ark_root/verification/gen:isa_gen_verification_gen_job_fill_gen_h",
141    "$ark_root/verification/gen:verification_abs_int_inl_compat_checks_h",
142    "$ark_root/verification/gen:verification_gen_plugins_gen_inc",
143    "$ark_root/verification/gen:verification_verifier_messages_data_cpp",
144    "$ark_root/verification/gen:verification_verifier_messages_h",
145  ]
146  if (enable_irtoc) {
147    deps += [ ":isa_gen_libarkruntime_irtoc_interpreter_utils_h" ]
148  }
149
150  deps += plugin_arkruntime_header_plugin_deps
151}
152
153ohos_source_set("libarkruntime_set_static") {
154  sources = [
155    "arch/asm_support.cpp",
156    "assert_gc_scope.cpp",
157    "bridge/bridge.cpp",
158    "cframe.cpp",
159    "cha.cpp",
160    "class.cpp",
161    "class_helper.cpp",
162    "class_initializer.cpp",
163    "class_linker.cpp",
164    "class_linker_extension.cpp",
165    "compiler.cpp",
166    "compiler_task_manager_worker.cpp",
167    "compiler_thread_pool_worker.cpp",
168    "coretypes/array.cpp",
169    "coretypes/string.cpp",
170    "coroutines/coroutine.cpp",
171    "coroutines/coroutine_events.cpp",
172    "coroutines/coroutine_manager.cpp",
173    "coroutines/coroutine_stats.cpp",
174    "coroutines/coroutine_worker.cpp",
175    "coroutines/priority_queue.cpp",
176    "coroutines/stackful_coroutine.cpp",
177    "coroutines/stackful_coroutine_manager.cpp",
178    "coroutines/stackful_coroutine_worker.cpp",
179    "coroutines/threaded_coroutine.cpp",
180    "coroutines/threaded_coroutine_manager.cpp",
181    "default_debugger_agent.cpp",
182    "deoptimization.cpp",
183    "entrypoints/entrypoints.cpp",
184    "exceptions.cpp",
185    "fibers/fiber_context.cpp",
186    "field.cpp",
187    "file_manager.cpp",
188    "gc_task.cpp",
189    "global_object_lock.cpp",
190    "handle_scope.cpp",
191    "hotreload/hotreload.cpp",
192    "imtable_builder.cpp",
193    "init_icu.cpp",
194    "interpreter/interpreter.cpp",
195    "interpreter/runtime_interface.cpp",
196    "intrinsics.cpp",
197    "jit/libprofile/pgo_file_builder.cpp",
198    "jit/profiling_loader.cpp",
199    "jit/profiling_saver.cpp",
200    "language_context.cpp",
201    "loadable_agent.cpp",
202    "lock_order_graph.cpp",
203    "locks.cpp",
204    "mark_word.cpp",
205    "mem/allocator.cpp",
206    "mem/gc/bitmap.cpp",
207    "mem/gc/card_table.cpp",
208    "mem/gc/epsilon-g1/epsilon-g1.cpp",
209    "mem/gc/epsilon/epsilon.cpp",
210    "mem/gc/epsilon/epsilon_barrier.cpp",
211    "mem/gc/g1/g1-allocator.cpp",
212    "mem/gc/g1/g1-gc.cpp",
213    "mem/gc/g1/g1-helpers.cpp",
214    "mem/gc/g1/g1_analytics.cpp",
215    "mem/gc/g1/g1_pause_tracker.cpp",
216    "mem/gc/g1/hot_cards.cpp",
217    "mem/gc/g1/ref_updater.cpp",
218    "mem/gc/g1/update_remset_task_queue.cpp",
219    "mem/gc/g1/update_remset_thread.cpp",
220    "mem/gc/g1/update_remset_worker.cpp",
221    "mem/gc/cmc-gc-adapter/cmc-allocator-adapter.cpp",
222    "mem/gc/cmc-gc-adapter/cmc-gc-adapter.cpp",
223    "mem/gc/gc-hung/gc_hung.cpp",
224    "mem/gc/gc.cpp",
225    "mem/gc/gc_adaptive_marking_stack.cpp",
226    "mem/gc/gc_barrier_set.cpp",
227    "mem/gc/gc_queue.cpp",
228    "mem/gc/gc_root.cpp",
229    "mem/gc/gc_root_type.cpp",
230    "mem/gc/gc_scope.cpp",
231    "mem/gc/gc_scoped_phase.cpp",
232    "mem/gc/gc_settings.cpp",
233    "mem/gc/gc_stats.cpp",
234    "mem/gc/gc_trigger.cpp",
235    "mem/gc/gen-gc/gen-gc.cpp",
236    "mem/gc/generational-gc-base.cpp",
237    "mem/gc/heap-space-misc/crossing_map.cpp",
238    "mem/gc/heap-space-misc/crossing_map_singleton.cpp",
239    "mem/gc/lang/gc_lang.cpp",
240    "mem/gc/stw-gc/stw-gc.cpp",
241    "mem/gc/workers/gc_worker.cpp",
242    "mem/gc/workers/gc_workers_task_pool.cpp",
243    "mem/gc/workers/gc_workers_task_queue.cpp",
244    "mem/gc/workers/gc_workers_thread_pool.cpp",
245    "mem/heap_manager.cpp",
246    "mem/heap_space.cpp",
247    "mem/heap_verifier.cpp",
248    "mem/internal_allocator.cpp",
249    "mem/mem_stats.cpp",
250    "mem/mem_stats_additional_info.cpp",
251    "mem/mem_stats_default.cpp",
252    "mem/memory_manager.cpp",
253    "mem/object_helpers.cpp",
254    "mem/panda_string.cpp",
255    "mem/refstorage/global_object_storage.cpp",
256    "mem/refstorage/ref_block.cpp",
257    "mem/refstorage/reference_storage.cpp",
258    "mem/region_space.cpp",
259    "mem/rendezvous.cpp",
260    "mem/runslots.cpp",
261    "mem/tlab.cpp",
262    "method.cpp",
263    "methodtrace/trace.cpp",
264    "monitor.cpp",
265    "monitor_object_lock.cpp",
266    "monitor_pool.cpp",
267    "mt_thread_manager.cpp",
268    "object_accessor.cpp",
269    "object_header.cpp",
270    "osr.cpp",
271    "panda_vm.cpp",
272    "plugins.cpp",
273    "profilesaver/profile_dump_info.cpp",
274    "profilesaver/profile_saver.cpp",
275    "regexp/ecmascript/mem/dyn_chunk.cpp",
276    "regexp/ecmascript/regexp_executor.cpp",
277    "regexp/ecmascript/regexp_opcode.cpp",
278    "regexp/ecmascript/regexp_parser.cpp",
279    "runtime.cpp",
280    "runtime_controller.cpp",
281    "runtime_helpers.cpp",
282    "stack_walker.cpp",
283    "string_table.cpp",
284    "thread.cpp",
285    "thread_proxy.cpp",
286    "time_utils.cpp",
287    "timing.cpp",
288    "tooling/backtrace/backtrace.cpp",
289    "tooling/debug_inf.cpp",
290    "tooling/debugger.cpp",
291    "tooling/evaluation/expression_loader.cpp",
292    "tooling/inspector/debugger_arkapi.cpp",
293    "tooling/pt_default_lang_extension.cpp",
294    "tooling/pt_thread.cpp",
295    "tooling/sampler/lock_free_queue.cpp",
296    "tooling/sampler/sample_writer.cpp",
297    "tooling/sampler/samples_record.cpp",
298    "tooling/sampler/sampling_profiler.cpp",
299    "tooling/sampler/stack_walker_base.cpp",
300    "tooling/sampler/thread_communicator.cpp",
301    "tooling/tools.cpp",
302    "vtable_builder_base.cpp",
303  ]
304
305  if (!is_mingw) {
306    sources += [
307      "dprofiler/dprofiler.cpp",
308      "signal_handler.cpp",
309    ]
310  }
311
312  if (enable_irtoc) {
313    sources += [ "$ark_root_gen_dir/generated/irtoc_lib.o" ]
314    if (is_llvm_interpreter || is_llvm_fastpath) {
315      sources += [ "$ark_root_gen_dir/generated/irtoc_llvm_lib.o" ]
316    }
317  }
318  if (current_cpu == "arm") {
319    sources += [
320      "arch/arm/interpreter_support.S",
321      "arch/arm/osr_arm.S",
322      "bridge/arch/arm/compiled_code_to_interpreter_bridge_arm.S",
323      "bridge/arch/arm/compiled_code_to_interpreter_bridge_dyn_arm.S",
324      "bridge/arch/arm/compiled_code_to_runtime_bridge_arm.S",
325      "bridge/arch/arm/deoptimization_arm.S",
326      "bridge/arch/arm/expand_compiled_code_args_dyn_arm.S",
327      "bridge/arch/arm/interpreter_to_compiled_code_bridge_arm.S",
328      "bridge/arch/arm/interpreter_to_compiled_code_bridge_dyn_arm.S",
329      "fibers/arch/arm/get.S",
330      "fibers/arch/arm/switch.S",
331      "fibers/arch/arm/update.S",
332    ]
333    #TODO add arm32 abi hard
334  } else if (current_cpu == "arm64") {
335    sources += [
336      "arch/aarch64/interpreter_support.S",
337      "arch/aarch64/osr_aarch64.S",
338      "bridge/arch/aarch64/compiled_code_to_interpreter_bridge_aarch64.S",
339      "bridge/arch/aarch64/compiled_code_to_interpreter_bridge_dyn_aarch64.S",
340      "bridge/arch/aarch64/compiled_code_to_runtime_bridge_aarch64.S",
341      "bridge/arch/aarch64/deoptimization_aarch64.S",
342      "bridge/arch/aarch64/expand_compiled_code_args_dyn_aarch64.S",
343      "bridge/arch/aarch64/interpreter_to_compiled_code_bridge_aarch64.S",
344      "bridge/arch/aarch64/interpreter_to_compiled_code_bridge_dyn_aarch64.S",
345      "fibers/arch/aarch64/get.S",
346      "fibers/arch/aarch64/switch.S",
347      "fibers/arch/aarch64/update.S",
348    ]
349  } else if (current_cpu == "x86") {
350    sources += [
351      "arch/x86/interpreter_support.S",
352      "arch/x86/osr_x86.S",
353      "bridge/arch/x86/compiled_code_to_interpreter_bridge_x86.S",
354      "bridge/arch/x86/deoptimization_x86.S",
355      "bridge/arch/x86/interpreter_to_compiled_code_bridge_x86.S",
356    ]
357  } else if (current_cpu == "amd64" || current_cpu == "x64" ||
358             current_cpu == "x86_64") {
359    sources += [
360      "arch/amd64/common_amd64.S",
361      "arch/amd64/interpreter_support.S",
362      "arch/amd64/osr_amd64.S",
363      "bridge/arch/amd64/compiled_code_to_interpreter_bridge_amd64.S",
364      "bridge/arch/amd64/compiled_code_to_interpreter_bridge_dyn_amd64.S",
365      "bridge/arch/amd64/compiled_code_to_runtime_bridge_amd64.S",
366      "bridge/arch/amd64/deoptimization_amd64.S",
367      "bridge/arch/amd64/expand_compiled_code_args_dyn_amd64.S",
368      "bridge/arch/amd64/interpreter_to_compiled_code_bridge_amd64.S",
369      "bridge/arch/amd64/interpreter_to_compiled_code_bridge_dyn_amd64.S",
370      "fibers/arch/amd64/get.S",
371      "fibers/arch/amd64/switch.S",
372      "fibers/arch/amd64/update.S",
373    ]
374  }
375
376  if (defined(enable_perf_counters)) {
377    sources += [ "tooling/perf_counter.cpp" ]
378  }
379
380  if (is_mob) {
381    sources += [
382      "$ark_root/platforms/mobile/runtime/thread.cpp",
383      "$ark_root/platforms/mobile/runtime/verify_app_install.cpp",
384    ]
385  } else {
386    sources += [
387      "$ark_root/platforms/common/runtime/thread.cpp",
388      "$ark_root/platforms/common/runtime/verify_app_install.cpp",
389    ]
390  }
391
392  core_vm_sources = [
393    "core/core_class_linker_extension.cpp",
394    "core/core_language_context.cpp",
395    "core/core_vm.cpp",
396  ]
397
398  sources += core_vm_sources
399  sources += verifier_sources + plugin_verifier_sources
400  sources += plugin_runtime_sources
401
402  public_configs = [
403    "$ark_root/assembler:arkassembler_public_config",
404    "$ark_root:ark_config",
405    "$ark_root/libpandabase:arkbase_public_config",
406    "$ark_root/libpandafile:arkfile_public_config",
407    "$ark_root/compiler:arkcompiler_public_config",
408    "$ark_root/verification/gen:verification_public_config",
409    ":arkruntime_public_config",
410    ":arkruntime_config",
411    "$ark_root/runtime/asm_defines:asmdefines_public_config",
412  ]
413
414  public_configs += plugin_runtime_configs
415
416  deps = [
417    ":arkruntime_header_deps",
418    ":arkruntime_interpreter_impl",
419    "$ark_root/compiler:libarkcompiler_intrinsics_gen_inl_entrypoints_bridge_asm_macro_inl",
420    "$ark_root/compiler:libarkcompiler_intrinsics_gen_inl_intrinsics_enum_inl",
421    "$ark_root/compiler:libarktscompiler",
422    "$ark_root/compiler/aot:libarkaotmanager",
423    "$ark_root/cross_values:cross_values_getters_generate(${default_toolchain})",
424    "$ark_root/libpandabase:libarktsbase",
425    "$ark_root/libpandafile:libarkfile_type_gen_h",
426    "$ark_root/libpandafile:libarktsfile",
427    "$ark_root/libziparchive:libarktsziparchive",
428    "$ark_root/platforms/target_defaults:arktarget_options",
429    "$ark_root/runtime/asm_defines:asm_defines_generator",
430  ]
431
432  if (ark_static_standalone_build) {
433    public_configs += [ zlib_public_config ]
434    deps += [
435      icui18n_dep,
436      zlib_dep,
437    ]
438  }
439
440  external_deps = [
441    "napi:ace_napi",
442    icui18n_dep,
443    icuuc_dep,
444    sdk_libc_secshared_dep,
445    zlib_dep,
446  ]
447
448  if (!(ark_standalone_build || ark_static_standalone_build)) {
449    external_deps += [ "pcre2:libpcre2_static" ]
450    external_deps += [ "pcre2:libpcre2_static_16" ]
451  } else if (ark_standalone_build) {
452    deps += [
453      "//third_party/pcre2:libpcre2_static",
454      "//third_party/pcre2:libpcre2_static_16",
455    ]
456  } else if (ark_static_standalone_build) {
457    deps += [
458      ":libpcre2_16",
459      ":libpcre2_8",
460    ]
461    include_dirs = [ "$target_gen_dir/pcre2/common" ]
462  }
463
464  if (!ark_standalone_build) {
465    external_deps += [ "napi:ace_napi" ]
466  }
467
468  deps += plugin_runtime_deps
469  deps += plugin_arkruntime_stdlib_plugin_deps
470
471  if (!is_mingw) {
472    deps += [ "$ark_root/dprof:libdprof" ]
473  }
474
475  if (enable_irtoc) {
476    deps += [ "$ark_root/irtoc:irtoc_generate" ]
477  }
478
479  if (current_cpu == "arm") {
480    deps += [
481      ":bridge_dispatch_arm",
482      ":bridge_dispatch_dyn_arm",
483    ]
484  } else if (current_cpu == "arm64") {
485    deps += [
486      ":bridge_dispatch_aarch64",
487      ":bridge_dispatch_dyn_aarch64",
488    ]
489  } else if (current_cpu == "amd64" || current_cpu == "x64" ||
490             current_cpu == "x86_64") {
491    deps += [
492      ":bridge_dispatch_amd64",
493      ":bridge_dispatch_dyn_amd64",
494    ]
495  }
496
497  if (is_ohos && is_standard_system) {
498    defines = [ "PANDA_OHOS_USE_INNER_HILOG" ]
499    external_deps += [
500      "hilog:libhilog",
501      "libuv:uv",
502    ]
503  }
504
505  part_name = ark_part_name
506  subsystem_name = ark_subsystem_name
507}
508
509ohos_static_library("libarkruntime_static") {
510  deps = [ ":libarkruntime_set_static" ]
511  output_extension = "a"
512  part_name = ark_part_name
513  subsystem_name = "$ark_subsystem_name"
514}
515
516config("ark_integrate_public_config") {
517  include_dirs = [ "$ark_root/plugins/ets/runtime/integrate" ]
518}
519
520ohos_shared_library("libarkruntime") {
521  public_configs = [ ":ark_integrate_public_config" ]
522  deps = [ ":libarkruntime_set_static" ]
523
524  if ((current_cpu == "amd64" || current_cpu == "x64" ||
525      current_cpu == "x86_64") && (ark_standalone_build || ark_static_standalone_build)) {
526    ldflags = [ "-latomic" ]
527  }
528
529  if (is_mingw || is_mac) {
530    output_extension = "dll"
531  } else {
532    output_extension = "so"
533  }
534  part_name = ark_part_name
535  subsystem_name = "$ark_subsystem_name"
536}
537
538config("arkruntime_interpreter_impl_config") {
539  include_dirs = [
540    "$ark_root/compiler",
541    "$ark_root/libpandabase",
542    "$ark_root/libpandafile",
543    "$ark_root/runtime",
544    "$ark_root/dprof/libdprof",
545    get_label_info(
546        "$ark_root/cross_values:cross_values_getters_generate(${default_toolchain})",
547        "target_gen_dir"),
548    "$target_gen_dir",
549    "$target_gen_dir/generated",
550    "$target_gen_dir/include",
551  ]
552
553  include_dirs += platform_include_dirs
554
555  configs = plugin_runtime_interpreter_impl_configs
556
557  cflags_cc = [
558    "-Wno-invalid-offsetof",
559    "-Wno-unused-parameter",
560  ]
561  defines = []
562
563  if (ark_enable_global_register_variables) {
564    if (current_cpu == "arm64") {
565      cflags_cc += [
566        "-ffixed-x20",
567        "-ffixed-x21",
568        "-ffixed-x22",
569        "-ffixed-x23",
570        "-ffixed-x24",
571        "-ffixed-x25",
572        "-ffixed-x28",
573      ]
574      defines += [ "FFIXED_REGISTERS" ]
575    }
576  }
577}
578
579ohos_source_set("arkruntime_interpreter_impl_static") {
580  sources = [ "interpreter/interpreter_impl.cpp" ]
581
582  public_configs = [
583    "$ark_root:ark_config",
584    "$ark_root/libpandabase:arkbase_public_config",
585    "$ark_root/libpandafile:arkfile_public_config",
586    "$ark_root/runtime:arkruntime_public_config",
587    "$ark_root/compiler:arkcompiler_public_config",
588    "$ark_root/verification/gen:verification_public_config",
589    ":arkruntime_interpreter_impl_config",
590  ]
591
592  deps = [
593    ":arkruntime_header_deps",
594    "$ark_root/cross_values:cross_values_getters_generate(${default_toolchain})",
595    "$ark_root/libpandabase:libarktsbase",
596    "$ark_root/libpandafile:libarktsfile",
597  ]
598
599  external_deps = [ sdk_libc_secshared_dep ]
600
601  deps += plugin_arkruntime_stdlib_plugin_deps
602
603  part_name = ark_part_name
604  subsystem_name = "$ark_subsystem_name"
605}
606
607# panda_set_lib_32bit_property not used in android
608ohos_static_library("arkruntime_interpreter_impl") {
609  deps = [ ":arkruntime_interpreter_impl_static" ]
610  part_name = ark_part_name
611  subsystem_name = ark_subsystem_name
612}
613
614template("gen_intrinsics_yaml") {
615  assert(defined(invoker.data_files), "data_files required!")
616  assert(defined(invoker.output_file), "output_file required!")
617
618  data_files = string_join(",", rebase_path(invoker.data_files, root_build_dir))
619  template_file = "templates/intrinsics.yaml.erb"
620  requires = string_join(",",
621                         [
622                           rebase_path("templates/runtime.rb", root_build_dir),
623                           rebase_path("$ark_root/libpandabase/utils.rb",
624                                       root_build_dir),
625                         ])
626
627  action("$target_name") {
628    script = "$ark_root/runtime/templates/gen_intrinsics_data.rb"
629
630    # rerun action when data file or template file update
631    inputs = [ template_file ]
632    inputs += invoker.data_files
633
634    outputs = [ invoker.output_file ]
635    args = [
636      rebase_path("templates/runtime.rb", root_build_dir),
637      "-d",
638      data_files,
639      "-t",
640      rebase_path(template_file, root_build_dir),
641      "-o",
642      rebase_path(outputs[0]),
643      "-r",
644      requires,
645    ]
646  }
647}
648
649gen_intrinsics_yaml("arkruntime_gen_intrinsics_yaml") {
650  data_files = runtime_yaml
651  output_file = "$target_gen_dir/intrinsics.yaml"
652}
653
654gen_include_dir = "$target_gen_dir/include"
655
656ark_isa_gen("profiling_gen") {
657  template_files = [ "profiling_gen.h.erb" ]
658  sources = "profiling"
659  destination = "$target_gen_dir/runtime/include"
660}
661
662config("profiling_gen_public_config") {
663  include_dirs =
664      [ get_label_info(":profiling_gen_profiling_gen_h", "target_gen_dir") ]
665}
666
667if (!ark_static_standalone_build) {
668  ohos_shared_headers("runtime_gen_headers") {
669    include_dirs = [ get_label_info(":profiling_gen_profiling_gen_h", "target_gen_dir") ]
670    deps = [ ":profiling_gen_profiling_gen_h" ]
671    part_name = ark_part_name
672    subsystem_name = "$ark_subsystem_name"
673  }
674}
675
676ark_isa_gen("isa_gen_libarkruntime") {
677  template_files = [
678    "interpreter-inl_gen.h.erb",
679    "isa_constants_gen.h.erb",
680  ]
681  if (enable_irtoc) {
682    template_files += [ "irtoc_interpreter_utils.h.erb" ]
683  }
684  sources = "interpreter/templates"
685  destination = gen_include_dir
686}
687
688isa = ark_isa_yaml
689isa_api = "$ark_root/isa/isapi.rb"
690bridge_dispatch_template = "templates/bridge_dispatch.S.erb"
691bridge_dispatch_dyn_template = "templates/bridge_dispatch_dyn.S.erb"
692bridge_archs = [
693  "aarch64",
694  "arm",
695  "armhf",
696  "amd64",
697  "x86",
698]
699foreach(arch, bridge_archs) {
700  ark_gen_file("bridge_dispatch_${arch}") {
701    data = [ isa ]
702    template_file = bridge_dispatch_template
703    output_file = "$gen_include_dir/bridge_dispatch_${arch}.S"
704    api = [ isa_api ]
705    requires = [
706      "templates/bridge_helpers_${arch}.rb",
707      "templates/bridge_helpers_common.rb",
708      "templates/bridge_helpers_static.rb",
709    ]
710    extra_dependencies = [ "$ark_root/isa:isa_combine" ]
711  }
712
713  ark_gen_file("bridge_dispatch_dyn_${arch}") {
714    data = [ isa ]
715    template_file = bridge_dispatch_dyn_template
716    output_file = "$gen_include_dir/bridge_dispatch_dyn_${arch}.S"
717    api = [ isa_api ]
718    requires = [
719      "templates/bridge_helpers_dynamic.rb",
720      "templates/bridge_helpers_common.rb",
721      "templates/bridge_helpers_${arch}.rb",
722    ]
723    extra_dependencies = [ "$ark_root/isa:isa_combine" ]
724  }
725}
726
727ark_gen("arkruntime_gen_entrypoints") {
728  data = [ "$target_gen_dir/entrypoints.yaml" ]
729  template_files = [
730    "entrypoints_gen.h.erb",
731    "entrypoints_gen.S.erb",
732    "entrypoints_compiler.inl.erb",
733  ]
734  api = [ "entrypoints/entrypoints.rb" ]
735  requires = [ "$ark_root/templates/common.rb" ]
736  sources = "entrypoints"
737  destination = "$target_gen_dir/generated"
738  extra_dependencies = [ "$ark_root:concat_entrypoints_yamls" ]
739}
740
741# Substitute ICU path
742action("substitute_icu_path") {
743  script = "templates/substitute_icu_path.rb"
744  outputs = [ "$target_gen_dir/init_icu_gen.cpp" ]
745  args = [
746    rebase_path("templates/init_icu_gen.cpp.erb"),
747    rebase_path("$target_gen_dir/init_icu_gen.cpp"),
748    rebase_path(ark_third_party_root),
749  ]
750}
751
752ark_gen("arkruntime_gen_entrypoints_compiler_checksum") {
753  data = [ "entrypoints/entrypoints.yaml" ]
754  template_files = [ "entrypoints_compiler_checksum.inl.erb" ]
755  api = [ "entrypoints/entrypoints.rb" ]
756  sources = "entrypoints"
757  destination = "$target_gen_dir/generated"
758  extra_dependencies =
759      [ "$ark_root/cross_values:cross_values_generate(${default_toolchain})" ]
760  extra_argv = [ rebase_path(
761          get_label_info(
762              "$ark_root/cross_values:cross_values_generate(${default_toolchain})",
763              "target_gen_dir"),
764          root_build_dir) ]
765}
766
767ark_gen("arkruntime_gen_intrinsics") {
768  if (abckit_enable) {
769    data = [ "$target_gen_dir/abckit_intrinsics.yaml" ]
770  } else {
771    data = [ "$target_gen_dir/intrinsics.yaml" ]
772  }
773  template_files = [
774    "intrinsics_gen.h.erb",
775    "intrinsics.h.erb",
776    "intrinsics_enum.h.erb",
777    "unimplemented_intrinsics-inl.cpp.erb",
778  ]
779  api = [ "templates/intrinsics.rb" ]
780  requires = [ "$ark_root/libpandabase/utils.rb" ]
781  sources = "templates"
782  destination = "$target_gen_dir"
783  extra_dependencies = [ ":arkruntime_gen_intrinsics_yaml" ]
784  if (abckit_enable) {
785    extra_dependencies +=
786        [ "$ark_root/../libabckit/src:abckit_concat_intrinsics_yaml" ]
787  }
788}
789
790ark_gen_file("libarkruntime_options_gen_h") {
791  template_file = "../templates/options/options.h.erb"
792  data = [ "$target_gen_dir/../runtime_options.yaml" ]
793  api = [ "../templates/common.rb" ]
794  output_file = "$target_gen_dir/generated/runtime_options_gen.h"
795  extra_dependencies = [ "$ark_root:merge_runtime_options_yamls" ]
796}
797
798ark_gen_file("libarkruntime_shorty_values_h") {
799  template_file = "templates/shorty_values.h.erb"
800  data = [ "../libpandafile/types.yaml" ]
801  api = [ "../libpandafile/types.rb" ]
802  output_file = "$target_gen_dir/generated/shorty_values.h"
803}
804
805ark_gen_file("plugins_inc") {
806  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
807  template_file = "templates/plugins.inc.erb"
808  data = [ ark_plugin_options_yaml ]
809  api = [ "$ark_root/templates/plugin_options.rb" ]
810  output_file = "$target_gen_dir/plugins.inc"
811}
812
813ark_gen_file("plugins_entrypoints_gen_h") {
814  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
815  template_file = "entrypoints/plugins_entrypoints_gen.h.erb"
816  data = [ ark_plugin_options_yaml ]
817  api = [ "$ark_root/templates/plugin_options.rb" ]
818  output_file = "$target_gen_dir/plugins_entrypoints_gen.h"
819}
820
821ark_gen_file("plugins_interpreters_inl_h") {
822  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
823  template_file = "templates/plugins_interpreters-inl.h.erb"
824  data = [ ark_plugin_options_yaml ]
825  api = [ "$ark_root/templates/plugin_options.rb" ]
826  output_file = "$target_gen_dir/plugins_interpreters-inl.h"
827}
828
829ark_gen_file("language_config_gen_inc") {
830  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
831  template_file = "templates/language_config_gen.inc.erb"
832  data = [ ark_plugin_options_yaml ]
833  api = [ "$ark_root/templates/plugin_options.rb" ]
834  output_file = "$target_gen_dir/language_config_gen.inc"
835}
836
837ark_gen_file("intrinsics_inl_h") {
838  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
839  template_file = "templates/intrinsics.inl.h.erb"
840  data = [ ark_plugin_options_yaml ]
841  api = [ "$ark_root/templates/plugin_options.rb" ]
842  output_file = "$target_gen_dir/intrinsics.inl.h"
843}
844
845ark_gen_file("plugins_defines_h") {
846  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
847  template_file = "templates/plugins_defines.h.erb"
848  data = [ ark_plugin_options_yaml ]
849  api = [ "$ark_root/templates/plugin_options.rb" ]
850  output_file = "$target_gen_dir/plugins_defines.h"
851}
852
853ark_gen_file("plugins_asm_defines_def") {
854  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
855  template_file = "templates/plugins_asm_defines.def.erb"
856  data = [ ark_plugin_options_yaml ]
857  api = [ "$ark_root/templates/plugin_options.rb" ]
858  output_file = "$target_gen_dir/plugins_asm_defines.def"
859}
860
861generated_file("plugin_read_profile_h") {
862  outputs = [ "$target_gen_dir/profiling/generated/read_profile.h" ]
863  contents = plugin_read_profile_paths
864  output_conversion = "list lines"
865}
866generated_file("plugin_clear_profile_h") {
867  outputs = [ "$target_gen_dir/profiling/generated/clear_profile.h" ]
868  contents = plugin_clear_profile_paths
869  output_conversion = "list lines"
870}
871generated_file("plugin_destroy_profile_h") {
872  outputs = [ "$target_gen_dir/profiling/generated/destroy_profile.h" ]
873  contents = plugin_destroy_profile_paths
874  output_conversion = "list lines"
875}
876generated_file("plugin_dump_profile_h") {
877  outputs = [ "$target_gen_dir/profiling/generated/dump_profile.h" ]
878  contents = plugin_dump_profile_paths
879  output_conversion = "list lines"
880}
881generated_file("plugin_find_method_in_profile_h") {
882  outputs = [ "$target_gen_dir/profiling/generated/find_method_in_profile.h" ]
883  contents = plugin_find_method_in_profile_paths
884  output_conversion = "list lines"
885}
886generated_file("plugin_profiling_includes_disasm_h") {
887  outputs =
888      [ "$target_gen_dir/profiling/generated/profiling_includes_disasm.h" ]
889  contents = plugin_profiling_includes_disasm_paths
890  output_conversion = "list lines"
891}
892generated_file("plugin_profiling_includes_h") {
893  outputs = [ "$target_gen_dir/profiling/generated/profiling_includes.h" ]
894  contents = plugin_profiling_includes_paths
895  output_conversion = "list lines"
896}
897generated_file("get_profiling_any_type_h") {
898  outputs = [ "$target_gen_dir/profiling/generated/get_profiling_any_type.h" ]
899  contents = plugin_get_profiling_any_type_paths
900  output_conversion = "list lines"
901}
902
903# NOTE(kirillparshukov): move to third_party scripts
904# Used only in ark_static_standalone_build. For ohos build, use external_deps.
905if (ark_static_standalone_build) {
906  pcre2_lib_dir = "//third_party/pcre2/pcre2"
907  copy("pcre2_copy_config_h") {
908    sources = [ "$pcre2_lib_dir/src/config.h.generic" ]
909    outputs = [ "$target_gen_dir/pcre2/internal/config.h" ]
910  }
911
912  copy("pcre2_copy_pcre2_h") {
913    sources = [ "$pcre2_lib_dir/src/pcre2.h.generic" ]
914    outputs = [ "$target_gen_dir/pcre2/common/pcre2.h" ]
915  }
916
917  ohos_static_library("libpcre2_16") {
918    output_name = "libpcre2_16"
919    deps = [
920      ":pcre2_copy_config_h",
921      ":pcre2_copy_pcre2_h",
922    ]
923    sources = [
924      "$pcre2_lib_dir/src/pcre2_auto_possess.c",
925      "$pcre2_lib_dir/src/pcre2_compile.c",
926      "$pcre2_lib_dir/src/pcre2_config.c",
927      "$pcre2_lib_dir/src/pcre2_context.c",
928      "$pcre2_lib_dir/src/pcre2_convert.c",
929      "$pcre2_lib_dir/src/pcre2_dfa_match.c",
930      "$pcre2_lib_dir/src/pcre2_error.c",
931      "$pcre2_lib_dir/src/pcre2_extuni.c",
932      "$pcre2_lib_dir/src/pcre2_find_bracket.c",
933      "$pcre2_lib_dir/src/pcre2_jit_compile.c",
934      "$pcre2_lib_dir/src/pcre2_maketables.c",
935      "$pcre2_lib_dir/src/pcre2_match.c",
936      "$pcre2_lib_dir/src/pcre2_match_data.c",
937      "$pcre2_lib_dir/src/pcre2_newline.c",
938      "$pcre2_lib_dir/src/pcre2_ord2utf.c",
939      "$pcre2_lib_dir/src/pcre2_pattern_info.c",
940      "$pcre2_lib_dir/src/pcre2_script_run.c",
941      "$pcre2_lib_dir/src/pcre2_serialize.c",
942      "$pcre2_lib_dir/src/pcre2_string_utils.c",
943      "$pcre2_lib_dir/src/pcre2_study.c",
944      "$pcre2_lib_dir/src/pcre2_substitute.c",
945      "$pcre2_lib_dir/src/pcre2_substring.c",
946      "$pcre2_lib_dir/src/pcre2_tables.c",
947      "$pcre2_lib_dir/src/pcre2_ucd.c",
948      "$pcre2_lib_dir/src/pcre2_valid_utf.c",
949      "$pcre2_lib_dir/src/pcre2_xclass.c",
950    ]
951    include_dirs = [
952      "$target_gen_dir/pcre2/common",
953      "$target_gen_dir/pcre2/internal",
954    ]
955    sources += [ "$pcre2_lib_dir/src/pcre2_chartables.c" ]
956    cflags = [
957      "-D_GNU_SOURCE",
958      "-DHAVE_CONFIG_H",
959      "-DSUPPORT_PCRE2_16=1",
960      "-DSUPPORT_UNICODE=1",
961      "-DPCRE2_CODE_UNIT_WIDTH=16",
962      "-w",
963    ]
964    part_name = ark_part_name
965    subsystem_name = ark_subsystem_name
966  }
967
968  ohos_static_library("libpcre2_8") {
969    output_name = "libpcre2_8"
970    deps = [
971      ":pcre2_copy_config_h",
972      ":pcre2_copy_pcre2_h",
973    ]
974    sources = [
975      "$pcre2_lib_dir/src/pcre2_auto_possess.c",
976      "$pcre2_lib_dir/src/pcre2_chkdint.c",
977      "$pcre2_lib_dir/src/pcre2_compile.c",
978      "$pcre2_lib_dir/src/pcre2_config.c",
979      "$pcre2_lib_dir/src/pcre2_context.c",
980      "$pcre2_lib_dir/src/pcre2_convert.c",
981      "$pcre2_lib_dir/src/pcre2_dfa_match.c",
982      "$pcre2_lib_dir/src/pcre2_error.c",
983      "$pcre2_lib_dir/src/pcre2_extuni.c",
984      "$pcre2_lib_dir/src/pcre2_find_bracket.c",
985      "$pcre2_lib_dir/src/pcre2_jit_compile.c",
986      "$pcre2_lib_dir/src/pcre2_maketables.c",
987      "$pcre2_lib_dir/src/pcre2_match.c",
988      "$pcre2_lib_dir/src/pcre2_match_data.c",
989      "$pcre2_lib_dir/src/pcre2_newline.c",
990      "$pcre2_lib_dir/src/pcre2_ord2utf.c",
991      "$pcre2_lib_dir/src/pcre2_pattern_info.c",
992      "$pcre2_lib_dir/src/pcre2_script_run.c",
993      "$pcre2_lib_dir/src/pcre2_serialize.c",
994      "$pcre2_lib_dir/src/pcre2_string_utils.c",
995      "$pcre2_lib_dir/src/pcre2_study.c",
996      "$pcre2_lib_dir/src/pcre2_substitute.c",
997      "$pcre2_lib_dir/src/pcre2_substring.c",
998      "$pcre2_lib_dir/src/pcre2_tables.c",
999      "$pcre2_lib_dir/src/pcre2_ucd.c",
1000      "$pcre2_lib_dir/src/pcre2_valid_utf.c",
1001      "$pcre2_lib_dir/src/pcre2_xclass.c",
1002    ]
1003    include_dirs = [
1004      "$target_gen_dir/pcre2/common",
1005      "$target_gen_dir/pcre2/internal",
1006    ]
1007    sources += [ "$pcre2_lib_dir/src/pcre2_chartables.c" ]
1008    cflags = [
1009      "-D_GNU_SOURCE",
1010      "-DHAVE_CONFIG_H",
1011      "-DSUPPORT_PCRE2_8=1",
1012      "-DSUPPORT_UNICODE=1",
1013      "-DPCRE2_CODE_UNIT_WIDTH=8",
1014      "-w",
1015    ]
1016    part_name = ark_part_name
1017    subsystem_name = ark_subsystem_name
1018  }
1019}
1020