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

import("//build_overrides/tint.gni")

# This file contains Tint-related build flags.

declare_args() {
  # Generate documentation
  # TODO(rharrison): Implement documentation support
  tint_build_doc = false

  # Generate SPIR-V input parser
  # TODO(rharrison): Implement SPIR-V input parser support
  tint_build_spv_parser = false

  # Generate fuzzers
  # TODO(rharrison): Implement fuzzer support
  tint_build_fuzzers = false

  # Enable memory sanitizer
  # TODO(rharrison): Implement sanitizer support
  tint_enable_msan = false

  # Enable address sanitizer
  # TODO(rharrison): Implement sanitizer support
  tint_enable_msan = false

  # Enable undefined behaviour sanitizer
  # TODO(rharrison): Implement sanitizer support
  tint_enable_ubsan = false
}