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_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_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_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_x86_32_srcs",
76    srcs: ["unmap_and_exit_x86_32.S"],
77}
78
79filegroup {
80    name: "libberberis_guest_os_primitives_common_x86_64_srcs",
81    srcs: ["unmap_and_exit_x86_64.S"],
82}
83
84// Common sources to be shared across arch-specific libraries.
85cc_defaults {
86    name: "libberberis_guest_os_primitives_common_defaults",
87    defaults: ["berberis_defaults"],
88    host_supported: true,
89    srcs: [":libberberis_guest_os_primitives_common_srcs"],
90    arch: {
91        x86: {
92            srcs: [":libberberis_guest_os_primitives_common_x86_32_srcs"],
93        },
94        x86_64: {
95            srcs: [":libberberis_guest_os_primitives_common_x86_64_srcs"],
96        },
97    },
98    header_libs: [
99        "libberberis_base_headers",
100        "libberberis_guest_os_primitives_headers",
101        "libberberis_guest_state_headers",
102        "libberberis_instrument_headers",
103        "libberberis_runtime_headers",
104        "libberberis_runtime_primitives_headers",
105        "//frameworks/libs/native_bridge_support:native_bridge_guest_linker_headers",
106    ],
107    export_header_lib_headers: ["libberberis_guest_os_primitives_headers"],
108    include_dirs: [
109        // private/bionic_constants.h
110        "bionic/libc",
111    ],
112}
113
114// This hidden filegroup ensures valid file paths for modules depending on
115// libberberis_guest_os_primitives_common_arch_defaults.
116filegroup {
117    name: "_libberberis_guest_os_primitives_common_arch_srcs",
118    srcs: [
119        "guest_signal_action_arch.cc",
120        "guest_signal_handling_arch.cc",
121        "guest_thread_pthread_create_arch.cc",
122    ],
123}
124
125// Similar to the filegroup above. Hidden header lib for modules depending on
126// libberberis_guest_os_primitives_common_arch_defaults.
127cc_library_headers {
128    name: "_libberberis_guest_os_primitives_local_headers",
129    defaults: ["berberis_defaults"],
130    host_supported: true,
131    export_include_dirs: ["."],
132}
133
134// Contains sources that are textually common, but must be compiled with arch-
135// specific headers, which makes object code arch-specific. In other words,
136// only include this module in guest arch-specific libraries.
137cc_defaults {
138    name: "libberberis_guest_os_primitives_common_arch_defaults",
139    srcs: [":_libberberis_guest_os_primitives_common_arch_srcs"],
140    header_libs: [
141        "_libberberis_guest_os_primitives_local_headers",
142        "libberberis_base_headers",
143        "libberberis_guest_abi_headers",
144        "libberberis_guest_state_headers",
145    ],
146}
147
148cc_library_static {
149    name: "libberberis_guest_os_primitives_riscv64",
150    defaults: [
151        "berberis_defaults_64",
152        "libberberis_guest_os_primitives_common_defaults",
153        "libberberis_guest_os_primitives_common_arch_defaults",
154    ],
155    host_supported: true,
156    srcs: [
157        "riscv64/gen_syscall_numbers.cc",
158        "riscv64/guest_setjmp.cc",
159        "riscv64/guest_signal.cc",
160    ],
161    local_include_dirs: ["riscv64"],
162    header_libs: [
163        "libberberis_guest_abi_riscv64_headers",
164        "libberberis_guest_os_primitives_headers",
165        "libberberis_guest_os_primitives_riscv64_headers",
166        "libberberis_guest_state_headers",
167        "libberberis_guest_state_riscv64_headers",
168    ],
169    export_header_lib_headers: [
170        "libberberis_guest_os_primitives_headers",
171        "libberberis_guest_os_primitives_riscv64_headers",
172    ],
173}
174
175filegroup {
176    name: "libberberis_guest_os_primitives_unit_tests_srcs",
177    srcs: [
178        "guest_map_shadow_test.cc",
179        "guest_signal_action_test.cc",
180        "guest_thread_test.cc",
181    ],
182}
183
184cc_defaults {
185    name: "libberberis_guest_os_primitives_unit_tests_defaults",
186    srcs: [":libberberis_guest_os_primitives_unit_tests_srcs"],
187    header_libs: [
188        "libberberis_base_headers",
189        "libberberis_guest_os_primitives_headers",
190        "libberberis_guest_state_headers",
191        "libberberis_runtime_headers",
192    ],
193}
194
195cc_test_library {
196    name: "libberberis_guest_os_primitives_unit_tests",
197    defaults: [
198        "berberis_test_library_defaults_64",
199        "libberberis_guest_os_primitives_unit_tests_defaults",
200    ],
201    header_libs: [
202        "libberberis_guest_os_primitives_riscv64_headers",
203    ],
204}
205