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_defaults { 21 name: "berberis_guest_agnostic_defaults", 22 cflags: [ 23 "-Wall", 24 "-Werror", 25 "-Wextra", 26 "-Wmost", 27 "-Wover-aligned", 28 "-Wunused", 29 "-Wimplicit-fallthrough", 30 "-Werror=reorder-init-list", 31 "-Wdefaulted-function-deleted", 32 ], 33 // It is tempting to disable builds by default and explicitly enable only x86. 34 // Unfortunately that way disabling darwin has no effect. So instead 35 // we disable unneeded targets individually. 36 target: { 37 darwin: { 38 enabled: false, 39 }, 40 }, 41 arch: { 42 arm: { 43 enabled: false, 44 }, 45 arm64: { 46 enabled: false, 47 }, 48 riscv64: { 49 // TODO(b/123294366): disconnect guest arch from host arch! 50 cflags: [ 51 "-DBERBERIS_GUEST_LP64=1", 52 ], 53 }, 54 x86_64: { 55 // TODO(b/123294366): disconnect guest arch from host arch! 56 cflags: [ 57 "-DBERBERIS_GUEST_LP64=1", 58 ], 59 }, 60 }, 61 compile_multilib: "both", 62 // Only check our headers. 63 tidy_flags: [ 64 "-header-filter=^frameworks/libs/binary_translation/", 65 ], 66 tidy_checks: [ 67 "modernize*", 68 "-modernize-use-trailing-return-type", 69 ], 70} 71 72cc_defaults { 73 name: "berberis_defaults", 74 defaults: ["berberis_guest_agnostic_defaults"], 75 arch: { 76 x86_64: { 77 // TODO(b/123294366): disconnect guest arch from host arch! 78 cflags: ["-DNATIVE_BRIDGE_GUEST_ARCH_RISCV64"], 79 }, 80 }, 81} 82 83cc_defaults { 84 name: "berberis_all_hosts_defaults", 85 defaults: ["berberis_defaults"], 86 arch: { 87 arm64: { 88 enabled: true, 89 // TODO(b/123294366): disconnect guest arch from host arch! 90 cflags: [ 91 "-DNATIVE_BRIDGE_GUEST_ARCH_RISCV64", 92 "-DBERBERIS_GUEST_LP64=1", 93 ], 94 }, 95 }, 96} 97 98cc_defaults { 99 name: "berberis_defaults_64", 100 defaults: ["berberis_defaults"], 101 compile_multilib: "64", 102} 103 104cc_defaults { 105 name: "berberis_all_hosts_defaults_64", 106 defaults: ["berberis_all_hosts_defaults"], 107 compile_multilib: "64", 108} 109 110cc_defaults { 111 name: "berberis_arm64_defaults", 112 defaults: ["berberis_guest_agnostic_defaults"], 113 compile_multilib: "64", 114 arch: { 115 // TODO(b/123294366): disconnect guest arch from host arch! 116 x86_64: { 117 cflags: ["-DNATIVE_BRIDGE_GUEST_ARCH_ARM64"], 118 }, 119 riscv64: { 120 cflags: ["-DNATIVE_BRIDGE_GUEST_ARCH_ARM64"], 121 }, 122 }, 123} 124 125cc_defaults { 126 name: "berberis_arm_defaults", 127 defaults: ["berberis_guest_agnostic_defaults"], 128 compile_multilib: "32", 129 arch: { 130 x86: { 131 // TODO(b/123294366): disconnect guest arch from host arch! 132 cflags: ["-DNATIVE_BRIDGE_GUEST_ARCH_ARM"], 133 }, 134 }, 135} 136 137cc_defaults { 138 name: "berberis_test_library_defaults", 139 defaults: ["berberis_defaults"], 140 host_supported: true, 141 shared: { 142 enabled: false, 143 }, 144} 145 146cc_defaults { 147 name: "berberis_test_library_defaults_64", 148 defaults: ["berberis_test_library_defaults"], 149 compile_multilib: "64", 150} 151 152cc_library_shared { 153 name: "libberberis_riscv64", 154 defaults: ["berberis_defaults_64"], 155 host_supported: true, 156 static_libs: [ 157 "libbase", 158 "libberberis_assembler", 159 "libberberis_base", 160 "libberberis_elf_backed_exec_region", 161 "libberberis_instrument", 162 "libberberis_intrinsics", 163 "libberberis_kernel_api_riscv64", 164 "libberberis_runtime_primitives", 165 "libberberis_tinyloader", 166 ], 167 whole_static_libs: [ 168 "libberberis_proxy_loader", 169 ], 170 export_static_lib_headers: [ 171 "libberberis_proxy_loader", 172 ], 173 shared_libs: [ 174 "liblog", 175 ], 176 arch: { 177 x86_64: { 178 static_libs: [ 179 "libberberis_backend_riscv64_to_x86_64", 180 "libberberis_code_gen_lib_riscv64", 181 "libberberis_guest_abi_riscv64", 182 "libberberis_heavy_optimizer_riscv64", 183 "libberberis_interpreter_riscv64", 184 "libberberis_lite_translator_riscv64_to_x86_64", 185 "libberberis_macro_assembler_riscv64_to_x86_64", 186 "libberberis_intrinsics_riscv64", 187 "libberberis_runtime_primitives_riscv64", 188 ], 189 whole_static_libs: [ 190 "libberberis_guest_loader_riscv64", 191 // Proxy libraries reference symbols from guest_os_primitives, 192 // so we need to keep them all. 193 "libberberis_guest_os_primitives_riscv64", 194 // Android debuggerd reference symbols from get_cpu_state. 195 "libberberis_guest_state_riscv64", 196 "libberberis_runtime_riscv64", 197 ], 198 export_static_lib_headers: [ 199 "libberberis_guest_loader_riscv64", 200 ], 201 }, 202 }, 203 target: { 204 android: { 205 whole_static_libs: [ 206 "libberberis_jni_riscv64", 207 "libberberis_native_activity_riscv64", 208 "libberberis_native_bridge_riscv64", 209 ], 210 shared_libs: [ 211 "libandroid", 212 "libdl_android", 213 ], 214 }, 215 }, 216} 217 218cc_test_host { 219 name: "berberis_host_tests", 220 defaults: ["berberis_defaults"], 221 static_libs: [ 222 "libberberis_assembler", 223 "libberberis_base", 224 "libberberis_elf_backed_exec_region", 225 "libberberis_intrinsics", 226 "libberberis_instrument", 227 "libberberis_runtime_primitives", 228 "libberberis_tinyloader", 229 "libgmock", 230 ], 231 shared_libs: [ 232 "libbase", 233 "liblog", 234 ], 235 whole_static_libs: [ 236 "libberberis_assembler_unit_tests", 237 "libberberis_base_unit_tests", 238 "libberberis_elf_backed_exec_region_unit_tests", 239 "libberberis_calling_conventions_unit_tests", 240 "libberberis_intrinsics_unit_tests", 241 "libberberis_tinyloader_unit_tests", 242 "libberberis_runtime_primitives_unit_tests", 243 ], 244 arch: { 245 arm64: { 246 srcs: [ 247 "base/raw_syscall_tests.cc", 248 ], 249 }, 250 x86: { 251 srcs: [ 252 "base/raw_syscall_tests.cc", 253 ], 254 }, 255 x86_64: { 256 srcs: [ 257 "base/raw_syscall_tests.cc", 258 ], 259 static_libs: [ 260 "libberberis_backend_riscv64_to_x86_64", 261 // Note: we don't even need to use anything from that library, just need to ensure it 262 // can be compiled successfully: all checks are done with static_asserts. 263 "libberberis_emulated_libvulkan_api_checker", 264 "libberberis_guest_abi_riscv64", 265 "libberberis_guest_os_primitives_riscv64", 266 "libberberis_guest_state_riscv64", 267 "libberberis_heavy_optimizer_riscv64", 268 "libberberis_interpreter_riscv64", 269 "libberberis_kernel_api_riscv64", 270 "libberberis_lite_translator_riscv64_to_x86_64", 271 "libberberis_macro_assembler_riscv64_to_x86_64", 272 "libberberis_intrinsics_riscv64", 273 "libberberis_runtime", 274 "libberberis_runtime_riscv64", 275 "libberberis_runtime_primitives_riscv64", 276 "libberberis_code_gen_lib_riscv64", 277 ], 278 whole_static_libs: [ 279 "libberberis_tests_main", 280 "libberberis_backend_riscv64_to_x86_64_unit_tests", 281 "libberberis_code_gen_lib_riscv64_unit_tests", 282 "libberberis_guest_abi_riscv64_unit_tests", 283 "libberberis_guest_os_primitives_unit_tests", 284 "libberberis_heavy_optimizer_riscv64_unit_tests", 285 "libberberis_interpreter_riscv64_unit_tests", 286 "libberberis_lite_translator_riscv64_to_x86_64_unit_tests", 287 "libberberis_runtime_riscv64_unit_tests", 288 "libberberis_runtime_primitives_riscv64_unit_tests", 289 "libberberis_cpu_state_riscv64_unit_test", 290 ], 291 }, 292 }, 293 data: [ 294 "tiny_loader/tests/files/32/*", 295 "tiny_loader/tests/files/64/*", 296 ], 297 test_suites: ["device-tests"], 298 test_options: { 299 unit_test: true, 300 }, 301} 302 303phony_rule_defaults { 304 name: "berberis_all_deps_defaults", 305 phony_deps: [ 306 "berberis_hello_world.native_bridge", 307 "berberis_hello_world_static.native_bridge", 308 "berberis_host_tests", 309 "berberis_ndk_program_tests", 310 "berberis_ndk_program_tests.native_bridge", 311 "berberis_perf_tests_static.native_bridge", 312 "dwarf_reader", 313 "libberberis_emulated_libcamera2ndk_api_checker", 314 "nogrod_unit_tests", 315 "gen_intrinsics_tests", 316 ], 317} 318 319// Note: Keep in sync with variables from `berberis_config.mk` and 320// `frameworks/libs/native_bridge_support/native_bridge_support.mk` indicated below. 321phony_rule_defaults { 322 name: "berberis_all_riscv64_to_x86_64_defaults", 323 phony_deps: [ 324 // BERBERIS_PRODUCT_PACKAGES_RISCV64_TO_X86_64 325 "libberberis_exec_region", 326 "libberberis_proxy_libEGL", 327 "libberberis_proxy_libGLESv1_CM", 328 "libberberis_proxy_libGLESv2", 329 "libberberis_proxy_libGLESv3", 330 "libberberis_proxy_libOpenMAXAL", 331 "libberberis_proxy_libOpenSLES", 332 "libberberis_proxy_libaaudio", 333 "libberberis_proxy_libamidi", 334 "libberberis_proxy_libandroid", 335 "libberberis_proxy_libbinder_ndk", 336 "libberberis_proxy_libc", 337 "libberberis_proxy_libcamera2ndk", 338 "libberberis_proxy_libjnigraphics", 339 "libberberis_proxy_libmediandk", 340 "libberberis_proxy_libnativehelper", 341 "libberberis_proxy_libnativewindow", 342 "libberberis_proxy_libneuralnetworks", 343 "libberberis_proxy_libvulkan", 344 "libberberis_proxy_libwebviewchromium_plat_support", 345 "berberis_prebuilt_riscv64", 346 "berberis_program_runner_binfmt_misc_riscv64", 347 "berberis_program_runner_riscv64", 348 "libberberis_riscv64", 349 // NATIVE_BRIDGE_PRODUCT_PACKAGES 350 "libnative_bridge_vdso.native_bridge", 351 "native_bridge_guest_app_process.native_bridge", 352 "native_bridge_guest_linker.native_bridge", 353 // $(addsuffix .native_bridge,$(NATIVE_BRIDGE_ORIG_GUEST_LIBS)) 354 "libandroidicu.bootstrap.native_bridge", 355 "libcompiler_rt.native_bridge", 356 "libcrypto.native_bridge", 357 "libcutils.native_bridge", 358 "libdl.bootstrap.native_bridge", 359 "libdl_android.bootstrap.native_bridge", 360 "libicu.bootstrap.native_bridge", 361 "liblog.native_bridge", 362 "libm.bootstrap.native_bridge", 363 "libsqlite.native_bridge", 364 "libssl.native_bridge", 365 "libstdc++.native_bridge", 366 "libsync.native_bridge", 367 "libutils.native_bridge", 368 "libz.native_bridge", 369 // NATIVE_BRIDGE_MODIFIED_GUEST_LIBS 370 "libnative_bridge_guest_libaaudio.native_bridge", 371 "libnative_bridge_guest_libamidi.native_bridge", 372 "libnative_bridge_guest_libandroid.native_bridge", 373 "libnative_bridge_guest_libandroid_runtime.native_bridge", 374 "libnative_bridge_guest_libbinder_ndk.native_bridge", 375 "libnative_bridge_guest_libc.native_bridge", 376 "libnative_bridge_guest_libcamera2ndk.native_bridge", 377 "libnative_bridge_guest_libEGL.native_bridge", 378 "libnative_bridge_guest_libGLESv1_CM.native_bridge", 379 "libnative_bridge_guest_libGLESv2.native_bridge", 380 "libnative_bridge_guest_libGLESv3.native_bridge", 381 "libnative_bridge_guest_libjnigraphics.native_bridge", 382 "libnative_bridge_guest_libmediandk.native_bridge", 383 "libnative_bridge_guest_libnativehelper.native_bridge", 384 "libnative_bridge_guest_libnativewindow.native_bridge", 385 "libnative_bridge_guest_libneuralnetworks.native_bridge", 386 "libnative_bridge_guest_libOpenMAXAL.native_bridge", 387 "libnative_bridge_guest_libOpenSLES.native_bridge", 388 "libnative_bridge_guest_libvulkan.native_bridge", 389 "libnative_bridge_guest_libwebviewchromium_plat_support.native_bridge", 390 // Everything else. 391 "berberis_guest_loader_riscv64_tests", 392 ], 393} 394 395soong_config_module_type { 396 name: "berberis_phony_rule", 397 module_type: "phony_rule", 398 config_namespace: "berberis", // BUILD_BERBERIS 399 variables: ["translation_arch"], 400 properties: [ 401 "defaults", 402 "enabled", 403 "phony_deps", 404 ], 405} 406 407soong_config_string_variable { 408 name: "translation_arch", 409 values: [ 410 "riscv64_to_x86_64", // BUILD_BERBERIS_RISCV64_TO_X86_64 411 ], 412} 413 414berberis_phony_rule { 415 name: "berberis_all", 416 soong_config_variables: { 417 translation_arch: { 418 riscv64_to_x86_64: { 419 defaults: [ 420 "berberis_all_deps_defaults", 421 "berberis_all_riscv64_to_x86_64_defaults", 422 ], 423 enabled: true, 424 }, 425 conditions_default: { 426 enabled: false, 427 }, 428 }, 429 }, 430} 431