diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn index 8c565aa6418a00..e539df782cf46b 100644 --- a/build/config/BUILDCONFIG.gn +++ b/build/config/BUILDCONFIG.gn @@ -144,6 +144,9 @@ 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. + # + # For more information see + # https://chromium.googlesource.com/chromium/src/+/master/docs/component_build.md is_component_build = is_debug && current_os != "ios" } diff --git a/docs/component_build.md b/docs/component_build.md index fe365791a0639a..06341c21cd36e4 100644 --- a/docs/component_build.md +++ b/docs/component_build.md @@ -5,17 +5,21 @@ Release builds are “static” builds which compile to one executable and zero-to-two shared libraries (depending on the platform). This is efficient at runtime, but can take a long time to link because so much code goes into a -single binary. When you set the GN build variable +single binary. + +In a component build, many smaller shared libraries will be generated. This +speeds up link times, and means that many changes only require that the local +shared library be linked rather than the full executable, but at the expense of +program load-time performance. + +The component build is currently the default for debug non-iOS builds (it +doesn’t work for iOS). You can force it on for release builds using the +[GN build arg](https://www.chromium.org/developers/gn-build-configuration): ```python is_component_build = true ``` -the build will generate many smaller shared libraries. This speeds up link -times, and means that many changes only require that the local shared library -be linked rather than the full executable, but at the expense of program -load-time performance. - ### How to make a component Defining a component just means using the GN “component” template instead