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