• 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
147  include_dirs = [ "$ark_root/compiler/optimizer" ]
148
149  output_extension = "so"
150  relative_install_dir = "ark"
151  part_name = "runtime_core"
152  subsystem_name = "arkcompiler"
153}
154
155ohos_static_library("libarkcompiler_frontend_static") {
156  stack_protector_ret = false
157  sources = libarkcompiler_sources
158
159  configs = libarkcompiler_configs
160
161  deps = [
162    ":arkcompiler_header_deps",
163    ":isa_gen_libarkcompiler_inst_builder_gen_cpp",
164    "$ark_root/libpandabase:libarkbase_frontend_static",
165    "$ark_root/libpandafile:libarkfile_frontend_static",
166  ]
167
168  if (is_arkui_x) {
169    deps += [ "$ark_third_party_root/bounds_checking_function:libsec_static" ]
170  } else {
171    external_deps = [ sdk_libc_secshared_dep ]
172  }
173
174  include_dirs = [ "$ark_root/compiler/optimizer" ]
175
176  part_name = "runtime_core"
177  subsystem_name = "arkcompiler"
178}
179
180ohos_static_library(
181    "libarkcompiler_frontend_static_for_libark_defect_scan_aux") {
182  stack_protector_ret = false
183  sources = libarkcompiler_sources
184
185  configs = libarkcompiler_configs
186
187  defines = [ "IR_FOR_LIBARK_DEFECT_SCAN_AUX" ]
188
189  deps = [
190    ":arkcompiler_header_deps",
191    ":isa_gen_libarkcompiler_inst_builder_gen_cpp",
192    "$ark_root/libpandabase:libarkbase_frontend_static",
193    "$ark_root/libpandafile:libarkfile_frontend_static",
194  ]
195
196  if (is_arkui_x) {
197    deps += [ "$ark_third_party_root/bounds_checking_function:libsec_static" ]
198  } else {
199    external_deps = [ sdk_libc_secshared_dep ]
200  }
201
202  include_dirs = [ "$ark_root/compiler/optimizer" ]
203
204  part_name = "runtime_core"
205  subsystem_name = "arkcompiler"
206}
207
208ark_isa_gen("isa_gen_libarkcompiler") {
209  template_files = [ "inst_builder_gen.cpp.erb" ]
210  sources = "optimizer/templates"
211  destination = "$target_gen_dir/generated"
212}
213
214ark_gen("libarkcompiler_intrinsics_gen_inl") {
215  data = "intrinsics.yaml"
216  template_files = [
217    "intrinsics_enum.inl.erb",
218    "get_intrinsics.inl.erb",
219    "entrypoints_bridge_asm_macro.inl.erb",
220    "intrinsics_ir_build.inl.erb",
221    "get_intrinsics_names.inl.erb",
222    "generate_operations_intrinsic_inst.inl.erb",
223    "generate_operations_intrinsic_graph.inl.erb",
224    "intrinsic_codegen_test.inl.erb",
225    "intrinsic_flags_test.inl.erb",
226    "intrinsics_codegen.inl.h.erb",
227    "intrinsics_codegen.inl.erb",
228    "intrinsics_flags.inl.erb",
229  ]
230  sources = "optimizer/templates/intrinsics"
231  destination = "$target_gen_dir/generated"
232  requires = [
233    "$ark_root/compiler/optimizer/templates/intrinsics/compiler_intrinsics.rb",
234  ]
235}
236
237ark_isa_gen("libarkcompiler") {
238  template_files = [
239    "generate_ecma.inl.erb",
240    "ecma_intrinsics_enum.inl.erb",
241  ]
242  sources = "optimizer/templates"
243  requires = [ "$ark_root//assembler/asm_isapi.rb" ]
244  destination = "$target_gen_dir/generated"
245}
246
247ark_gen("libarkcompiler_opcodes_h") {
248  data = "$ark_root/compiler/optimizer/ir/instructions.yaml"
249  template_files = [
250    "opcodes.h.erb",
251    "arch_info_gen.h.erb",
252    "inst_checker_gen.h.erb",
253    "IR-instructions.md.erb",
254    "codegen_arm64_gen.inc.erb",
255  ]
256  sources = "optimizer/templates"
257  destination = "$target_gen_dir/generated"
258  requires = [ "$ark_root/compiler/optimizer/templates/instructions.rb" ]
259}
260
261ark_gen_file("compiler_options_gen_h") {
262  template_file = "$ark_root/templates/options/options.h.erb"
263  data_file = "compiler.yaml"
264  requires = [ "$ark_root/templates/common.rb" ]
265  output_file = "$target_gen_dir/generated/compiler_options_gen.h"
266}
267
268ark_gen_file("cpu_features_gen_inc") {
269  template_file = "$ark_root/templates/cpu_features.inc.erb"
270  data_file = "compiler.yaml"
271  requires = [ "$ark_root/templates/common.rb" ]
272  output_file = "$target_gen_dir/generated/cpu_features.inc"
273}
274
275ark_gen_file("compiler_events_gen_h") {
276  template_file = "$ark_root/templates/events/events.h.erb"
277  data_file = "compiler.yaml"
278  requires = [ "$ark_root/templates/common.rb" ]
279  output_file = "$target_gen_dir/generated/compiler_events_gen.h"
280}
281
282ark_gen_file("compiler_logger_components_inc") {
283  template_file =
284      "$ark_root/templates/logger_components/logger_components.inc.erb"
285  data_file = "compiler.yaml"
286  requires = [ "$ark_root/templates/common.rb" ]
287  output_file = "$target_gen_dir/generated/compiler_logger_components.inc"
288}
289ark_gen_file("intrinsics_stub_inl") {
290  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
291  template_file = "optimizer/templates/intrinsics/intrinsics_stub.inl.erb"
292  data_file = "$target_gen_dir/../plugin_options.yaml"
293  requires = [ "$ark_root/templates/plugin_options.rb" ]
294  output_file = "$target_gen_dir/generated/intrinsics_stub.inl"
295}
296ark_gen_file("intrinsics_stub_inl_h") {
297  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
298  template_file = "optimizer/templates/intrinsics/intrinsics_stub.inl.h.erb"
299  data_file = "$target_gen_dir/../plugin_options.yaml"
300  requires = [ "$ark_root/templates/plugin_options.rb" ]
301  output_file = "$target_gen_dir/generated/intrinsics_stub.inl.h"
302}
303ark_gen_file("intrinsics_codegen_ext_inl_h") {
304  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
305  template_file =
306      "optimizer/templates/intrinsics/intrinsics_codegen_ext.inl.h.erb"
307  data_file = "$target_gen_dir/../plugin_options.yaml"
308  requires = [ "$ark_root/templates/plugin_options.rb" ]
309  output_file = "$target_gen_dir/generated/intrinsics_codegen_ext.inl.h"
310}
311ark_gen_file("intrinsics_inline_inl") {
312  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
313  template_file = "optimizer/templates/intrinsics/intrinsics_inline.inl.erb"
314  data_file = "$target_gen_dir/../plugin_options.yaml"
315  requires = [ "$ark_root/templates/plugin_options.rb" ]
316  output_file = "$target_gen_dir/generated/intrinsics_inline.inl"
317}
318ark_gen_file("intrinsics_ir_build_inl_h") {
319  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
320  template_file = "optimizer/templates/intrinsics/intrinsics_ir_build.inl.h.erb"
321  data_file = "$target_gen_dir/../plugin_options.yaml"
322  requires = [ "$ark_root/templates/plugin_options.rb" ]
323  output_file = "$target_gen_dir/generated/intrinsics_ir_build.inl.h"
324}
325ark_gen_file("intrinsics_ir_build_static_call_inl") {
326  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
327  template_file =
328      "optimizer/templates/intrinsics/intrinsics_ir_build_static_call.inl.erb"
329  data_file = "$target_gen_dir/../plugin_options.yaml"
330  requires = [ "$ark_root/templates/plugin_options.rb" ]
331  output_file = "$target_gen_dir/generated/intrinsics_ir_build_static_call.inl"
332}
333ark_gen_file("intrinsics_ir_build_virtual_call_inl") {
334  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
335  template_file =
336      "optimizer/templates/intrinsics/intrinsics_ir_build_virtual_call.inl.erb"
337  data_file = "$target_gen_dir/../plugin_options.yaml"
338  requires = [ "$ark_root/templates/plugin_options.rb" ]
339  output_file = "$target_gen_dir/generated/intrinsics_ir_build_virtual_call.inl"
340}
341
342ark_gen_file("ir_dyn_base_types_h") {
343  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
344  template_file = "optimizer/templates/ir-dyn-base-types.h.erb"
345  data_file = "$target_gen_dir/../plugin_options.yaml"
346  requires = [ "$ark_root/templates/plugin_options.rb" ]
347  output_file = "$target_gen_dir/generated/ir-dyn-base-types.h"
348}
349
350ark_gen_file("source_languages_h") {
351  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
352  template_file = "optimizer/templates/source_languages.h.erb"
353  data_file = "$target_gen_dir/../plugin_options.yaml"
354  requires = [ "$ark_root/templates/plugin_options.rb" ]
355  output_file = "$target_gen_dir/generated/source_languages.h"
356}
357
358ark_gen_file("codegen_language_extensions_h") {
359  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
360  template_file = "optimizer/templates/codegen_language_extensions.h.erb"
361  data_file = "$target_gen_dir/../plugin_options.yaml"
362  requires = [ "$ark_root/templates/plugin_options.rb" ]
363  output_file = "$target_gen_dir/generated/codegen_language_extensions.h"
364}
365
366ark_gen_file("compiler_interface_extensions_inl_h") {
367  extra_dependencies = [ "$ark_root:concat_plugins_yamls" ]
368  template_file = "optimizer/templates/compiler_interface_extensions.inl.h.erb"
369  data_file = "$target_gen_dir/../plugin_options.yaml"
370  requires = [ "$ark_root/templates/plugin_options.rb" ]
371  output_file = "$target_gen_dir/generated/compiler_interface_extensions.inl.h"
372}
373