# 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/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/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"],
)

