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