// 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.

// This is required because no Android.bp can include a library defined in an
// Android.mk. Eventually should kill libfastboot (defined in Android.mk)
cc_library_host_static {
    name: "libfastboot2",

    //host_supported: true,

    compile_multilib: "first",
    srcs: [
        "bootimg_utils.cpp",
        "fs.cpp",
        "socket.cpp",
        "tcp.cpp",
        "udp.cpp",
        "util.cpp",
        "fastboot_driver.cpp",
    ],

    static_libs: [
        "libziparchive",
        "libsparse",
        "libutils",
        "liblog",
        "libz",
        "libdiagnose_usb",
        "libbase",
        "libcutils",
        "libgtest",
        "libgtest_main",
        "libbase",
        "libadb_host",
        "liblp",
    ],

    header_libs: [
        "bootimg_headers",
    ],

    export_header_lib_headers: [
        "bootimg_headers",
    ],

    target: {
        linux: {
            srcs: ["usb_linux.cpp"],
        },

        darwin: {
            srcs: ["usb_osx.cpp"],

            host_ldlibs: [
                "-framework CoreFoundation",
                "-framework IOKit",
            ],
        },

        windows: {
            srcs: ["usb_windows.cpp"],

            host_ldlibs: [
                "-lws2_32",
            ],
        },
    },

    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
        "-Wunreachable-code",
    ],

    export_include_dirs: ["."],

}

cc_defaults {
    name: "fastboot_defaults",

    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
        "-Wvla",
    ],
    rtti: true,

    clang_cflags: [
        "-Wthread-safety",
    ],
}

cc_binary {
    name: "fastbootd",
    defaults: ["fastboot_defaults"],

    recovery: true,

    srcs: [
        "device/commands.cpp",
        "device/fastboot_device.cpp",
        "device/flashing.cpp",
        "device/main.cpp",
        "device/usb_client.cpp",
        "device/utility.cpp",
        "device/variables.cpp",
    ],

    shared_libs: [
        "android.hardware.boot@1.0",
        "android.hardware.fastboot@1.0",
        "android.hardware.health@2.0",
        "libadbd",
        "libasyncio",
        "libbase",
        "libbootloader_message",
        "libcutils",
        "libext2_uuid",
        "libext4_utils",
        "libfs_mgr",
        "libgsi",
        "libhidlbase",
        "libhidltransport",
        "libhwbinder",
        "liblog",
        "liblp",
        "libsparse",
        "libutils",
    ],

    static_libs: [
        "libhealthhalutils",
    ],
}

cc_defaults {
    name: "fastboot_host_defaults",

    use_version_lib: true,

    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
        "-Wunreachable-code",
    ],

    target: {
        darwin: {
            cflags: ["-Wno-unused-parameter"],
            host_ldlibs: [
                "-lpthread",
                "-framework CoreFoundation",
                "-framework IOKit",
            ],
        },
        windows: {
            enabled: true,

            host_ldlibs: ["-lws2_32"],
        },
        not_windows: {
            static_libs: [
                "libext4_utils",
            ],
        },
    },

    stl: "libc++_static",

    // Don't add anything here, we don't want additional shared dependencies
    // on the host fastboot tool, and shared libraries that link against libc++
    // will violate ODR.
    shared_libs: [],

    header_libs: ["bootimg_headers"],
    static_libs: [
        "libziparchive",
        "libsparse",
        "libutils",
        "liblog",
        "libz",
        "libdiagnose_usb",
        "libbase",
        "libcutils",
        "libgtest_host",
        "liblp",
        "libcrypto",
    ],
}

//
// Build host libfastboot.
//

cc_library_host_static {
    name: "libfastboot",
    defaults: ["fastboot_host_defaults"],

    srcs: [
        "bootimg_utils.cpp",
        "fastboot.cpp",
        "fs.cpp",
        "socket.cpp",
        "tcp.cpp",
        "udp.cpp",
        "util.cpp",
        "fastboot_driver.cpp",
    ],

    // Only version the final binaries
    use_version_lib: false,
    static_libs: ["libbuildversion"],

    generated_headers: ["platform_tools_version"],

    target: {
        windows: {
            srcs: ["usb_windows.cpp"],

            include_dirs: ["development/host/windows/usb/api"],
        },
        darwin: {
            srcs: ["usb_osx.cpp"],
        },
        linux_glibc: {
            srcs: ["usb_linux.cpp"],
        },
    },
}

//
// Build host fastboot / fastboot.exe
//

cc_binary_host {
    name: "fastboot",
    defaults: ["fastboot_host_defaults"],

    srcs: ["main.cpp"],
    static_libs: ["libfastboot"],

    required: [
        "mke2fs",
        "make_f2fs",
    ],
    dist: {
        targets: [
            "dist_files",
            "sdk",
            "win_sdk",
        ],
    },

    target: {
        not_windows: {
            required: [
                "e2fsdroid",
                "mke2fs.conf",
                "sload_f2fs",
            ],
        },
        windows: {
            required: ["AdbWinUsbApi"],
            shared_libs: ["AdbWinApi"],
        },
    },
}

//
// Build host fastboot_test.
//

cc_test_host {
    name: "fastboot_test",
    defaults: ["fastboot_host_defaults"],

    srcs: [
        "fastboot_test.cpp",
        "socket_mock.cpp",
        "socket_test.cpp",
        "tcp_test.cpp",
        "udp_test.cpp",
    ],

    static_libs: ["libfastboot"],

    target: {
        windows: {
            shared_libs: ["AdbWinApi"],
        },
        windows_x86_64: {
            // Avoid trying to build for win64
            enabled: false,
        },
    },
}
