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

import("//build_overrides/build.gni")
import("//testing/test.gni")
import("tint_overrides_with_defaults.gni")

###############################################################################
# Common - Configs, etc. shared across targets
###############################################################################

config("tint_common_config") {
  include_dirs = [
    "${target_gen_dir}",
    "${tint_root_dir}/",
    "${tint_spirv_headers_dir}/include",
    "${tint_spirv_tools_dir}/",
    "${tint_spirv_tools_dir}/include",
  ]
}

config("tint_public_config") {
  defines = []
  if (tint_build_spv_reader) {
    defines += [ "TINT_BUILD_SPV_READER=1" ]
  } else {
    defines += [ "TINT_BUILD_SPV_READER=0" ]
  }

  if (tint_build_spv_writer) {
    defines += [ "TINT_BUILD_SPV_WRITER=1" ]
  } else {
    defines += [ "TINT_BUILD_SPV_WRITER=0" ]
  }

  if (tint_build_wgsl_reader) {
    defines += [ "TINT_BUILD_WGSL_READER=1" ]
  } else {
    defines += [ "TINT_BUILD_WGSL_READER=0" ]
  }

  if (tint_build_wgsl_writer) {
    defines += [ "TINT_BUILD_WGSL_WRITER=1" ]
  } else {
    defines += [ "TINT_BUILD_WGSL_WRITER=0" ]
  }

  include_dirs = [
    "${tint_root_dir}/",
    "${tint_root_dir}/include/",
  ]
}

###############################################################################
# Generated - Generated source files
###############################################################################
# These are copies of rules from SPIRV-Tools with the names tweaked to be Tint
# specific. They are needed here because referencing generated files in sibling
# packages is difficult/impossible in Chromium. Parts of Tint's SPIRV handling
# code depend on internal parts of SPIRV-Tools. This causes issues because when
# Tint references the internal headers, since it causes a dependency on these
# generated files, but they are not visible in the context building Tint. Thus
# Tint generates its own copy of the generated files. Since they come from the
# same source of truth, they should not vary.

template("tint_core_tables") {
  assert(defined(invoker.version), "Need version in $target_name generation.")

  action("tint_core_tables_" + target_name) {
    script = "${tint_spirv_tools_dir}/utils/generate_grammar_tables.py"

    version = invoker.version

    core_json_file = "${tint_spirv_headers_dir}/include/spirv/$version/spirv.core.grammar.json"
    core_insts_file = "${target_gen_dir}/core.insts-$version.inc"
    operand_kinds_file = "${target_gen_dir}/operand.kinds-$version.inc"
    debuginfo_insts_file =
        "${tint_spirv_tools_dir}/source/extinst.debuginfo.grammar.json"
    cldebuginfo100_insts_file = "${tint_spirv_tools_dir}/source/extinst.opencl.debuginfo.100.grammar.json"

    sources = [
      cldebuginfo100_insts_file,
      core_json_file,
      debuginfo_insts_file,
    ]
    outputs = [
      core_insts_file,
      operand_kinds_file,
    ]
    args = [
      "--spirv-core-grammar",
      rebase_path(core_json_file, root_build_dir),
      "--core-insts-output",
      rebase_path(core_insts_file, root_build_dir),
      "--extinst-debuginfo-grammar",
      rebase_path(debuginfo_insts_file, root_build_dir),
      "--extinst-cldebuginfo100-grammar",
      rebase_path(cldebuginfo100_insts_file, root_build_dir),
      "--operand-kinds-output",
      rebase_path(operand_kinds_file, root_build_dir),
    ]
  }
}

