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/ark_config.gni")
15config("arkcompiler_public_config") {
16  include_dirs = [
17    "$ark_root/compiler",
18    "$ark_root/compiler/code_info",
19    "$ark_root/compiler/optimizer/ir",
20    "$target_gen_dir/generated",
21  ]
22
23  include_dirs += platform_include_dirs
24
25  if (enable_bytecode_optimizer) {
26    defines = [ "ENABLE_BYTECODE_OPT" ]
27  }
28
29  is_x64 =
30      current_cpu == "amd64" || current_cpu == "x64" || current_cpu == "x86_64"
31
32  cflags_cc = []
33  if (is_x64 || current_cpu == "arm64") {
34    if (!is_mingw) {
35      cflags_cc += [
36        "-DPANDA_COMPILER_TARGET_AARCH64",
37        "-DUSE_VIXL_ARM64",
38      ]
39    }
40  }
41  if (ark_enable_compiler_x64) {
42    cflags_cc += [ "-DPANDA_COMPILER_TARGET_X86_64" ]
43  }
44}
45
46libarkcompiler_sources = [
47  "compiler_logger.cpp",
48  "compiler_options.cpp",
49  "optimizer/analysis/dominators_tree.cpp",
50  "optimizer/analysis/linear_order.cpp",
51  "optimizer/analysis/liveness_analyzer.cpp",
52  "optimizer/analysis/loop_analyzer.cpp",
53  "optimizer/analysis/rpo.cpp",
54  "optimizer/ir/basicblock.cpp",
55  "optimizer/ir/dump.cpp",
56  "optimizer/ir/graph.cpp",
57  "optimizer/ir/graph_checker.cpp",
58  "optimizer/ir/graph_cloner.cpp",
59  "optimizer/ir/inst.cpp",
60  "optimizer/ir/locations.cpp",
61  "optimizer/ir_builder/inst_builder.cpp",
62  "optimizer/ir_builder/ir_builder.cpp",
63  "optimizer/optimizations/branch_elimination.cpp",
64  "optimizer/optimizations/cleanup.cpp",
65  "optimizer/optimizations/lowering.cpp",
66  "optimizer/optimizations/move_constants.cpp",
67  "optimizer/optimizations/regalloc/interference_graph.cpp",
68  "optimizer/optimizations/regalloc/reg_alloc.cpp",
69  "optimizer/optimizations/regalloc/reg_alloc_base.cpp",
70  "optimizer/optimizations/regalloc/reg_alloc_graph_coloring.cpp",
71  "optimizer/optimizations/regalloc/reg_alloc_resolver.cpp",
72  "optimizer/optimizations/regalloc/reg_alloc_stat.cpp",
73  "optimizer/optimizations/regalloc/reg_map.cpp",
74  "optimizer/optimizations/regalloc/spill_fills_resolver.cpp",
75  "optimizer/optimizations/regalloc/split_resolver.cpp",
76  "optimizer/optimizations/vn.cpp",
77  "optimizer/pass.cpp",
78  "optimizer/pass_manager.cpp",
79  "optimizer/pass_manager_statistics.cpp",
80]
81
82libarkcompiler_sources += [ "$target_gen_dir/generated/inst_builder_gen.cpp" ]
83
84libarkcompiler_configs = [
85  ":arkcompiler_public_config",
86  "$ark_root:ark_config",
87  "$ark_root/libpandabase:arkbase_public_config",
88  "$ark_root/libpandafile:arkfile_public_config",
89]
90
91ohos_shared_library("libarkcompiler") {
92  stack_protector_ret = false
93  sources = libarkcompiler_sources
94
95  configs = libarkcompiler_configs
96
97  deps = [
98    ":codegen_language_extensions_h",
99    ":compiler_events_gen_h",
100    ":compiler_interface_extensions_inl_h",
101    ":compiler_logger_components_inc",
102    ":compiler_options_gen_h",
103    ":cpu_features_gen_inc",
104    ":intrinsics_codegen_ext_inl_h",
105    ":intrinsics_inline_inl",
106    ":intrinsics_ir_build_inl_h",
107    ":intrinsics_ir_build_static_call_inl",
108    ":intrinsics_ir_build_virtual_call_inl",
109    ":intrinsics_stub_inl",
110    ":intrinsics_stub_inl_h",
111    ":ir_dyn_base_types_h",
112    ":isa_gen_libarkcompiler_inst_builder_gen_cpp",
113    ":libarkcompiler_ecma_intrinsics_enum_inl",
114    ":libarkcompiler_generate_ecma_inl",
115    ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_graph_inl",
116    ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_inst_inl",
117    ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_inl",
118    ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_names_inl",
119    ":libarkcompiler_intrinsics_gen_inl_intrinsic_codegen_test_inl",
120    ":libarkcompiler_intrinsics_gen_inl_intrinsic_flags_test_inl",
121    ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl",
122    ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl_h",
123    ":libarkcompiler_intrinsics_gen_inl_intrinsics_enum_inl",
124    ":libarkcompiler_intrinsics_gen_inl_intrinsics_flags_inl",
125    ":libarkcompiler_intrinsics_gen_inl_intrinsics_ir_build_inl",
126    ":libarkcompiler_opcodes_h_IR-instructions_md",
127    ":libarkcompiler_opcodes_h_arch_info_gen_h",
128    ":libarkcompiler_opcodes_h_codegen_arm64_gen_inc",
129    ":libarkcompiler_opcodes_h_inst_checker_gen_h",
130    ":libarkcompiler_opcodes_h_opcodes_h",
131    ":source_languages_h",
132    "$ark_root/libpandabase:libarkbase",
133    "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction-inl_gen_h",
134    "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction_enum_gen_h",
135    "$ark_root/libpandafile:libarkfile",
136    "$ark_root/libpandafile:libarkfile_type_gen_h",
137  ]
138
139  external_deps = [ sdk_libc_secshared_dep ]
140
141  include_dirs = [ "$ark_root/compiler/optimizer" ]
142
143  output_extension = "so"
144  relative_install_dir = "ark"
145  part_name = "runtime_core"
146  subsystem_name = "arkcompiler"
147}
148
149libarkcompiler_frontend_static_common_deps = [
150  ":codegen_language_extensions_h",
151  ":compiler_events_gen_h",
152  ":compiler_interface_extensions_inl_h",
153  ":compiler_logger_components_inc",
154  ":compiler_options_gen_h",
155  ":cpu_features_gen_inc",
156  ":intrinsics_codegen_ext_inl_h",
157  ":intrinsics_inline_inl",
158  ":intrinsics_ir_build_inl_h",
159  ":intrinsics_ir_build_static_call_inl",
160  ":intrinsics_ir_build_virtual_call_inl",
161  ":intrinsics_stub_inl",
162  ":intrinsics_stub_inl_h",
163  ":ir_dyn_base_types_h",
164  ":isa_gen_libarkcompiler_inst_builder_gen_cpp",
165  ":libarkcompiler_ecma_intrinsics_enum_inl",
166  ":libarkcompiler_generate_ecma_inl",
167  ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_graph_inl",
168  ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_inst_inl",
169  ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_inl",
170  ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_names_inl",
171  ":libarkcompiler_intrinsics_gen_inl_intrinsic_codegen_test_inl",
172  ":libarkcompiler_intrinsics_gen_inl_intrinsic_flags_test_inl",
173  ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl",
174  ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl_h",
175  ":libarkcompiler_intrinsics_gen_inl_intrinsics_enum_inl",
176  ":libarkcompiler_intrinsics_gen_inl_intrinsics_flags_inl",
177  ":libarkcompiler_intrinsics_gen_inl_intrinsics_ir_build_inl",
178  ":libarkcompiler_opcodes_h_IR-instructions_md",
179  ":libarkcompiler_opcodes_h_arch_info_gen_h",
180  ":libarkcompiler_opcodes_h_codegen_arm64_gen_inc",
181  ":libarkcompiler_opcodes_h_inst_checker_gen_h",
182  ":libarkcompiler_opcodes_h_opcodes_h",
183  ":source_languages_h",
184  "$ark_root/libpandabase:libarkbase_frontend_static",
185  "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction-inl_gen_h",
186  "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction_enum_gen_h",
187  "$ark_root/libpandafile:libarkfile_frontend_static",
188  "$ark_root/libpandafile:libarkfile_type_gen_h",
189]
190
191ohos_static_library("libarkcompiler_frontend_static") {
192  stack_protector_ret = false
193  sources = libarkcompiler_sources
194
195  configs = libarkcompiler_configs
196
197  deps = libarkcompiler_frontend_static_common_deps
198
199  if (is_arkui_x) {
200    deps += [ "$ark_third_party_root/bounds_checking_function:libsec_static" ]
201  } else {
202    external_deps = [ sdk_libc_secshared_dep ]
203  }
204
205  include_dirs = [ "$ark_root/compiler/optimizer" ]
206
207  part_name = "runtime_core"
208  subsystem_name = "arkcompiler"
209}
210
211ohos_static_library(
212    "libarkcompiler_frontend_static_for_libark_defect_scan_aux") {
213  stack_protector_ret = false
214  sources = libarkcompiler_sources
215
216  configs = libarkcompiler_configs
217
218  defines = [ "IR_FOR_LIBARK_DEFECT_SCAN_AUX" ]
219
220  deps = libarkcompiler_frontend_static_common_deps
221
222  if (is_arkui_x) {
223    deps += [ "$ark_third_party_root/bounds_checking_function:libsec_static" ]
224  } else {
225    external_deps = [ sdk_libc_secshared_dep ]
226  }
227
228  include_dirs = [ "$ark_root/compiler/optimizer" ]
229
230  part_name = "runtime_core"
231  subsystem_name = "arkcompiler"
232}
233
234ark_isa_gen("isa_gen_libarkcompiler") {
235  template_files = [ "inst_builder_gen.cpp.erb" ]
236  sources = "optimizer/templates"
237  destination = "$target_gen_dir/generated"
238}
239
240ark_gen("libarkcompiler_intrinsics_gen_inl") {
241  data = "intrinsics.yaml"
242  template_files = [
243    "intrinsics_enum.inl.erb",
244    "get_intrinsics.inl.erb",
245    "entrypoints_bridge_asm_macro.inl.erb",
246    "intrinsics_ir_build.inl.erb",
247    "get_intrinsics_names.inl.erb",
248    "generate_operations_intrinsic_inst.inl.erb",
249    "generate_operations_intrinsic_graph.inl.erb",
250    "intrinsic_codegen_test.inl.erb",
251    "intrinsic_flags_test.inl.erb",
252    "intrinsics_codegen.inl.h.erb",
253    "intrinsics_codegen.inl.erb",
254    "intrinsics_flags.inl.erb",
255  ]
256  sources = "optimizer/templates/intrinsics"
257  destination = "$target_gen_dir/generated"
258  requires = [
259    "$ark_root/compiler/optimizer/templates/intrinsics/compiler_intrinsics.rb",
260  ]
261}
262
263ark_isa_gen("libarkcompiler") {
264  template_files = [
265    "generate_ecma.inl.erb",
266    "ecma_intrinsics_enum.inl.erb",
267  ]
268  sources = "optimizer/templates"
269  requires = [ "$ark_root//assembler/asm_isapi.rb" ]
270  destination = "$target_gen_dir/generated"
271}
272
273ark_gen("libarkcompiler_opcodes_h") {
274  data = "$ark_root/compiler/optimizer/ir/instructions.yaml"
275  template_files = [
276    "opcodes.h.erb",
277    "arch_info_gen.h.erb",
278    "inst_checker_gen.h.erb",
279    "IR-instructions.md.erb",
280    "codegen_arm64_gen.inc.erb",
281  ]
282  sources = "optimizer/templates"
283  destination = "$target_gen_dir/generated"
284  requires = [ "$ark_root/compiler/optimizer/templates/instructions.rb" ]
285}
286
287ark_gen_file("compiler_options_gen_h") {
288  template_file = "$ark_root/templates/options/options.h.erb"
289  data_file = "compiler.yaml"
290  requires = [ "$ark_root/templates/common.rb" ]
291  output_file = "$target_gen_dir/generated/compiler_options_gen.h"
292}
293
294ark_gen_file("cpu_features_gen_inc") {
295  template_file = "$ark_root/templates/cpu_features.inc.erb"
296  data_file = "compiler.yaml"
297  requires = [ "$ark_root/templates/common.rb" ]
298  output_file = "$target_gen_dir/generated/cpu_features.inc"
299}
300
301ark_gen_file("compiler_events_gen_h") {
302  template_file = "$ark_root/templates/events/events.h.erb"
303  data_file = "compiler.yaml"
304  requires = [ "$ark_root/templates/common.rb" ]
305  output_file = "$target_gen_dir/generated/compiler_events_gen.h"
306}
307
308ark_gen_file("compiler_logger_components_inc") {
309  template_file =
310      "$ark_root/templates/logger_components/logger_components.inc.erb"
311  data_file = "compiler.yaml"
312  requires = [ "$ark_root/templates/common.rb" ]
313  output_file = "$target_gen_dir/generated/compiler_logger_components.inc"
314}
315ark_gen_file("intrinsics_stub_inl") {
316  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
317  template_file = "optimizer/templates/intrinsics/intrinsics_stub.inl.erb"
318  data_file = "$target_gen_dir/../plugin_options.yaml"
319  requires = [ "$ark_root/templates/plugin_options.rb" ]
320  output_file = "$target_gen_dir/generated/intrinsics_stub.inl"
321}
322ark_gen_file("intrinsics_stub_inl_h") {
323  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
324  template_file = "optimizer/templates/intrinsics/intrinsics_stub.inl.h.erb"
325  data_file = "$target_gen_dir/../plugin_options.yaml"
326  requires = [ "$ark_root/templates/plugin_options.rb" ]
327  output_file = "$target_gen_dir/generated/intrinsics_stub.inl.h"
328}
329ark_gen_file("intrinsics_codegen_ext_inl_h") {
330  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
331  template_file =
332      "optimizer/templates/intrinsics/intrinsics_codegen_ext.inl.h.erb"
333  data_file = "$target_gen_dir/../plugin_options.yaml"
334  requires = [ "$ark_root/templates/plugin_options.rb" ]
335  output_file = "$target_gen_dir/generated/intrinsics_codegen_ext.inl.h"
336}
337ark_gen_file("intrinsics_inline_inl") {
338  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
339  template_file = "optimizer/templates/intrinsics/intrinsics_inline.inl.erb"
340  data_file = "$target_gen_dir/../plugin_options.yaml"
341  requires = [ "$ark_root/templates/plugin_options.rb" ]
342  output_file = "$target_gen_dir/generated/intrinsics_inline.inl"
343}
344ark_gen_file("intrinsics_ir_build_inl_h") {
345  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
346  template_file = "optimizer/templates/intrinsics/intrinsics_ir_build.inl.h.erb"
347  data_file = "$target_gen_dir/../plugin_options.yaml"
348  requires = [ "$ark_root/templates/plugin_options.rb" ]
349  output_file = "$target_gen_dir/generated/intrinsics_ir_build.inl.h"
350}
351ark_gen_file("intrinsics_ir_build_static_call_inl") {
352  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
353  template_file =
354      "optimizer/templates/intrinsics/intrinsics_ir_build_static_call.inl.erb"
355  data_file = "$target_gen_dir/../plugin_options.yaml"
356  requires = [ "$ark_root/templates/plugin_options.rb" ]
357  output_file = "$target_gen_dir/generated/intrinsics_ir_build_static_call.inl"
358}
359ark_gen_file("intrinsics_ir_build_virtual_call_inl") {
360  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
361  template_file =
362      "optimizer/templates/intrinsics/intrinsics_ir_build_virtual_call.inl.erb"
363  data_file = "$target_gen_dir/../plugin_options.yaml"
364  requires = [ "$ark_root/templates/plugin_options.rb" ]
365  output_file = "$target_gen_dir/generated/intrinsics_ir_build_virtual_call.inl"
366}
367
368ark_gen_file("ir_dyn_base_types_h") {
369  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
370  template_file = "optimizer/templates/ir-dyn-base-types.h.erb"
371  data_file = "$target_gen_dir/../plugin_options.yaml"
372  requires = [ "$ark_root/templates/plugin_options.rb" ]
373  output_file = "$target_gen_dir/generated/ir-dyn-base-types.h"
374}
375
376ark_gen_file("source_languages_h") {
377  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
378  template_file = "optimizer/templates/source_languages.h.erb"
379  data_file = "$target_gen_dir/../plugin_options.yaml"
380  requires = [ "$ark_root/templates/plugin_options.rb" ]
381  output_file = "$target_gen_dir/generated/source_languages.h"
382}
383
384ark_gen_file("codegen_language_extensions_h") {
385  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
386  template_file = "optimizer/templates/codegen_language_extensions.h.erb"
387  data_file = "$target_gen_dir/../plugin_options.yaml"
388  requires = [ "$ark_root/templates/plugin_options.rb" ]
389  output_file = "$target_gen_dir/generated/codegen_language_extensions.h"
390}
391
392ark_gen_file("compiler_interface_extensions_inl_h") {
393  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
394  template_file = "optimizer/templates/compiler_interface_extensions.inl.h.erb"
395  data_file = "$target_gen_dir/../plugin_options.yaml"
396  requires = [ "$ark_root/templates/plugin_options.rb" ]
397  output_file = "$target_gen_dir/generated/compiler_interface_extensions.inl.h"
398}
399