blob: 5e2ddf030614e41b04abc9d90e360ca5f68e227b [file] [log] [blame]
# 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" ]
}
}