// Copyright (C) 2018 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.

cc_defaults {
    name: "recovery_defaults",

    cflags: [
        "-D_FILE_OFFSET_BITS=64",

        // Must be the same as RECOVERY_API_VERSION.
        "-DRECOVERY_API_VERSION=3",

        "-Wall",
        "-Werror",
    ],

    cpp_std: "c++17",
}

cc_library {
    name: "librecovery_ui",
    recovery_available: true,

    defaults: [
        "recovery_defaults",
    ],

    srcs: [
        "device.cpp",
        "screen_ui.cpp",
        "ui.cpp",
        "vr_ui.cpp",
        "wear_ui.cpp"
    ],

    static_libs: [
        "libminui",
        "libotautil",
    ],

    shared_libs: [
        "libbase",
        "libpng",
        "libz",
    ],
}

// Generic device that uses ScreenRecoveryUI.
cc_library_static {
    name: "librecovery_ui_default",
    recovery_available: true,

    defaults: [
        "recovery_defaults",
    ],

    srcs: [
        "default_device.cpp",
    ],
}

// The default wear device that uses WearRecoveryUI.
cc_library_static {
    name: "librecovery_ui_wear",
    recovery_available: true,

    defaults: [
        "recovery_defaults",
    ],

    srcs: [
        "wear_device.cpp",
    ],
}

// The default VR device that uses VrRecoveryUI.
cc_library_static {
    name: "librecovery_ui_vr",
    recovery_available: true,

    defaults: [
        "recovery_defaults",
    ],

    srcs: [
        "vr_device.cpp",
    ],
}

cc_library_static {
    name: "librecovery_fastboot",
    recovery_available: true,
    defaults: [
        "recovery_defaults",
    ],

    srcs: [
        "fastboot/fastboot.cpp",
    ],

    shared_libs: [
        "libbase",
        "libbootloader_message",
        "libcutils",
        "liblog",
    ],

    static_libs: [
        "librecovery_ui_default",
    ],
}

cc_defaults {
    name: "librecovery_defaults",

    defaults: [
        "recovery_defaults",
    ],

    shared_libs: [
        "android.hardware.health@2.0",
        "libbase",
        "libbootloader_message",
        "libcrypto",
        "libcutils",
        "libext4_utils",
        "libfs_mgr",
        "libfusesideload",
        "libhidl-gen-utils",
        "libhidlbase",
        "libhidltransport",
        "liblog",
        "libpng",
        "libselinux",
        "libtinyxml2",
        "libutils",
        "libz",
        "libziparchive",
    ],

    static_libs: [
        "librecovery_fastboot",
        "libminui",
        "libverifier",
        "libotautil",

        // external dependencies
        "libhealthhalutils",
        "libvintf_recovery",
        "libvintf",
    ],
}

cc_library_static {
    name: "librecovery",
    recovery_available: true,

    defaults: [
        "librecovery_defaults",
    ],

    srcs: [
        "adb_install.cpp",
        "fsck_unshare_blocks.cpp",
        "fuse_sdcard_provider.cpp",
        "install.cpp",
        "recovery.cpp",
        "roots.cpp",
    ],

    include_dirs: [
        "system/vold",
    ],
}

cc_library_static {
    name: "libverifier",
    recovery_available: true,

    defaults: [
        "recovery_defaults",
    ],

    srcs: [
        "asn1_decoder.cpp",
        "verifier.cpp",
    ],

    shared_libs: [
        "libbase",
        "libcrypto",
        "libcrypto_utils",
        "libziparchive",
    ],

    static_libs: [
        "libotautil",
    ],
}

cc_binary {
    name: "recovery",
    recovery: true,

    defaults: [
        "librecovery_defaults",
    ],

    srcs: [
        "logging.cpp",
        "recovery_main.cpp",
    ],

    shared_libs: [
        "libminadbd_services",
        "librecovery_ui",
    ],

    static_libs: [
        "librecovery",
        "librecovery_ui_default",
    ],

    required: [
        "e2fsdroid.recovery",
        "librecovery_ui_ext",
        "mke2fs.conf.recovery",
        "mke2fs.recovery",
        "recovery_deps",
    ],
}

// The dynamic executable that runs after /data mounts.
cc_binary {
    name: "recovery-persist",

    defaults: [
        "recovery_defaults",
    ],

    srcs: [
        "logging.cpp",
        "recovery-persist.cpp",
    ],

    shared_libs: [
        "libbase",
        "liblog",
        "libmetricslogger",
    ],

    static_libs: [
        "libotautil",
    ],

    init_rc: [
        "recovery-persist.rc",
    ],
}

// The dynamic executable that runs at init.
cc_binary {
    name: "recovery-refresh",

    defaults: [
        "recovery_defaults",
    ],

    srcs: [
        "logging.cpp",
        "recovery-refresh.cpp",
    ],

    shared_libs: [
        "libbase",
        "liblog",
    ],

    static_libs: [
        "libotautil",
    ],

    init_rc: [
        "recovery-refresh.rc",
    ],
}

filegroup {
    name: "res-testdata",

    srcs: [
        "res-*/images/*_text.png",
    ],
}
