crypto_toolbox_srcs = [
    "crypto_toolbox/aes.cc",
    "crypto_toolbox/aes_cmac.cc",
    "crypto_toolbox/crypto_toolbox.cc",
]

// Bluetooth stack static library for target
// ========================================================
cc_library_static {
    name: "libbt-stack",
    defaults: ["fluoride_defaults"],
    local_include_dirs: [
        "include",
        "avct",
        "btm",
        "avrc",
        "l2cap",
        "avdt",
        "gatt",
        "gap",
        "pan",
        "bnep",
        "hid",
        "sdp",
        "smp",
        "srvc",
    ],
    header_libs: [
        "libbluetooth_headers",
    ],
    include_dirs: [
        "external/aac/libAACenc/include",
        "external/aac/libAACdec/include",
        "external/aac/libSYS/include",
        "external/libldac/inc",
        "external/libldac/abr/inc",
        "system/bt",
        "system/bt/btcore/include",
        "system/bt/vnd/include",
        "system/bt/vnd/ble",
        "system/bt/btif/include",
        "system/bt/hci/include",
        "system/bt/internal_include",
        "system/bt/udrv/include",
        "system/bt/bta/include",
        "system/bt/bta/sys",
        "system/bt/utils/include",
    ],
    cflags: ["-Wno-implicit-fallthrough"],
    srcs: crypto_toolbox_srcs + [
        "a2dp/a2dp_aac.cc",
        "a2dp/a2dp_aac_decoder.cc",
        "a2dp/a2dp_aac_encoder.cc",
        "a2dp/a2dp_api.cc",
        "a2dp/a2dp_codec_config.cc",
        "a2dp/a2dp_sbc.cc",
        "a2dp/a2dp_sbc_decoder.cc",
        "a2dp/a2dp_sbc_encoder.cc",
        "a2dp/a2dp_sbc_up_sample.cc",
        "a2dp/a2dp_vendor.cc",
        "a2dp/a2dp_vendor_aptx.cc",
        "a2dp/a2dp_vendor_aptx_hd.cc",
        "a2dp/a2dp_vendor_aptx_encoder.cc",
        "a2dp/a2dp_vendor_aptx_hd_encoder.cc",
        "a2dp/a2dp_vendor_ldac.cc",
        "a2dp/a2dp_vendor_ldac_abr.cc",
        "a2dp/a2dp_vendor_ldac_decoder.cc",
        "a2dp/a2dp_vendor_ldac_encoder.cc",
        "avct/avct_api.cc",
        "avct/avct_bcb_act.cc",
        "avct/avct_ccb.cc",
        "avct/avct_l2c.cc",
        "avct/avct_l2c_br.cc",
        "avct/avct_lcb.cc",
        "avct/avct_lcb_act.cc",
        "avdt/avdt_ad.cc",
        "avdt/avdt_api.cc",
        "avdt/avdt_ccb.cc",
        "avdt/avdt_ccb_act.cc",
        "avdt/avdt_l2c.cc",
        "avdt/avdt_msg.cc",
        "avdt/avdt_scb.cc",
        "avdt/avdt_scb_act.cc",
        "avrc/avrc_api.cc",
        "avrc/avrc_bld_ct.cc",
        "avrc/avrc_bld_tg.cc",
        "avrc/avrc_opt.cc",
        "avrc/avrc_pars_ct.cc",
        "avrc/avrc_pars_tg.cc",
        "avrc/avrc_sdp.cc",
        "avrc/avrc_utils.cc",
        "bnep/bnep_api.cc",
        "bnep/bnep_main.cc",
        "bnep/bnep_utils.cc",
        "btm/ble_advertiser_hci_interface.cc",
        "btm/btm_acl.cc",
        "btm/btm_ble.cc",
        "btm/btm_ble_addr.cc",
        "btm/btm_ble_adv_filter.cc",
        "btm/btm_ble_batchscan.cc",
        "btm/btm_ble_bgconn.cc",
        "btm/btm_ble_connection_establishment.cc",
        "btm/btm_ble_cont_energy.cc",
        "btm/btm_ble_gap.cc",
        "btm/btm_ble_multi_adv.cc",
        "btm/btm_ble_privacy.cc",
        "btm/btm_dev.cc",
        "btm/btm_devctl.cc",
        "btm/btm_inq.cc",
        "btm/btm_main.cc",
        "btm/btm_pm.cc",
        "btm/btm_sco.cc",
        "btm/btm_sec.cc",
        "btu/btu_hcif.cc",
        "btu/btu_init.cc",
        "btu/btu_task.cc",
        "gap/gap_ble.cc",
        "gap/gap_conn.cc",
        "gatt/att_protocol.cc",
        "gatt/connection_manager.cc",
        "gatt/gatt_api.cc",
        "gatt/gatt_attr.cc",
        "gatt/gatt_auth.cc",
        "gatt/gatt_cl.cc",
        "gatt/gatt_db.cc",
        "gatt/gatt_main.cc",
        "gatt/gatt_sr.cc",
        "gatt/gatt_utils.cc",
        "hcic/hciblecmds.cc",
        "hcic/hcicmds.cc",
        "hid/hidh_api.cc",
        "hid/hidh_conn.cc",
        "hid/hidd_api.cc",
        "hid/hidd_conn.cc",
        "l2cap/l2c_api.cc",
        "l2cap/l2c_ble.cc",
        "l2cap/l2c_csm.cc",
        "l2cap/l2c_fcr.cc",
        "l2cap/l2c_link.cc",
        "l2cap/l2c_main.cc",
        "l2cap/l2c_utils.cc",
        "l2cap/l2cap_client.cc",
        "pan/pan_api.cc",
        "pan/pan_main.cc",
        "pan/pan_utils.cc",
        "rfcomm/port_api.cc",
        "rfcomm/port_rfc.cc",
        "rfcomm/port_utils.cc",
        "rfcomm/rfc_l2cap_if.cc",
        "rfcomm/rfc_mx_fsm.cc",
        "rfcomm/rfc_port_fsm.cc",
        "rfcomm/rfc_port_if.cc",
        "rfcomm/rfc_ts_frames.cc",
        "rfcomm/rfc_utils.cc",
        "sdp/sdp_api.cc",
        "sdp/sdp_db.cc",
        "sdp/sdp_discovery.cc",
        "sdp/sdp_main.cc",
        "sdp/sdp_server.cc",
        "sdp/sdp_utils.cc",
        "smp/p_256_curvepara.cc",
        "smp/p_256_ecc_pp.cc",
        "smp/p_256_multprecision.cc",
        "smp/smp_act.cc",
        "smp/smp_api.cc",
        "smp/smp_br_main.cc",
        "smp/smp_keys.cc",
        "smp/smp_l2c.cc",
        "smp/smp_main.cc",
        "smp/smp_utils.cc",
        "srvc/srvc_dis.cc",
        "srvc/srvc_eng.cc",
    ],
    static_libs: [
        "libbt-hci",
        "libFraunhoferAAC",
    ],
    shared_libs: [
        "libcutils",
        "liblog",
    ],
    required: [
        "libldacBT_enc",
        "libldacBT_abr",
    ],
}

