1# Copyright (c) 2021-2022 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") 15import("//build/ohos.gni") 16 17config("irtoc_public_config") { 18 include_dirs = [ 19 "$root_build_dir/generated", 20 "$target_gen_dir", 21 "$ark_root/irtoc", 22 "$ark_third_party_root/elfio", 23 ] 24} 25 26irtoc_scripts = [ 27 rebase_path("$ark_root/irtoc/scripts/allocation.irt", root_build_dir), 28 rebase_path("$ark_root/irtoc/scripts/resolvers.irt", root_build_dir), 29 rebase_path("$ark_root/irtoc/scripts/interpreter.irt", root_build_dir), 30 rebase_path("$ark_root/irtoc/scripts/monitors.irt", root_build_dir), 31 rebase_path("$ark_root/irtoc/scripts/check_cast.irt", root_build_dir), 32] 33 34plugin_irts = [] 35foreach(plugin, enabled_plugins) { 36 plugin_dir = "$ark_root/plugins/$plugin" 37 source_files = read_file("$plugin_dir/subproject_sources.gn", "scope") 38 if (defined(source_files.irtoc_scripts)) { 39 scripts = read_file("$plugin_dir/${source_files.irtoc_scripts}", "scope") 40 foreach(script, scripts.srcs) { 41 irtoc_scripts += 42 [ rebase_path("$plugin_dir/irtoc_scripts/$script", root_build_dir) ] 43 } 44 } 45 46 if (defined(source_files.irtoc_plugins)) { 47 irtoc_plugins = 48 read_file("$plugin_dir/${source_files.irtoc_plugins}", "scope") 49 foreach(irtoc_plugin, irtoc_plugins.srcs) { 50 plugin_irts += 51 [ rebase_path("$plugin_dir/irtoc_scripts/$irtoc_plugin", ark_root) ] 52 } 53 } 54 55 source_files = { 56 } 57} 58 59irtoc_file_plugin = "$root_gen_dir/generated/irtoc_plugin.txt" 60write_file(irtoc_file_plugin, plugin_irts) 61 62action("irtoc_compile") { 63 script = "$ark_root/irtoc/lang/irtoc.rb" 64 outputs = [ "$target_gen_dir/generated/irtoc_code.cpp" ] 65 irt_args = irtoc_scripts 66 67 args = [ 68 "--input", 69 string_join(":", irt_args), 70 "--output", 71 rebase_path("$target_gen_dir/generated/irtoc_code.cpp", root_build_dir), 72 "--ark_source_dir", 73 rebase_path("$ark_root", root_build_dir), 74 "--isa", 75 rebase_path("$root_gen_dir/isa/isa.yaml", root_build_dir), 76 ] 77 78 if (!is_debug) { 79 args += [ 80 "--definitions", 81 "NDEBUG", 82 ] 83 } 84 85 args += [ 86 "--arch", 87 target_cpu, 88 "--ir-api", 89 "ir-constructor", 90 "--plugins", 91 rebase_path(irtoc_file_plugin, root_build_dir), 92 ] 93 94 deps = [ "$ark_root/isa:isa_combine" ] 95} 96 97ark_gen_file("irtoc_options_h") { 98 template_file = "$ark_root/templates/options/options.h.erb" 99 data_file = "backend/options.yaml" 100 requires = [ "$ark_root/templates/common.rb" ] 101 output_file = "$target_gen_dir/generated/irtoc_options_gen.h" 102} 103 104ohos_executable("irtoc") { 105 sources = [ 106 "$target_gen_dir/generated/irtoc_code.cpp", 107 "backend/compilation_unit.cpp", 108 "backend/compiler/codegen_boundary.cpp", 109 "backend/compiler/codegen_fastpath.cpp", 110 "backend/irtoc.cpp", 111 ] 112 configs = [ 113 ":irtoc_public_config", 114 "$ark_root:ark_config", 115 "$ark_root/libpandabase:arkbase_public_config", 116 "$ark_root/libpandafile:arkfile_public_config", 117 "$ark_root/compiler:arkcompiler_public_config", 118 "$ark_root/compiler/optimizer/code_generator:arkencoder_config", 119 "$ark_root/runtime/asm_defines:asmdefines_public_config", 120 "$ark_root/runtime:arkruntime_public_config", 121 sdk_libc_secshared_config, 122 ] 123 124 deps = [ 125 ":irtoc_options_h", 126 "$ark_root/compiler:libarkcompiler_frontend_static", 127 "$ark_root/cross_values:cross_values_getters_generate(${default_toolchain})", 128 "$ark_root/irtoc:irtoc_compile", 129 "$ark_root/libpandabase:libarkbase_frontend_static", 130 "$ark_root/libpandafile:libarkfile_frontend_static", 131 "$ark_root/runtime/asm_defines:asm_defines_generator", 132 sdk_libc_secshared_dep, 133 ] 134 135 libs = platform_libs 136 ldflags = platform_ldflags 137 138 install_enable = false 139 part_name = "runtime_core" 140 subsystem_name = "arkcompiler" 141} 142 143action("irtoc_generate") { 144 script = "irtoc_runner.sh" 145 outputs = [ "$root_gen_dir/generated/irtoc_lib.o" ] 146 if (ark_standalone_build) { 147 irtoc_cmd = "./irtoc" 148 } else { 149 irtoc_cmd = "./clang_x64/arkcompiler/runtmie_core/irtoc" 150 } 151 args = [ 152 "$irtoc_cmd", 153 "--irtoc-output ", 154 rebase_path("$root_gen_dir/generated/irtoc_lib.o", root_build_dir), 155 "--compiler-cross-arch", 156 current_cpu, 157 ] 158 deps = [ "$ark_root/irtoc:irtoc(${host_toolchain})" ] 159} 160