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