# 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() {
  # Path to spirv-tools checkout
  if (!defined(tint_spirv_tools_dir)) {
    tint_spirv_tools_dir = "//third_party/spirv-tools"
  }

  # Path to googletest checkout
  if (!defined(tint_googletest_dir)) {
    tint_googletest_dir = "//third_party/googletest"
  }

  # Path to spirv-tools generated files, relative to |target_gen_dir|
  if (!defined(tint_spirv_tools_gen)) {
    tint_spirv_tools_gen = "third_party/spirv-tools"
  }

  # Path to spirv-headers checkout
  if (!defined(tint_spirv_headers_dir)) {
    tint_spirv_headers_dir = "//third_party/spirv-headers"
  }

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

  # Build the SPIR-V input reader
  if (!defined(tint_build_spv_reader)) {
    tint_build_spv_reader = false
  }

  # Build the SPIR-V output writer
  if (!defined(tint_build_spv_writer)) {
    tint_build_spv_writer = false
  }

  # Build the WGSL input reader
  if (!defined(tint_build_wgsl_reader)) {
    tint_build_wgsl_reader = false
  }

  # Build the WGSL output writer
  if (!defined(tint_build_wgsl_writer)) {
    tint_build_wgsl_writer = 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
}
