Chromium Code Reviews| Index: build/config/BUILDCONFIG.gn |
| diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn |
| index a55a56582fb4912befa3719d03e1fc7a9fb1c489..1445e4af2ab4c09c512919242c1793dbf9562fd1 100644 |
| --- a/build/config/BUILDCONFIG.gn |
| +++ b/build/config/BUILDCONFIG.gn |
| @@ -111,11 +111,20 @@ if (current_os == "") { |
| # even if the value is overridden, which is wasteful. See first bullet. |
| declare_args() { |
| - # Component build. |
| + # Component build. Setting to true compiles targets declared as "components" |
| + # as shared libraries loaded dynamically. This speeds up development time. |
| + # When false, components will be linked statically. |
| is_component_build = false |
| - # Debug build. |
| - is_debug = true |
| + # Set to enable the official build level of optimization. This has nothing |
| + # to do with branding, but enables an additional level of optimization above |
| + # release (!is_debug). This might be better expressed as a tri-state |
| + # (debug, release, official) but for historical reasons there are two |
| + # separate flags. |
| + is_official_build = false |
| + |
| + # Debug build. Enabling official builds automatically sets is_debug to false. |
| + is_debug = !is_official_build |
| # Whether we're a traditional desktop unix. |
| is_desktop_linux = current_os == "linux" |
| @@ -136,6 +145,8 @@ declare_args() { |
| # DON'T ADD MORE FLAGS HERE. Read the comment above. |
| } |
| +assert(!(is_debug && is_official_build), "Can't do official debug builds") |
| + |
| # ============================================================================== |
| # TOOLCHAIN SETUP |
| # ============================================================================== |
| @@ -596,23 +607,38 @@ set_defaults("test") { |
| # ============================================================================== |
| # Defines a component, which equates to a shared_library when |
| -# is_component_build == true and a source_set / static_library otherwise. |
| +# is_component_build == true and a static_library otherwise. |
| # |
| -# Arguments are the same as a normal library with this addition: |
| -# component_never_use_source_set: Whether to use static_library instead of |
| -# source_set for non-component builds. Some targets (e.g. //base) should |
| -# use static_library rather than source_set to avoid linking unused object |
| -# files. |
| +# Use static libraries for the static build rather than source sets because |
| +# many of of our test binaries link many large dependencies but often don't |
| +# use large portions of them. The static libraries are much more efficient to |
| +# link in this situation since only the necessary object files are linked. |
| +# |
| +# The invoker can override the type of the target in the non-component-build |
| +# case by setting static_component_type to either "source_set" or |
| +# "static_library". If unset, the default will be used. |
| template("component") { |
| - _never_use_source_set = defined(invoker.component_never_use_source_set) && |
| - invoker.component_never_use_source_set |
| - assert(_never_use_source_set || true) # Mark as used. |
| if (is_component_build) { |
| _component_mode = "shared_library" |
| - } else if (_never_use_source_set) { |
| - _component_mode = "static_library" |
| - } else { |
| + } else if (defined(invoker.static_component_type)) { |
| + assert(invoker.static_component_type == "static_library" || |
| + invoker.static_component_type == "source_set") |
| + _component_mode = invoker.static_component_type |
| + } else if (!defined(invoker.sources) || is_mac || |
| + (is_win && is_official_build)) { |
| + # When there are no sources defined, use a source set to avoid creating |
| + # an empty static library (which generally don't work). |
| + # |
| + # On Windows official builds, the link time code generation bloats static |
| + # libraries to the point where some of them become >32 bits large which |
| + # causes lib.exe to fail. Always use source sets for that configuration. |
|
Dirk Pranke
2016/06/13 19:43:37
this allows us to avoid msvs_shard?
|
| + # |
| + # TODO(brettw) bug 618797: Remove the mac condition. On Mac making these as |
| + # static_library causes crashes. Remove the mac condition above when this |
| + # is fixed. |
| _component_mode = "source_set" |
| + } else { |
| + _component_mode = "static_library" |
| } |
| target(_component_mode, target_name) { |
| # Explicitly forward visibility, implicitly forward everything else. |