subdirs = [
    "common",
]

cc_defaults {
    name: "fluoride_service_defaults",
    defaults: ["fluoride_defaults"],
    include_dirs: [
        "system/bt",
    ],
    header_libs: [ "libbluetooth_headers" ],
}

// Source variables
// ========================================================
btserviceDaemonSrc = [
    "a2dp_sink.cc",
    "a2dp_source.cc",
    "adapter.cc",
    "avrcp_control.cc",
    "avrcp_target.cc",
    "daemon.cc",
    "gatt_client.cc",
    "gatt_server.cc",
    "gatt_server_old.cc",
    "hal/bluetooth_av_interface.cc",
    "hal/bluetooth_avrcp_interface.cc",
    "hal/bluetooth_gatt_interface.cc",
    "hal/bluetooth_interface.cc",
    "ipc/ipc_handler.cc",
    "ipc/ipc_manager.cc",
    "logging_helpers.cc",
    "low_energy_advertiser.cc",
    "low_energy_scanner.cc",
    "low_energy_client.cc",
    "settings.cc",
]

btserviceLinuxSrc = [
    "ipc/ipc_handler_linux.cc",
    "ipc/linux_ipc_host.cc",
]

btserviceBinderDaemonSrc = [
    "ipc/binder/bluetooth_a2dp_sink_binder_server.cc",
    "ipc/binder/bluetooth_a2dp_source_binder_server.cc",
    "ipc/binder/bluetooth_avrcp_control_binder_server.cc",
    "ipc/binder/bluetooth_avrcp_target_binder_server.cc",
    "ipc/binder/bluetooth_binder_server.cc",
    "ipc/binder/bluetooth_gatt_client_binder_server.cc",
    "ipc/binder/bluetooth_gatt_server_binder_server.cc",
    "ipc/binder/bluetooth_le_advertiser_binder_server.cc",
    "ipc/binder/bluetooth_le_scanner_binder_server.cc",
    "ipc/binder/bluetooth_low_energy_binder_server.cc",
    "ipc/binder/interface_with_instances_base.cc",
    "ipc/binder/ipc_handler_binder.cc",
]

// Main unit test sources. These get built for host and target.
// ========================================================
btserviceBaseTestSrc = [
    "hal/fake_bluetooth_av_interface.cc",
    "hal/fake_bluetooth_gatt_interface.cc",
    "hal/fake_bluetooth_interface.cc",
    "test/a2dp_sink_unittest.cc",
    "test/adapter_unittest.cc",
    "test/advertise_data_unittest.cc",
    "test/fake_hal_util.cc",
    "test/gatt_client_unittest.cc",
    "test/gatt_server_unittest.cc",
    "test/low_energy_advertiser_unittest.cc",
    "test/low_energy_client_unittest.cc",
    "test/low_energy_scanner_unittest.cc",
    "test/settings_unittest.cc",
]

// Native system service for target
// ========================================================
cc_binary {
    name: "bluetoothtbd",
    defaults: ["fluoride_service_defaults"],
    srcs: btserviceBinderDaemonSrc +
    btserviceLinuxSrc +
    btserviceDaemonSrc +
    ["main.cc"],
    static_libs: [
        "libbluetooth-binder-common",
        "libbtcore",
        "libbluetooth-types",
        "libosi",
    ],

    shared_libs: [
        "libchrome",
        "libbinder",
        "libcutils",
        "liblog",
        "libutils",
    ],
    init_rc: ["bluetoothtbd.rc"],
}

// Native system service unit tests for target and host

// ========================================================
cc_test {
    name: "bluetoothtbd_test",
    test_suites: ["device-tests"],
    defaults: ["fluoride_service_defaults"],
    srcs: btserviceBaseTestSrc +
    btserviceDaemonSrc + [
        "test/main.cc",
    ],
    aidl: {
        include_dirs: [
            "system/bt/service/common",
            "frameworks/native/aidl/binder",
        ],
    },
    static_libs: [
        "libbluetooth-common",
        "libgmock",
        "liblog",
        "libbluetooth-types",
        "libutils",
    ],
    shared_libs: [
        "libchrome",
    ],

    host_supported: true,
    target: {
        // This includes Binder related tests that can only be run
        // on target.
        android: {
            srcs: btserviceBinderDaemonSrc + [
                "test/parcelable_unittest.cc",
                "test/ParcelableTest.aidl",
            ],
            static_libs: [
                "libbluetooth-binder-common",
            ],
            shared_libs: [
                "libbinder",
            ],
        },
        host: {
            srcs: [
                "test/stub_ipc_handler_binder.cc",
            ],
        },
        linux_glibc: {
            srcs: btserviceLinuxSrc + [
                // TODO(bcf): Fix this test.
                //"test/ipc_linux_unittest.cc",
            ],
        },
    },
    sanitize: {
        cfi: false,
    },
}

// Native system service CLI for target
// ========================================================
cc_binary {
    name: "bluetooth-cli",
    defaults: ["fluoride_defaults"],
    srcs: ["client/main.cc"],
    static_libs: [
        "libbluetooth-binder-common",
    ],
    shared_libs: [
        "libbinder",
        "libutils",
    ],
}

// Heart Rate GATT service example for target
// ========================================================
cc_binary {
    name: "bt-example-hr-server",
    defaults: ["fluoride_defaults"],
    local_include_dirs: ["example/heart_rate"],
    srcs: [
        "example/heart_rate/heart_rate_server.cc",
        "example/heart_rate/server_main.cc",
    ],
    static_libs: [
        "libbluetooth-binder-common",
    ],
    shared_libs: [
        "libbinder",
        "libutils",
    ],
}

cc_library_static {
    name: "libbluetoothtbd_hal",
    defaults: ["fluoride_defaults"],
    include_dirs: ["system/bt"],
    header_libs: ["libbluetooth_headers"],
    srcs: [
        "hal/bluetooth_gatt_interface.cc",
        "hal/bluetooth_interface.cc",
        "logging_helpers.cc",
    ],
}