// 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"
    ],

    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",
        "libadbd",
        "libasyncio",
        "libbase",
        "libbootloader_message",
        "libcutils",
        "libext2_uuid",
        "libext4_utils",
        "libfs_mgr",
        "libhidlbase",
        "libhidltransport",
        "libhwbinder",
        "liblog",
        "liblp",
        "libsparse",
        "libutils",
    ],

    cpp_std: "c++17",
}
