blob: a654446dab8717847f55125c5366c05a1ed6e31b [file] [log] [blame]
# Copyright 2017 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/lto/config.gni")
import("//build/toolchain/variant.gni")
# This config is added unconditionally by BUILDCONFIG.gn to pick up the
# global `use_lto` build argument. For fine-grained control, leave
# `use_lto=false` and use `select_variant` to choose the `lto` or `thinlto`
# variant for some components.
config("default") {
if (use_lto) {
if (use_thinlto) {
configs = [ ":thinlto" ]
} else {
configs = [ ":lto" ]
}
}
}
variant("lto") {
common_flags = [
"-flto",
# Enable whole-program devirtualization and virtual constant propagation.
"-fwhole-program-vtables",
]
}
variant("thinlto") {
common_flags = [ "-flto=thin" ]
ldflags = [
# The ThinLTO driver launches a number of threads in parallel whose
# number is by default equivalent to the number of cores. We need
# to limit the parallelism to avoid aggressive competition between
# different linker jobs.
"-Wl,--thinlto-jobs=$thinlto_jobs",
# Set the ThinLTO cache directory which is used to cache native
# object files for ThinLTO incremental builds. This directory is
# not managed by Ninja and has to be cleaned manually, but it is
# periodically garbage-collected by the ThinLTO driver.
"-Wl,--thinlto-cache-dir=$thinlto_cache_dir",
]
}