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

    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/main.cpp",
        "device/usb_client.cpp",
    ],

    shared_libs: [
        "libasyncio",
        "libext4_utils",
        "libsparse",
        "liblog",
        "libbootloader_message",
        "libhidltransport",
        "libhidlbase",
        "libhwbinder",
        "libbase",
        "libutils",
        "libcutils",
        "libfs_mgr",
    ],

    static_libs: [
        "libadbd",
    ],

    cpp_std: "c++17",
}
