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

import("//gn/standalone/android.gni")
import("//gn/standalone/sanitizers/vars.gni")
import("//gn/standalone/toolchain/llvm.gni")

declare_args() {
  sanitizer_lib_base_name_ = ""
  if (is_asan || is_tsan || is_ubsan) {
    if (is_asan) {
      sanitizer_lib_base_name_ = "clang_rt.asan"
    }
    if (is_tsan) {
      sanitizer_lib_base_name_ = "clang_rt.tsan"
    }
    if (is_ubsan) {
      sanitizer_lib_base_name_ = "clang_rt.ubsan"
      if (is_android || is_linux) {
        sanitizer_lib_base_name_ += "_standalone"
      }
    }
  }
}

declare_args() {
  sanitizer_lib_dir = ""
  sanitizer_lib = ""
  sanitizer_lib_dir_is_static = false
  if (sanitizer_lib_base_name_ != "") {
    if (is_mac) {
      sanitizer_lib = "${sanitizer_lib_base_name_}_osx_dynamic"
      sanitizer_lib_dir = mac_clangrt_dir
    }
    if (is_linux) {
      sanitizer_lib = "lib${sanitizer_lib_base_name_}-x86_64.a"
      sanitizer_lib_dir_is_static = true
      sanitizer_lib_dir = linux_clangrt_dir
    }
    if (is_android) {
      sanitizer_lib = "${sanitizer_lib_base_name_}-${android_llvm_arch}-android"
      sanitizer_lib_dir = android_clangrt_dir
    }
  }
}
