# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Modifications Copyright 2017 The Cobalt Authors. All Rights Reserved.
#
# 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.

# Allow for platform-specific customization of use_asan_by_default
import("//$starboard_path/configuration.gni")

declare_args() {
  # Compile for Thread Sanitizer to find threading bugs.
  use_tsan = false
}

declare_args() {
  # Compile for Address Sanitizer to find memory bugs.
  use_asan =
      !use_tsan && (cobalt_config == "debug" || cobalt_config == "devel") &&
      (defined(use_asan_by_default) && use_asan_by_default)
}

assert(!(use_asan && use_tsan), "ASan and TSan are mutually exclusive")

if (current_toolchain != default_toolchain) {
  # Disable sanitizers for non-default toolchains.
  use_asan = false
  use_tsan = false
}
