# 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/fidl/toolchain.gni")
import("//build/testing/golden_test.gni")
import("//build/zircon/migrated_targets.gni")
import("//tools/fidl/fidlc/testdata/info.gni")

config("fidlc_config") {
  defines = []
  if (defined(fidlc_deprecate_c_unions) && fidlc_deprecate_c_unions) {
    defines += [ "FIDLC_DEPRECATE_C_UNIONS" ]
  }
}

group("headers") {
  public_configs = [ ":headers.config" ]
}

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

zx_library("fidl") {
  host = true
  sdk = "source"
  sdk_headers = []
  sdk_migrated = true
  sources = [
    "lib/attributes.cc",
    "lib/c_generator.cc",
    "lib/check.cc",
    "lib/coded_types_generator.cc",
    "lib/diagnostic_types.cc",
    "lib/diagnostics_json.cc",
    "lib/experimental_flags.cc",
    "lib/findings_json.cc",
    "lib/flat_ast.cc",
    "lib/formatter.cc",
    "lib/json_generator.cc",
    "lib/lexer.cc",
    "lib/linter.cc",
    "lib/linting_tree_callbacks.cc",
    "lib/names.cc",
    "lib/new_syntax_conversion.cc",
    "lib/new_syntax_converter.cc",
    "lib/ordinals.cc",
    "lib/parser.cc",
    "lib/raw_ast.cc",
    "lib/reporter.cc",
    "lib/source_file.cc",
    "lib/source_manager.cc",
    "lib/source_span.cc",
    "lib/tables_generator.cc",
    "lib/template_string.cc",
    "lib/tree_visitor.cc",
    "lib/type_shape.cc",
    "lib/utils.cc",
    "lib/virtual_source_file.cc",
  ]
  public_deps = [
    "//sdk/lib/fit:headers",
    "//zircon/system/ulib/cmdline:headers",
    "//zircon/third_party/ulib/safemath",
  ]
  deps = [
    ":json_schema",
    "//sdk/lib/fit",
    "//zircon/system/ulib/cmdline",
  ]
  deps += [ "//third_party/boringssl" ]

  configs += [ ":fidlc_config" ]
}

source_set("json_schema") {
  visibility = [ ":*" ]
  sources = [ "$target_gen_dir/json_schema.cc" ]
  deps = [
    ":gen-json-schema",
    ":headers",
  ]
}

action("gen-json-schema") {
  visibility = [ ":json_schema" ]
  outputs = [ "$target_gen_dir/json_schema.cc" ]
  sources = [ "schema.json" ]
  script = "gen-json-schema.sh"
  args = rebase_path(outputs, root_build_dir) +
         rebase_path(sources, root_build_dir)
}

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

if (current_os != "fuchsia") {
  zx_host_tool("fidlc") {
    sources = [ "compiler/main.cc" ]
    deps = [ ":fidl" ]
    sdk_migrated = true
  }

  zx_host_tool("fidl-format") {
    sources = [ "formatter/main.cc" ]
    deps = [ ":fidl" ]
    sdk_migrated = true
  }

  zx_host_tool("fidl-lint") {
    sources = [
      "linter/command_line_options.cc",
      "linter/main.cc",
    ]
    deps = [ ":fidl" ]
    sdk_migrated = true
  }
}

golden_test("fidlc_golden_tests") {
  goldens_dir = "goldens"
  deps = []
  entries = []
  foreach(info, fidl_testdata_info) {
    deps += [ "${info.target}($fidl_toolchain)" ]
    entries += [
      {
        golden = "${info.name}.json.golden"
        generated = "${info.fidl_gen_dir}/${info.target_name}.fidl.json"
      },
      {
        golden = "${info.name}.tables.c.golden"
        generated = "${info.fidl_gen_dir}/${info.target_name}.fidl.tables.c"
      },
    ]
  }
}

group("tests") {
  testonly = true
  deps = [ ":fidlc_golden_tests($host_toolchain)" ]
}
