Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/chromium/build/config/compiler/pgo/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 3 kB image not shown  

Quelle  BUILD.gn   Sprache: unbekannt

 
# 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" ]
  }
}

[ Dauer der Verarbeitung: 0.14 Sekunden  (vorverarbeitet)  ]