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

import("//build/go/go_binary.gni")
import("//build/go/go_library.gni")
import("//build/go/go_test.gni")
import("//build/host.gni")
import("//build/testing/host_test_data.gni")

go_library("lib") {
  name = "fidlgen_libfuzzer"
}

go_binary("fidlgen_libfuzzer") {
  gopackage = "fidlgen_libfuzzer"

  sdk_category = "partner"

  deps = [
    ":lib",
    "//garnet/go/src/fidl:fidl_lib",
  ]
}

install_host_tools("host") {
  deps = [ ":fidlgen_libfuzzer" ]
  outputs = [ "fidlgen_libfuzzer" ]
}

if (is_host) {
  go_test("fidlgen_libfuzzer_test") {
    gopackages = [ "fidlgen_libfuzzer/codegen" ]

    deps = [
      ":lib",
      "//garnet/go/src/fidl:fidlgen_test_lib",
    ]
    non_go_deps = [ ":clang_format" ]
  }

  host_test_data("clang_format") {
    sources = [ "//prebuilt/third_party/clang/$host_platform/bin/clang-format" ]
    outputs = [ "$root_out_dir/test_data/fidlgen_libfuzzer/clang-format" ]
  }
}
