# Copyright 2020 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.

group("fidl") {
  public_deps = [
    ":fidl-lint",
    ":fidlfmt",
    "fidl_api_diff:host",
    "fidl_api_summarize:host",
    "fidlc:host",
    "fidlcparsequality:host",
    "fidldoc($host_toolchain)",
    "fidlgen_cpp:host",
    "fidlgen_go:host",
    "fidlgen_hlcpp:host",
    "fidlgen_libfuzzer:host",
    "fidlgen_rust:host",
    "fidlgen_syzkaller:host",
    "fidlmerge:host",
    "gidl:host",
    "gidl-format:host",
    "lib",
    "measure-tape/src:host",
  ]
}

group("fidlfmt") {
  if (current_os != "fuchsia") {
    deps = [ "fidlc:fidl-format" ]
  }
}

group("fidl-lint") {
  if (current_os != "fuchsia") {
    deps = [ "fidlc:fidl-lint" ]
  }
}

group("tests") {
  testonly = true

  deps = [
    "example-tester:tests",
    "fidl_api_diff:tests",
    "fidl_api_summarize:tests",
    "fidlc:tests",
    "fidldoc:tests",
    "fidlgen_cpp:tests",
    "fidlgen_go:tests",
    "fidlgen_hlcpp:tests",
    "fidlgen_libfuzzer:tests",
    "fidlgen_rust:tests",
    "fidlgen_syzkaller:tests",
    "gidl:tests",
    "gidl-format:tests",
    "lib:tests",
    "measure-tape:tests",
    "runtime-compat:tests",
  ]
}
