# Copyright (c) 2021-2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import("//arkcompiler/runtime_core/ark_config.gni") config("arkcompiler_public_config") { include_dirs = [ "$ark_root/compiler", "$ark_root/compiler/code_info", "$ark_root/compiler/optimizer/ir", "$target_gen_dir/generated", ] include_dirs += platform_include_dirs if (enable_bytecode_optimizer) { defines = [ "ENABLE_BYTECODE_OPT" ] } is_x64 = current_cpu == "amd64" || current_cpu == "x64" || current_cpu == "x86_64" cflags_cc = [] if (is_x64 || current_cpu == "arm64") { if (!is_mingw) { cflags_cc += [ "-DPANDA_COMPILER_TARGET_AARCH64", "-DUSE_VIXL_ARM64", ] } } if (ark_enable_compiler_x64) { cflags_cc += [ "-DPANDA_COMPILER_TARGET_X86_64" ] } } libarkcompiler_sources = [ "compiler_logger.cpp", "compiler_options.cpp", "optimizer/analysis/dominators_tree.cpp", "optimizer/analysis/linear_order.cpp", "optimizer/analysis/liveness_analyzer.cpp", "optimizer/analysis/loop_analyzer.cpp", "optimizer/analysis/rpo.cpp", "optimizer/ir/basicblock.cpp", "optimizer/ir/dump.cpp", "optimizer/ir/graph.cpp", "optimizer/ir/graph_checker.cpp", "optimizer/ir/graph_cloner.cpp", "optimizer/ir/inst.cpp", "optimizer/ir/locations.cpp", "optimizer/ir_builder/inst_builder.cpp", "optimizer/ir_builder/ir_builder.cpp", "optimizer/optimizations/cleanup.cpp", "optimizer/optimizations/lowering.cpp", "optimizer/optimizations/move_constants.cpp", "optimizer/optimizations/regalloc/interference_graph.cpp", "optimizer/optimizations/regalloc/reg_alloc.cpp", "optimizer/optimizations/regalloc/reg_alloc_base.cpp", "optimizer/optimizations/regalloc/reg_alloc_graph_coloring.cpp", "optimizer/optimizations/regalloc/reg_alloc_resolver.cpp", "optimizer/optimizations/regalloc/reg_alloc_stat.cpp", "optimizer/optimizations/regalloc/reg_map.cpp", "optimizer/optimizations/regalloc/spill_fills_resolver.cpp", "optimizer/optimizations/regalloc/split_resolver.cpp", "optimizer/optimizations/vn.cpp", "optimizer/pass.cpp", "optimizer/pass_manager.cpp", "optimizer/pass_manager_statistics.cpp", ] libarkcompiler_sources += [ "$target_gen_dir/generated/inst_builder_gen.cpp" ] libarkcompiler_configs = [ sdk_libc_secshared_config, ":arkcompiler_public_config", "$ark_root:ark_config", "$ark_root/libpandabase:arkbase_public_config", "$ark_root/libpandafile:arkfile_public_config", ] ohos_shared_library("libarkcompiler") { stack_protector_ret = false sources = libarkcompiler_sources configs = libarkcompiler_configs deps = [ ":codegen_language_extensions_h", ":compiler_events_gen_h", ":compiler_interface_extensions_inl_h", ":compiler_logger_components_inc", ":compiler_options_gen_h", ":cpu_features_gen_inc", ":intrinsics_codegen_ext_inl_h", ":intrinsics_inline_inl", ":intrinsics_ir_build_inl_h", ":intrinsics_ir_build_static_call_inl", ":intrinsics_ir_build_virtual_call_inl", ":intrinsics_stub_inl", ":intrinsics_stub_inl_h", ":ir_dyn_base_types_h", ":isa_gen_libarkcompiler_inst_builder_gen_cpp", ":libarkcompiler_ecma_intrinsics_enum_inl", ":libarkcompiler_generate_ecma_inl", ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_graph_inl", ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_inst_inl", ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_inl", ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_names_inl", ":libarkcompiler_intrinsics_gen_inl_intrinsic_codegen_test_inl", ":libarkcompiler_intrinsics_gen_inl_intrinsic_flags_test_inl", ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl", ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl_h", ":libarkcompiler_intrinsics_gen_inl_intrinsics_enum_inl", ":libarkcompiler_intrinsics_gen_inl_intrinsics_flags_inl", ":libarkcompiler_intrinsics_gen_inl_intrinsics_ir_build_inl", ":libarkcompiler_opcodes_h_IR-instructions_md", ":libarkcompiler_opcodes_h_arch_info_gen_h", ":libarkcompiler_opcodes_h_codegen_arm64_gen_inc", ":libarkcompiler_opcodes_h_inst_checker_gen_h", ":libarkcompiler_opcodes_h_opcodes_h", ":source_languages_h", "$ark_root/libpandabase:libarkbase", "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction-inl_gen_h", "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction_enum_gen_h", "$ark_root/libpandafile:libarkfile", "$ark_root/libpandafile:libarkfile_type_gen_h", sdk_libc_secshared_dep, ] include_dirs = [ "$ark_root/compiler/optimizer" ] output_extension = "so" relative_install_dir = "ark" part_name = "runtime_core" subsystem_name = "arkcompiler" } ohos_static_library("libarkcompiler_frontend_static") { stack_protector_ret = false sources = libarkcompiler_sources configs = libarkcompiler_configs deps = [ ":codegen_language_extensions_h", ":compiler_events_gen_h", ":compiler_interface_extensions_inl_h", ":compiler_logger_components_inc", ":compiler_options_gen_h", ":cpu_features_gen_inc", ":intrinsics_codegen_ext_inl_h", ":intrinsics_inline_inl", ":intrinsics_ir_build_inl_h", ":intrinsics_ir_build_static_call_inl", ":intrinsics_ir_build_virtual_call_inl", ":intrinsics_stub_inl", ":intrinsics_stub_inl_h", ":ir_dyn_base_types_h", ":isa_gen_libarkcompiler_inst_builder_gen_cpp", ":libarkcompiler_ecma_intrinsics_enum_inl", ":libarkcompiler_generate_ecma_inl", ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_graph_inl", ":libarkcompiler_intrinsics_gen_inl_generate_operations_intrinsic_inst_inl", ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_inl", ":libarkcompiler_intrinsics_gen_inl_get_intrinsics_names_inl", ":libarkcompiler_intrinsics_gen_inl_intrinsic_codegen_test_inl", ":libarkcompiler_intrinsics_gen_inl_intrinsic_flags_test_inl", ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl", ":libarkcompiler_intrinsics_gen_inl_intrinsics_codegen_inl_h", ":libarkcompiler_intrinsics_gen_inl_intrinsics_enum_inl", ":libarkcompiler_intrinsics_gen_inl_intrinsics_flags_inl", ":libarkcompiler_intrinsics_gen_inl_intrinsics_ir_build_inl", ":libarkcompiler_opcodes_h_IR-instructions_md", ":libarkcompiler_opcodes_h_arch_info_gen_h", ":libarkcompiler_opcodes_h_codegen_arm64_gen_inc", ":libarkcompiler_opcodes_h_inst_checker_gen_h", ":libarkcompiler_opcodes_h_opcodes_h", ":source_languages_h", "$ark_root/libpandabase:libarkbase_frontend_static", "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction-inl_gen_h", "$ark_root/libpandafile:isa_gen_libarkfile_bytecode_instruction_enum_gen_h", "$ark_root/libpandafile:libarkfile_frontend_static", "$ark_root/libpandafile:libarkfile_type_gen_h", sdk_libc_secshared_dep, ] include_dirs = [ "$ark_root/compiler/optimizer" ] part_name = "runtime_core" subsystem_name = "arkcompiler" } ark_isa_gen("isa_gen_libarkcompiler") { template_files = [ "inst_builder_gen.cpp.erb" ] sources = "optimizer/templates" destination = "$target_gen_dir/generated" } ark_gen("libarkcompiler_intrinsics_gen_inl") { data = "intrinsics.yaml" template_files = [ "intrinsics_enum.inl.erb", "get_intrinsics.inl.erb", "entrypoints_bridge_asm_macro.inl.erb", "intrinsics_ir_build.inl.erb", "get_intrinsics_names.inl.erb", "generate_operations_intrinsic_inst.inl.erb", "generate_operations_intrinsic_graph.inl.erb", "intrinsic_codegen_test.inl.erb", "intrinsic_flags_test.inl.erb", "intrinsics_codegen.inl.h.erb", "intrinsics_codegen.inl.erb", "intrinsics_flags.inl.erb", ] sources = "optimizer/templates/intrinsics" destination = "$target_gen_dir/generated" requires = [ "$ark_root/compiler/optimizer/templates/intrinsics/compiler_intrinsics.rb", ] } ark_isa_gen("libarkcompiler") { template_files = [ "generate_ecma.inl.erb", "ecma_intrinsics_enum.inl.erb", ] sources = "optimizer/templates" requires = [ "$ark_root//assembler/asm_isapi.rb" ] destination = "$target_gen_dir/generated" } ark_gen("libarkcompiler_opcodes_h") { data = "$ark_root/compiler/optimizer/ir/instructions.yaml" template_files = [ "opcodes.h.erb", "arch_info_gen.h.erb", "inst_checker_gen.h.erb", "IR-instructions.md.erb", "codegen_arm64_gen.inc.erb", ] sources = "optimizer/templates" destination = "$target_gen_dir/generated" requires = [ "$ark_root/compiler/optimizer/templates/instructions.rb" ] } ark_gen_file("compiler_options_gen_h") { template_file = "$ark_root/templates/options/options.h.erb" data_file = "compiler.yaml" requires = [ "$ark_root/templates/common.rb" ] output_file = "$target_gen_dir/generated/compiler_options_gen.h" } ark_gen_file("cpu_features_gen_inc") { template_file = "$ark_root/templates/cpu_features.inc.erb" data_file = "compiler.yaml" requires = [ "$ark_root/templates/common.rb" ] output_file = "$target_gen_dir/generated/cpu_features.inc" } ark_gen_file("compiler_events_gen_h") { template_file = "$ark_root/templates/events/events.h.erb" data_file = "compiler.yaml" requires = [ "$ark_root/templates/common.rb" ] output_file = "$target_gen_dir/generated/compiler_events_gen.h" } ark_gen_file("compiler_logger_components_inc") { template_file = "$ark_root/templates/logger_components/logger_components.inc.erb" data_file = "compiler.yaml" requires = [ "$ark_root/templates/common.rb" ] output_file = "$target_gen_dir/generated/compiler_logger_components.inc" } ark_gen_file("intrinsics_stub_inl") { extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] template_file = "optimizer/templates/intrinsics/intrinsics_stub.inl.erb" data_file = "$target_gen_dir/../plugin_options.yaml" requires = [ "$ark_root/templates/plugin_options.rb" ] output_file = "$target_gen_dir/generated/intrinsics_stub.inl" } ark_gen_file("intrinsics_stub_inl_h") { extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] template_file = "optimizer/templates/intrinsics/intrinsics_stub.inl.h.erb" data_file = "$target_gen_dir/../plugin_options.yaml" requires = [ "$ark_root/templates/plugin_options.rb" ] output_file = "$target_gen_dir/generated/intrinsics_stub.inl.h" } ark_gen_file("intrinsics_codegen_ext_inl_h") { extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] template_file = "optimizer/templates/intrinsics/intrinsics_codegen_ext.inl.h.erb" data_file = "$target_gen_dir/../plugin_options.yaml" requires = [ "$ark_root/templates/plugin_options.rb" ] output_file = "$target_gen_dir/generated/intrinsics_codegen_ext.inl.h" } ark_gen_file("intrinsics_inline_inl") { extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] template_file = "optimizer/templates/intrinsics/intrinsics_inline.inl.erb" data_file = "$target_gen_dir/../plugin_options.yaml" requires = [ "$ark_root/templates/plugin_options.rb" ] output_file = "$target_gen_dir/generated/intrinsics_inline.inl" } ark_gen_file("intrinsics_ir_build_inl_h") { extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] template_file = "optimizer/templates/intrinsics/intrinsics_ir_build.inl.h.erb" data_file = "$target_gen_dir/../plugin_options.yaml" requires = [ "$ark_root/templates/plugin_options.rb" ] output_file = "$target_gen_dir/generated/intrinsics_ir_build.inl.h" } ark_gen_file("intrinsics_ir_build_static_call_inl") { extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] template_file = "optimizer/templates/intrinsics/intrinsics_ir_build_static_call.inl.erb" data_file = "$target_gen_dir/../plugin_options.yaml" requires = [ "$ark_root/templates/plugin_options.rb" ] output_file = "$target_gen_dir/generated/intrinsics_ir_build_static_call.inl" } ark_gen_file("intrinsics_ir_build_virtual_call_inl") { extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] template_file = "optimizer/templates/intrinsics/intrinsics_ir_build_virtual_call.inl.erb" data_file = "$target_gen_dir/../plugin_options.yaml" requires = [ "$ark_root/templates/plugin_options.rb" ] output_file = "$target_gen_dir/generated/intrinsics_ir_build_virtual_call.inl" } ark_gen_file("ir_dyn_base_types_h") { extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] template_file = "optimizer/templates/ir-dyn-base-types.h.erb" data_file = "$target_gen_dir/../plugin_options.yaml" requires = [ "$ark_root/templates/plugin_options.rb" ] output_file = "$target_gen_dir/generated/ir-dyn-base-types.h" } ark_gen_file("source_languages_h") { extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] template_file = "optimizer/templates/source_languages.h.erb" data_file = "$target_gen_dir/../plugin_options.yaml" requires = [ "$ark_root/templates/plugin_options.rb" ] output_file = "$target_gen_dir/generated/source_languages.h" } ark_gen_file("codegen_language_extensions_h") { extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] template_file = "optimizer/templates/codegen_language_extensions.h.erb" data_file = "$target_gen_dir/../plugin_options.yaml" requires = [ "$ark_root/templates/plugin_options.rb" ] output_file = "$target_gen_dir/generated/codegen_language_extensions.h" } ark_gen_file("compiler_interface_extensions_inl_h") { extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] template_file = "optimizer/templates/compiler_interface_extensions.inl.h.erb" data_file = "$target_gen_dir/../plugin_options.yaml" requires = [ "$ark_root/templates/plugin_options.rb" ] output_file = "$target_gen_dir/generated/compiler_interface_extensions.inl.h" }