# 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_MSL_WRITER)
################################################################################
# CMake target: 'tint_lang_msl_writer_ast_printer'
################################################################################
tint_add_target("lang/msl/writer/ast_printer"
  lang/msl/writer/ast_printer/ast_printer.cc
  lang/msl/writer/ast_printer/ast_printer.h
)

tint_target_add_dependencies("lang/msl/writer/ast_printer"
  "api/common"
  "api/options"
  "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/reflection"
  "utils/result"
  "utils/rtti"
  "utils/symbol"
  "utils/text"
  "utils/traits"
)

if (TINT_BUILD_MSL_WRITER)
  tint_target_add_dependencies("lang/msl/writer/ast_printer"
    "lang/msl/writer/common"
  )
endif(TINT_BUILD_MSL_WRITER)

endif(TINT_BUILD_MSL_WRITER)
if(TINT_BUILD_MSL_WRITER)
################################################################################
# CMake target: 'tint_lang_msl_writer_ast_printer_test'
################################################################################
tint_add_target("lang/msl/writer/ast_printer:test"
  lang/msl/writer/ast_printer/array_accessor_test.cc
  lang/msl/writer/ast_printer/assign_test.cc
  lang/msl/writer/ast_printer/ast_function_test.cc
  lang/msl/writer/ast_printer/ast_printer_test.cc
  lang/msl/writer/ast_printer/ast_type_test.cc
  lang/msl/writer/ast_printer/binary_test.cc
  lang/msl/writer/ast_printer/bitcast_test.cc
  lang/msl/writer/ast_printer/block_test.cc
  lang/msl/writer/ast_printer/break_test.cc
  lang/msl/writer/ast_printer/builtin_test.cc
  lang/msl/writer/ast_printer/builtin_texture_test.cc
  lang/msl/writer/ast_printer/call_test.cc
  lang/msl/writer/ast_printer/case_test.cc
  lang/msl/writer/ast_printer/cast_test.cc
  lang/msl/writer/ast_printer/const_assert_test.cc
  lang/msl/writer/ast_printer/constructor_test.cc
  lang/msl/writer/ast_printer/continue_test.cc
  lang/msl/writer/ast_printer/discard_test.cc
  lang/msl/writer/ast_printer/helper_test.h
  lang/msl/writer/ast_printer/identifier_test.cc
  lang/msl/writer/ast_printer/if_test.cc
  lang/msl/writer/ast_printer/import_test.cc
  lang/msl/writer/ast_printer/loop_test.cc
  lang/msl/writer/ast_printer/member_accessor_test.cc
  lang/msl/writer/ast_printer/module_constant_test.cc
  lang/msl/writer/ast_printer/return_test.cc
  lang/msl/writer/ast_printer/sanitizer_test.cc
  lang/msl/writer/ast_printer/switch_test.cc
  lang/msl/writer/ast_printer/unary_op_test.cc
  lang/msl/writer/ast_printer/variable_decl_statement_test.cc
)

tint_target_add_dependencies("lang/msl/writer/ast_printer:test"
  "api/common"
  "api/options"
  "lang/core"
  "lang/core/constant"
  "lang/core/type"
  "lang/wgsl/ast"
  "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/reflection"
  "utils/result"
  "utils/rtti"
  "utils/symbol"
  "utils/text"
  "utils/traits"
)

tint_target_add_external_dependencies("lang/msl/writer/ast_printer:test"
  "gtest"
)

if (TINT_BUILD_MSL_WRITER)
  tint_target_add_dependencies("lang/msl/writer/ast_printer:test"
    "lang/msl/writer"
    "lang/msl/writer/ast_printer"
    "lang/msl/writer/common"
  )
endif(TINT_BUILD_MSL_WRITER)

endif(TINT_BUILD_MSL_WRITER)