template("tint_core_enums") {
  assert(defined(invoker.version), "Need version in $target_name generation.")

  action("tint_core_enums_" + target_name) {
    script = "${tint_spirv_tools_dir}/utils/generate_grammar_tables.py"

    version = invoker.version

    core_json_file = "${tint_spirv_headers_dir}/include/spirv/$version/spirv.core.grammar.json"
    debuginfo_insts_file =
        "${tint_spirv_tools_dir}/source/extinst.debuginfo.grammar.json"
    cldebuginfo100_insts_file = "${tint_spirv_tools_dir}/source/extinst.opencl.debuginfo.100.grammar.json"

    extension_enum_file = "${target_gen_dir}/extension_enum.inc"
    extension_map_file = "${target_gen_dir}/enum_string_mapping.inc"

    args = [
      "--spirv-core-grammar",
      rebase_path(core_json_file, root_build_dir),
      "--extinst-debuginfo-grammar",
      rebase_path(debuginfo_insts_file, root_build_dir),
      "--extinst-cldebuginfo100-grammar",
      rebase_path(cldebuginfo100_insts_file, root_build_dir),
      "--extension-enum-output",
      rebase_path(extension_enum_file, root_build_dir),
      "--enum-string-mapping-output",
      rebase_path(extension_map_file, root_build_dir),
    ]
    inputs = [
      core_json_file,
      debuginfo_insts_file,
      cldebuginfo100_insts_file,
    ]
    outputs = [
      extension_enum_file,
      extension_map_file,
    ]
  }
}

template("tint_language_header") {
  assert(defined(invoker.name), "Need name in $target_name generation.")

  action("tint_language_header_" + target_name) {
    script = "${tint_spirv_tools_dir}/utils/generate_language_headers.py"

    name = invoker.name
    extinst_output_path = "${target_gen_dir}/${name}.h"

    args = [
      "--extinst-grammar",
      rebase_path(invoker.grammar_file, root_build_dir),
      "--extinst-output-path",
      rebase_path(extinst_output_path, root_build_dir),
    ]
    inputs = [ invoker.grammar_file ]
    outputs = [ "${extinst_output_path}" ]
  }
}

tint_core_tables("unified1") {
  version = "unified1"
}

tint_core_enums("unified1") {
  version = "unified1"
}

tint_language_header("debuginfo") {
  name = "DebugInfo"
  grammar_file = "${tint_spirv_tools_dir}/source/extinst.debuginfo.grammar.json"
}

tint_language_header("cldebuginfo100") {
  name = "OpenCLDebugInfo100"
  grammar_file =
      "${tint_spirv_tools_dir}/source/extinst.opencl.debuginfo.100.grammar.json"
}

###############################################################################
# Library - Tint core and optional modules of libtint
###############################################################################
# libtint source sets are divided into a non-optional core in :libtint_core_src
# and optional :libtint_*_src subsets, because ninja does not like having
# multiple source files with the same name, like function.cc, in the same
# source set
# target.
#
# Targets that want to use tint as a library should depend on ":libtint" and
# use the build flags to control what is included, instead of trying to specify
# the subsets that they want.

