• 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/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
91group("arkcompiler_header_deps") {
92  deps = [
93    ":codegen_language_extensions_h",
94    ":compiler_events_gen_h",
95    ":compiler_interface_extensions_inl_h",
96    ":compiler_logger_components_inc",
97    ":compiler_options_gen_h",
98    ":cpu_features_gen_inc",
99    ":intrinsics_codegen_ext_inl_h",
100    ":intrinsics_inline_inl",
101    ":intrinsics_ir_build_inl_h",
102    ":intrinsics_ir_build_static_call_inl",
103    ":intrinsics_ir_build_virtual_call_inl",
104    ":intrinsics_stub_inl",
105    ":intrinsics_stub_inl_h",
106    ":ir_dyn_base_types_h",
107    ":libarkcompiler_ecma_intrinsics_enum_inl",
108    ":libarkcompiler_generate_ecma_inl",
109    ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_graph_inl",
110    ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_inst_inl",
111    ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_inl",
112    ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_names_inl",
113    ":libarkcompiler_intrinsics_gen_inl_intrinsic_codegen_test_inl",
114    ":libarkcompiler_intrinsics_gen_inl_intrinsic_flags_test_inl",
115    ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl",
116    ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl_h",
117    ":libarkcompiler_intrinsics_gen_inl_intrinsics_enum_inl",
118    ":libarkcompiler_intrinsics_gen_inl_intrinsics_flags_inl",
119    ":libarkcompiler_intrinsics_gen_inl_intrinsics_ir_build_inl",
120    ":libarkcompiler_opcodes_h_IR-instructions_md",
121    ":libarkcompiler_opcodes_h_arch_info_gen_h",
122    ":libarkcompiler_opcodes_h_codegen_arm64_gen_inc",
123    ":libarkcompiler_opcodes_h_inst_checker_gen_h",
124    ":libarkcompiler_opcodes_h_opcodes_h",
125    ":source_languages_h",
126    "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction-inl_gen_h",
127    "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction_enum_gen_h",
128    "$ark_root/libpandafile:libarkfile_type_gen_h",
129  ]
130}
131
132ohos_shared_library("libarkcompiler") {
133  stack_protector_ret = false
134  sources = libarkcompiler_sources
135
136  configs = libarkcompiler_configs
137
138  deps = [
139    ":arkcompiler_header_deps",
140    ":isa_gen_libarkcompiler_inst_builder_gen_cpp",
141    "$ark_root/libpandabase:libarkbase",
142    "$ark_root/libpandafile:libarkfile",
143  ]
144
145  external_deps = [ sdk_libc_secshared_dep ]
146  if (enable_hilog && defined(ohos_indep_compiler_enable) &&
147      ohos_indep_compiler_enable) {
148    external_deps += [ "hilog:libhilog" ]
149  }
150
151  include_dirs = [ "$ark_root/compiler/optimizer" ]
152
153  output_extension = "so"
154  relative_install_dir = "ark"
155  part_name = "runtime_core"
156  subsystem_name = "arkcompiler"
157}
158
159ohos_static_library("libarkcompiler_frontend_static") {
160  stack_protector_ret = false
161  sources = libarkcompiler_sources
162
163  configs = libarkcompiler_configs
164
165  deps = [
166    ":arkcompiler_header_deps",
167    ":isa_gen_libarkcompiler_inst_builder_gen_cpp",
168    "$ark_root/libpandabase:libarkbase_frontend_static",
169    "$ark_root/libpandafile:libarkfile_frontend_static",
170  ]
171
172  if (is_arkui_x) {
173    deps += [ "$ark_third_party_root/bounds_checking_function:libsec_static" ]
174  } else {
175    external_deps = [ sdk_libc_secshared_dep ]
176    if (enable_hilog && defined(ohos_indep_compiler_enable) &&
177        ohos_indep_compiler_enable) {
178      external_deps += [ "hilog:libhilog" ]
179    }
180  }
181
182  include_dirs = [ "$ark_root/compiler/optimizer" ]
183
184  part_name = "runtime_core"
185  subsystem_name = "arkcompiler"
186}
187
188ohos_static_library(
189    "libarkcompiler_frontend_static_for_libark_defect_scan_aux") {
190  stack_protector_ret = false
191  sources = libarkcompiler_sources
192
193  configs = libarkcompiler_configs
194
195  defines = [ "IR_FOR_LIBARK_DEFECT_SCAN_AUX" ]
196
197  deps = [
198    ":arkcompiler_header_deps",
199    ":isa_gen_libarkcompiler_inst_builder_gen_cpp",
200    "$ark_root/libpandabase:libarkbase_frontend_static",
201    "$ark_root/libpandafile:libarkfile_frontend_static",
202  ]
203
204  if (is_arkui_x) {
205    deps += [ "$ark_third_party_root/bounds_checking_function:libsec_static" ]
206  } else {
207    external_deps = [ sdk_libc_secshared_dep ]
208    if (enable_hilog && defined(ohos_indep_compiler_enable) &&
209        ohos_indep_compiler_enable) {
210      external_deps += [ "hilog:libhilog" ]
211    }
212  }
213
214  include_dirs = [ "$ark_root/compiler/optimizer" ]
215
216  part_name = "runtime_core"
217  subsystem_name = "arkcompiler"
218}
219
220ark_isa_gen("isa_gen_libarkcompiler") {
221  template_files = [ "inst_builder_gen.cpp.erb" ]
222  sources = "optimizer/templates"
223  destination = "$target_gen_dir/generated"
224}
225
226ark_gen("libarkcompiler_intrinsics_gen_inl") {
227  data = "intrinsics.yaml"
228  template_files = [
229    "intrinsics_enum.inl.erb",
230    "get_intrinsics.inl.erb",
231    "entrypoints_bridge_asm_macro.inl.erb",
232    "intrinsics_ir_build.inl.erb",
233    "get_intrinsics_names.inl.erb",
234    "generate_operations_intrinsic_inst.inl.erb",
235    "generate_operations_intrinsic_graph.inl.erb",
236    "intrinsic_codegen_test.inl.erb",
237    "intrinsic_flags_test.inl.erb",
238    "intrinsics_codegen.inl.h.erb",
239    "intrinsics_codegen.inl.erb",
240    "intrinsics_flags.inl.erb",
241  ]
242  sources = "optimizer/templates/intrinsics"
243  destination = "$target_gen_dir/generated"
244  requires = [
245    "$ark_root/compiler/optimizer/templates/intrinsics/compiler_intrinsics.rb",
246  ]
247}
248
249ark_isa_gen("libarkcompiler") {
250  template_files = [
251    "generate_ecma.inl.erb",
252    "ecma_intrinsics_enum.inl.erb",
253  ]
254  sources = "optimizer/templates"
255  requires = [ "$ark_root//assembler/asm_isapi.rb" ]
256  destination = "$target_gen_dir/generated"
257}
258
259ark_gen("libarkcompiler_opcodes_h") {
260  data = "$ark_root/compiler/optimizer/ir/instructions.yaml"
261  template_files = [
262    "opcodes.h.erb",
263    "arch_info_gen.h.erb",
264    "inst_checker_gen.h.erb",
265    "IR-instructions.md.erb",
266    "codegen_arm64_gen.inc.erb",
267  ]
268  sources = "optimizer/templates"
269  destination = "$target_gen_dir/generated"
270  requires = [ "$ark_root/compiler/optimizer/templates/instructions.rb" ]
271}
272
273ark_gen_file("compiler_options_gen_h") {
274  template_file = "$ark_root/templates/options/options.h.erb"
275  data_file = "compiler.yaml"
276  requires = [ "$ark_root/templates/common.rb" ]
277  output_file = "$target_gen_dir/generated/compiler_options_gen.h"
278}
279
280ark_gen_file("cpu_features_gen_inc") {
281  template_file = "$ark_root/templates/cpu_features.inc.erb"
282  data_file = "compiler.yaml"
283  requires = [ "$ark_root/templates/common.rb" ]
284  output_file = "$target_gen_dir/generated/cpu_features.inc"
285}
286
287ark_gen_file("compiler_events_gen_h") {
288  template_file = "$ark_root/templates/events/events.h.erb"
289  data_file = "compiler.yaml"
290  requires = [ "$ark_root/templates/common.rb" ]
291  output_file = "$target_gen_dir/generated/compiler_events_gen.h"
292}
293
294ark_gen_file("compiler_logger_components_inc") {
295  template_file =
296      "$ark_root/templates/logger_components/logger_components.inc.erb"
297  data_file = "compiler.yaml"
298  requires = [ "$ark_root/templates/common.rb" ]
299  output_file = "$target_gen_dir/generated/compiler_logger_components.inc"
300}
301ark_gen_file("intrinsics_stub_inl") {
302  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
303  template_file = "optimizer/templates/intrinsics/intrinsics_stub.inl.erb"
304  data_file = "$target_gen_dir/../plugin_options.yaml"
305  requires = [ "$ark_root/templates/plugin_options.rb" ]
306  output_file = "$target_gen_dir/generated/intrinsics_stub.inl"
307}
308ark_gen_file("intrinsics_stub_inl_h") {
309  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
310  template_file = "optimizer/templates/intrinsics/intrinsics_stub.inl.h.erb"
311  data_file = "$target_gen_dir/../plugin_options.yaml"
312  requires = [ "$ark_root/templates/plugin_options.rb" ]
313  output_file = "$target_gen_dir/generated/intrinsics_stub.inl.h"
314}
315ark_gen_file("intrinsics_codegen_ext_inl_h") {
316  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
317  template_file =
318      "optimizer/templates/intrinsics/intrinsics_codegen_ext.inl.h.erb"
319  data_file = "$target_gen_dir/../plugin_options.yaml"
320  requires = [ "$ark_root/templates/plugin_options.rb" ]
321  output_file = "$target_gen_dir/generated/intrinsics_codegen_ext.inl.h"
322}
323ark_gen_file("intrinsics_inline_inl") {
324  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
325  template_file = "optimizer/templates/intrinsics/intrinsics_inline.inl.erb"
326  data_file = "$target_gen_dir/../plugin_options.yaml"
327  requires = [ "$ark_root/templates/plugin_options.rb" ]
328  output_file = "$target_gen_dir/generated/intrinsics_inline.inl"
329}
330ark_gen_file("intrinsics_ir_build_inl_h") {
331  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
332  template_file = "optimizer/templates/intrinsics/intrinsics_ir_build.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_ir_build.inl.h"
336}
337ark_gen_file("intrinsics_ir_build_static_call_inl") {
338  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
339  template_file =
340      "optimizer/templates/intrinsics/intrinsics_ir_build_static_call.inl.erb"
341  data_file = "$target_gen_dir/../plugin_options.yaml"
342  requires = [ "$ark_root/templates/plugin_options.rb" ]
343  output_file = "$target_gen_dir/generated/intrinsics_ir_build_static_call.inl"
344}
345ark_gen_file("intrinsics_ir_build_virtual_call_inl") {
346  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
347  template_file =
348      "optimizer/templates/intrinsics/intrinsics_ir_build_virtual_call.inl.erb"
349  data_file = "$target_gen_dir/../plugin_options.yaml"
350  requires = [ "$ark_root/templates/plugin_options.rb" ]
351  output_file = "$target_gen_dir/generated/intrinsics_ir_build_virtual_call.inl"
352}
353
354ark_gen_file("ir_dyn_base_types_h") {
355  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
356  template_file = "optimizer/templates/ir-dyn-base-types.h.erb"
357  data_file = "$target_gen_dir/../plugin_options.yaml"
358  requires = [ "$ark_root/templates/plugin_options.rb" ]
359  output_file = "$target_gen_dir/generated/ir-dyn-base-types.h"
360}
361
362ark_gen_file("source_languages_h") {
363  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
364  template_file = "optimizer/templates/source_languages.h.erb"
365  data_file = "$target_gen_dir/../plugin_options.yaml"
366  requires = [ "$ark_root/templates/plugin_options.rb" ]
367  output_file = "$target_gen_dir/generated/source_languages.h"
368}
369
370ark_gen_file("codegen_language_extensions_h") {
371  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
372  template_file = "optimizer/templates/codegen_language_extensions.h.erb"
373  data_file = "$target_gen_dir/../plugin_options.yaml"
374  requires = [ "$ark_root/templates/plugin_options.rb" ]
375  output_file = "$target_gen_dir/generated/codegen_language_extensions.h"
376}
377
378ark_gen_file("compiler_interface_extensions_inl_h") {
379  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
380  template_file = "optimizer/templates/compiler_interface_extensions.inl.h.erb"
381  data_file = "$target_gen_dir/../plugin_options.yaml"
382  requires = [ "$ark_root/templates/plugin_options.rb" ]
383  output_file = "$target_gen_dir/generated/compiler_interface_extensions.inl.h"
384}
385