# Copyright (C) 2017 The Android Open Source Project
#
# 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.

declare_args() {
  # Address Sanitizer: memory bugs (e.g., UAF).
  is_asan = false

  # Leak Sanitizer: memory leaks.
  is_lsan = false

  # Memory Sanitizer: uninitialized reads.
  is_msan = false

  # Thread Sanitizer: threading bugs.
  is_tsan = false

  # Undefined Behaviour Sanitizer.
  is_ubsan = false

  # Compile for fuzzing.
  is_fuzzer = false

  # When enabled, only relevant sanitizer defines are set, but compilation
  # happens with no extra flags. This is useful when in component build
  # enabling sanitizers only in some of the components.
  use_sanitizer_configs_without_instrumentation = false
}

declare_args() {
  # Link in LLVM LibFuzzer.
  use_libfuzzer = is_fuzzer

  # If is_fuzzer=true and use_libfuzzer=false, add this flag to ldflags when
  # linking fuzzer executables.
  link_fuzzer = ""
}

declare_args() {
  # Don't build host artifacts with sanitizers/fuzzers, only target toolchain.
  using_sanitizer = (is_asan || is_lsan || is_tsan || is_msan || is_ubsan ||
                     use_libfuzzer) && current_toolchain == default_toolchain
}

assert(!using_sanitizer || is_clang || is_system_compiler,
       "is_*san requires is_clang=true'")
assert(!is_msan || is_linux, "msan only supported on linux")
assert(!is_tsan || (is_linux || is_mac), "tsan only supported on linux and mac")
assert(!is_fuzzer || use_libfuzzer || link_fuzzer != "")
