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_guest_os_primitives_headers", 22 defaults: ["berberis_all_hosts_defaults"], 23 host_supported: true, 24 export_include_dirs: ["include"], 25 header_libs: [ 26 "libberberis_base_headers", 27 "libberberis_guest_state_headers", 28 "libberberis_runtime_primitives_headers", 29 ], 30 export_header_lib_headers: [ 31 "libberberis_base_headers", 32 "libberberis_guest_state_headers", 33 "libberberis_runtime_primitives_headers", 34 ], 35} 36 37// Local headers for compiling guest_os_primitives modules only. 38// Don't depend on these headers in other modules. 39cc_library_headers { 40 name: "_libberberis_guest_os_primitives_private_headers", 41 defaults: ["berberis_all_hosts_defaults"], 42 host_supported: true, 43 export_include_dirs: ["."], 44} 45 46cc_library_headers { 47 name: "libberberis_guest_os_primitives_riscv64_headers", 48 defaults: ["berberis_all_hosts_defaults"], 49 host_supported: true, 50 export_include_dirs: ["riscv64/include"], 51 header_libs: [ 52 "libberberis_guest_os_primitives_headers", 53 ], 54 export_header_lib_headers: [ 55 "libberberis_guest_os_primitives_headers", 56 ], 57} 58 59filegroup { 60 name: "libberberis_guest_os_primitives_common_srcs", 61 srcs: [ 62 "guest_map_shadow.cc", 63 "guest_signal_action.cc", 64 "guest_signal_handling.cc", 65 "guest_thread.cc", 66 "guest_thread_clone.cc", 67 "guest_thread_key.cc", 68 "guest_thread_manager.cc", 69 "guest_thread_map.cc", 70 "guest_thread_pthread_create.cc", 71 ], 72} 73 74filegroup { 75 name: "libberberis_guest_os_primitives_common_arm64_srcs", 76 srcs: ["unmap_and_exit_arm64.S"], 77} 78 79filegroup { 80 name: "libberberis_guest_os_primitives_common_x86_32_srcs", 81 srcs: ["unmap_and_exit_x86_32.S"], 82} 83 84filegroup { 85 name: "libberberis_guest_os_primitives_common_x86_64_srcs", 86 srcs: ["unmap_and_exit_x86_64.S"], 87} 88 89filegroup { 90 name: "libberberis_guest_os_primitives_common_riscv64_srcs", 91 srcs: ["unmap_and_exit_riscv64.cc"], 92} 93 94// Common sources to be shared across arch-specific libraries. 95cc_defaults { 96 name: "libberberis_guest_os_primitives_common_defaults", 97 defaults: ["berberis_all_hosts_defaults"], 98 host_supported: true, 99 srcs: [":libberberis_guest_os_primitives_common_srcs"], 100 arch: { 101 arm64: { 102 srcs: [":libberberis_guest_os_primitives_common_arm64_srcs"], 103 }, 104 x86: { 105 srcs: [":libberberis_guest_os_primitives_common_x86_32_srcs"], 106 }, 107 x86_64: { 108 srcs: [":libberberis_guest_os_primitives_common_x86_64_srcs"], 109 }, 110 riscv64: { 111 srcs: [":libberberis_guest_os_primitives_common_riscv64_srcs"], 112 }, 113 }, 114 header_libs: [ 115 "libberberis_base_headers", 116 "libberberis_guest_os_primitives_headers", 117 "libberberis_guest_state_headers", 118 "libberberis_instrument_headers", 119 "libberberis_runtime_headers", 120 "libberberis_runtime_primitives_headers", 121 "//frameworks/libs/native_bridge_support:native_bridge_guest_linker_headers", 122 ], 123 export_header_lib_headers: ["libberberis_guest_os_primitives_headers"], 124 include_dirs: [ 125 // private/bionic_constants.h 126 "bionic/libc", 127 ], 128} 129 130// This hidden filegroup ensures valid file paths for modules depending on 131// libberberis_guest_os_primitives_common_arch_defaults. 132filegroup { 133 name: "_libberberis_guest_os_primitives_common_arch_srcs", 134 srcs: [ 135 "guest_signal_action_arch.cc", 136 "guest_signal_handling_arch.cc", 137 "guest_thread_pthread_create_arch.cc", 138 ], 139} 140 141// Similar to the filegroup above. Hidden header lib for modules depending on 142// libberberis_guest_os_primitives_common_arch_defaults. 143cc_library_headers { 144 name: "_libberberis_guest_os_primitives_local_headers", 145 defaults: ["berberis_all_hosts_defaults"], 146 host_supported: true, 147 export_include_dirs: ["."], 148} 149 150// Contains sources that are textually common, but must be compiled with arch- 151// specific headers, which makes object code arch-specific. In other words, 152// only include this module in guest arch-specific libraries. 153cc_defaults { 154 name: "libberberis_guest_os_primitives_common_arch_defaults", 155 srcs: [":_libberberis_guest_os_primitives_common_arch_srcs"], 156 header_libs: [ 157 "_libberberis_guest_os_primitives_local_headers", 158 "libberberis_base_headers", 159 "libberberis_guest_abi_headers", 160 "libberberis_guest_state_headers", 161 ], 162} 163 164cc_library_static { 165 name: "libberberis_guest_os_primitives_riscv64", 166 defaults: [ 167 "berberis_all_hosts_defaults_64", 168 "libberberis_guest_os_primitives_common_defaults", 169 "libberberis_guest_os_primitives_common_arch_defaults", 170 ], 171 host_supported: true, 172 arch: { 173 arm64: { 174 srcs: [ 175 "riscv64/gen_syscall_numbers_arm64.cc", 176 ], 177 }, 178 x86_64: { 179 srcs: [ 180 "riscv64/gen_syscall_numbers_x86_64.cc", 181 ], 182 }, 183 }, 184 srcs: [ 185 "riscv64/guest_setjmp.cc", 186 "riscv64/guest_signal.cc", 187 ], 188 local_include_dirs: ["riscv64"], 189 header_libs: [ 190 "libberberis_guest_abi_riscv64_headers", 191 "libberberis_guest_os_primitives_headers", 192 "libberberis_guest_os_primitives_riscv64_headers", 193 "libberberis_guest_state_headers", 194 "libberberis_guest_state_riscv64_headers", 195 ], 196 export_header_lib_headers: [ 197 "libberberis_guest_os_primitives_headers", 198 "libberberis_guest_os_primitives_riscv64_headers", 199 ], 200} 201 202filegroup { 203 name: "libberberis_guest_os_primitives_unit_tests_srcs", 204 srcs: [ 205 "guest_map_shadow_test.cc", 206 "guest_signal_action_test.cc", 207 "guest_thread_test.cc", 208 ], 209} 210 211cc_defaults { 212 name: "libberberis_guest_os_primitives_unit_tests_defaults", 213 srcs: [":libberberis_guest_os_primitives_unit_tests_srcs"], 214 header_libs: [ 215 "libberberis_base_headers", 216 "libberberis_guest_os_primitives_headers", 217 "libberberis_guest_state_headers", 218 "libberberis_runtime_headers", 219 ], 220} 221 222cc_test_library { 223 name: "libberberis_guest_os_primitives_unit_tests", 224 defaults: [ 225 "berberis_test_library_defaults_64", 226 "libberberis_guest_os_primitives_unit_tests_defaults", 227 ], 228 header_libs: [ 229 "libberberis_guest_os_primitives_riscv64_headers", 230 ], 231} 232