source_set("libtint_core_src") {
  sources = [
    "src/ast/array_accessor_expression.cc",
    "src/ast/array_accessor_expression.h",
    "src/ast/as_expression.cc",
    "src/ast/as_expression.h",
    "src/ast/assignment_statement.cc",
    "src/ast/assignment_statement.h",
    "src/ast/binary_expression.cc",
    "src/ast/binary_expression.h",
    "src/ast/binding_decoration.cc",
    "src/ast/binding_decoration.h",
    "src/ast/bool_literal.cc",
    "src/ast/bool_literal.h",
    "src/ast/break_statement.cc",
    "src/ast/break_statement.h",
    "src/ast/builtin.cc",
    "src/ast/builtin.h",
    "src/ast/builtin_decoration.cc",
    "src/ast/builtin_decoration.h",
    "src/ast/call_expression.cc",
    "src/ast/call_expression.h",
    "src/ast/case_statement.cc",
    "src/ast/case_statement.h",
    "src/ast/cast_expression.cc",
    "src/ast/cast_expression.h",
    "src/ast/constructor_expression.cc",
    "src/ast/constructor_expression.h",
    "src/ast/continue_statement.cc",
    "src/ast/continue_statement.h",
    "src/ast/decorated_variable.cc",
    "src/ast/decorated_variable.h",
    "src/ast/else_statement.cc",
    "src/ast/else_statement.h",
    "src/ast/entry_point.cc",
    "src/ast/entry_point.h",
    "src/ast/expression.cc",
    "src/ast/expression.h",
    "src/ast/fallthrough_statement.cc",
    "src/ast/fallthrough_statement.h",
    "src/ast/float_literal.cc",
    "src/ast/float_literal.h",
    "src/ast/function.cc",
    "src/ast/function.h",
    "src/ast/identifier_expression.cc",
    "src/ast/identifier_expression.h",
    "src/ast/if_statement.cc",
    "src/ast/if_statement.h",
    "src/ast/import.cc",
    "src/ast/import.h",
    "src/ast/int_literal.cc",
    "src/ast/int_literal.h",
    "src/ast/intrinsic.cc",
    "src/ast/intrinsic.h",
    "src/ast/kill_statement.cc",
    "src/ast/kill_statement.h",
    "src/ast/literal.cc",
    "src/ast/literal.h",
    "src/ast/location_decoration.cc",
    "src/ast/location_decoration.h",
    "src/ast/loop_statement.cc",
    "src/ast/loop_statement.h",
    "src/ast/member_accessor_expression.cc",
    "src/ast/member_accessor_expression.h",
    "src/ast/module.cc",
    "src/ast/module.h",
    "src/ast/node.cc",
    "src/ast/node.h",
    "src/ast/null_literal.cc",
    "src/ast/null_literal.h",
    "src/ast/pipeline_stage.cc",
    "src/ast/pipeline_stage.h",
    "src/ast/return_statement.cc",
    "src/ast/return_statement.h",
    "src/ast/scalar_constructor_expression.cc",
    "src/ast/scalar_constructor_expression.h",
    "src/ast/set_decoration.cc",
    "src/ast/set_decoration.h",
    "src/ast/sint_literal.cc",
    "src/ast/sint_literal.h",
    "src/ast/statement.cc",
    "src/ast/statement.h",
    "src/ast/storage_class.cc",
    "src/ast/storage_class.h",
    "src/ast/struct.cc",
    "src/ast/struct.h",
    "src/ast/struct_decoration.cc",
    "src/ast/struct_decoration.h",
    "src/ast/struct_member.cc",
    "src/ast/struct_member.h",
    "src/ast/struct_member_decoration.cc",
    "src/ast/struct_member_decoration.h",
    "src/ast/struct_member_offset_decoration.cc",
    "src/ast/struct_member_offset_decoration.h",
    "src/ast/switch_statement.cc",
    "src/ast/switch_statement.h",
    "src/ast/type/alias_type.cc",
    "src/ast/type/alias_type.h",
    "src/ast/type/array_type.cc",
    "src/ast/type/array_type.h",
    "src/ast/type/bool_type.cc",
    "src/ast/type/bool_type.h",
    "src/ast/type/f32_type.cc",
    "src/ast/type/f32_type.h",
    "src/ast/type/i32_type.cc",
    "src/ast/type/i32_type.h",
    "src/ast/type/matrix_type.cc",
    "src/ast/type/matrix_type.h",
    "src/ast/type/pointer_type.cc",
    "src/ast/type/pointer_type.h",
    "src/ast/type/struct_type.cc",
    "src/ast/type/struct_type.h",
    "src/ast/type/type.cc",
    "src/ast/type/type.h",
    "src/ast/type/u32_type.cc",
    "src/ast/type/u32_type.h",
    "src/ast/type/vector_type.cc",
    "src/ast/type/vector_type.h",
    "src/ast/type/void_type.cc",
    "src/ast/type/void_type.h",
    "src/ast/type_constructor_expression.cc",
    "src/ast/type_constructor_expression.h",
    "src/ast/uint_literal.cc",
    "src/ast/uint_literal.h",
    "src/ast/unary_op.cc",
    "src/ast/unary_op.h",
    "src/ast/unary_op_expression.cc",
    "src/ast/unary_op_expression.h",
    "src/ast/variable.cc",
    "src/ast/variable.h",
    "src/ast/variable_decl_statement.cc",
    "src/ast/variable_decl_statement.h",
    "src/ast/variable_decoration.cc",
    "src/ast/variable_decoration.h",
    "src/context.cc",
    "src/context.h",
    "src/reader/reader.cc",
    "src/reader/reader.h",
    "src/scope_stack.h",
    "src/source.h",
    "src/type_determiner.cc",
    "src/type_determiner.h",
    "src/type_manager.cc",
    "src/type_manager.h",
    "src/validator.cc",
    "src/validator.h",
    "src/validator_impl.cc",
    "src/validator_impl.h",
    "src/writer/writer.cc",
    "src/writer/writer.h",
  ]

  deps = [
    ":tint_core_enums_unified1",
    ":tint_core_tables_unified1",
    ":tint_language_header_cldebuginfo100",
    ":tint_language_header_debuginfo",
  ]

  configs += [ ":tint_common_config" ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

source_set("libtint_spv_reader_src") {
  sources = [
    "src/reader/spirv/construct.cc",
    "src/reader/spirv/construct.h",
    "src/reader/spirv/enum_converter.cc",
    "src/reader/spirv/enum_converter.h",
    "src/reader/spirv/fail_stream.h",
    "src/reader/spirv/function.cc",
    "src/reader/spirv/function.h",
    "src/reader/spirv/namer.cc",
    "src/reader/spirv/namer.h",
    "src/reader/spirv/parser.cc",
    "src/reader/spirv/parser.h",
    "src/reader/spirv/parser_impl.cc",
    "src/reader/spirv/parser_impl.h",
  ]

  deps = [
    ":tint_core_enums_unified1",
    ":tint_core_tables_unified1",
    ":tint_language_header_cldebuginfo100",
    ":tint_language_header_debuginfo",
    "${tint_spirv_tools_dir}/:spvtools",
    "${tint_spirv_tools_dir}/:spvtools_opt",
    "${tint_spirv_tools_dir}/:spvtools_val",
  ]

  configs += [ ":tint_common_config" ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

source_set("libtint_spv_writer_src") {
  sources = [
    "src/writer/spirv/binary_writer.cc",
    "src/writer/spirv/binary_writer.h",
    "src/writer/spirv/builder.cc",
    "src/writer/spirv/builder.h",
    "src/writer/spirv/function.cc",
    "src/writer/spirv/function.h",
    "src/writer/spirv/generator.cc",
    "src/writer/spirv/generator.h",
    "src/writer/spirv/instruction.cc",
    "src/writer/spirv/instruction.h",
    "src/writer/spirv/operand.cc",
    "src/writer/spirv/operand.h",
  ]

  configs += [ ":tint_common_config" ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

source_set("libtint_wgsl_reader_src") {
  sources = [
    "src/reader/wgsl/lexer.cc",
    "src/reader/wgsl/lexer.h",
    "src/reader/wgsl/parser.cc",
    "src/reader/wgsl/parser.h",
    "src/reader/wgsl/parser_impl.cc",
    "src/reader/wgsl/parser_impl.h",
    "src/reader/wgsl/token.cc",
    "src/reader/wgsl/token.h",
  ]

  configs += [ ":tint_common_config" ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

source_set("libtint_wgsl_writer_src") {
  sources = [
    "src/writer/wgsl/generator.cc",
    "src/writer/wgsl/generator.h",
    "src/writer/wgsl/generator_impl.cc",
    "src/writer/wgsl/generator_impl.h",
  ]

  configs += [ ":tint_common_config" ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

source_set("libtint") {
  deps = [ ":libtint_core_src" ]

  if (tint_build_spv_reader) {
    deps += [ ":libtint_spv_reader_src" ]
  }

  if (tint_build_spv_writer) {
    deps += [ ":libtint_spv_writer_src" ]
  }

  if (tint_build_wgsl_reader) {
    deps += [ ":libtint_wgsl_reader_src" ]
  }

  if (tint_build_wgsl_writer) {
    deps += [ ":libtint_wgsl_writer_src" ]
  }

  configs += [ ":tint_common_config" ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

###############################################################################
# Gtest Gmock - Handle building inside and outside of Chromium.
###############################################################################
# When building outside of Chromium we need to define our own targets for GTest
# and GMock. However when compiling inside of Chromium we need to reuse the
# existing targets, both because Chromium has a special harness for swarming
# and because otherwise the "gn check" fails.

if (!build_with_chromium) {
  # When we aren't in Chromium we define out own targets based on the location
  # of the googletest repo.
  config("gtest_config") {
    include_dirs = [
      "${tint_googletest_dir}/googletest",
      "${tint_googletest_dir}/googletest/include",
    ]
  }
  static_library("gtest") {
    testonly = true
    sources = [ "${tint_googletest_dir}/googletest/src/gtest-all.cc" ]
    public_configs = [ ":gtest_config" ]
  }

  config("gmock_config") {
    include_dirs = [
      "${tint_googletest_dir}/googlemock",
      "${tint_googletest_dir}/googlemock/include",
      "${tint_googletest_dir}/googletest/include",
    ]
  }

  static_library("gmock") {
    testonly = true
    sources = [
      "${tint_googletest_dir}/googlemock/src/gmock-all.cc",
      "${tint_googletest_dir}/googlemock/src/gmock_main.cc",
    ]
    public_configs = [ ":gmock_config" ]
  }

  group("gmock_and_gtest") {
    testonly = true
    public_deps = [
      ":gmock",
      ":gtest",
    ]
  }
} else {
  # When we are in Chromium we reuse its targets, and also add some deps that
  # are needed to launch the test in swarming mode.
  group("gmock_and_gtest") {
    testonly = true
    public_deps = [
      "//base",
      "//base/test:test_support",
      "//testing/gmock",
      "//testing/gtest",
    ]
  }
}

###############################################################################
# Tests - For libtint core and optional modules
###############################################################################
config("tint_unittests_config") {
  include_dirs = [
    "${tint_googletest_dir}/googlemock/include",
    "${tint_googletest_dir}/googletest/include",
  ]
}

source_set("tint_unittests_core_src") {
  sources = [
    "src/ast/array_accessor_expression_test.cc",
    "src/ast/as_expression_test.cc",
    "src/ast/assignment_statement_test.cc",
    "src/ast/binary_expression_test.cc",
    "src/ast/binding_decoration_test.cc",
    "src/ast/bool_literal_test.cc",
    "src/ast/break_statement_test.cc",
    "src/ast/builtin_decoration_test.cc",
    "src/ast/call_expression_test.cc",
    "src/ast/case_statement_test.cc",
    "src/ast/cast_expression_test.cc",
    "src/ast/continue_statement_test.cc",
    "src/ast/decorated_variable_test.cc",
    "src/ast/else_statement_test.cc",
    "src/ast/entry_point_test.cc",
    "src/ast/expression_test.cc",
    "src/ast/fallthrough_statement_test.cc",
    "src/ast/float_literal_test.cc",
    "src/ast/function_test.cc",
    "src/ast/identifier_expression_test.cc",
    "src/ast/if_statement_test.cc",
    "src/ast/import_test.cc",
    "src/ast/int_literal_test.cc",
    "src/ast/kill_statement_test.cc",
    "src/ast/location_decoration_test.cc",
    "src/ast/loop_statement_test.cc",
    "src/ast/member_accessor_expression_test.cc",
    "src/ast/module_test.cc",
    "src/ast/null_literal_test.cc",
    "src/ast/return_statement_test.cc",
    "src/ast/scalar_constructor_expression_test.cc",
    "src/ast/set_decoration_test.cc",
    "src/ast/sint_literal_test.cc",
    "src/ast/struct_member_offset_decoration_test.cc",
    "src/ast/struct_member_test.cc",
    "src/ast/struct_test.cc",
    "src/ast/switch_statement_test.cc",
    "src/ast/type/alias_type_test.cc",
    "src/ast/type/array_type_test.cc",
    "src/ast/type/bool_type_test.cc",
    "src/ast/type/f32_type_test.cc",
    "src/ast/type/i32_type_test.cc",
    "src/ast/type/matrix_type_test.cc",
    "src/ast/type/pointer_type_test.cc",
    "src/ast/type/struct_type_test.cc",
    "src/ast/type/u32_type_test.cc",
    "src/ast/type/vector_type_test.cc",
    "src/ast/type_constructor_expression_test.cc",
    "src/ast/uint_literal_test.cc",
    "src/ast/unary_op_expression_test.cc",
    "src/ast/variable_decl_statement_test.cc",
    "src/ast/variable_test.cc",
    "src/scope_stack_test.cc",
    "src/type_determiner_test.cc",
    "src/type_manager_test.cc",
    "src/validator_impl_import_test.cc",
  ]

  configs += [
    ":tint_common_config",
    ":tint_unittests_config",
  ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

source_set("tint_unittests_spv_reader_src") {
  sources = [
    "src/reader/spirv/enum_converter_test.cc",
    "src/reader/spirv/fail_stream_test.cc",
    "src/reader/spirv/function_arithmetic_test.cc",
    "src/reader/spirv/function_bit_test.cc",
    "src/reader/spirv/function_cfg_test.cc",
    "src/reader/spirv/function_composite_test.cc",
    "src/reader/spirv/function_conversion_test.cc",
    "src/reader/spirv/function_decl_test.cc",
    "src/reader/spirv/function_glsl_std_450_test.cc",
    "src/reader/spirv/function_logical_test.cc",
    "src/reader/spirv/function_memory_test.cc",
    "src/reader/spirv/function_var_test.cc",
    "src/reader/spirv/namer_test.cc",
    "src/reader/spirv/parser_impl_convert_member_decoration_test.cc",
    "src/reader/spirv/parser_impl_convert_type_test.cc",
    "src/reader/spirv/parser_impl_entry_point_test.cc",
    "src/reader/spirv/parser_impl_function_decl_test.cc",
    "src/reader/spirv/parser_impl_get_decorations_test.cc",
    "src/reader/spirv/parser_impl_import_test.cc",
    "src/reader/spirv/parser_impl_module_var_test.cc",
    "src/reader/spirv/parser_impl_named_types_test.cc",
    "src/reader/spirv/parser_impl_test.cc",
    "src/reader/spirv/parser_impl_user_name_test.cc",
    "src/reader/spirv/parser_test.cc",
    "src/reader/spirv/spirv_tools_helpers_test.cc",
    "src/reader/spirv/spirv_tools_helpers_test.h",
  ]

  configs += [
    ":tint_common_config",
    ":tint_unittests_config",
  ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

source_set("tint_unittests_spv_writer_src") {
  sources = [
    "src/writer/spirv/binary_writer_test.cc",
    "src/writer/spirv/builder_accessor_expression_test.cc",
    "src/writer/spirv/builder_as_expression_test.cc",
    "src/writer/spirv/builder_assign_test.cc",
    "src/writer/spirv/builder_binary_expression_test.cc",
    "src/writer/spirv/builder_call_test.cc",
    "src/writer/spirv/builder_cast_expression_test.cc",
    "src/writer/spirv/builder_constructor_expression_test.cc",
    "src/writer/spirv/builder_entry_point_test.cc",
    "src/writer/spirv/builder_function_test.cc",
    "src/writer/spirv/builder_function_variable_test.cc",
    "src/writer/spirv/builder_global_variable_test.cc",
    "src/writer/spirv/builder_ident_expression_test.cc",
    "src/writer/spirv/builder_if_test.cc",
    "src/writer/spirv/builder_intrinsic_test.cc",
    "src/writer/spirv/builder_kill_test.cc",
    "src/writer/spirv/builder_literal_test.cc",
    "src/writer/spirv/builder_loop_test.cc",
    "src/writer/spirv/builder_return_test.cc",
    "src/writer/spirv/builder_switch_test.cc",
    "src/writer/spirv/builder_test.cc",
    "src/writer/spirv/builder_type_test.cc",
    "src/writer/spirv/builder_unary_op_expression_test.cc",
    "src/writer/spirv/instruction_test.cc",
    "src/writer/spirv/operand_test.cc",
    "src/writer/spirv/spv_dump.cc",
    "src/writer/spirv/spv_dump.h",
  ]

  configs += [
    ":tint_common_config",
    ":tint_unittests_config",
  ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

source_set("tint_unittests_wgsl_reader_src") {
  sources = [
    "src/reader/wgsl/lexer_test.cc",
    "src/reader/wgsl/parser_impl_additive_expression_test.cc",
    "src/reader/wgsl/parser_impl_and_expression_test.cc",
    "src/reader/wgsl/parser_impl_argument_expression_list_test.cc",
    "src/reader/wgsl/parser_impl_assignment_stmt_test.cc",
    "src/reader/wgsl/parser_impl_body_stmt_test.cc",
    "src/reader/wgsl/parser_impl_break_stmt_test.cc",
    "src/reader/wgsl/parser_impl_case_body_test.cc",
    "src/reader/wgsl/parser_impl_const_expr_test.cc",
    "src/reader/wgsl/parser_impl_const_literal_test.cc",
    "src/reader/wgsl/parser_impl_continue_stmt_test.cc",
    "src/reader/wgsl/parser_impl_continuing_stmt_test.cc",
    "src/reader/wgsl/parser_impl_else_stmt_test.cc",
    "src/reader/wgsl/parser_impl_elseif_stmt_test.cc",
    "src/reader/wgsl/parser_impl_entry_point_decl_test.cc",
    "src/reader/wgsl/parser_impl_equality_expression_test.cc",
    "src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc",
    "src/reader/wgsl/parser_impl_function_decl_test.cc",
    "src/reader/wgsl/parser_impl_function_header_test.cc",
    "src/reader/wgsl/parser_impl_function_type_decl_test.cc",
    "src/reader/wgsl/parser_impl_global_constant_decl_test.cc",
    "src/reader/wgsl/parser_impl_global_decl_test.cc",
    "src/reader/wgsl/parser_impl_global_variable_decl_test.cc",
    "src/reader/wgsl/parser_impl_if_stmt_test.cc",
    "src/reader/wgsl/parser_impl_import_decl_test.cc",
    "src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc",
    "src/reader/wgsl/parser_impl_logical_and_expression_test.cc",
    "src/reader/wgsl/parser_impl_logical_or_expression_test.cc",
    "src/reader/wgsl/parser_impl_loop_stmt_test.cc",
    "src/reader/wgsl/parser_impl_multiplicative_expression_test.cc",
    "src/reader/wgsl/parser_impl_param_list_test.cc",
    "src/reader/wgsl/parser_impl_paren_rhs_stmt_test.cc",
    "src/reader/wgsl/parser_impl_pipeline_stage_test.cc",
    "src/reader/wgsl/parser_impl_postfix_expression_test.cc",
    "src/reader/wgsl/parser_impl_primary_expression_test.cc",
    "src/reader/wgsl/parser_impl_relational_expression_test.cc",
    "src/reader/wgsl/parser_impl_shift_expression_test.cc",
    "src/reader/wgsl/parser_impl_statement_test.cc",
    "src/reader/wgsl/parser_impl_statements_test.cc",
    "src/reader/wgsl/parser_impl_storage_class_test.cc",
    "src/reader/wgsl/parser_impl_struct_body_decl_test.cc",
    "src/reader/wgsl/parser_impl_struct_decl_test.cc",
    "src/reader/wgsl/parser_impl_struct_decoration_decl_test.cc",
    "src/reader/wgsl/parser_impl_struct_decoration_test.cc",
    "src/reader/wgsl/parser_impl_struct_member_decoration_decl_test.cc",
    "src/reader/wgsl/parser_impl_struct_member_decoration_test.cc",
    "src/reader/wgsl/parser_impl_struct_member_test.cc",
    "src/reader/wgsl/parser_impl_switch_body_test.cc",
    "src/reader/wgsl/parser_impl_switch_stmt_test.cc",
    "src/reader/wgsl/parser_impl_test.cc",
    "src/reader/wgsl/parser_impl_test_helper.cc",
    "src/reader/wgsl/parser_impl_test_helper.h",
    "src/reader/wgsl/parser_impl_type_alias_test.cc",
    "src/reader/wgsl/parser_impl_type_decl_test.cc",
    "src/reader/wgsl/parser_impl_unary_expression_test.cc",
    "src/reader/wgsl/parser_impl_variable_decl_test.cc",
    "src/reader/wgsl/parser_impl_variable_decoration_list_test.cc",
    "src/reader/wgsl/parser_impl_variable_decoration_test.cc",
    "src/reader/wgsl/parser_impl_variable_ident_decl_test.cc",
    "src/reader/wgsl/parser_impl_variable_stmt_test.cc",
    "src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc",
    "src/reader/wgsl/parser_test.cc",
    "src/reader/wgsl/token_test.cc",
  ]

  configs += [
    ":tint_common_config",
    ":tint_unittests_config",
  ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

source_set("tint_unittests_wgsl_writer_src") {
  sources = [
    "src/writer/wgsl/generator_impl_alias_type_test.cc",
    "src/writer/wgsl/generator_impl_array_accessor_test.cc",
    "src/writer/wgsl/generator_impl_as_test.cc",
    "src/writer/wgsl/generator_impl_assign_test.cc",
    "src/writer/wgsl/generator_impl_break_test.cc",
    "src/writer/wgsl/generator_impl_call_test.cc",
    "src/writer/wgsl/generator_impl_case_test.cc",
    "src/writer/wgsl/generator_impl_cast_test.cc",
    "src/writer/wgsl/generator_impl_constructor_test.cc",
    "src/writer/wgsl/generator_impl_continue_test.cc",
    "src/writer/wgsl/generator_impl_else_test.cc",
    "src/writer/wgsl/generator_impl_entry_point_test.cc",
    "src/writer/wgsl/generator_impl_fallthrough_test.cc",
    "src/writer/wgsl/generator_impl_function_test.cc",
    "src/writer/wgsl/generator_impl_identifier_test.cc",
    "src/writer/wgsl/generator_impl_if_test.cc",
    "src/writer/wgsl/generator_impl_import_test.cc",
    "src/writer/wgsl/generator_impl_kill_test.cc",
    "src/writer/wgsl/generator_impl_loop_test.cc",
    "src/writer/wgsl/generator_impl_member_accessor_test.cc",
    "src/writer/wgsl/generator_impl_relational_test.cc",
    "src/writer/wgsl/generator_impl_return_test.cc",
    "src/writer/wgsl/generator_impl_switch_test.cc",
    "src/writer/wgsl/generator_impl_test.cc",
    "src/writer/wgsl/generator_impl_type_test.cc",
    "src/writer/wgsl/generator_impl_unary_op_test.cc",
    "src/writer/wgsl/generator_impl_variable_decl_statement_test.cc",
    "src/writer/wgsl/generator_impl_variable_test.cc",
  ]

  configs += [
    ":tint_common_config",
    ":tint_unittests_config",
  ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

source_set("tint_unittests_src") {
  deps = [ ":tint_unittests_core_src" ]

  if (tint_build_spv_reader) {
    deps += [ ":tint_unittests_spv_reader_src" ]
  }

  if (tint_build_spv_writer) {
    deps += [ ":tint_unittests_spv_writer_src" ]
  }

  if (tint_build_wgsl_reader) {
    deps += [ ":tint_unittests_wgsl_reader_src" ]
  }

  if (tint_build_wgsl_writer) {
    deps += [ ":tint_unittests_wgsl_writer_src" ]
  }

  configs += [
    ":tint_common_config",
    ":tint_unittests_config",
  ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

test("tint_unittests") {
  deps = [
    ":gmock_and_gtest",
    ":libtint",
    ":tint_unittests_src",
    "${tint_spirv_tools_dir}/:spvtools",
    "${tint_spirv_tools_dir}/:spvtools_opt",
    "${tint_spirv_tools_dir}/:spvtools_val",
  ]

  # TODO(rharrison): Use main() from chromium for chromium tree builds. This
  # requires adding a file to //gpu like Dawn has done.

  configs += [
    ":tint_common_config",
    ":tint_unittests_config",
  ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }

  testonly = true
}

###############################################################################
# Fuzzers - Libfuzzer based fuzzing targets for Chromium
###############################################################################
# To run the fuzzers outside of Chromium, use the CMake based builds.

if (build_with_chromium) {
  import("//testing/libfuzzer/fuzzer_test.gni")

  source_set("tint_wgsl_reader_fuzzer_src") {
    sources = [ "fuzzers/tint_wgsl_reader_fuzzer.cc" ]
    configs += [ ":tint_common_config" ]
    public_configs = [ ":tint_public_config" ]
  }

  fuzzer_test("tint_wgsl_reader_fuzzer") {
    sources = []
    deps = [
      ":libtint",
      ":tint_wgsl_reader_fuzzer_src",
      "${tint_spirv_tools_dir}/:spvtools",
      "${tint_spirv_tools_dir}/:spvtools_opt",
      "${tint_spirv_tools_dir}/:spvtools_val",
    ]
  }
}

###############################################################################
# Samples - Executables exposing command line functionality
###############################################################################

config("tint_exe_config") {
  include_dirs = []
  if (tint_build_spv_reader || tint_build_spv_writer) {
    include_dirs += [ "${tint_spirv_tools_dir}/include/" ]
  }
}

executable("tint_exe") {
  sources = [ "samples/main.cc" ]
  deps = [
    ":libtint",
    "${tint_spirv_tools_dir}/:spvtools",
    "${tint_spirv_tools_dir}/:spvtools_opt",
    "${tint_spirv_tools_dir}/:spvtools_val",
  ]

  if (tint_build_spv_reader || tint_build_spv_writer) {
    deps += [ "${tint_spirv_headers_dir}/:spv_headers" ]
  }

  configs += [
    ":tint_common_config",
    ":tint_exe_config",
  ]
  public_configs = [ ":tint_public_config" ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}
