# 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)
tint_add_target("lang/msl/writer/common"
  lang/msl/writer/common/options.cc
  lang/msl/writer/common/options.h
  lang/msl/writer/common/printer_support.cc
  lang/msl/writer/common/printer_support.h
)

tint_target_add_dependencies("lang/msl/writer/common"
  "api/common"
  "api/options"
  "lang/core"
  "lang/core/type"
  "utils/containers"
  "utils/ice"
  "utils/id"
  "utils/macros"
  "utils/math"
  "utils/memory"
  "utils/reflection"
  "utils/rtti"
  "utils/strconv"
  "utils/symbol"
  "utils/text"
  "utils/traits"
)

endif(TINT_BUILD_MSL_WRITER)
if(TINT_BUILD_MSL_WRITER)
tint_add_target("lang/msl/writer/common:test"
  lang/msl/writer/common/printer_support_test.cc
)

tint_target_add_dependencies("lang/msl/writer/common:test"
  "lang/core"
  "lang/core/type"
  "utils/containers"
  "utils/ice"
  "utils/macros"
  "utils/math"
  "utils/memory"
  "utils/rtti"
  "utils/text"
  "utils/traits"
)

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

endif(TINT_BUILD_MSL_WRITER)