100 lines
3.8 KiB
Text
100 lines
3.8 KiB
Text
# Copyright 2016 The Chromium 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("//chromium/build/config/chromeos/ui_mode.gni")
|
|
import("//chromium/build/config/clang/clang.gni")
|
|
import("//chromium/build/config/compiler/compiler.gni")
|
|
import("//chromium/build/config/compiler/pgo/pgo.gni")
|
|
import("//chromium/build/toolchain/toolchain.gni")
|
|
|
|
# Configuration that enables PGO instrumentation.
|
|
config("pgo_instrumentation_flags") {
|
|
visibility = [ ":default_pgo_flags" ]
|
|
|
|
# Only add flags when chrome_pgo_phase == 1, so that variables we would use
|
|
# are not required to be defined when we're not actually using PGO.
|
|
if (chrome_pgo_phase == 1 && is_clang && !is_nacl && is_a_target_toolchain) {
|
|
cflags = [ "-fprofile-generate" ]
|
|
if (!is_win) {
|
|
# Windows directly calls link.exe instead of the compiler driver when
|
|
# linking, and embeds the path to the profile runtime library as
|
|
# dependent library into each object file.
|
|
ldflags = [ "-fprofile-generate" ]
|
|
}
|
|
}
|
|
}
|
|
|
|
# Configuration that enables optimization using profile data.
|
|
config("pgo_optimization_flags") {
|
|
visibility = [ ":default_pgo_flags" ]
|
|
|
|
# Only add flags when chrome_pgo_phase == 2, so that variables we would use
|
|
# are not required to be defined when we're not actually using PGO.
|
|
if (chrome_pgo_phase == 2 && is_clang && !is_nacl && is_a_target_toolchain) {
|
|
_pgo_target = ""
|
|
|
|
# There are txt files used by //tools/update_pgo_profiles.py to decide which
|
|
# profiles to use, adding them as inputs so that analyzer recognizes the
|
|
# dependencies.
|
|
inputs = []
|
|
|
|
if (is_win) {
|
|
if (target_cpu == "x64") {
|
|
_pgo_target = "win64"
|
|
inputs = [ "//chrome/build/win64.pgo.txt" ]
|
|
} else {
|
|
_pgo_target = "win32"
|
|
inputs = [ "//chrome/build/win32.pgo.txt" ]
|
|
}
|
|
} else if (is_mac) {
|
|
_pgo_target = "mac"
|
|
inputs = [ "//chrome/build/mac.pgo.txt" ]
|
|
} else if (is_linux || is_chromeos_lacros) {
|
|
_pgo_target = "linux"
|
|
inputs = [ "//chrome/build/linux.pgo.txt" ]
|
|
}
|
|
|
|
if (pgo_data_path == "" && _pgo_target != "") {
|
|
pgo_data_path = rebase_path(exec_script("//tools/update_pgo_profiles.py",
|
|
[
|
|
"--target",
|
|
_pgo_target,
|
|
"get_profile_path",
|
|
],
|
|
"value"),
|
|
root_build_dir)
|
|
}
|
|
assert(pgo_data_path != "",
|
|
"Please set pgo_data_path to point at the profile data")
|
|
cflags = [
|
|
"-fprofile-instr-use=$pgo_data_path",
|
|
|
|
# It's possible to have some profile data legitimately missing,
|
|
# and at least some profile data always ends up being considered
|
|
# out of date, so make sure we don't error for those cases.
|
|
"-Wno-profile-instr-unprofiled",
|
|
"-Wno-profile-instr-out-of-date",
|
|
|
|
# Some hashing conflict results in a lot of warning like this when doing
|
|
# a PGO build:
|
|
# warning: foo.cc: Function control flow change detected (hash mismatch)
|
|
# [-Wbackend-plugin]
|
|
# See https://crbug.com/978401
|
|
"-Wno-backend-plugin",
|
|
]
|
|
}
|
|
}
|
|
|
|
# Applies flags necessary when profile-guided optimization is used.
|
|
# Flags are only added if PGO is enabled, so that this config is safe to
|
|
# include by default.
|
|
config("default_pgo_flags") {
|
|
if (chrome_pgo_phase == 0) {
|
|
# Nothing. This config should be a no-op when chrome_pgo_phase == 0.
|
|
} else if (chrome_pgo_phase == 1) {
|
|
configs = [ ":pgo_instrumentation_flags" ]
|
|
} else if (chrome_pgo_phase == 2) {
|
|
configs = [ ":pgo_optimization_flags" ]
|
|
}
|
|
}
|