# 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.cmake.tmpl
#
# Do not modify this file directly
################################################################################

if(TINT_BUILD_GLSL_WRITER)
tint_add_target("lang/glsl/writer/ast_printer"
  lang/glsl/writer/ast_printer/ast_printer.cc
  lang/glsl/writer/ast_printer/ast_printer.h
)

tint_target_add_dependencies("lang/glsl/writer/ast_printer"
  "lang/core"
  "lang/core/constant"
  "lang/core/type"
  "lang/wgsl/ast"
  "lang/wgsl/ast/transform"
  "lang/wgsl/helpers"
  "lang/wgsl/program"
  "lang/wgsl/sem"
  "utils/containers"
  "utils/diagnostic"
  "utils/generator"
  "utils/ice"
  "utils/id"
  "utils/macros"
  "utils/math"
  "utils/memory"
  "utils/result"
  "utils/rtti"
  "utils/strconv"
  "utils/symbol"
  "utils/text"
  "utils/traits"
)

if (TINT_BUILD_GLSL_WRITER)
  tint_target_add_dependencies("lang/glsl/writer/ast_printer"
    "lang/glsl/writer/common"
  )
endif(TINT_BUILD_GLSL_WRITER)

endif(TINT_BUILD_GLSL_WRITER)
if(TINT_BUILD_GLSL_WRITER)
tint_add_target("lang/glsl/writer/ast_printer:test"
  lang/glsl/writer/ast_printer/array_accessor_test.cc
  lang/glsl/writer/ast_printer/assign_test.cc
  lang/glsl/writer/ast_printer/ast_printer_test.cc
  lang/glsl/writer/ast_printer/binary_test.cc
  lang/glsl/writer/ast_printer/bitcast_test.cc
  lang/glsl/writer/ast_printer/block_test.cc
  lang/glsl/writer/ast_printer/break_test.cc
  lang/glsl/writer/ast_printer/builtin_test.cc
  lang/glsl/writer/ast_printer/builtin_texture_test.cc
  lang/glsl/writer/ast_printer/call_test.cc
  lang/glsl/writer/ast_printer/case_test.cc
  lang/glsl/writer/ast_printer/cast_test.cc
  lang/glsl/writer/ast_printer/constructor_test.cc
  lang/glsl/writer/ast_printer/continue_test.cc
  lang/glsl/writer/ast_printer/discard_test.cc
  lang/glsl/writer/ast_printer/function_test.cc
  lang/glsl/writer/ast_printer/helper_test.h
  lang/glsl/writer/ast_printer/identifier_test.cc
  lang/glsl/writer/ast_printer/if_test.cc
  lang/glsl/writer/ast_printer/import_test.cc
  lang/glsl/writer/ast_printer/loop_test.cc
  lang/glsl/writer/ast_printer/member_accessor_test.cc
  lang/glsl/writer/ast_printer/module_constant_test.cc
  lang/glsl/writer/ast_printer/return_test.cc
  lang/glsl/writer/ast_printer/sanitizer_test.cc
  lang/glsl/writer/ast_printer/storage_buffer_test.cc
  lang/glsl/writer/ast_printer/switch_test.cc
  lang/glsl/writer/ast_printer/type_test.cc
  lang/glsl/writer/ast_printer/unary_op_test.cc
  lang/glsl/writer/ast_printer/uniform_buffer_test.cc
  lang/glsl/writer/ast_printer/variable_decl_statement_test.cc
  lang/glsl/writer/ast_printer/workgroup_var_test.cc
)

tint_target_add_dependencies("lang/glsl/writer/ast_printer:test"
  "lang/core"
  "lang/core/constant"
  "lang/core/type"
  "lang/wgsl/ast"
  "lang/wgsl/ast/transform"
  "lang/wgsl/ast:test"
  "lang/wgsl/program"
  "lang/wgsl/resolver"
  "lang/wgsl/sem"
  "utils/containers"
  "utils/diagnostic"
  "utils/generator"
  "utils/ice"
  "utils/id"
  "utils/macros"
  "utils/math"
  "utils/memory"
  "utils/result"
  "utils/rtti"
  "utils/symbol"
  "utils/text"
  "utils/traits"
)

if (TINT_BUILD_GLSL_WRITER)
  tint_target_add_dependencies("lang/glsl/writer/ast_printer:test"
    "lang/glsl/writer"
    "lang/glsl/writer/ast_printer"
    "lang/glsl/writer/common"
  )
endif(TINT_BUILD_GLSL_WRITER)

endif(TINT_BUILD_GLSL_WRITER)