# 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/sanitizers/sanitizers.gni")

# Link dependencies for sanitizers for executables.
group("deps") {
  visibility = [ "*" ]
  if (using_sanitizer) {
    public_configs = [ ":sanitizers_ldflags" ]
    if (is_android && sanitizer_lib != "" && !sanitizer_lib_dir_is_static) {
      deps = [ ":copy_sanitizer_lib" ]
    }
  }
}

if (is_android && sanitizer_lib != "" && !sanitizer_lib_dir_is_static) {
  copy("copy_sanitizer_lib") {
    sources = [ "${sanitizer_lib_dir}/lib${sanitizer_lib}.so" ]
    outputs = [ "${root_out_dir}/sanitizer_libs/lib${sanitizer_lib}.so" ]
  }
}

config("sanitizers_cflags") {
  if (using_sanitizer) {
    cflags = [ "-fno-omit-frame-pointer" ]
    defines = []

    if (is_asan) {
      cflags += [ "-fsanitize=address" ]
      defines += [ "ADDRESS_SANITIZER" ]
    }
    if (is_lsan) {
      cflags += [ "-fsanitize=leak" ]
      defines += [ "LEAK_SANITIZER" ]
    }
    if (is_tsan) {
      cflags += [ "-fsanitize=thread" ]
      defines += [
        "THREAD_SANITIZER",
        "DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL=1",
      ]
    }
    if (is_msan) {
      cflags += [
        "-fsanitize=memory",
        "-fsanitize-memory-track-origins=2",
      ]
      defines += [ "MEMORY_SANITIZER" ]
    }
    if (is_ubsan) {
      cflags += [
        "-fsanitize=bounds",
        "-fsanitize=float-divide-by-zero",
        "-fsanitize=integer-divide-by-zero",
        "-fsanitize=null",
        "-fsanitize=object-size",
        "-fsanitize=return",
        "-fsanitize=returns-nonnull-attribute",
        "-fsanitize=shift-exponent",
        "-fsanitize=signed-integer-overflow",
        "-fsanitize=unreachable",
        "-fsanitize=vla-bound",
      ]
      defines += [ "UNDEFINED_SANITIZER" ]
    }
    if (is_fuzzer) {
      # FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION is also defined by oss-fuzz,
      # so using the same name.
      defines += [ "FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" ]
      cflags += [ "-fsanitize=fuzzer-no-link" ]
      if (is_asan) {
        cflags += [
          "-mllvm",
          "-asan-use-private-alias",
        ]
      }
    }
  }
}

config("sanitizer_options_link_helper") {
  if (is_mac) {
    ldflags = [ "-Wl,-U,_sanitizer_options_link_helper" ]
  }
}

config("sanitizers_ldflags") {
  if (using_sanitizer) {
    visibility = [ ":deps" ]
    ldflags = []
    if (is_asan) {
      ldflags += [ "-fsanitize=address" ]
    }
    if (is_lsan) {
      # This is not a copy/paste mistake. The LSan runtime library has
      # moved into asan. So in order to make LSan work one has to build
      # .cc files with -fsanitize=leak but link with -fsanitize=address.
      ldflags += [ "-fsanitize=address" ]
    }
    if (is_tsan) {
      ldflags += [ "-fsanitize=thread" ]
    }
    if (is_msan) {
      ldflags += [ "-fsanitize=memory" ]
    }
    if (is_ubsan) {
      ldflags += [ "-fsanitize=undefined" ]
    }
    configs = [ ":sanitizer_options_link_helper" ]
  }
}