// Bluetooth stack unit tests for target
// ========================================================
cc_test {
    name: "net_test_stack",
    defaults: ["fluoride_defaults"],
    test_suites: ["device-tests"],
    local_include_dirs: [
        "include",
    ],
    include_dirs: [
        "system/bt",
        "system/bt/internal_include",
    ],
    srcs: [
        "test/stack_a2dp_test.cc",
    ],
    shared_libs: [
        "libcrypto",
        "libhidlbase",
        "liblog",
        "libprotobuf-cpp-lite",
        "libcutils",
        "libutils",
    ],
    static_libs: [
        "libbt-bta",
        "libbt-stack",
        "libbt-common",
        "libbt-sbc-decoder",
        "libbt-sbc-encoder",
        "libFraunhoferAAC",
        "libbtdevice",
        "libbt-hci",
        "libosi",
        "libbt-protos-lite",
    ],
    whole_static_libs: [
        "libbluetooth-for-tests",
    ],
}

cc_test {
    name: "net_test_stack_rfcomm",
    defaults: ["fluoride_defaults"],
    test_suites: ["device-tests"],
    host_supported: true,
    local_include_dirs: [
        "include",
        "btm",
        "l2cap",
        "smp",
        "rfcomm",
        "test/common",
    ],
    include_dirs: [
        "system/bt",
        "system/bt/internal_include",
        "system/bt/btcore/include",
        "system/bt/hci/include",
        "system/bt/utils/include",
    ],
    srcs: [
        "rfcomm/port_api.cc",
        "rfcomm/port_rfc.cc",
        "rfcomm/port_utils.cc",
        "rfcomm/rfc_l2cap_if.cc",
        "rfcomm/rfc_mx_fsm.cc",
        "rfcomm/rfc_port_fsm.cc",
        "rfcomm/rfc_port_if.cc",
        "rfcomm/rfc_ts_frames.cc",
        "rfcomm/rfc_utils.cc",
        "test/common/mock_btm_layer.cc",
        "test/common/mock_btsnoop_module.cc",
        "test/common/mock_btu_layer.cc",
        "test/common/mock_l2cap_layer.cc",
        "test/common/stack_test_packet_utils.cc",
        "test/rfcomm/stack_rfcomm_test.cc",
        "test/rfcomm/stack_rfcomm_test_main.cc",
        "test/rfcomm/stack_rfcomm_test_utils.cc",
        "test/rfcomm/stack_rfcomm_test_utils_test.cc",
    ],
    shared_libs: [
        "libcutils",
        "libprotobuf-cpp-lite",
        "libcrypto",
    ],
    static_libs: [
        "liblog",
        "libgmock",
        "libosi",
        "libbt-common",
        "libbt-protos-lite",
    ],
    sanitize: {
        cfi: false,
    },
}

