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 "signal_queue_test.cc", 132 "table_of_tables_test.cc", 133 ], 134 header_libs: [ 135 "berberis_test_utils_headers", 136 "libberberis_guest_state_riscv64_headers", 137 "libberberis_runtime_primitives_headers", 138 ], 139 // libgmock does not have header_lib 140 static_libs: ["libgmock"], 141} 142 143cc_test_library { 144 name: "libberberis_runtime_primitives_riscv64_unit_tests", 145 defaults: ["berberis_test_library_defaults_64"], 146 host_supported: true, 147 srcs: [ 148 "memory_region_reservation_test.cc", 149 // Translation cache test relies on implementation of runtime_library 150 // function pointers to link. 151 "translation_cache_test.cc", 152 "virtual_guest_call_frame_riscv64_test.cc", 153 ], 154 header_libs: [ 155 "berberis_test_utils_headers", 156 "libberberis_guest_state_riscv64_headers", 157 "libberberis_runtime_primitives_headers", 158 ], 159} 160 161cc_library_static { 162 name: "libberberis_elf_backed_exec_region", 163 defaults: ["berberis_all_hosts_defaults"], 164 host_supported: true, 165 target: { 166 bionic: { 167 srcs: ["exec_region_elf_backed.cc"], 168 }, 169 }, 170 171 header_libs: [ 172 "libberberis_base_headers", 173 "libberberis_runtime_primitives_headers", 174 "libberberis_tinyloader_headers", 175 ], 176} 177 178// ATTENTION: do not use it outside of static tests! 179cc_library_static { 180 name: "libberberis_elf_backed_exec_region_for_static_tests", 181 defaults: ["berberis_all_hosts_defaults"], 182 host_supported: true, 183 target: { 184 bionic: { 185 srcs: ["exec_region_elf_backed_for_static_tests.cc"], 186 }, 187 }, 188 189 header_libs: [ 190 "libberberis_base_headers", 191 "libberberis_runtime_primitives_headers", 192 ], 193} 194 195cc_test_library { 196 name: "libberberis_elf_backed_exec_region_unit_tests", 197 defaults: ["berberis_test_library_defaults"], 198 target: { 199 bionic: { 200 srcs: ["exec_region_elf_backed_test.cc"], 201 }, 202 }, 203 header_libs: [ 204 "libberberis_base_headers", 205 "libberberis_runtime_primitives_headers", 206 ], 207} 208