#
#  Copyright 2015 Google, Inc.
#
#  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.
#

config("libbluetooth_config") {
  include_dirs = [ "../include" ]
}

# Complete static library for linking with Rust
static_library("bluetooth-static") {
  complete_static_lib = true

  sources = [
  ]

  configs += [
    "//bt/system:target_defaults"
  ]

  deps = [
    ":bluetooth",
  ]
}

# Configure libbluetooth as either dynamic or static library
if (defined(use.bt_dynlib) && use.bt_dynlib) {
  lib_type = "shared_library"
} else {
  lib_type = "static_library"
}

target(lib_type, "bluetooth") {

  # Platform specific
  sources = [
    "bte_conf.cc",
    "bte_init_cpp_logging.cc",
    "bte_logmsg.cc",
    "stack_config.cc",
  ]

  public_configs = [ ":libbluetooth_config" ]

  include_dirs = [
    "//bt/system/",
    "//bt/system/bta/include",
    "//bt/system/bta/sys",
    "//bt/system/bta/dm",
    "//bt/system/stack/include",
    "//bt/system/stack/l2cap",
    "//bt/system/stack/a2dp",
    "//bt/system/stack/btm",
    "//bt/system/stack/avdt",
    "//bt/system/hci",
    "//bt/system/udrv/include",
    "//bt/system/btif/include",
    "//bt/system/btif/co",
    "//bt/system/vnd/include",
    "//bt/system/brcm/include",
    "//bt/system/embdrv/sbc/encoder/include",
    "//bt/system/embdrv/sbc/decoder/include",
    "//bt/system/test/suite",
  ]

  deps = [
    "//bt/system/audio_hal_interface",
    "//bt/system/bta",
    "//bt/system/btcore",
    "//bt/system/btif",
    "//bt/system/device",
    "//bt/system/embdrv/g722",
    "//bt/system/embdrv/sbc",
    "//bt/system/gd:libbluetooth_gd",
    "//bt/system/log:libbluetooth_log",
    "//bt/system/hci",
    "//bt/system/main/shim:BluetoothStackManagerSources",
    "//bt/system/main/shim:LibBluetoothShimSources",
    "//bt/system/osi",
    "//bt/system/packet",
    "//bt/system/rust:core_rs",
    "//bt/system/stack",
    "//bt/system/udrv",
  ]

  configs += [
    "//bt/system:target_defaults",
    "//bt/system/log:log_defaults",
    "//bt/system:external_tinyxml2",
    "//bt/system:external_flatbuffers",
  ]

  cflags_c = [
    "-Lobj/osi",
    "-losi",
  ]

  libs = [
    "dl",
    "fmt",
    "pthread",
    "resolv",
    "rt",
    "z",
  ]

  lib_dirs = [ "${root_out_dir}/rust" ]
}