// Bluetooth stack smp unit tests for target
// ========================================================
cc_test {
    name: "net_test_stack_smp",
    defaults: ["fluoride_defaults"],
    test_suites: ["device-tests"],
    local_include_dirs: [
        "include",
        "btm",
        "l2cap",
        "smp",
    ],
    include_dirs: [
        "system/bt",
        "system/bt/internal_include",
        "system/bt/btcore/include",
        "system/bt/hci/include",
        "system/bt/utils/include",
    ],
    srcs: crypto_toolbox_srcs + [
        "smp/smp_keys.cc",
        "smp/p_256_curvepara.cc",
        "smp/p_256_ecc_pp.cc",
        "smp/p_256_multprecision.cc",
        "smp/smp_api.cc",
        "smp/smp_main.cc",
        "smp/smp_utils.cc",
        "test/crypto_toolbox_test.cc",
        "test/stack_smp_test.cc",
    ],
    shared_libs: [
        "libcutils",
    ],
    static_libs: [
        "liblog",
        "libgmock",
        "libosi",
    ],
}

// Bluetooth stack multi-advertising unit tests for target
// ========================================================
cc_test {
    name: "net_test_stack_multi_adv",
    defaults: ["fluoride_defaults"],
    test_suites: ["device-tests"],
    local_include_dirs: [
        "include",
        "btm",
    ],
    include_dirs: [
        "system/bt",
        "system/bt/internal_include",
        "system/bt/btcore/include",
        "system/bt/hci/include",
        "system/bt/internal_include",
        "system/bt/utils/include",
    ],
    srcs: [
        "btm/btm_ble_multi_adv.cc",
        "test/ble_advertiser_test.cc",
    ],
    shared_libs: [
        "libcutils",
    ],
    static_libs: [
        "libbluetooth-types",
        "liblog",
        "libgmock",
    ],
    sanitize: {
        cfi: false,
    },
}

// Bluetooth stack advertise data parsing unit tests for target
// =============================================================
cc_test {
    name: "net_test_stack_ad_parser",
    defaults: ["fluoride_defaults"],
    test_suites: ["device-tests"],
    local_include_dirs: [
        "include",
    ],
    srcs: [
        "test/ad_parser_unittest.cc",
    ],
    static_libs: [
        "libbluetooth-types",
        "liblog",
        "libgmock",
    ],
}

// Bluetooth stack message loop tests for target
// ========================================================
cc_test {
    name: "net_test_btu_message_loop",
    defaults: ["fluoride_defaults"],
    local_include_dirs: [
        "include",
        "btm",
    ],
    include_dirs: [
        "system/bt/",
        "system/bt/internal_include",
        "system/bt/btcore/include",
        "system/bt/bta/include",
    ],
    srcs: [
        "btu/btu_task.cc",
        "test/stack_btu_test.cc",
    ],
    shared_libs: [
        "liblog",
        "libcutils",
        "libprotobuf-cpp-lite",
    ],
    static_libs: [
        "libbt-common",
        "libbluetooth-types",
        "libgmock",
        "libosi",
        "libbt-protos-lite",
    ],
    sanitize: {
        cfi: false,
    },
}

// Bluetooth stack connection multiplexing
// ========================================================
cc_test {
    name: "net_test_gatt_conn_multiplexing",
    defaults: ["fluoride_defaults"],
    local_include_dirs: [
        "include",
        "btm",
    ],
    include_dirs: [
        "system/bt",
        "system/bt/internal_include",
        "system/bt/btcore/include",
        "system/bt/hci/include",
        "system/bt/internal_include",
        "system/bt/utils/include",
    ],
    srcs: [
        "gatt/connection_manager.cc",
        "test/gatt_connection_manager_test.cc",
    ],
    shared_libs: [
        "libcutils",
    ],
    static_libs: [
        "libbluetooth-types",
        "liblog",
        "libgmock",
    ],
    sanitize: {
        cfi: false,
    },
}