# Copyright 2018 The  Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/rust/rustc_binary.gni")
import("//build/package.gni")

rustc_binary("bin") {
  name = "sl4f"
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//garnet/lib/rust/connectivity-testing",
    "//garnet/lib/rust/fuchsia-bluetooth",
    "//garnet/lib/wlan/fidl:fidl-rustc",
    "//garnet/lib/wlan/fidl:service-rustc",
    "//garnet/lib/wlan/fidl:sme-rustc",
    "//garnet/public/fidl/fuchsia.bluetooth:fuchsia.bluetooth-rustc",
    "//garnet/public/fidl/fuchsia.bluetooth.gatt:fuchsia.bluetooth.gatt-rustc",
    "//garnet/public/fidl/fuchsia.bluetooth.le:fuchsia.bluetooth.le-rustc",
    "//garnet/public/lib/fidl/rust/fidl",
    "//garnet/public/rust/fdio",
    "//garnet/public/rust/fuchsia-app",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-syslog",
    "//garnet/public/rust/fuchsia-vfs/fuchsia-vfs-watcher",
    "//garnet/public/rust/fuchsia-zircon",
    "//third_party/rust-crates/rustc_deps:failure",
    "//third_party/rust-crates/rustc_deps:futures-preview",
    "//third_party/rust-crates/rustc_deps:parking_lot",
    "//third_party/rust-crates/rustc_deps:rand",
    "//third_party/rust-crates/rustc_deps:rouille",
    "//third_party/rust-crates/rustc_deps:serde",
    "//third_party/rust-crates/rustc_deps:serde_derive",
    "//third_party/rust-crates/rustc_deps:serde_json",
    "//third_party/rust-crates/rustc_deps:slab",
    "//zircon/public/fidl/fuchsia-net-stack:fuchsia-net-stack-rustc",
  ]
}

package("sl4f") {
  deprecated_bare_package_url = "//build"

  meta = [
    {
      path = "meta/sl4f.cmx"
      dest = "sl4f.cmx"
    },
  ]

  deps = [
    ":bin",
  ]

  binary = "rust_crates/sl4f"
}

package("sl4f-tests") {
    testonly = true

    deps = [
        ":bin"
    ]

    tests = [
        {
            name = "sl4f_bin_test"
            dest =  "sl4f_bin_test"
        }
    ]
}
