1// Copyright (C) 2023 The Android Open Source Project 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14// 15 16package { 17 default_applicable_licenses: ["Android-Apache-2.0"], 18} 19 20cc_library_headers { 21 name: "libberberis_runtime_primitives_headers", 22 defaults: ["berberis_all_hosts_defaults"], 23 host_supported: true, 24 export_include_dirs: ["include"], 25 header_libs: [ 26 "libberberis_assembler_headers", 27 "libberberis_base_headers", 28 "libberberis_guest_state_headers", 29 ], 30 export_header_lib_headers: [ 31 "libberberis_assembler_headers", 32 "libberberis_base_headers", 33 "libberberis_guest_state_headers", 34 ], 35} 36 37cc_library_static { 38 name: "libberberis_runtime_primitives", 39 defaults: ["berberis_all_hosts_defaults"], 40 host_supported: true, 41 srcs: [ 42 "code_pool.cc", 43 "crash_reporter.cc", 44 "exec_region_anonymous.cc", 45 "guest_function_wrapper_impl.cc", 46 "host_entries.cc", 47 "host_function_wrapper_impl.cc", 48 "known_guest_function_wrapper.cc", 49 "platform.cc", 50 "profiler_interface.cc", 51 "recovery_code.cc", 52 "signal_queue.cc", 53 "translation_cache.cc", 54 "virtual_guest_call_frame.cc", 55 ], 56 header_libs: [ 57 "libberberis_code_gen_lib_headers", 58 "libberberis_base_headers", 59 "libberberis_guest_abi_headers", 60 "libberberis_guest_state_headers", 61 "libberberis_instrument_headers", 62 "libberberis_runtime_primitives_headers", 63 ], 64 export_header_lib_headers: ["libberberis_runtime_primitives_headers"], 65} 66 67filegroup { 68 name: "berberis_memory_region_reservation_srcs", 69 srcs: [ 70 "memory_region_reservation.cc", 71 ], 72} 73 74cc_defaults { 75 name: "berberis_memory_region_reservation_defaults", 76 defaults: ["berberis_all_hosts_defaults"], 77 host_supported: true, 78 srcs: [":berberis_memory_region_reservation_srcs"], 79 header_libs: [ 80 "libberberis_runtime_primitives_headers", 81 ], 82 arch: { 83 x86_64: { 84 cflags: [ 85 // CMPXCHG16B is not enabled for host by default at the moment. 86 // It should be always available for our use cases, though. 87 // TODO(b/123428084): Remove if it becomes the default. 88 "-mcx16", 89 ], 90 }, 91 }, 92 // Targets using these defaults must provide the following guest-specific fields: 93 // header_libs: ["libberberis_guest_state_<guest>_headers"], 94 // export_header_lib_headers: ["libberberis_guest_state_<guest>_headers"], 95} 96 97cc_library_static { 98 name: "libberberis_runtime_primitives_riscv64", 99 defaults: [ 100 "berberis_all_hosts_defaults_64", 101 "berberis_memory_region_reservation_defaults", 102 ], 103 host_supported: true, 104 srcs: [ 105 "checks_riscv64.cc", 106 "interpret_helpers_riscv64.cc", 107 "virtual_guest_call_frame_riscv64.cc", 108 ], 109 whole_static_libs: [ 110 "libberberis_runtime_primitives", 111 ], 112 header_libs: [ 113 "libberberis_assembler_headers", 114 "libberberis_base_headers", 115 "libberberis_guest_state_riscv64_headers", 116 "libberberis_runtime_primitives_headers", 117 ], 118 export_header_lib_headers: [ 119 "libberberis_runtime_primitives_headers", 120 "libberberis_guest_state_riscv64_headers", 121 ], 122} 123 124cc_test_library { 125 name: "libberberis_runtime_primitives_unit_tests", 126 defaults: ["berberis_test_library_defaults"], 127 host_supported: true, 128 srcs: [ 129 "code_pool_test.cc", 130 "exec_region_anonymous_test.cc", 131 "guest_code_region_test.cc", 132 "signal_queue_test.cc", 133 "table_of_tables_test.cc", 134 ], 135 header_libs: [ 136 "berberis_test_utils_headers", 137 "libberberis_guest_state_riscv64_headers", 138 "libberberis_runtime_primitives_headers", 139 ], 140 // libgmock does not have header_lib 141 static_libs: ["libgmock"], 142} 143 144cc_test_library { 145 name: "libberberis_runtime_primitives_riscv64_unit_tests", 146 defaults: ["berberis_test_library_defaults_64"], 147 host_supported: true, 148 srcs: [ 149 "memory_region_reservation_test.cc", 150 // Translation cache test relies on implementation of runtime_library 151 // function pointers to link. 152 "translation_cache_test.cc", 153 "virtual_guest_call_frame_riscv64_test.cc", 154 ], 155 header_libs: [ 156 "berberis_test_utils_headers", 157 "libberberis_guest_state_riscv64_headers", 158 "libberberis_runtime_primitives_headers", 159 ], 160} 161 162cc_library_static { 163 name: "libberberis_elf_backed_exec_region", 164 defaults: ["berberis_all_hosts_defaults"], 165 host_supported: true, 166 target: { 167 bionic: { 168 srcs: ["exec_region_elf_backed.cc"], 169 }, 170 }, 171 172 header_libs: [ 173 "libberberis_base_headers", 174 "libberberis_runtime_primitives_headers", 175 "libberberis_tinyloader_headers", 176 ], 177} 178 179// ATTENTION: do not use it outside of static tests! 180cc_library_static { 181 name: "libberberis_elf_backed_exec_region_for_static_tests", 182 defaults: ["berberis_all_hosts_defaults"], 183 host_supported: true, 184 target: { 185 bionic: { 186 srcs: ["exec_region_elf_backed_for_static_tests.cc"], 187 }, 188 }, 189 190 header_libs: [ 191 "libberberis_base_headers", 192 "libberberis_runtime_primitives_headers", 193 ], 194} 195 196cc_test_library { 197 name: "libberberis_elf_backed_exec_region_unit_tests", 198 defaults: ["berberis_test_library_defaults"], 199 target: { 200 bionic: { 201 srcs: ["exec_region_elf_backed_test.cc"], 202 }, 203 }, 204 header_libs: [ 205 "libberberis_base_headers", 206 "libberberis_runtime_primitives_headers", 207 ], 208} 209