• 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("//arkcompiler/runtime_core/static_vm_config.gni")
16import("$ark_root/irtoc/irtoc.gni")
17import("$ark_root/plugins/plugins.gni")
18
19if (ark_standalone_build) {
20  import("$build_root/ark.gni")
21} else {
22  import("//build/ohos.gni")
23}
24
25ohos_static_library("libarktscompiler_package") {
26  deps = []
27  if (enable_static_vm) {
28    deps += [ ":libarktscompiler_frontend_static" ]
29  }
30
31  part_name = ark_part_name
32  subsystem_name = "$ark_subsystem_name"
33}
34
35config("arkcompiler_public_config") {
36  include_dirs = [
37    "$ark_root_gen_dir",
38    "$ark_root/compiler",
39    "$ark_root/compiler/code_info",
40    "$ark_root/compiler/optimizer/ir",
41    "$target_gen_dir/generated",
42    get_label_info("$ark_root/cross_values:cross_values_getters_generate",
43                   "target_gen_dir"),
44    get_label_info("$ark_root/runtime:plugins_defines_h", "target_gen_dir") +
45        "/asm_defines/generated",
46    get_label_info(
47        "$ark_root_gen_dir/cross_values:cross_values_getters_generate",
48        "target_gen_dir"),
49  ]
50
51  include_dirs += platform_include_dirs
52
53  if (abckit_enable) {
54    intrinsics_gen_dir =
55        get_label_info(":libarkcompiler_intrinsics_gen_inl", "target_gen_dir")
56    include_dirs += [ "$intrinsics_gen_dir/generated" ]
57  }
58
59  defines = []
60  if (enable_bytecode_optimizer && plugin_enable_bytecode_optimizer) {
61    defines += [ "ENABLE_BYTECODE_OPT" ]
62  }
63  if (abckit_enable) {
64    defines += [ "ENABLE_LIBABCKIT" ]
65  }
66
67  cflags_cc = []
68  if (target_cpu == "x64" || target_cpu == "x86_64") {
69    defines += [ "PANDA_COMPILER_TARGET_X86_64" ]
70  } else if (target_cpu == "arm64") {
71    defines += [ "PANDA_COMPILER_TARGET_AARCH64" ]
72  } else if (target_cpu == "arm") {
73    defines += [ "PANDA_COMPILER_TARGET_AARCH32" ]
74  }
75  configs = []
76  if (enable_codegen) {
77    configs +=
78        [ "$ark_root/compiler/optimizer/code_generator:arkencoder_config" ]
79  }
80}
81
82if (!ark_static_standalone_build) {
83  ohos_shared_headers("compiler_headers") {
84    include_dirs = [
85      "$ark_root_gen_dir",
86      "$ark_root/compiler",
87      "$ark_root/compiler/code_info",
88      "$ark_root/compiler/optimizer/ir",
89      "$target_gen_dir/generated",
90      get_label_info("$ark_root/cross_values:cross_values_getters_generate",
91                     "target_gen_dir"),
92      get_label_info("$ark_root/runtime:plugins_defines_h", "target_gen_dir") +
93          "/asm_defines/generated",
94      get_label_info(
95          "$ark_root_gen_dir/cross_values:cross_values_getters_generate",
96          "target_gen_dir"),
97    ]
98    deps = [
99      "../cross_values:cross_values_getters_generate(${default_toolchain})",
100      "../runtime:plugins_defines_h",
101    ]
102    part_name = ark_part_name
103    subsystem_name = "$ark_subsystem_name"
104  }
105}
106
107libarkcompiler_sources = [
108  "compiler_logger.cpp",
109  "compiler_options.cpp",
110  "optimizer/analysis/alias_analysis.cpp",
111  "optimizer/analysis/alias_visitor.cpp",
112  "optimizer/analysis/bounds_analysis.cpp",
113  "optimizer/analysis/catch_inputs.cpp",
114  "optimizer/analysis/countable_loop_parser.cpp",
115  "optimizer/analysis/dominators_tree.cpp",
116  "optimizer/analysis/linear_order.cpp",
117  "optimizer/analysis/live_in_analysis.cpp",
118  "optimizer/analysis/live_registers.cpp",
119  "optimizer/analysis/liveness_analyzer.cpp",
120  "optimizer/analysis/liveness_use_table.cpp",
121  "optimizer/analysis/loop_analyzer.cpp",
122  "optimizer/analysis/monitor_analysis.cpp",
123  "optimizer/analysis/object_type_propagation.cpp",
124  "optimizer/analysis/reg_alloc_verifier.cpp",
125  "optimizer/analysis/rpo.cpp",
126  "optimizer/analysis/types_analysis.cpp",
127  "optimizer/code_generator/encode.cpp",
128  "optimizer/ir/analysis.cpp",
129  "optimizer/ir/aot_data.cpp",
130  "optimizer/ir/basicblock.cpp",
131  "optimizer/ir/dump.cpp",
132  "optimizer/ir/graph.cpp",
133  "optimizer/ir/graph_checker.cpp",
134  "optimizer/ir/graph_cloner.cpp",
135  "optimizer/ir/inst.cpp",
136  "optimizer/ir/locations.cpp",
137  "optimizer/ir/loop_unswitcher.cpp",
138  "optimizer/ir/visualizer_printer.cpp",
139  "optimizer/ir_builder/inst_builder.cpp",
140  "optimizer/ir_builder/ir_builder.cpp",
141  "optimizer/optimizations/adjust_arefs.cpp",
142  "optimizer/optimizations/balance_expressions.cpp",
143  "optimizer/optimizations/branch_elimination.cpp",
144  "optimizer/optimizations/checks_elimination.cpp",
145  "optimizer/optimizations/cleanup.cpp",
146  "optimizer/optimizations/code_sink.cpp",
147  "optimizer/optimizations/condition_chain_cache.cpp",
148  "optimizer/optimizations/condition_chain_manager.cpp",
149  "optimizer/optimizations/const_folding.cpp",
150  "optimizer/optimizations/cse.cpp",
151  "optimizer/optimizations/deoptimize_elimination.cpp",
152  "optimizer/optimizations/escape.cpp",
153  "optimizer/optimizations/if_conversion.cpp",
154  "optimizer/optimizations/if_merging.cpp",
155  "optimizer/optimizations/inline_intrinsics.cpp",
156  "optimizer/optimizations/inlining.cpp",
157  "optimizer/optimizations/licm.cpp",
158  "optimizer/optimizations/licm_conditions.cpp",
159  "optimizer/optimizations/locations_builder.cpp",
160  "optimizer/optimizations/loop_idioms.cpp",
161  "optimizer/optimizations/loop_peeling.cpp",
162  "optimizer/optimizations/loop_unroll.cpp",
163  "optimizer/optimizations/loop_unswitch.cpp",
164  "optimizer/optimizations/lower_boxed_boolean.cpp",
165  "optimizer/optimizations/lowering.cpp",
166  "optimizer/optimizations/lse.cpp",
167  "optimizer/optimizations/memory_barriers.cpp",
168  "optimizer/optimizations/memory_coalescing.cpp",
169  "optimizer/optimizations/move_constants.cpp",
170  "optimizer/optimizations/native_call_optimization.cpp",
171  "optimizer/optimizations/object_type_check_elimination.cpp",
172  "optimizer/optimizations/optimize_string_concat.cpp",
173  "optimizer/optimizations/peepholes.cpp",
174  "optimizer/optimizations/phi_type_resolving.cpp",
175  "optimizer/optimizations/redundant_loop_elimination.cpp",
176  "optimizer/optimizations/regalloc/cleanup_empty_blocks.cpp",
177  "optimizer/optimizations/regalloc/interference_graph.cpp",
178  "optimizer/optimizations/regalloc/reg_alloc.cpp",
179  "optimizer/optimizations/regalloc/reg_alloc_base.cpp",
180  "optimizer/optimizations/regalloc/reg_alloc_graph_coloring.cpp",
181  "optimizer/optimizations/regalloc/reg_alloc_linear_scan.cpp",
182  "optimizer/optimizations/regalloc/reg_alloc_resolver.cpp",
183  "optimizer/optimizations/regalloc/reg_alloc_stat.cpp",
184  "optimizer/optimizations/regalloc/reg_map.cpp",
185  "optimizer/optimizations/regalloc/spill_fills_resolver.cpp",
186  "optimizer/optimizations/regalloc/split_resolver.cpp",
187  "optimizer/optimizations/reserve_string_builder_buffer.cpp",
188  "optimizer/optimizations/savestate_optimization.cpp",
189  "optimizer/optimizations/scheduler.cpp",
190  "optimizer/optimizations/simplify_string_builder.cpp",
191  "optimizer/optimizations/string_builder_utils.cpp",
192  "optimizer/optimizations/try_catch_resolving.cpp",
193  "optimizer/optimizations/vn.cpp",
194  "optimizer/pass.cpp",
195  "optimizer/pass_manager.cpp",
196  "optimizer/pass_manager_statistics.cpp",
197]
198libarkcompiler_sources += plugin_libarkcompiler_sources
199
200libarkcompiler_sources += [
201  "code_info/code_info.cpp",
202  "code_info/code_info_builder.cpp",
203  "compile_method.cpp",
204  "optimizer/code_generator/codegen.cpp",
205  "optimizer/code_generator/codegen_native.cpp",
206  "optimizer/code_generator/disassembly.cpp",
207  "optimizer/code_generator/encode_visitor.cpp",
208  "optimizer/code_generator/method_properties.cpp",
209  "optimizer/code_generator/slow_path.cpp",
210  "optimizer/code_generator/spill_fill_encoder.cpp",
211  "optimizer/pipeline.cpp",
212]
213
214libarkcompiler_sources += [ "$target_gen_dir/generated/inst_builder_gen.cpp" ]
215
216if (abckit_enable) {
217  libabckit_path = "$ark_root/../libabckit"
218  libabckit_deps = [ "$libabckit_path/src/templates/abckit_intrinsics:abckit_ark_gen_inst_builder_abckit_intrinsics_inc" ]
219  libabckit_includes = [
220    "$libabckit_path",
221    "$libabckit_path/src/adapter_static",
222    "$ark_root/bytecode_optimizer",
223    "$target_gen_dir/../bytecode_optimizer/generated",
224  ]
225}
226
227libarkcompiler_configs = [
228  ":arkcompiler_public_config",
229  "$ark_root:ark_config",
230  "$ark_root/libpandabase:arkbase_public_config",
231  "$ark_root/libpandafile:arkfile_public_config",
232  "$ark_root/runtime:arkruntime_public_config",
233]
234
235group("arktscompiler_header_deps") {
236  deps = [
237    ":codegen_language_extensions_h",
238    ":compiler_events_gen_h",
239    ":compiler_interface_extensions_inl_h",
240    ":compiler_logger_components_inc",
241    ":compiler_options_gen_h",
242    ":cpu_features_gen_inc",
243    ":inst_builder_extensions_inl_h",
244    ":intrinsics_can_encode_inl",
245    ":intrinsics_codegen_ext_inl_h",
246    ":intrinsics_extensions_inl_h",
247    ":intrinsics_graph_checker_inl",
248    ":intrinsics_inline_inl_h",
249    ":intrinsics_inline_native_method_inl",
250    ":intrinsics_inlining_expansion_inl_h",
251    ":intrinsics_inlining_expansion_switch_case_inl",
252    ":intrinsics_ir_build_inl_h",
253    ":intrinsics_ir_build_static_call_inl",
254    ":intrinsics_ir_build_virtual_call_inl",
255    ":intrinsics_lse_heap_inv_args_inl",
256    ":intrinsics_peephole_inl_h",
257    ":ir_dyn_base_types_h",
258    ":libarkcompiler_intrinsics_gen_inl_can_encode_builtin_inl",
259    ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_graph_inl",
260    ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_inst_inl",
261    ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_inl",
262    ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_names_inl",
263    ":libarkcompiler_intrinsics_gen_inl_intrinsic_codegen_test_inl",
264    ":libarkcompiler_intrinsics_gen_inl_intrinsic_flags_test_inl",
265    ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl",
266    ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl_h",
267    ":libarkcompiler_intrinsics_gen_inl_intrinsics_enum_inl",
268    ":libarkcompiler_intrinsics_gen_inl_intrinsics_flags_inl",
269    ":libarkcompiler_intrinsics_gen_inl_intrinsics_inline_inl",
270    ":libarkcompiler_intrinsics_gen_inl_intrinsics_ir_build_inl",
271    ":libarkcompiler_intrinsics_gen_inl_intrinsics_peephole_inl",
272    ":libarkcompiler_opcodes_h_IR-instructions_md",
273    ":libarkcompiler_opcodes_h_arch_info_gen_h",
274    ":libarkcompiler_opcodes_h_codegen_arm64_gen_inc",
275    ":libarkcompiler_opcodes_h_inst_checker_gen_h",
276    ":libarkcompiler_opcodes_h_inst_flags_inl",
277    ":libarkcompiler_opcodes_h_opcodes_h",
278    ":libarkcompiler_opcodes_h_savestate_optimization_call_visitors_inl",
279    ":pipeline_includes_h",
280    ":plugin_create_pipeline_inl",
281    ":source_languages_h",
282    "$ark_root/cross_values:cross_values_getters_generate(${default_toolchain})",
283    "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction-inl_gen_h",
284    "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction_enum_gen_h",
285    "$ark_root/libpandafile:libarkfile_type_gen_h",
286    "$ark_root/runtime:arkruntime_gen_entrypoints_compiler_checksum_entrypoints_compiler_checksum_inl",
287    "$ark_root/runtime:arkruntime_gen_entrypoints_entrypoints_compiler_inl",
288    "$ark_root/runtime:arkruntime_gen_entrypoints_entrypoints_gen_S",
289    "$ark_root/runtime:arkruntime_gen_entrypoints_entrypoints_gen_h",
290    "$ark_root/runtime:arkruntime_gen_intrinsics_intrinsics_enum_h",
291    "$ark_root/runtime:arkruntime_gen_intrinsics_intrinsics_gen_h",
292    "$ark_root/runtime:arkruntime_gen_intrinsics_intrinsics_h",
293    "$ark_root/runtime:arkruntime_gen_intrinsics_unimplemented_intrinsics-inl_cpp",
294    "$ark_root/runtime:plugins_entrypoints_gen_h",
295    "$ark_root/runtime/asm_defines:asm_defines_generator",
296  ]
297}
298
299config("arkassembler_isa_h_public_config") {
300  include_dirs = [
301    get_label_info("$ark_root/assembler:isa_gen_libarkassembler",
302                   "target_gen_dir"),
303  ]
304}
305
306ohos_shared_library("libarktscompiler") {
307  sources = libarkcompiler_sources
308
309  public_configs = libarkcompiler_configs
310
311  deps = [
312    ":arktscompiler_header_deps",
313    ":isa_gen_libarkcompiler_inst_builder_gen_cpp",
314    "$ark_root/libpandabase:libarktsbase",
315    "$ark_root/libpandafile:libarktsfile",
316  ]
317
318  external_deps = [ sdk_libc_secshared_dep ]
319
320  public_configs += [
321    ":arkassembler_isa_h_public_config",
322  ]
323
324  if (enable_irtoc) {
325    deps += [
326      ":irtoc_builder_cpp",
327      ":irtoc_generate_ir_inline",
328      ":irtoc_interface_extensions_inl_h",
329      ":plugin_create_pipeline_inl",
330    ]
331  }
332  if (enable_codegen && !is_mac) {
333    deps += [ "$ark_root/compiler/optimizer/code_generator:libarkencoder" ]
334  }
335
336  deps += plugin_compiler_deps
337
338  include_dirs = [ "$ark_root/compiler/optimizer" ]
339  if (!is_mac) {
340    include_dirs += [ "$ark_root/compiler/optimizer/code_generator" ]
341  }
342
343  if (abckit_enable) {
344    include_dirs += libabckit_includes
345    deps += libabckit_deps
346  }
347
348  if (is_mingw || is_win) {
349    output_extension = "dll"
350  } else {
351    output_extension = "so"
352  }
353  part_name = ark_part_name
354  subsystem_name = "$ark_subsystem_name"
355}
356
357ohos_source_set("libarktscompiler_frontend_static") {
358  sources = libarkcompiler_sources
359
360  configs = libarkcompiler_configs
361
362  deps = [
363    ":arktscompiler_header_deps",
364    ":isa_gen_libarkcompiler_inst_builder_gen_cpp",
365    "$ark_root/libpandabase:libarktsbase_frontend_static",
366    "$ark_root/libpandafile:libarktsfile_frontend_static",
367  ]
368
369  external_deps = [ sdk_libc_secshared_dep ]
370
371  if (enable_irtoc) {
372    deps += [
373      ":irtoc_builder_cpp",
374      ":irtoc_generate_ir_inline",
375      ":irtoc_interface_extensions_inl_h",
376    ]
377  }
378  if (enable_codegen && !is_mac) {
379    deps += [ "$ark_root/compiler/optimizer/code_generator:libarkencoder_frontend_dependency_static" ]
380  }
381  deps += plugin_compiler_deps
382
383  include_dirs = [ "$ark_root/compiler/optimizer" ]
384  if (!is_mac) {
385    include_dirs += [ "$ark_root/compiler/optimizer/code_generator" ]
386  }
387
388  if (abckit_enable) {
389    include_dirs += libabckit_includes
390    deps += libabckit_deps
391  }
392
393  part_name = ark_part_name
394  subsystem_name = ark_subsystem_name
395}
396
397copy("copy_inst_builder_gen_cpp_erb") {
398  sources = [ "optimizer/templates/inst_builder_gen.cpp.erb" ]
399  outputs = [ "$target_gen_dir/generated/inst_builder_gen.cpp.erb" ]
400}
401
402ark_isa_gen("isa_gen_libarkcompiler") {
403  template_files = [ "inst_builder_gen.cpp.erb" ]
404  sources = "$target_gen_dir/generated"
405  destination = "$target_gen_dir/generated"
406  extra_dependencies = [
407    ":copy_inst_builder_gen_cpp_erb",
408    "$ark_root:concat_inst_templates_yamls",
409  ]
410}
411
412ark_gen("libarkcompiler_intrinsics_gen_inl") {
413  gen_runtime_path = "$target_gen_dir/../runtime"
414  if (abckit_enable) {
415    data = [ "$gen_runtime_path/abckit_intrinsics.yaml" ]
416  } else {
417    data = [ "$gen_runtime_path/intrinsics.yaml" ]
418  }
419  template_files = [
420    "intrinsics_enum.inl.erb",
421    "get_intrinsics.inl.erb",
422    "entrypoints_bridge_asm_macro.inl.erb",
423    "intrinsics_ir_build.inl.erb",
424    "get_intrinsics_names.inl.erb",
425    "generate_operations_intrinsic_inst.inl.erb",
426    "generate_operations_intrinsic_graph.inl.erb",
427    "intrinsic_codegen_test.inl.erb",
428    "intrinsic_flags_test.inl.erb",
429    "can_encode_builtin.inl.erb",
430    "intrinsics_codegen.inl.h.erb",
431    "intrinsics_codegen.inl.erb",
432    "intrinsics_flags.inl.erb",
433    "intrinsics_inline.inl.erb",
434    "intrinsics_peephole.inl.erb",
435  ]
436  sources = "optimizer/templates/intrinsics"
437  destination = "$target_gen_dir/generated"
438  api = [
439    "$ark_root/compiler/optimizer/templates/intrinsics/compiler_intrinsics.rb",
440  ]
441  requires = [ "$ark_root/libpandabase/utils.rb" ]
442  extra_dependencies = [ "$ark_root/runtime:arkruntime_gen_intrinsics_yaml" ]
443  if (abckit_enable) {
444    extra_dependencies += [
445      "$libabckit_path/src/templates/dyn_intrinsics:abckit_isa_gen_dyn_intrinsics_enum_inc",
446      "$libabckit_path/src/templates/dyn_intrinsics:abckit_isa_gen_get_dyn_intrinsics_names_inc",
447      "$libabckit_path/src/templates/dyn_intrinsics:abckit_isa_gen_dyn_intrinsics_flags_inc",
448      "$libabckit_path/src:abckit_concat_intrinsics_yaml",
449    ]
450  }
451}
452
453ark_gen("libarkcompiler_opcodes_h") {
454  data = [ "$ark_root/compiler/optimizer/ir/instructions.yaml" ]
455  template_files = [
456    "opcodes.h.erb",
457    "inst_flags.inl.erb",
458    "arch_info_gen.h.erb",
459    "inst_checker_gen.h.erb",
460    "IR-instructions.md.erb",
461    "codegen_arm64_gen.inc.erb",
462    "savestate_optimization_call_visitors.inl.erb",
463  ]
464  sources = "optimizer/templates"
465  destination = "$target_gen_dir/generated"
466  api = [ "$ark_root/compiler/optimizer/templates/instructions.rb" ]
467}
468
469ark_gen_file("compiler_options_gen_h") {
470  template_file = "$ark_root/templates/options/options.h.erb"
471  data = [ "$target_gen_dir/generated/compiler_options.yaml" ]
472  api = [ "$ark_root/templates/common.rb" ]
473  output_file = "$target_gen_dir/generated/compiler_options_gen.h"
474  extra_dependencies = [ "$ark_root:merge_compiler_options_yamls" ]
475}
476
477ark_gen_file("cpu_features_gen_inc") {
478  template_file = "$ark_root/templates/cpu_features.inc.erb"
479  data = [ "compiler.yaml" ]
480  api = [ "$ark_root/templates/common.rb" ]
481  output_file = "$target_gen_dir/generated/cpu_features.inc"
482}
483
484ark_gen_file("compiler_events_gen_h") {
485  template_file = "$ark_root/templates/events/events.h.erb"
486  data = [ "compiler.yaml" ]
487  api = [ "$ark_root/templates/common.rb" ]
488  output_file = "$target_gen_dir/generated/compiler_events_gen.h"
489}
490
491ark_gen_file("compiler_logger_components_inc") {
492  template_file =
493      "$ark_root/templates/logger_components/logger_components.inc.erb"
494  data = [ "compiler.yaml" ]
495  api = [ "$ark_root/templates/common.rb" ]
496  output_file = "$target_gen_dir/generated/compiler_logger_components.inc"
497}
498ark_gen_file("intrinsics_codegen_ext_inl_h") {
499  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
500  template_file =
501      "optimizer/templates/intrinsics/intrinsics_codegen_ext.inl.h.erb"
502  data = [ ark_plugin_options_yaml ]
503  api = [ "$ark_root/templates/plugin_options.rb" ]
504  output_file = "$target_gen_dir/generated/intrinsics_codegen_ext.inl.h"
505}
506ark_gen_file("intrinsics_inline_inl_h") {
507  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
508  template_file = "optimizer/templates/intrinsics/intrinsics_inline.inl.h.erb"
509  data = [ ark_plugin_options_yaml ]
510  api = [ "$ark_root/templates/plugin_options.rb" ]
511  output_file = "$target_gen_dir/generated/intrinsics_inline.inl.h"
512}
513ark_gen_file("intrinsics_inline_native_method_inl") {
514  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
515  template_file =
516      "optimizer/templates/intrinsics/intrinsics_inline_native_method.inl.erb"
517  data = [ ark_plugin_options_yaml ]
518  api = [ "$ark_root/templates/plugin_options.rb" ]
519  output_file = "$target_gen_dir/generated/intrinsics_inline_native_method.inl"
520}
521ark_gen_file("intrinsics_inlining_expansion_inl_h") {
522  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
523  template_file =
524      "optimizer/templates/intrinsics/intrinsics_inlining_expansion.inl.h.erb"
525  data = [ ark_plugin_options_yaml ]
526  api = [ "$ark_root/templates/plugin_options.rb" ]
527  output_file = "$target_gen_dir/generated/intrinsics_inlining_expansion.inl.h"
528}
529ark_gen_file("intrinsics_inlining_expansion_switch_case_inl") {
530  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
531  template_file = "optimizer/templates/intrinsics/intrinsics_inlining_expansion_switch_case.inl.erb"
532  data = [ ark_plugin_options_yaml ]
533  api = [ "$ark_root/templates/plugin_options.rb" ]
534  output_file =
535      "$target_gen_dir/generated/intrinsics_inlining_expansion_switch_case.inl"
536}
537ark_gen_file("intrinsics_peephole_inl_h") {
538  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
539  template_file = "optimizer/templates/intrinsics/intrinsics_peephole.inl.h.erb"
540  data = [ ark_plugin_options_yaml ]
541  api = [ "$ark_root/templates/plugin_options.rb" ]
542  output_file = "$target_gen_dir/generated/intrinsics_peephole.inl.h"
543}
544ark_gen_file("intrinsics_graph_checker_inl") {
545  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
546  template_file =
547      "optimizer/templates/intrinsics/intrinsics_graph_checker.inl.erb"
548  data = [ ark_plugin_options_yaml ]
549  api = [ "$ark_root/templates/plugin_options.rb" ]
550  output_file = "$target_gen_dir/generated/intrinsics_graph_checker.inl"
551}
552ark_gen_file("intrinsics_ir_build_inl_h") {
553  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
554  template_file = "optimizer/templates/intrinsics/intrinsics_ir_build.inl.h.erb"
555  data = [ ark_plugin_options_yaml ]
556  api = [ "$ark_root/templates/plugin_options.rb" ]
557  output_file = "$target_gen_dir/generated/intrinsics_ir_build.inl.h"
558}
559ark_gen_file("intrinsics_ir_build_static_call_inl") {
560  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
561  template_file =
562      "optimizer/templates/intrinsics/intrinsics_ir_build_static_call.inl.erb"
563  data = [ ark_plugin_options_yaml ]
564  api = [ "$ark_root/templates/plugin_options.rb" ]
565  output_file = "$target_gen_dir/generated/intrinsics_ir_build_static_call.inl"
566}
567ark_gen_file("intrinsics_ir_build_virtual_call_inl") {
568  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
569  template_file =
570      "optimizer/templates/intrinsics/intrinsics_ir_build_virtual_call.inl.erb"
571  data = [ ark_plugin_options_yaml ]
572  api = [ "$ark_root/templates/plugin_options.rb" ]
573  output_file = "$target_gen_dir/generated/intrinsics_ir_build_virtual_call.inl"
574}
575ark_gen_file("intrinsics_can_encode_inl") {
576  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
577  template_file = "optimizer/templates/intrinsics/intrinsics_can_encode.inl.erb"
578  data = [ ark_plugin_options_yaml ]
579  api = [ "$ark_root/templates/plugin_options.rb" ]
580  output_file = "$target_gen_dir/generated/intrinsics_can_encode.inl"
581}
582ark_gen_file("intrinsics_lse_heap_inv_args_inl") {
583  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
584  template_file =
585      "optimizer/templates/intrinsics/intrinsics_lse_heap_inv_args.inl.erb"
586  data = [ ark_plugin_options_yaml ]
587  api = [ "$ark_root/templates/plugin_options.rb" ]
588  output_file = "$target_gen_dir/generated/intrinsics_lse_heap_inv_args.inl"
589}
590
591ark_gen_file("ir_dyn_base_types_h") {
592  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
593  template_file = "optimizer/templates/ir-dyn-base-types.h.erb"
594  data = [ ark_plugin_options_yaml ]
595  api = [ "$ark_root/templates/plugin_options.rb" ]
596  output_file = "$target_gen_dir/generated/ir-dyn-base-types.h"
597}
598
599ark_gen_file("pipeline_includes_h") {
600  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
601  template_file = "optimizer/templates/pipeline_includes.h.erb"
602  data = [ ark_plugin_options_yaml ]
603  api = [ "$ark_root/templates/plugin_options.rb" ]
604  output_file = "$target_gen_dir/generated/pipeline_includes.h"
605}
606
607ark_gen_file("source_languages_h") {
608  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
609  template_file = "optimizer/templates/source_languages.h.erb"
610  data = [ ark_plugin_options_yaml ]
611  api = [ "$ark_root/templates/plugin_options.rb" ]
612  output_file = "$target_gen_dir/generated/source_languages.h"
613}
614
615ark_gen_file("codegen_language_extensions_h") {
616  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
617  template_file = "optimizer/templates/codegen_language_extensions.h.erb"
618  data = [ ark_plugin_options_yaml ]
619  api = [ "$ark_root/templates/plugin_options.rb" ]
620  output_file = "$target_gen_dir/generated/codegen_language_extensions.h"
621}
622
623ark_gen_file("compiler_interface_extensions_inl_h") {
624  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
625  template_file = "optimizer/templates/compiler_interface_extensions.inl.h.erb"
626  data = [ ark_plugin_options_yaml ]
627  api = [ "$ark_root/templates/plugin_options.rb" ]
628  output_file = "$target_gen_dir/generated/compiler_interface_extensions.inl.h"
629}
630
631ark_gen_file("inst_builder_extensions_inl_h") {
632  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
633  template_file = "optimizer/templates/inst_builder_extensions.inl.h.erb"
634  data = [ ark_plugin_options_yaml ]
635  api = [ "$ark_root/templates/plugin_options.rb" ]
636  output_file = "$target_gen_dir/generated/inst_builder_extensions.inl.h"
637}
638
639ark_gen_file("intrinsics_extensions_inl_h") {
640  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
641  template_file = "optimizer/templates/intrinsics_extensions.inl.h.erb"
642  data = [ ark_plugin_options_yaml ]
643  api = [ "$ark_root/templates/plugin_options.rb" ]
644  output_file = "$target_gen_dir/generated/intrinsics_extensions.inl.h"
645}
646
647generated_file("plugin_create_pipeline_inl") {
648  outputs = [ "$target_gen_dir/generated/create_pipeline.inl" ]
649  contents = plugin_create_pipeline_paths
650  output_conversion = "list lines"
651}
652
653if (enable_irtoc) {
654  ark_gen_file("irtoc_interface_extensions_inl_h") {
655    extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
656    template_file = "optimizer/templates/irtoc_interface_extensions.inl.h.erb"
657    data = [ ark_plugin_options_yaml ]
658    api = [ "$ark_root/templates/plugin_options.rb" ]
659    output_file = "$target_gen_dir/generated/irtoc_interface_extensions.inl.h"
660  }
661
662  ark_gen_file("irtoc_interface_extensions_includes_inl_h") {
663    extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
664    template_file =
665        "optimizer/templates/irtoc_interface_extensions_includes.inl.h.erb"
666    data = [ ark_plugin_options_yaml ]
667    api = [ "$ark_root/templates/plugin_options.rb" ]
668    output_file =
669        "$target_gen_dir/generated/irtoc_interface_extensions_includes.inl.h"
670  }
671
672  action("irtoc_builder_cpp") {
673    script = "$ark_root/irtoc/lang/irtoc.rb"
674    outputs = [ "$target_gen_dir/generated/irtoc_builder.cpp" ]
675    working_dir = "$root_build_dir/irtoc_builder_cpp"
676    configs = [ "$ark_root:ark_config" ]
677    args = [
678      "--input",
679      rebase_path("$ark_root/irtoc/scripts/interpreter.irt", working_dir),
680      "--output",
681      rebase_path("$target_gen_dir/generated/irtoc_builder.cpp", working_dir),
682      "--ark_source_dir",
683      rebase_path("$ark_root", working_dir),
684      "--isa",
685      rebase_path("$ark_isa_yaml", working_dir),
686      "{{defines}}",
687      "--arch",
688      target_cpu,
689      "--ir-api",
690      "ir-builder",
691      "--plugins",
692      rebase_path(irtoc_plugins_file, working_dir),
693      "--working-dir",
694      rebase_path(working_dir, root_build_dir),
695    ]
696
697    deps = [
698      "$ark_root/irtoc:irtoc_plugins_file",
699      "$ark_root/isa:isa_combine",
700      "$ark_root/runtime:plugins_asm_defines_def",
701      "$ark_root/runtime:plugins_defines_h",
702    ]
703  }
704
705  action("irtoc_generate_ir_inline") {
706    script = "$ark_root/irtoc/lang/irtoc.rb"
707    outputs = [ "$target_gen_dir/generated/irtoc_ir_inline.h" ]
708    working_dir = "$root_build_dir/irtoc_generate_ir_inline"
709    configs = [ "$ark_root:ark_config" ]
710    args = [
711      "--input",
712      rebase_path("$ark_root/irtoc/scripts/interpreter.irt", working_dir),
713      "--output",
714      rebase_path("$target_gen_dir/generated/irtoc_ir_inline.h", working_dir),
715      "--ark_source_dir",
716      rebase_path("$ark_root", working_dir),
717      "--isa",
718      rebase_path("$ark_isa_yaml", working_dir),
719      "{{defines}}",
720      "--arch",
721      target_cpu,
722      "--ir-api",
723      "ir-inline",
724      "--plugins",
725      rebase_path(irtoc_plugins_file, working_dir),
726      "--working-dir",
727      rebase_path(working_dir, root_build_dir),
728    ]
729
730    deps = [
731      "$ark_root/isa:isa_combine",
732      "$ark_root/runtime:plugins_asm_defines_def",
733      "$ark_root/runtime:plugins_defines_h",
734    ]
735  }
736}
737