blob: aa1f83b8b526a199b7e0b165db097a867f71f947 [file] [log] [blame]
// Copyright (C) 2023 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
cc_defaults {
name: "berberis_guest_agnostic_defaults",
cflags: [
"-Wall",
"-Werror",
"-Wextra",
"-Wmost",
"-Wover-aligned",
"-Wunused",
"-Wimplicit-fallthrough",
"-Werror=reorder-init-list",
"-Wdefaulted-function-deleted",
],
// It is tempting to disable builds by default and explicitly enable only x86.
// Unfortunately that way disabling darwin has no effect. So instead
// we disable unneeded targets individually.
target: {
darwin: {
enabled: false,
},
},
arch: {
arm: {
enabled: false,
},
arm64: {
enabled: false,
},
riscv64: {
// TODO(b/123294366): disconnect guest arch from host arch!
cflags: [
"-DBERBERIS_GUEST_LP64=1",
],
},
x86_64: {
// TODO(b/123294366): disconnect guest arch from host arch!
cflags: [
"-DBERBERIS_GUEST_LP64=1",
],
},
},
compile_multilib: "both",
// Only check our headers.
tidy_flags: [
"-header-filter=^frameworks/libs/binary_translation/",
],
tidy_checks: [
"modernize*",
"-modernize-use-trailing-return-type",
],
}
cc_defaults {
name: "berberis_defaults",
defaults: ["berberis_guest_agnostic_defaults"],
arch: {
x86_64: {
// TODO(b/123294366): disconnect guest arch from host arch!
cflags: ["-DNATIVE_BRIDGE_GUEST_ARCH_RISCV64"],
},
},
}
cc_defaults {
name: "berberis_all_hosts_defaults",
defaults: ["berberis_defaults"],
arch: {
arm64: {
enabled: true,
// TODO(b/123294366): disconnect guest arch from host arch!
cflags: [
"-DNATIVE_BRIDGE_GUEST_ARCH_RISCV64",
"-DBERBERIS_GUEST_LP64=1",
],
},
},
}
cc_defaults {
name: "berberis_defaults_64",
defaults: ["berberis_defaults"],
compile_multilib: "64",
}
cc_defaults {
name: "berberis_all_hosts_defaults_64",
defaults: ["berberis_all_hosts_defaults"],
compile_multilib: "64",
}
cc_defaults {
name: "berberis_arm64_defaults",
defaults: ["berberis_guest_agnostic_defaults"],
compile_multilib: "64",
arch: {
// TODO(b/123294366): disconnect guest arch from host arch!
x86_64: {
cflags: ["-DNATIVE_BRIDGE_GUEST_ARCH_ARM64"],
},
riscv64: {
cflags: ["-DNATIVE_BRIDGE_GUEST_ARCH_ARM64"],
},
},
}
cc_defaults {
name: "berberis_arm_defaults",
defaults: ["berberis_guest_agnostic_defaults"],
compile_multilib: "32",
arch: {
x86: {
// TODO(b/123294366): disconnect guest arch from host arch!
cflags: ["-DNATIVE_BRIDGE_GUEST_ARCH_ARM"],
},
},
}
cc_defaults {
name: "berberis_test_library_defaults",
defaults: ["berberis_defaults"],
host_supported: true,
shared: {
enabled: false,
},
}
cc_defaults {
name: "berberis_test_library_defaults_64",
defaults: ["berberis_test_library_defaults"],
compile_multilib: "64",
}
cc_library_shared {
name: "libberberis_riscv64",
defaults: ["berberis_defaults_64"],
host_supported: true,
static_libs: [
"libbase",
"libberberis_assembler",
"libberberis_base",
"libberberis_elf_backed_exec_region",
"libberberis_instrument",
"libberberis_intrinsics",
"libberberis_kernel_api_riscv64",
"libberberis_runtime_primitives",
"libberberis_tinyloader",
],
whole_static_libs: [
"libberberis_proxy_loader",
],
export_static_lib_headers: [
"libberberis_proxy_loader",
],
shared_libs: [
"liblog",
],
arch: {
x86_64: {
static_libs: [
"libberberis_backend_riscv64_to_x86_64",
"libberberis_code_gen_lib_riscv64",
"libberberis_guest_abi_riscv64",
"libberberis_heavy_optimizer_riscv64",
"libberberis_interpreter_riscv64",
"libberberis_lite_translator_riscv64_to_x86_64",
"libberberis_macro_assembler_riscv64_to_x86_64",
"libberberis_intrinsics_riscv64",
"libberberis_runtime_primitives_riscv64",
],
whole_static_libs: [
"libberberis_guest_loader_riscv64",
// Proxy libraries reference symbols from guest_os_primitives,
// so we need to keep them all.
"libberberis_guest_os_primitives_riscv64",
// Android debuggerd reference symbols from get_cpu_state.
"libberberis_guest_state_riscv64",
"libberberis_runtime_riscv64",
],
export_static_lib_headers: [
"libberberis_guest_loader_riscv64",
],
},
},
target: {
android: {
whole_static_libs: [
"libberberis_jni_riscv64",
"libberberis_native_activity_riscv64",
"libberberis_native_bridge_riscv64",
],
shared_libs: [
"libandroid",
"libdl_android",
],
},
},
}
cc_test_host {
name: "berberis_host_tests",
defaults: ["berberis_defaults"],
static_libs: [
"libberberis_assembler",
"libberberis_base",
"libberberis_elf_backed_exec_region",
"libberberis_intrinsics",
"libberberis_instrument",
"libberberis_runtime_primitives",
"libberberis_tinyloader",
"libgmock",
],
shared_libs: [
"libbase",
"liblog",
],
whole_static_libs: [
"libberberis_assembler_unit_tests",
"libberberis_base_unit_tests",
"libberberis_elf_backed_exec_region_unit_tests",
"libberberis_calling_conventions_unit_tests",
"libberberis_intrinsics_unit_tests",
"libberberis_tinyloader_unit_tests",
"libberberis_runtime_primitives_unit_tests",
],
arch: {
arm64: {
srcs: [
"base/raw_syscall_tests.cc",
],
},
x86: {
srcs: [
"base/raw_syscall_tests.cc",
],
},
x86_64: {
srcs: [
"base/raw_syscall_tests.cc",
],
static_libs: [
"libberberis_backend_riscv64_to_x86_64",
// Note: we don't even need to use anything from that library, just need to ensure it
// can be compiled successfully: all checks are done with static_asserts.
"libberberis_emulated_libvulkan_api_checker",
"libberberis_guest_abi_riscv64",
"libberberis_guest_os_primitives_riscv64",
"libberberis_guest_state_riscv64",
"libberberis_heavy_optimizer_riscv64",
"libberberis_interpreter_riscv64",
"libberberis_kernel_api_riscv64",
"libberberis_lite_translator_riscv64_to_x86_64",
"libberberis_macro_assembler_riscv64_to_x86_64",
"libberberis_intrinsics_riscv64",
"libberberis_runtime",
"libberberis_runtime_riscv64",
"libberberis_runtime_primitives_riscv64",
"libberberis_code_gen_lib_riscv64",
],
whole_static_libs: [
"libberberis_tests_main",
"libberberis_backend_riscv64_to_x86_64_unit_tests",
"libberberis_code_gen_lib_riscv64_unit_tests",
"libberberis_guest_abi_riscv64_unit_tests",
"libberberis_guest_os_primitives_unit_tests",
"libberberis_heavy_optimizer_riscv64_unit_tests",
"libberberis_interpreter_riscv64_unit_tests",
"libberberis_lite_translator_riscv64_to_x86_64_unit_tests",
"libberberis_runtime_riscv64_unit_tests",
"libberberis_runtime_primitives_riscv64_unit_tests",
"libberberis_cpu_state_riscv64_unit_test",
],
},
},
data: [
"tiny_loader/tests/files/32/*",
"tiny_loader/tests/files/64/*",
],
test_suites: ["device-tests"],
test_options: {
unit_test: true,
},
}
filegroup {
name: "berberis_host_tests_data_32",
srcs: [
"tiny_loader/tests/files/32/*",
],
}
filegroup {
name: "berberis_host_tests_data_64",
srcs: [
"tiny_loader/tests/files/64/*",
],
}
// Clang violates psABI: https://groups.google.com/g/x86-64-abi/c/BjOOyihHuqg
// We want to esnrue that possible fix of this bug wouldn't be unnoticed: b/382703210
cc_test_host {
name: "berberis_host_tests_avx",
defaults: ["berberis_defaults"],
shared_libs: [
"libbase",
"liblog",
],
arch: {
x86_64: {
cflags: ["-mavx"],
srcs: ["intrinsics/all_to_x86_64/tuple_test.cc"],
// Note: we must NOT use any static or shared libraries with SIMDRegister type involved
// here, only header_libs, because those may be compiled with no-avx.
// Safest way is to only use libbase/loblog needed for gTest itself.
header_libs: ["libberberis_intrinsics_headers"],
},
},
test_suites: ["device-tests"],
test_options: {
unit_test: true,
},
}
// Ensure that everything works in no-AVX case too (there clang follows psABI correctly).
cc_test_host {
name: "berberis_host_tests_no_avx",
defaults: ["berberis_defaults"],
shared_libs: [
"libbase",
"liblog",
],
arch: {
x86_64: {
cflags: ["-mno-avx"],
srcs: ["intrinsics/all_to_x86_64/tuple_test.cc"],
// Note: we must NOT use any static or shared libraries with SIMDRegister type involved
// here, only header_libs, because those may be compiled with avx.
// Safest way is to only use libbase/loblog needed for gTest itself.
header_libs: ["libberberis_intrinsics_headers"],
},
},
test_suites: ["device-tests"],
test_options: {
unit_test: true,
},
}
// This module is used as a workaround to define those deps of berberis_all_deps_defaults which are native_bridge only.
ndk_translation_package {
name: "berberis_all_deps_intermediate_package",
compile_multilib: "both",
native_bridge_supported: true,
native_bridge_deps: [
"berberis_hello_world",
"berberis_hello_world_static",
"berberis_ndk_program_tests",
"berberis_perf_tests_static",
],
generate_build_files: false,
}
phony_rule_defaults {
name: "berberis_all_deps_defaults",
phony_deps: [
"berberis_host_tests",
"berberis_host_tests_avx",
"berberis_host_tests_no_avx",
"berberis_ndk_program_tests",
"dwarf_reader",
"libberberis_emulated_libcamera2ndk_api_checker",
"nogrod_unit_tests",
"gen_intrinsics_tests",
// The intermediate packages to declare those deps which are native_bridge variant.
"berberis_all_deps_intermediate_package",
],
}
// This module is used as a workaround to define those deps of berberis_all_deps_defaults which are native_bridge only.
ndk_translation_package {
name: "berberis_all_riscv64_to_x86_64_intermediate_package",
compile_multilib: "both",
native_bridge_supported: true,
native_bridge_deps: [
// NATIVE_BRIDGE_PRODUCT_PACKAGES
"libnative_bridge_vdso",
"native_bridge_guest_app_process",
"native_bridge_guest_linker",
"libandroidicu",
"libcompiler_rt",
"libcrypto",
"libcutils",
"libdl",
"libdl_android",
"libicu",
"liblog",
"libm",
"libsqlite",
"libssl",
"libstdc++",
"libsync",
"libutils",
"libz",
// NATIVE_BRIDGE_MODIFIED_GUEST_LIBS
"libnative_bridge_guest_libaaudio",
"libnative_bridge_guest_libamidi",
"libnative_bridge_guest_libandroid",
"libnative_bridge_guest_libandroid_runtime",
"libnative_bridge_guest_libbinder_ndk",
"//frameworks/libs/native_bridge_support/android_api/libc:libnative_bridge_guest_libc",
"libnative_bridge_guest_libcamera2ndk",
"libnative_bridge_guest_libEGL",
"libnative_bridge_guest_libGLESv1_CM",
"libnative_bridge_guest_libGLESv2",
"libnative_bridge_guest_libGLESv3",
"libnative_bridge_guest_libjnigraphics",
"libnative_bridge_guest_libmediandk",
"libnative_bridge_guest_libnativehelper",
"libnative_bridge_guest_libnativewindow",
"libnative_bridge_guest_libneuralnetworks",
"libnative_bridge_guest_libOpenMAXAL",
"libnative_bridge_guest_libOpenSLES",
"libnative_bridge_guest_libvulkan",
"libnative_bridge_guest_libwebviewchromium_plat_support",
],
generate_build_files: false,
}
// Note: Keep in sync with variables from `berberis_config.mk` and
// `frameworks/libs/native_bridge_support/native_bridge_support.mk` indicated below.
phony_rule_defaults {
name: "berberis_all_riscv64_to_x86_64_defaults",
phony_deps: [
// BERBERIS_PRODUCT_PACKAGES_RISCV64_TO_X86_64
"libberberis_exec_region",
"libberberis_proxy_libEGL",
"libberberis_proxy_libGLESv1_CM",
"libberberis_proxy_libGLESv2",
"libberberis_proxy_libGLESv3",
"libberberis_proxy_libOpenMAXAL",
"libberberis_proxy_libOpenSLES",
"libberberis_proxy_libaaudio",
"libberberis_proxy_libamidi",
"libberberis_proxy_libandroid",
"libberberis_proxy_libbinder_ndk",
"libberberis_proxy_libc",
"libberberis_proxy_libcamera2ndk",
"libberberis_proxy_libjnigraphics",
"libberberis_proxy_libmediandk",
"libberberis_proxy_libnativehelper",
"libberberis_proxy_libnativewindow",
"libberberis_proxy_libneuralnetworks",
"libberberis_proxy_libvulkan",
"libberberis_proxy_libwebviewchromium_plat_support",
"berberis_prebuilt_riscv64",
"berberis_program_runner_binfmt_misc_riscv64",
"berberis_program_runner_riscv64",
"libberberis_riscv64",
// The intermediate packages to declare those deps which are native_bridge variant.
"berberis_all_riscv64_to_x86_64_intermediate_package",
// Everything else.
"berberis_guest_loader_riscv64_tests",
],
}
soong_config_module_type {
name: "berberis_phony_rule",
module_type: "phony_rule",
config_namespace: "berberis", // BUILD_BERBERIS
variables: ["translation_arch"],
properties: [
"defaults",
"enabled",
"phony_deps",
],
}
soong_config_string_variable {
name: "translation_arch",
values: [
"riscv64_to_x86_64", // BUILD_BERBERIS_RISCV64_TO_X86_64
],
}
berberis_phony_rule {
name: "berberis_all",
soong_config_variables: {
translation_arch: {
riscv64_to_x86_64: {
defaults: [
"berberis_all_deps_defaults",
"berberis_all_riscv64_to_x86_64_defaults",
],
enabled: true,
},
conditions_default: {
enabled: false,
},
},
},
}
python_binary_host {
name: "berberis_gen_gtest_failure_template",
main: "tests/gen_gtest_failure_template.py",
srcs: ["tests/gen_gtest_failure_template.py"],
}