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/static_core/ark_config.gni") 15import("$ark_root/plugins/plugins.gni") 16 17if (ark_standalone_build) { 18 import("$build_root/ark.gni") 19} else { 20 import("//build/ohos.gni") 21} 22 23ark_gen_file("type_to_pandasm_type_cpp") { 24 template_file = 25 "$ark_root/disassembler/templates/type_to_pandasm_type.cpp.erb" 26 data = [ "$ark_root/libpandafile/types.yaml" ] 27 api = [ "$ark_root/libpandafile/types.rb" ] 28 output_file = "$target_gen_dir/type_to_pandasm_type.cpp" 29} 30 31ark_gen_file("disasm_plugins_inc") { 32 extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] 33 template_file = "templates/disasm_plugins.inc.erb" 34 data = [ ark_plugin_options_yaml ] 35 api = [ "$ark_root/templates/plugin_options.rb" ] 36 output_file = "$target_gen_dir/disasm_plugins.inc" 37} 38 39ark_gen_file("get_language_specific_metadata_inc") { 40 extra_dependencies = [ "$ark_root:concat_plugins_yamls" ] 41 template_file = "templates/get_language_specific_metadata.inc.erb" 42 data = [ ark_plugin_options_yaml ] 43 api = [ "$ark_root/templates/plugin_options.rb" ] 44 output_file = "$target_gen_dir/get_language_specific_metadata.inc" 45} 46 47config("arkdisassembler_public_config") { 48 include_dirs = [ 49 "$ark_root/assembler", 50 "$ark_root_gen_dir/assembler", 51 "$ark_root_gen_dir/disassembler", 52 ] 53 include_dirs += 54 get_path_info(get_target_outputs(":disasm_plugins_inc"), "dir") 55} 56 57arkdisassembler_sources = [ 58 "$target_gen_dir/bc_ins_to_pandasm_ins.cpp", 59 "$target_gen_dir/opcode_translator.cpp", 60 "$target_gen_dir/type_to_pandasm_type.cpp", 61 "disasm_backed_debug_info_extractor.cpp", 62 "disassembler.cpp", 63] 64arkdisassembler_sources += plugin_arkdisassembler_sources 65 66arkdisassembler_configs = [ 67 ":arkdisassembler_public_config", 68 "$ark_root:ark_config", 69 "$ark_root/libpandabase:arkbase_public_config", 70 "$ark_root/assembler:arkassembler_public_config", 71 "$ark_root/libpandafile:arkfile_public_config", 72] 73 74ohos_shared_library("arktsdisassembler") { 75 sources = arkdisassembler_sources 76 77 include_dirs = [ 78 "$ark_root/disassembler", 79 "$target_gen_dir", 80 ] 81 82 configs = arkdisassembler_configs 83 84 deps = [ 85 ":disasm_plugins_inc", 86 ":get_language_specific_metadata_inc", 87 ":isa_gen_ark_disam_bc_ins_to_pandasm_ins_cpp", 88 ":isa_gen_ark_disam_opcode_translator_cpp", 89 ":type_to_pandasm_type_cpp", 90 "$ark_root/assembler:libarktsassembler", 91 "$ark_root/libpandabase:libarktsbase", 92 "$ark_root/libpandafile:libarktsfile", 93 ] 94 95 external_deps = [ sdk_libc_secshared_ext_dep ] 96 97 output_extension = "so" 98 if (is_mingw) { 99 output_extension = "dll" 100 } 101 part_name = ark_part_name 102 subsystem_name = "$ark_subsystem_name" 103} 104 105ohos_static_library("arktsdisassembler_frontend_static") { 106 sources = arkdisassembler_sources 107 108 include_dirs = [ 109 "$ark_root/disassembler", 110 "$target_gen_dir", 111 ] 112 113 configs = arkdisassembler_configs 114 115 deps = [ 116 ":disasm_plugins_inc", 117 ":get_language_specific_metadata_inc", 118 ":isa_gen_ark_disam_bc_ins_to_pandasm_ins_cpp", 119 ":isa_gen_ark_disam_opcode_translator_cpp", 120 ":type_to_pandasm_type_cpp", 121 "$ark_root/assembler:libarktsassembler_frontend_static", 122 "$ark_root/libpandabase:libarktsbase_frontend_static", 123 "$ark_root/libpandafile:libarktsfile_frontend_static", 124 ] 125 126 external_deps = [ sdk_libc_secshared_ext_dep ] 127 128 part_name = ark_part_name 129 subsystem_name = ark_subsystem_name 130} 131 132ohos_executable("arkts_disasm") { 133 sources = [ "disasm.cpp" ] 134 135 include_dirs = [ 136 "$target_gen_dir", 137 "$ark_root_gen_dir/libpandabase", 138 ] 139 140 configs = [ 141 "$ark_root:ark_config", 142 "$ark_root/assembler:arkassembler_public_config", 143 "$ark_root/libpandabase:arkbase_public_config", 144 "$ark_root/libpandafile:arkfile_public_config", 145 ] 146 147 deps = [ 148 ":arktsdisassembler_frontend_static", 149 "$ark_root/assembler:libarktsassembler_frontend_static", 150 "$ark_root/libpandabase:libarktsbase_frontend_static", 151 "$ark_root/libpandafile:libarktsfile_frontend_static", 152 ] 153 external_deps = [ sdk_libc_secshared_ext_dep ] 154 155 libs = platform_libs 156 ldflags = platform_ldflags 157 158 install_enable = true 159 part_name = ark_part_name 160 subsystem_name = "$ark_subsystem_name" 161} 162 163ark_isa_gen("isa_gen_ark_disam") { 164 template_files = [ 165 "opcode_translator.cpp.erb", 166 "bc_ins_to_pandasm_ins.cpp.erb", 167 ] 168 sources = "templates" 169 destination = "$target_gen_dir" 170 requires = [ 171 "$ark_root//assembler/asm_isapi.rb", 172 "$ark_root//libpandafile/pandafile_isapi.rb", 173 ] 174} 175