// Android Runtime APEX module.

// Modules listed in LOCAL_REQUIRED_MODULES for module art-runtime in art/Android.mk.
// - Base requirements (binaries for which both 32- and 64-bit versions are built, if relevant).
art_runtime_base_binaries_both = [
    "dalvikvm",
]
// - Base requirements (binaries for which a 32-bit version is preferred).
art_runtime_base_binaries_prefer32 = [
    "dex2oat",
    "dexoptanalyzer",
    "profman",
]
// - Base requirements (libraries).
art_runtime_base_native_shared_libs = [
    "libart",
    "libart-compiler",
    "libopenjdkjvm",
    "libopenjdkjvmti",
    "libadbconnection",
    "libjavacrypto",
]
bionic_native_shared_libs = [
    "libc",
    "libm",
    "libdl",
]
// - Fake library that avoids namespace issues and gives some warnings for nosy apps.
art_runtime_fake_native_shared_libs = [
     // FIXME: Does not work as-is, because `libart_fake` is defined in libart_fake/Android.mk,
     // and because a module defined in a Blueprint file cannot depend on a module defined in a
     // Makefile. To support `libart_fake` as a dependency of this APEX module, we can either
     // (probably in that order of preference):
     // a. translate that logic into Blueprint; or
     // b. write the whole Android Runtime APEX generation logic in Android.mk; or
     // c. introduce an `art_apex` module type extending the `apex` module type and write the
     //    corresponding Go logic to handle this extra dependency.
     //"libart_fake",
]
// - Debug variants (binaries for which a 32-bit version is preferred).
//   FIXME: These modules are optional (the built product can decide to include them or not).
//   Should they be moved to another APEX file?
art_runtime_debug_binaries_prefer32 = [
    "dex2oatd",
    "dexoptanalyzerd",
    "profmand",
]
art_runtime_debug_native_shared_libs = [
    "libartd",
    "libartd-compiler",
    "libopenjdkd",
    "libopenjdkjvmd",
    "libopenjdkjvmtid",
    "libadbconnectiond",
    "libjavacrypto",
]

// Files associated with bionic / managed core library time zone APIs.
art_runtime_time_zone_prebuilts = [
    "apex_tz_version",
    "apex_tzdata",
    "apex_tzlookup.xml",
]

// Modules listed in LOCAL_REQUIRED_MODULES for module art-tools in art/Android.mk.
art_tools_common_binaries = [
    "dexdiag",
    "dexdump",
    "dexlist",
]

art_tools_device_binaries = [
    "oatdump",
]

// Host-only modules listed in LOCAL_REQUIRED_MODULES for module art-tools in art/Android.mk.
// TODO: Include these modules in the future "host APEX".
art_tools_host_binaries = [
    // FIXME: Does not work as-is, because `ahat` is defined in tools/ahat/Android.mk
    // (same issue as for `libart_fake` above).
    //"ahat",
    "hprof-conv",
    // ...
]

art_tools_binaries = art_tools_common_binaries + art_tools_device_binaries

apex_key {
    name: "com.android.runtime.key",
    public_key: "com.android.runtime.avbpubkey",
    private_key: "com.android.runtime.pem",
}

prebuilt_etc {
    name: "com.android.runtime.ld.config.txt",
    src: "ld.config.txt",
    filename: "ld.config.txt",
    installable: false,
}

// TODO: Introduce `apex_defaults` to factor common parts of `apex`
// module definitions below?

// Release version of the Runtime APEX module (not containing debug
// variants nor tools), included in user builds. Also used for
// storage-constrained devices in userdebug and eng builds.
apex {
    name: "com.android.runtime.release",
    compile_multilib: "both",
    manifest: "manifest.json",
    native_shared_libs: art_runtime_base_native_shared_libs
        + art_runtime_fake_native_shared_libs
        + bionic_native_shared_libs,
    multilib: {
        both: {
            // TODO: Add logic to create a `dalvikvm` symlink to `dalvikvm32` or `dalvikvm64`
            // (see `symlink_preferred_arch` in art/dalvikvm/Android.bp).
            binaries: art_runtime_base_binaries_both,
        },
        prefer32: {
            binaries: art_runtime_base_binaries_prefer32,
        },
        first: {
            binaries: [],
        }
    },
    prebuilts: art_runtime_time_zone_prebuilts
        + ["com.android.runtime.ld.config.txt"],
    key: "com.android.runtime.key",
}

// "Debug" version of the Runtime APEX module (containing both release and
// debug variants, as well as additional tools), included in userdebug and
// eng build.
apex {
    name: "com.android.runtime.debug",
    compile_multilib: "both",
    manifest: "manifest.json",
    native_shared_libs: art_runtime_base_native_shared_libs
        + art_runtime_fake_native_shared_libs
        + art_runtime_debug_native_shared_libs
        + bionic_native_shared_libs,
    multilib: {
        both: {
            // TODO: Add logic to create a `dalvikvm` symlink to `dalvikvm32` or `dalvikvm64`
            // (see `symlink_preferred_arch` in art/dalvikvm/Android.bp).
            binaries: art_runtime_base_binaries_both,
        },
        prefer32: {
            binaries: art_runtime_base_binaries_prefer32
                + art_runtime_debug_binaries_prefer32,
        },
        first: {
            binaries: art_tools_binaries,
        }
    },
    prebuilts: art_runtime_time_zone_prebuilts
        + ["com.android.runtime.ld.config.txt"],
    key: "com.android.runtime.key",
}

// TODO: Do this better. art_apex will disable host builds when
// HOST_PREFER_32_BIT is set. We cannot simply use com.android.runtime.debug
// because binaries have different multilib classes and 'multilib: {}' isn't
// supported by target: { ... }.
// See b/120617876 for more information.
art_apex {
    name: "com.android.runtime.host",
    compile_multilib: "both",
    payload_type: "zip",
    host_supported: true,
    device_supported: false,
    manifest: "manifest.json",
    native_shared_libs: art_runtime_base_native_shared_libs
        + art_runtime_fake_native_shared_libs
        + art_runtime_debug_native_shared_libs,
    multilib: {
        both: {
            // TODO: Add logic to create a `dalvikvm` symlink to `dalvikvm32` or `dalvikvm64`
            // (see `symlink_preferred_arch` in art/dalvikvm/Android.bp).
            binaries: art_runtime_base_binaries_both,
        },
        first: {
            // TODO: oatdump cannot link with host linux_bionic due to not using clang ld
            binaries: art_tools_common_binaries
                + art_runtime_base_binaries_prefer32
                + art_runtime_debug_binaries_prefer32,
        }
    },
    key: "com.android.runtime.key",
    target: {
        darwin: {
            enabled: false,
        },
    },
}
