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

################################################################################
# File generated by 'tools/src/cmd/gen' using the template:
#   tools/src/cmd/gen/build/BUILD.bazel.tmpl
#
# To regenerate run: './tools/run gen'
#
#                       Do not modify this file directly
################################################################################

load("//src/tint:flags.bzl", "COPTS")
load("@bazel_skylib//lib:selects.bzl", "selects")
cc_library(
  name = "parser",
  srcs = [
    "classify_template_args.cc",
    "lexer.cc",
    "parser.cc",
    "token.cc",
  ],
  hdrs = [
    "classify_template_args.h",
    "detail.h",
    "lexer.h",
    "parser.h",
    "token.h",
  ],
  deps = [
    "//src/tint/api/common",
    "//src/tint/lang/core",
    "//src/tint/lang/core/constant",
    "//src/tint/lang/core/type",
    "//src/tint/lang/wgsl",
    "//src/tint/lang/wgsl/ast",
    "//src/tint/lang/wgsl/program",
    "//src/tint/lang/wgsl/resolver",
    "//src/tint/lang/wgsl/sem",
    "//src/tint/utils/containers",
    "//src/tint/utils/diagnostic",
    "//src/tint/utils/ice",
    "//src/tint/utils/id",
    "//src/tint/utils/macros",
    "//src/tint/utils/math",
    "//src/tint/utils/memory",
    "//src/tint/utils/reflection",
    "//src/tint/utils/result",
    "//src/tint/utils/rtti",
    "//src/tint/utils/strconv",
    "//src/tint/utils/symbol",
    "//src/tint/utils/text",
    "//src/tint/utils/traits",
  ],
  copts = COPTS,
  visibility = ["//visibility:public"],
)
cc_library(
  name = "test",
  alwayslink = True,
  srcs = [
    "additive_expression_test.cc",
    "argument_expression_list_test.cc",
    "assignment_stmt_test.cc",
    "bitwise_expression_test.cc",
    "break_stmt_test.cc",
    "bug_cases_test.cc",
    "call_stmt_test.cc",
    "classify_template_args_test.cc",
    "compound_stmt_test.cc",
    "const_literal_test.cc",
    "continue_stmt_test.cc",
    "continuing_stmt_test.cc",
    "core_lhs_expression_test.cc",
    "diagnostic_attribute_test.cc",
    "diagnostic_control_test.cc",
    "diagnostic_directive_test.cc",
    "enable_directive_test.cc",
    "error_msg_test.cc",
    "error_resync_test.cc",
    "expression_test.cc",
    "for_stmt_test.cc",
    "function_attribute_list_test.cc",
    "function_attribute_test.cc",
    "function_decl_test.cc",
    "function_header_test.cc",
    "global_constant_decl_test.cc",
    "global_decl_test.cc",
    "global_variable_decl_test.cc",
    "helper_test.cc",
    "helper_test.h",
    "if_stmt_test.cc",
    "increment_decrement_stmt_test.cc",
    "lexer_test.cc",
    "lhs_expression_test.cc",
    "loop_stmt_test.cc",
    "math_expression_test.cc",
    "multiplicative_expression_test.cc",
    "param_list_test.cc",
    "paren_expression_test.cc",
    "parser_test.cc",
    "primary_expression_test.cc",
    "relational_expression_test.cc",
    "require_directive_test.cc",
    "reserved_keyword_test.cc",
    "shift_expression_test.cc",
    "singular_expression_test.cc",
    "statement_test.cc",
    "statements_test.cc",
    "struct_attribute_decl_test.cc",
    "struct_body_decl_test.cc",
    "struct_decl_test.cc",
    "struct_member_attribute_decl_test.cc",
    "struct_member_attribute_test.cc",
    "struct_member_test.cc",
    "switch_body_test.cc",
    "switch_stmt_test.cc",
    "token_test.cc",
    "type_alias_test.cc",
    "type_decl_test.cc",
    "unary_expression_test.cc",
    "variable_attribute_list_test.cc",
    "variable_attribute_test.cc",
    "variable_decl_test.cc",
    "variable_ident_decl_test.cc",
    "variable_qualifier_test.cc",
    "variable_stmt_test.cc",
    "while_stmt_test.cc",
  ],
  deps = [
    "//src/tint/api/common",
    "//src/tint/lang/core",
    "//src/tint/lang/core/constant",
    "//src/tint/lang/core/type",
    "//src/tint/lang/wgsl",
    "//src/tint/lang/wgsl/ast",
    "//src/tint/lang/wgsl/ast:test",
    "//src/tint/lang/wgsl/program",
    "//src/tint/lang/wgsl/reader/parser",
    "//src/tint/lang/wgsl/resolver",
    "//src/tint/lang/wgsl/sem",
    "//src/tint/utils/containers",
    "//src/tint/utils/diagnostic",
    "//src/tint/utils/ice",
    "//src/tint/utils/id",
    "//src/tint/utils/macros",
    "//src/tint/utils/math",
    "//src/tint/utils/memory",
    "//src/tint/utils/reflection",
    "//src/tint/utils/result",
    "//src/tint/utils/rtti",
    "//src/tint/utils/symbol",
    "//src/tint/utils/text",
    "//src/tint/utils/traits",
    "@gtest",
  ],
  copts = COPTS,
  visibility = ["//visibility:public"],
)

