Index: build/config/BUILDCONFIG.gn |
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn |
index 1445e4af2ab4c09c512919242c1793dbf9562fd1..a55a56582fb4912befa3719d03e1fc7a9fb1c489 100644 |
--- a/build/config/BUILDCONFIG.gn |
+++ b/build/config/BUILDCONFIG.gn |
@@ -111,20 +111,11 @@ |
# even if the value is overridden, which is wasteful. See first bullet. |
declare_args() { |
- # 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. |
+ # Component build. |
is_component_build = false |
- # 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 |
+ # Debug build. |
+ is_debug = true |
# Whether we're a traditional desktop unix. |
is_desktop_linux = current_os == "linux" |
@@ -144,8 +135,6 @@ |
# DON'T ADD MORE FLAGS HERE. Read the comment above. |
} |
- |
-assert(!(is_debug && is_official_build), "Can't do official debug builds") |
# ============================================================================== |
# TOOLCHAIN SETUP |
@@ -607,38 +596,23 @@ |
# ============================================================================== |
# Defines a component, which equates to a shared_library when |
-# is_component_build == true and a static_library otherwise. |
-# |
-# 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. |
+# is_component_build == true and a source_set / 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. |
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 (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. |
- # |
- # 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. |
+ } else if (_never_use_source_set) { |
+ _component_mode = "static_library" |
+ } else { |
_component_mode = "source_set" |
- } else { |
- _component_mode = "static_library" |
} |
target(_component_mode, target_name) { |
# Explicitly forward visibility, implicitly forward everything else. |