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