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

import("//build/config/scudo/scudo.gni")
import("//build/toolchain/variant.gni")

# This group is added unconditionally by BUILDCONFIG.gn to pick up the
# global `use_scudo` build argument.  For fine-grained control, leave
# `use_scudo=false` and use `select_variant` to choose the `scudo`
# variant for some components.
# This configuration will apply to the executable alone, and not any of its
# deps. (So most code will not be compiled with Scudo, but executables will
# be *linked* with it, which is the important thing.)
# Enabling Scudo requires both a configuration change and an additional
# dependency; we group them together here.
group("default_for_executable") {
  if (use_scudo && is_fuchsia) {
    public_configs = [ ":scudo" ]
    deps = [
      ":scudo_default_options",
    ]
  }
}

# This defines the //build/config/scudo config that's used separately
# when `use_scudo` is set, as well as making that config (along with
# the deps to propagate `scudo_default_options`) into a variant.
variant("scudo") {
  # The variant only works by linking Scudo in.
  # i.e., we don't support code that relies on `#if __has_feature(scudo)`.
  ldflags = [ "-fsanitize=scudo" ]
  deps = [
    ":scudo_default_options",
  ]
}

source_set("scudo_default_options") {
  visibility = [ ":*" ]
  if (scudo_default_options != []) {
    sources = [
      "scudo_default_options.c",
    ]
    options_string = ""
    foreach(option, scudo_default_options) {
      options_string += ":$option"
    }
    defines = [ "SCUDO_DEFAULT_OPTIONS=\"${options_string}\"" ]

    # The Scudo runtime is dynamically linked and needs to have
    # the __scudo_default_options symbol exported.
    configs -= [ "//build/config:symbol_visibility_hidden" ]
  }
}
