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