• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2024 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14import("//arkcompiler/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" ]
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
82libarkcompiler_sources = [
83  "compiler_logger.cpp",
84  "compiler_options.cpp",
85  "optimizer/analysis/alias_analysis.cpp",
86  "optimizer/analysis/bounds_analysis.cpp",
87  "optimizer/analysis/catch_inputs.cpp",
88  "optimizer/analysis/countable_loop_parser.cpp",
89  "optimizer/analysis/dominators_tree.cpp",
90  "optimizer/analysis/linear_order.cpp",
91  "optimizer/analysis/live_registers.cpp",
92  "optimizer/analysis/liveness_analyzer.cpp",
93  "optimizer/analysis/liveness_use_table.cpp",
94  "optimizer/analysis/loop_analyzer.cpp",
95  "optimizer/analysis/monitor_analysis.cpp",
96  "optimizer/analysis/object_type_propagation.cpp",
97  "optimizer/analysis/reg_alloc_verifier.cpp",
98  "optimizer/analysis/rpo.cpp",
99  "optimizer/analysis/types_analysis.cpp",
100  "optimizer/code_generator/encode.cpp",
101  "optimizer/ir/analysis.cpp",
102  "optimizer/ir/aot_data.cpp",
103  "optimizer/ir/basicblock.cpp",
104  "optimizer/ir/dump.cpp",
105  "optimizer/ir/graph.cpp",
106  "optimizer/ir/graph_checker.cpp",
107  "optimizer/ir/graph_cloner.cpp",
108  "optimizer/ir/inst.cpp",
109  "optimizer/ir/locations.cpp",
110  "optimizer/ir/loop_unswitcher.cpp",
111  "optimizer/ir/visualizer_printer.cpp",
112  "optimizer/ir_builder/inst_builder.cpp",
113  "optimizer/ir_builder/ir_builder.cpp",
114  "optimizer/optimizations/adjust_arefs.cpp",
115  "optimizer/optimizations/balance_expressions.cpp",
116  "optimizer/optimizations/branch_elimination.cpp",
117  "optimizer/optimizations/checks_elimination.cpp",
118  "optimizer/optimizations/cleanup.cpp",
119  "optimizer/optimizations/code_sink.cpp",
120  "optimizer/optimizations/condition_chain_cache.cpp",
121  "optimizer/optimizations/condition_chain_manager.cpp",
122  "optimizer/optimizations/const_folding.cpp",
123  "optimizer/optimizations/cse.cpp",
124  "optimizer/optimizations/deoptimize_elimination.cpp",
125  "optimizer/optimizations/escape.cpp",
126  "optimizer/optimizations/if_conversion.cpp",
127  "optimizer/optimizations/if_merging.cpp",
128  "optimizer/optimizations/inline_intrinsics.cpp",
129  "optimizer/optimizations/inlining.cpp",
130  "optimizer/optimizations/licm.cpp",
131  "optimizer/optimizations/licm_conditions.cpp",
132  "optimizer/optimizations/locations_builder.cpp",
133  "optimizer/optimizations/loop_idioms.cpp",
134  "optimizer/optimizations/loop_peeling.cpp",
135  "optimizer/optimizations/loop_unroll.cpp",
136  "optimizer/optimizations/loop_unswitch.cpp",
137  "optimizer/optimizations/lowering.cpp",
138  "optimizer/optimizations/lse.cpp",
139  "optimizer/optimizations/memory_barriers.cpp",
140  "optimizer/optimizations/memory_coalescing.cpp",
141  "optimizer/optimizations/move_constants.cpp",
142  "optimizer/optimizations/object_type_check_elimination.cpp",
143  "optimizer/optimizations/optimize_string_concat.cpp",
144  "optimizer/optimizations/peepholes.cpp",
145  "optimizer/optimizations/phi_type_resolving.cpp",
146  "optimizer/optimizations/redundant_loop_elimination.cpp",
147  "optimizer/optimizations/regalloc/cleanup_empty_blocks.cpp",
148  "optimizer/optimizations/regalloc/interference_graph.cpp",
149  "optimizer/optimizations/regalloc/reg_alloc.cpp",
150  "optimizer/optimizations/regalloc/reg_alloc_base.cpp",
151  "optimizer/optimizations/regalloc/reg_alloc_graph_coloring.cpp",
152  "optimizer/optimizations/regalloc/reg_alloc_linear_scan.cpp",
153  "optimizer/optimizations/regalloc/reg_alloc_resolver.cpp",
154  "optimizer/optimizations/regalloc/reg_alloc_stat.cpp",
155  "optimizer/optimizations/regalloc/reg_map.cpp",
156  "optimizer/optimizations/regalloc/spill_fills_resolver.cpp",
157  "optimizer/optimizations/regalloc/split_resolver.cpp",
158  "optimizer/optimizations/reserve_string_builder_buffer.cpp",
159  "optimizer/optimizations/savestate_optimization.cpp",
160  "optimizer/optimizations/scheduler.cpp",
161  "optimizer/optimizations/simplify_string_builder.cpp",
162  "optimizer/optimizations/string_builder_utils.cpp",
163  "optimizer/optimizations/try_catch_resolving.cpp",
164  "optimizer/optimizations/vn.cpp",
165  "optimizer/pass.cpp",
166  "optimizer/pass_manager.cpp",
167  "optimizer/pass_manager_statistics.cpp",
168]
169libarkcompiler_sources += plugin_libarkcompiler_sources
170
171if (!is_mac) {
172  libarkcompiler_sources += [
173    "code_info/code_info.cpp",
174    "code_info/code_info_builder.cpp",
175    "compile_method.cpp",
176    "optimizer/code_generator/codegen.cpp",
177    "optimizer/code_generator/codegen_native.cpp",
178    "optimizer/code_generator/disassembly.cpp",
179    "optimizer/code_generator/encode_visitor.cpp",
180    "optimizer/code_generator/method_properties.cpp",
181    "optimizer/code_generator/slow_path.cpp",
182    "optimizer/code_generator/spill_fill_encoder.cpp",
183    "optimizer/pipeline.cpp",
184  ]
185}
186
187libarkcompiler_sources += [ "$target_gen_dir/generated/inst_builder_gen.cpp" ]
188
189if (abckit_enable) {
190  libabckit_path = "$ark_root/../libabckit"
191  libabckit_deps = [ "$libabckit_path/src/templates/abckit_intrinsics:abckit_ark_gen_inst_builder_abckit_intrinsics_inc" ]
192  libabckit_includes = [
193    "$libabckit_path",
194    "$libabckit_path/src/adapter_static",
195    "$ark_root/bytecode_optimizer",
196    "$target_gen_dir/../bytecode_optimizer/generated",
197  ]
198}
199
200libarkcompiler_configs = [
201  ":arkcompiler_public_config",
202  "$ark_root:ark_config",
203  "$ark_root/libpandabase:arkbase_public_config",
204  "$ark_root/libpandafile:arkfile_public_config",
205  "$ark_root/runtime:arkruntime_public_config",
206]
207
208group("arktscompiler_header_deps") {
209  deps = [
210    ":codegen_language_extensions_h",
211    ":compiler_events_gen_h",
212    ":compiler_interface_extensions_inl_h",
213    ":compiler_logger_components_inc",
214    ":compiler_options_gen_h",
215    ":cpu_features_gen_inc",
216    ":inst_builder_extensions_inl_h",
217    ":intrinsics_can_encode_inl",
218    ":intrinsics_codegen_ext_inl_h",
219    ":intrinsics_extensions_inl_h",
220    ":intrinsics_graph_checker_inl",
221    ":intrinsics_inline_inl_h",
222    ":intrinsics_inline_native_method_inl",
223    ":intrinsics_ir_build_inl_h",
224    ":intrinsics_ir_build_static_call_inl",
225    ":intrinsics_ir_build_virtual_call_inl",
226    ":intrinsics_lse_heap_inv_args_inl",
227    ":intrinsics_peephole_inl_h",
228    ":ir_dyn_base_types_h",
229    ":libarkcompiler_intrinsics_gen_inl_can_encode_builtin_inl",
230    ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_graph_inl",
231    ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_inst_inl",
232    ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_inl",
233    ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_names_inl",
234    ":libarkcompiler_intrinsics_gen_inl_intrinsic_codegen_test_inl",
235    ":libarkcompiler_intrinsics_gen_inl_intrinsic_flags_test_inl",
236    ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl",
237    ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl_h",
238    ":libarkcompiler_intrinsics_gen_inl_intrinsics_enum_inl",
239    ":libarkcompiler_intrinsics_gen_inl_intrinsics_flags_inl",
240    ":libarkcompiler_intrinsics_gen_inl_intrinsics_inline_inl",
241    ":libarkcompiler_intrinsics_gen_inl_intrinsics_ir_build_inl",
242    ":libarkcompiler_intrinsics_gen_inl_intrinsics_peephole_inl",
243    ":libarkcompiler_opcodes_h_IR-instructions_md",
244    ":libarkcompiler_opcodes_h_arch_info_gen_h",
245    ":libarkcompiler_opcodes_h_codegen_arm64_gen_inc",
246    ":libarkcompiler_opcodes_h_inst_checker_gen_h",
247    ":libarkcompiler_opcodes_h_inst_flags_inl",
248    ":libarkcompiler_opcodes_h_opcodes_h",
249    ":libarkcompiler_opcodes_h_savestate_optimization_call_visitors_inl",
250    ":pipeline_includes_h",
251    ":plugin_create_pipeline_inl",
252    ":source_languages_h",
253    "$ark_root/cross_values:cross_values_getters_generate(${default_toolchain})",
254    "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction-inl_gen_h",
255    "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction_enum_gen_h",
256    "$ark_root/libpandafile:libarkfile_type_gen_h",
257    "$ark_root/runtime:arkruntime_gen_entrypoints_compiler_checksum_entrypoints_compiler_checksum_inl",
258    "$ark_root/runtime:arkruntime_gen_entrypoints_entrypoints_compiler_inl",
259    "$ark_root/runtime:arkruntime_gen_entrypoints_entrypoints_gen_S",
260    "$ark_root/runtime:arkruntime_gen_entrypoints_entrypoints_gen_h",
261    "$ark_root/runtime:arkruntime_gen_intrinsics_intrinsics_enum_h",
262    "$ark_root/runtime:arkruntime_gen_intrinsics_intrinsics_gen_h",
263    "$ark_root/runtime:arkruntime_gen_intrinsics_intrinsics_h",
264    "$ark_root/runtime:arkruntime_gen_intrinsics_unimplemented_intrinsics-inl_cpp",
265    "$ark_root/runtime:plugins_entrypoints_gen_h",
266    "$ark_root/runtime/asm_defines:asm_defines_generator",
267  ]
268}
269
270ohos_shared_library("libarktscompiler") {
271  sources = libarkcompiler_sources
272
273  configs = libarkcompiler_configs
274
275  deps = [
276    ":arktscompiler_header_deps",
277    ":isa_gen_libarkcompiler_inst_builder_gen_cpp",
278    "$ark_root/libpandabase:libarktsbase",
279    "$ark_root/libpandafile:libarktsfile",
280  ]
281
282  external_deps = [ sdk_libc_secshared_dep ]
283
284  if (enable_irtoc) {
285    deps += [
286      ":irtoc_builder_cpp",
287      ":irtoc_generate_ir_inline",
288      ":irtoc_interface_extensions_inl_h",
289      ":plugin_create_pipeline_inl",
290    ]
291  }
292  if (enable_codegen) {
293    deps += [ "$ark_root/compiler/optimizer/code_generator:libarkencoder" ]
294  }
295
296  deps += plugin_compiler_deps
297
298  include_dirs = [
299    "$ark_root/compiler/optimizer",
300    "$ark_root/compiler/optimizer/code_generator",
301  ]
302
303  if (abckit_enable) {
304    include_dirs += libabckit_includes
305    deps += libabckit_deps
306  }
307
308  if (is_mingw || is_win) {
309    output_extension = "dll"
310  } else {
311    output_extension = "so"
312  }
313  part_name = ark_part_name
314  subsystem_name = "$ark_subsystem_name"
315}
316
317ohos_source_set("libarktscompiler_frontend_static") {
318  sources = libarkcompiler_sources
319
320  configs = libarkcompiler_configs
321
322  deps = [
323    ":arktscompiler_header_deps",
324    ":isa_gen_libarkcompiler_inst_builder_gen_cpp",
325    "$ark_root/libpandabase:libarktsbase_frontend_static",
326    "$ark_root/libpandafile:libarktsfile_frontend_static",
327  ]
328
329  external_deps = [ sdk_libc_secshared_dep ]
330
331  if (enable_irtoc) {
332    deps += [
333      ":irtoc_builder_cpp",
334      ":irtoc_generate_ir_inline",
335      ":irtoc_interface_extensions_inl_h",
336    ]
337  }
338  if (enable_codegen) {
339    deps += [ "$ark_root/compiler/optimizer/code_generator:libarkencoder_frontend_static" ]
340  }
341  deps += plugin_compiler_deps
342
343  include_dirs = [
344    "$ark_root/compiler/optimizer",
345    "$ark_root/compiler/optimizer/code_generator",
346  ]
347
348  if (abckit_enable) {
349    include_dirs += libabckit_includes
350    deps += libabckit_deps
351  }
352
353  part_name = ark_part_name
354  subsystem_name = ark_subsystem_name
355}
356
357copy("copy_inst_builder_gen_cpp_erb") {
358  sources = [ "optimizer/templates/inst_builder_gen.cpp.erb" ]
359  outputs = [ "$target_gen_dir/generated/inst_builder_gen.cpp.erb" ]
360}
361
362ark_isa_gen("isa_gen_libarkcompiler") {
363  template_files = [ "inst_builder_gen.cpp.erb" ]
364  sources = "$target_gen_dir/generated"
365  destination = "$target_gen_dir/generated"
366  extra_dependencies = [
367    ":copy_inst_builder_gen_cpp_erb",
368    "$ark_root:concat_inst_templates_yamls",
369  ]
370}
371
372ark_gen("libarkcompiler_intrinsics_gen_inl") {
373  gen_runtime_path = "$target_gen_dir/../runtime"
374  if (abckit_enable) {
375    data = [ "$gen_runtime_path/abckit_intrinsics.yaml" ]
376  } else {
377    data = [ "$gen_runtime_path/intrinsics.yaml" ]
378  }
379  template_files = [
380    "intrinsics_enum.inl.erb",
381    "get_intrinsics.inl.erb",
382    "entrypoints_bridge_asm_macro.inl.erb",
383    "intrinsics_ir_build.inl.erb",
384    "get_intrinsics_names.inl.erb",
385    "generate_operations_intrinsic_inst.inl.erb",
386    "generate_operations_intrinsic_graph.inl.erb",
387    "intrinsic_codegen_test.inl.erb",
388    "intrinsic_flags_test.inl.erb",
389    "can_encode_builtin.inl.erb",
390    "intrinsics_codegen.inl.h.erb",
391    "intrinsics_codegen.inl.erb",
392    "intrinsics_flags.inl.erb",
393    "intrinsics_inline.inl.erb",
394    "intrinsics_peephole.inl.erb",
395  ]
396  sources = "optimizer/templates/intrinsics"
397  destination = "$target_gen_dir/generated"
398  api = [
399    "$ark_root/compiler/optimizer/templates/intrinsics/compiler_intrinsics.rb",
400  ]
401  requires = [ "$ark_root/libpandabase/utils.rb" ]
402  extra_dependencies = [ "$ark_root/runtime:arkruntime_gen_intrinsics_yaml" ]
403  if (abckit_enable) {
404    extra_dependencies += [
405      "$libabckit_path/src/templates/dyn_intrinsics:abckit_isa_gen_dyn_intrinsics_enum_inc",
406      "$libabckit_path/src/templates/dyn_intrinsics:abckit_isa_gen_get_dyn_intrinsics_names_inc",
407      "$libabckit_path/src/templates/dyn_intrinsics:abckit_isa_gen_dyn_intrinsics_flags_inc",
408      "$libabckit_path/src:abckit_concat_intrinsics_yaml",
409    ]
410  }
411}
412
413ark_gen("libarkcompiler_opcodes_h") {
414  data = [ "$ark_root/compiler/optimizer/ir/instructions.yaml" ]
415  template_files = [
416    "opcodes.h.erb",
417    "inst_flags.inl.erb",
418    "arch_info_gen.h.erb",
419    "inst_checker_gen.h.erb",
420    "IR-instructions.md.erb",
421    "codegen_arm64_gen.inc.erb",
422    "savestate_optimization_call_visitors.inl.erb",
423  ]
424  sources = "optimizer/templates"
425  destination = "$target_gen_dir/generated"
426  api = [ "$ark_root/compiler/optimizer/templates/instructions.rb" ]
427}
428
429ark_gen_file("compiler_options_gen_h") {
430  template_file = "$ark_root/templates/options/options.h.erb"
431  data = [ "$target_gen_dir/generated/compiler_options.yaml" ]
432  api = [ "$ark_root/templates/common.rb" ]
433  output_file = "$target_gen_dir/generated/compiler_options_gen.h"
434  extra_dependencies = [ "$ark_root:merge_compiler_options_yamls" ]
435}
436
437ark_gen_file("cpu_features_gen_inc") {
438  template_file = "$ark_root/templates/cpu_features.inc.erb"
439  data = [ "compiler.yaml" ]
440  api = [ "$ark_root/templates/common.rb" ]
441  output_file = "$target_gen_dir/generated/cpu_features.inc"
442}
443
444ark_gen_file("compiler_events_gen_h") {
445  template_file = "$ark_root/templates/events/events.h.erb"
446  data = [ "compiler.yaml" ]
447  api = [ "$ark_root/templates/common.rb" ]
448  output_file = "$target_gen_dir/generated/compiler_events_gen.h"
449}
450
451ark_gen_file("compiler_logger_components_inc") {
452  template_file =
453      "$ark_root/templates/logger_components/logger_components.inc.erb"
454  data = [ "compiler.yaml" ]
455  api = [ "$ark_root/templates/common.rb" ]
456  output_file = "$target_gen_dir/generated/compiler_logger_components.inc"
457}
458ark_gen_file("intrinsics_codegen_ext_inl_h") {
459  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
460  template_file =
461      "optimizer/templates/intrinsics/intrinsics_codegen_ext.inl.h.erb"
462  data = [ ark_plugin_options_yaml ]
463  api = [ "$ark_root/templates/plugin_options.rb" ]
464  output_file = "$target_gen_dir/generated/intrinsics_codegen_ext.inl.h"
465}
466ark_gen_file("intrinsics_inline_inl_h") {
467  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
468  template_file = "optimizer/templates/intrinsics/intrinsics_inline.inl.h.erb"
469  data = [ ark_plugin_options_yaml ]
470  api = [ "$ark_root/templates/plugin_options.rb" ]
471  output_file = "$target_gen_dir/generated/intrinsics_inline.inl.h"
472}
473ark_gen_file("intrinsics_inline_native_method_inl") {
474  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
475  template_file =
476      "optimizer/templates/intrinsics/intrinsics_inline_native_method.inl.erb"
477  data = [ ark_plugin_options_yaml ]
478  api = [ "$ark_root/templates/plugin_options.rb" ]
479  output_file = "$target_gen_dir/generated/intrinsics_inline_native_method.inl"
480}
481ark_gen_file("intrinsics_peephole_inl_h") {
482  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
483  template_file = "optimizer/templates/intrinsics/intrinsics_peephole.inl.h.erb"
484  data = [ ark_plugin_options_yaml ]
485  api = [ "$ark_root/templates/plugin_options.rb" ]
486  output_file = "$target_gen_dir/generated/intrinsics_peephole.inl.h"
487}
488ark_gen_file("intrinsics_graph_checker_inl") {
489  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
490  template_file =
491      "optimizer/templates/intrinsics/intrinsics_graph_checker.inl.erb"
492  data = [ ark_plugin_options_yaml ]
493  api = [ "$ark_root/templates/plugin_options.rb" ]
494  output_file = "$target_gen_dir/generated/intrinsics_graph_checker.inl"
495}
496ark_gen_file("intrinsics_ir_build_inl_h") {
497  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
498  template_file = "optimizer/templates/intrinsics/intrinsics_ir_build.inl.h.erb"
499  data = [ ark_plugin_options_yaml ]
500  api = [ "$ark_root/templates/plugin_options.rb" ]
501  output_file = "$target_gen_dir/generated/intrinsics_ir_build.inl.h"
502}
503ark_gen_file("intrinsics_ir_build_static_call_inl") {
504  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
505  template_file =
506      "optimizer/templates/intrinsics/intrinsics_ir_build_static_call.inl.erb"
507  data = [ ark_plugin_options_yaml ]
508  api = [ "$ark_root/templates/plugin_options.rb" ]
509  output_file = "$target_gen_dir/generated/intrinsics_ir_build_static_call.inl"
510}
511ark_gen_file("intrinsics_ir_build_virtual_call_inl") {
512  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
513  template_file =
514      "optimizer/templates/intrinsics/intrinsics_ir_build_virtual_call.inl.erb"
515  data = [ ark_plugin_options_yaml ]
516  api = [ "$ark_root/templates/plugin_options.rb" ]
517  output_file = "$target_gen_dir/generated/intrinsics_ir_build_virtual_call.inl"
518}
519ark_gen_file("intrinsics_can_encode_inl") {
520  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
521  template_file = "optimizer/templates/intrinsics/intrinsics_can_encode.inl.erb"
522  data = [ ark_plugin_options_yaml ]
523  api = [ "$ark_root/templates/plugin_options.rb" ]
524  output_file = "$target_gen_dir/generated/intrinsics_can_encode.inl"
525}
526ark_gen_file("intrinsics_lse_heap_inv_args_inl") {
527  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
528  template_file =
529      "optimizer/templates/intrinsics/intrinsics_lse_heap_inv_args.inl.erb"
530  data = [ ark_plugin_options_yaml ]
531  api = [ "$ark_root/templates/plugin_options.rb" ]
532  output_file = "$target_gen_dir/generated/intrinsics_lse_heap_inv_args.inl"
533}
534
535ark_gen_file("ir_dyn_base_types_h") {
536  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
537  template_file = "optimizer/templates/ir-dyn-base-types.h.erb"
538  data = [ ark_plugin_options_yaml ]
539  api = [ "$ark_root/templates/plugin_options.rb" ]
540  output_file = "$target_gen_dir/generated/ir-dyn-base-types.h"
541}
542
543ark_gen_file("pipeline_includes_h") {
544  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
545  template_file = "optimizer/templates/pipeline_includes.h.erb"
546  data = [ ark_plugin_options_yaml ]
547  api = [ "$ark_root/templates/plugin_options.rb" ]
548  output_file = "$target_gen_dir/generated/pipeline_includes.h"
549}
550
551ark_gen_file("source_languages_h") {
552  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
553  template_file = "optimizer/templates/source_languages.h.erb"
554  data = [ ark_plugin_options_yaml ]
555  api = [ "$ark_root/templates/plugin_options.rb" ]
556  output_file = "$target_gen_dir/generated/source_languages.h"
557}
558
559ark_gen_file("codegen_language_extensions_h") {
560  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
561  template_file = "optimizer/templates/codegen_language_extensions.h.erb"
562  data = [ ark_plugin_options_yaml ]
563  api = [ "$ark_root/templates/plugin_options.rb" ]
564  output_file = "$target_gen_dir/generated/codegen_language_extensions.h"
565}
566
567ark_gen_file("compiler_interface_extensions_inl_h") {
568  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
569  template_file = "optimizer/templates/compiler_interface_extensions.inl.h.erb"
570  data = [ ark_plugin_options_yaml ]
571  api = [ "$ark_root/templates/plugin_options.rb" ]
572  output_file = "$target_gen_dir/generated/compiler_interface_extensions.inl.h"
573}
574
575ark_gen_file("inst_builder_extensions_inl_h") {
576  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
577  template_file = "optimizer/templates/inst_builder_extensions.inl.h.erb"
578  data = [ ark_plugin_options_yaml ]
579  api = [ "$ark_root/templates/plugin_options.rb" ]
580  output_file = "$target_gen_dir/generated/inst_builder_extensions.inl.h"
581}
582
583ark_gen_file("intrinsics_extensions_inl_h") {
584  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
585  template_file = "optimizer/templates/intrinsics_extensions.inl.h.erb"
586  data = [ ark_plugin_options_yaml ]
587  api = [ "$ark_root/templates/plugin_options.rb" ]
588  output_file = "$target_gen_dir/generated/intrinsics_extensions.inl.h"
589}
590
591generated_file("plugin_create_pipeline_inl") {
592  outputs = [ "$target_gen_dir/generated/create_pipeline.inl" ]
593  contents = plugin_create_pipeline_paths
594  output_conversion = "list lines"
595}
596
597if (enable_irtoc) {
598  ark_gen_file("irtoc_interface_extensions_inl_h") {
599    extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
600    template_file = "optimizer/templates/irtoc_interface_extensions.inl.h.erb"
601    data = [ ark_plugin_options_yaml ]
602    api = [ "$ark_root/templates/plugin_options.rb" ]
603    output_file = "$target_gen_dir/generated/irtoc_interface_extensions.inl.h"
604  }
605
606  ark_gen_file("irtoc_interface_extensions_includes_inl_h") {
607    extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
608    template_file =
609        "optimizer/templates/irtoc_interface_extensions_includes.inl.h.erb"
610    data = [ ark_plugin_options_yaml ]
611    api = [ "$ark_root/templates/plugin_options.rb" ]
612    output_file =
613        "$target_gen_dir/generated/irtoc_interface_extensions_includes.inl.h"
614  }
615
616  action("irtoc_builder_cpp") {
617    script = "$ark_root/irtoc/lang/irtoc.rb"
618    outputs = [ "$target_gen_dir/generated/irtoc_builder.cpp" ]
619    working_dir = "$root_build_dir/irtoc_builder_cpp"
620    configs = [ "$ark_root:ark_config" ]
621    args = [
622      "--input",
623      rebase_path("$ark_root/irtoc/scripts/interpreter.irt", working_dir),
624      "--output",
625      rebase_path("$target_gen_dir/generated/irtoc_builder.cpp", working_dir),
626      "--ark_source_dir",
627      rebase_path("$ark_root", working_dir),
628      "--isa",
629      rebase_path("$ark_isa_yaml", working_dir),
630      "{{defines}}",
631      "--arch",
632      target_cpu,
633      "--ir-api",
634      "ir-builder",
635      "--plugins",
636      rebase_path(irtoc_plugins_file, working_dir),
637      "--working-dir",
638      rebase_path(working_dir, root_build_dir),
639    ]
640
641    deps = [
642      "$ark_root/irtoc:irtoc_plugins_file",
643      "$ark_root/isa:isa_combine",
644      "$ark_root/runtime:plugins_asm_defines_def",
645      "$ark_root/runtime:plugins_defines_h",
646    ]
647  }
648
649  action("irtoc_generate_ir_inline") {
650    script = "$ark_root/irtoc/lang/irtoc.rb"
651    outputs = [ "$target_gen_dir/generated/irtoc_ir_inline.h" ]
652    working_dir = "$root_build_dir/irtoc_generate_ir_inline"
653    configs = [ "$ark_root:ark_config" ]
654    args = [
655      "--input",
656      rebase_path("$ark_root/irtoc/scripts/interpreter.irt", working_dir),
657      "--output",
658      rebase_path("$target_gen_dir/generated/irtoc_ir_inline.h", working_dir),
659      "--ark_source_dir",
660      rebase_path("$ark_root", working_dir),
661      "--isa",
662      rebase_path("$ark_isa_yaml", working_dir),
663      "{{defines}}",
664      "--arch",
665      target_cpu,
666      "--ir-api",
667      "ir-inline",
668      "--plugins",
669      rebase_path(irtoc_plugins_file, working_dir),
670      "--working-dir",
671      rebase_path(working_dir, root_build_dir),
672    ]
673
674    deps = [
675      "$ark_root/isa:isa_combine",
676      "$ark_root/runtime:plugins_asm_defines_def",
677      "$ark_root/runtime:plugins_defines_h",
678    ]
679  }
680}
681