package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_base_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_base_license"],
}

filegroup {
    name: "ravenwood-annotations",
    srcs: [
        "annotations-src/**/*.java",
    ],
    path: "annotations-src",
    visibility: ["//visibility:public"],
}

filegroup {
    name: "ravenwood-services-policies",
    srcs: [
        "texts/ravenwood-services-policies.txt",
    ],
    visibility: ["//visibility:public"],
}

filegroup {
    name: "ravenwood-framework-policies",
    srcs: [
        "texts/ravenwood-framework-policies.txt",
    ],
    visibility: ["//visibility:public"],
}

filegroup {
    name: "ravenwood-standard-options",
    srcs: [
        "texts/ravenwood-standard-options.txt",
    ],
    visibility: ["//visibility:public"],
}

filegroup {
    name: "ravenwood-annotation-allowed-classes",
    srcs: [
        "texts/ravenwood-annotation-allowed-classes.txt",
    ],
    visibility: ["//visibility:public"],
}

java_library {
    name: "ravenwood-annotations-lib",
    srcs: [":ravenwood-annotations"],
    sdk_version: "core_current",
    host_supported: true,
    visibility: ["//visibility:public"],
}

// This and the next module contain the same classes with different implementations.
// "ravenwood-runtime-common-device" will be statically linked in device side tests.
// "ravenwood-runtime-common-ravenwood" will only exist in ravenwood-runtime, which will take
// precedence even if the test jar (accidentally) contains "ravenwood-runtime-common-device".
// "ravenwood-runtime-common" uses it to detect if the rutime is Ravenwood or not.
java_library {
    name: "ravenwood-runtime-common-ravenwood",
    host_supported: true,
    sdk_version: "core_current",
    srcs: [
        "runtime-common-ravenwood-src/**/*.java",
    ],
    visibility: ["//frameworks/base"],
}

java_library {
    name: "ravenwood-runtime-common-device",
    host_supported: true,
    sdk_version: "core_current",
    srcs: [
        "runtime-common-device-src/**/*.java",
    ],
    visibility: ["//visibility:private"],
}

java_library {
    name: "ravenwood-runtime-common",
    host_supported: true,
    sdk_version: "core_current",
    srcs: [
        "runtime-common-src/**/*.java",
    ],
    libs: [
        "ravenwood-runtime-common-ravenwood",
    ],
    visibility: ["//visibility:private"],
}

java_library_host {
    name: "ravenwood-helper-libcore-runtime.host",
    srcs: [
        "runtime-helper-src/libcore-fake/**/*.java",
    ],
    static_libs: [
        "ravenwood-runtime-common",
    ],
    visibility: ["//visibility:private"],
}

java_host_for_device {
    name: "ravenwood-helper-libcore-runtime",
    libs: [
        "ravenwood-helper-libcore-runtime.host",
    ],
    visibility: ["//visibility:private"],
}

java_library {
    name: "ravenwood-helper-framework-runtime",
    srcs: [
        "runtime-helper-src/framework/**/*.java",
    ],
    static_libs: [
        "ravenwood-runtime-common",
    ],
    libs: [
        "framework-minus-apex.ravenwood",
        "ravenwood-junit",
    ],
    visibility: ["//visibility:private"],
}

// Combine ravenwood-helper-*-runtime and create a single library, which we include
// in the ravenwood runtime.
// We do it this way rather than including the individual jars in the runtime, because
// for some reason we couldn't include a java_host_for_device module in the ravenwood runtime.
java_library {
    name: "ravenwood-helper-runtime",
    defaults: ["ravenwood-internal-only-visibility-java"],
    static_libs: [
        "ravenwood-helper-framework-runtime",
        "ravenwood-helper-libcore-runtime",
    ],
}

java_library {
    name: "ravenwood-junit-impl",
    srcs: [
        "junit-src/**/*.java",
        "junit-impl-src/**/*.java",
    ],
    static_libs: [
        "androidx.test.monitor-for-device",
        "ravenwood-runtime-common",
    ],
    libs: [
        "android.test.mock",
        "framework-minus-apex.ravenwood",
        "ravenwood-framework",
        "services.core.ravenwood",
        "junit",
    ],
    sdk_version: "core_current",
    visibility: ["//frameworks/base"],
    jarjar_rules: ":ravenwood-services-jarjar-rules",
}

// Separated out from ravenwood-junit-impl since it needs to compile
// against `module_current`
java_library {
    name: "ravenwood-junit-impl-flag",
    srcs: [
        "junit-flag-src/**/*.java",
    ],
    sdk_version: "module_current",
    libs: [
        "junit",
        "flag-junit",
    ],
    visibility: ["//visibility:public"],
}

// Carefully compiles against only test_current to support tests that
// want to verify they're unbundled.  The "impl" library above is what
// ships inside the Ravenwood environment to actually drive any API
// access to implementation details.
java_library {
    name: "ravenwood-junit",
    srcs: [
        "junit-src/**/*.java",
        "junit-stub-src/**/*.java",
        "junit-flag-src/**/*.java",
    ],
    sdk_version: "test_current",
    static_libs: [
        "ravenwood-runtime-common",
        "ravenwood-runtime-common-device",
    ],
    libs: [
        "junit",
        "flag-junit",
    ],
    visibility: ["//visibility:public"],
}

// Library used to publish a handful of `android.ravenwood` APIs into
// the Ravenwood BCP; we don't want to publish these APIs into the BCP
// on physical devices, which is why this is a separate library
java_library {
    name: "ravenwood-framework",
    srcs: [
        "framework-src/**/*.java",
    ],
    libs: [
        "framework-minus-apex.ravenwood",
    ],
    sdk_version: "core_current",
    visibility: ["//visibility:public"],
}

java_host_for_device {
    name: "androidx.test.monitor-for-device",
    libs: [
        "androidx.test.monitor-for-host",
    ],
}

java_device_for_host {
    name: "androidx.test.monitor-for-host",
    libs: [
        "androidx.test.monitor",
    ],
}

filegroup {
    name: "ravenwood-services-jarjar-rules",
    srcs: ["texts/ravenwood-services-jarjar-rules.txt"],
    visibility: ["//frameworks/base"],
}

cc_library_shared {
    name: "libravenwood_runtime",
    host_supported: true,

    cflags: [
        "-Wall",
        "-Werror",
        "-Wno-unused-parameter",
        "-Wthread-safety",
    ],

    srcs: [
        "runtime-jni/*.cpp",
    ],

    shared_libs: [
        "libbase",
        "liblog",
        "libnativehelper",
        "libutils",
        "libcutils",
    ],
    visibility: ["//frameworks/base"],
}

// For collecting the *stats.csv files in a known directory under out/host/linux-x86/testcases/.
// The "test" just shows the available stats filenames.
sh_test_host {
    name: "ravenwood-stats-checker",
    src: "scripts/ravenwood-stats-checker.sh",
    test_suites: ["general-tests"],
    data: [
        ":framework-minus-apex.ravenwood.stats",
        ":framework-minus-apex.ravenwood.apis",
        ":framework-minus-apex.ravenwood.keep_all",
        ":services.core.ravenwood.stats",
        ":services.core.ravenwood.apis",
        ":services.core.ravenwood.keep_all",
    ],
}