blob: 12f005042a30332faddd96e4575a820d9cd3423f [file] [log] [blame]
# Copyright 2019 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.
config("lto") {
compiler_flags = [
"-flto",
# Enable whole-program devirtualization and virtual constant propagation.
"-fwhole-program-vtables",
]
asmflags = compiler_flags
cflags = compiler_flags
ldflags = compiler_flags
}
declare_args() {
# Number of parallel ThinLTO jobs.
thinlto_jobs = 8
# ThinLTO cache directory path.
thinlto_cache_dir = rebase_path("$root_out_dir/thinlto-cache", root_build_dir)
}
config("thinlto") {
compiler_flags = [ "-flto=thin" ]
asmflags = compiler_flags
cflags = compiler_flags
ldflags = compiler_flags
# These switches have the same meaning but different spellings for
# lld-link vs ld.lld.
if (current_os == "win") {
_jobs = "/opt:lldltojobs="
_cache_dir = "/lldltocache:"
} else {
_jobs = "--thinlto-jobs="
_cache_dir = "--thinlto-cache-dir="
}
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,$_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,$_cache_dir$thinlto_cache_dir",
]
}