Skip to content

Commit

Permalink
With this change, each target can select an optimization level for Wi…
Browse files Browse the repository at this point in the history
…ndows official builds by setting a variable name "optimize" to one of three possible values:

- "size"; optimizes for minimal code size, the default.
- "speed"; optimizes for speed over code size.
- "max"; turns on link time code generation and whole
   program optimization, which is very expensive and should
   be used sparingly.

Note that this change by itself lowers the optimization level to "size" for all targets. Separate changes to the V8 and WebKit repos will be needed to bring up their optimization levels to WPO. 

BUG=108167
TEST=


Review URL: http://codereview.chromium.org/8983002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@115187 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
siggi@chromium.org committed Dec 20, 2011
1 parent 91f0305 commit 2212d27
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 12 deletions.
66 changes: 61 additions & 5 deletions build/common.gypi
Original file line number Diff line number Diff line change
Expand Up @@ -755,14 +755,14 @@
],
}], # OS=="mac"

# Whether to use multiple cores to compile with visual studio. This is
# optional because it sometimes causes corruption on VS 2005.
# It is on by default on VS 2008 and off on VS 2005.
['OS=="win"', {
'conditions': [
['component=="shared_library"', {
'win_use_allocator_shim%': 0,
}],
# Whether to use multiple cores to compile with visual studio. This is
# optional because it sometimes causes corruption on VS 2005.
# It is on by default on VS 2008 and off on VS 2005.
['MSVS_VERSION=="2005"', {
'msvs_multi_core_compile%': 0,
},{
Expand Down Expand Up @@ -1509,9 +1509,14 @@
},
'msvs_settings': {
'VCCLCompilerTool': {
'Optimization': '<(win_release_Optimization)',
'RuntimeLibrary': '<(win_release_RuntimeLibrary)',
'conditions': [
# In official builds, each target will self-select
# an optimization level.
['buildtype!="Official"', {
'Optimization': '<(win_release_Optimization)',
},
],
# According to MSVS, InlineFunctionExpansion=0 means
# "default inlining", not "/Ob0".
# Thus, we have to handle InlineFunctionExpansion==0 separately.
Expand Down Expand Up @@ -2341,7 +2346,7 @@
'OTHER_LDFLAGS': [
'-faddress-sanitizer',
# The symbols below are referenced in the ASan runtime
# library (compiled on OS X 10.6), but may be unavailable
# library (compiled on OS X 10.6), but may be unavailable
# on the prior OS X versions. Because Chromium is currently
# targeting 10.5.0, we need to explicitly mark these
# symbols as dynamic_lookup.
Expand Down Expand Up @@ -2493,6 +2498,57 @@
'_HAS_TR1=0',
],
'conditions': [
['buildtype=="Official"', {
# In official builds, targets can self-select an optimization
# level by defining a variable named 'optimize', and setting it
# to one of
# - "size", optimizes for minimal code size - the default.
# - "speed", optimizes for speed over code size.
# - "max", whole program optimization and link-time code
# generation. This is very expensive and should be used
# sparingly.
'variables': {
'optimize%': 'size',
},
'target_conditions': [
['optimize=="size"', {
'msvs_settings': {
'VCCLCompilerTool': {
# 1, optimizeMinSpace, Minimize Size (/O1)
'Optimization': '1',
# 2, favorSize - Favor small code (/Os)
'FavorSizeOrSpeed': '2',
},
},
},
],
['optimize=="speed"', {
'msvs_settings': {
'VCCLCompilerTool': {
# 2, optimizeMaxSpeed, Maximize Speed (/O2)
'Optimization': '2',
# 1, favorSpeed - Favor fast code (/Ot)
'FavorSizeOrSpeed': '1',
},
},
},
],
['optimize=="max"', {
'msvs_settings': {
'VCCLCompilerTool': {
# 2, optimizeMaxSpeed, Maximize Speed (/O2)
'Optimization': '2',
# 1, favorSpeed - Favor fast code (/Ot)
'FavorSizeOrSpeed': '1',
# This implies link time code generation.
'WholeProgramOptimization': 'true',
},
},
},
],
],
},
],
['component=="static_library"', {
'defines': [
'_HAS_EXCEPTIONS=0',
Expand Down
6 changes: 6 additions & 0 deletions build/internal/release_defaults.gypi
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
# Copyright (c) 2011 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.
{
'msvs_settings': {
'VCCLCompilerTool': {
'StringPooling': 'true',
},
'VCLinkerTool': {
# No incremental linking.
'LinkIncremental': '1',
# Eliminate Unreferenced Data (/OPT:REF).
'OptimizeReferences': '2',
# Folding on (/OPT:ICF).
'EnableCOMDATFolding': '2',
},
},
Expand Down
3 changes: 3 additions & 0 deletions build/internal/release_impl.gypi
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# Copyright (c) 2011 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.
{
'includes': ['release_defaults.gypi'],
}
14 changes: 7 additions & 7 deletions build/internal/release_impl_official.gypi
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
# Copyright (c) 2011 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.
{
'includes': ['release_defaults.gypi'],
'defines': ['OFFICIAL_BUILD'],
'msvs_settings': {
'VCCLCompilerTool': {
'Optimization': '3',
'InlineFunctionExpansion': '2',
'EnableIntrinsicFunctions': 'true',
'FavorSizeOrSpeed': '2',
'OmitFramePointers': 'true',
'EnableFiberSafeOptimizations': 'true',
'WholeProgramOptimization': 'true',
},
'VCLibrarianTool': {
'AdditionalOptions': ['/ltcg', '/expectedoutputsize:120000000'],
'AdditionalOptions': [
'/ltcg',
'/expectedoutputsize:120000000'
],
},
'VCLinkerTool': {
# Get more debug spew from the linker while we're sorting out
# build problems and performance.
# TODO(siggi): Remove these flags after we're out of the woods.
'AdditionalOptions': [
'/time',
# This may reduce memory fragmentation during linking.
Expand Down

0 comments on commit 2212d27

Please sign in to comment.