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