Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(872)

Side by Side Diff: pylib/gyp/generator/ninja.py

Issue 11031005: Add "standalone_static_library" flag (Closed) Base URL: http://gyp.googlecode.com/svn/trunk/
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pylib/gyp/generator/msvs.py ('k') | pylib/gyp/input.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 Google Inc. All rights reserved. 1 # Copyright (c) 2012 Google Inc. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import copy 5 import copy
6 import hashlib 6 import hashlib
7 import os.path 7 import os.path
8 import re 8 import re
9 import subprocess 9 import subprocess
10 import sys 10 import sys
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 359
360 Returns a Target object, which represents the output paths for this spec. 360 Returns a Target object, which represents the output paths for this spec.
361 Returns None if there are no outputs (e.g. a settings-only 'none' type 361 Returns None if there are no outputs (e.g. a settings-only 'none' type
362 target).""" 362 target)."""
363 363
364 self.config_name = config_name 364 self.config_name = config_name
365 self.name = spec['target_name'] 365 self.name = spec['target_name']
366 self.toolset = spec['toolset'] 366 self.toolset = spec['toolset']
367 config = spec['configurations'][config_name] 367 config = spec['configurations'][config_name]
368 self.target = Target(spec['type']) 368 self.target = Target(spec['type'])
369 self.is_standalone_static_library = bool(
370 spec.get('standalone_static_library', 0))
369 371
370 self.is_mac_bundle = gyp.xcode_emulation.IsMacBundle(self.flavor, spec) 372 self.is_mac_bundle = gyp.xcode_emulation.IsMacBundle(self.flavor, spec)
371 self.xcode_settings = self.msvs_settings = None 373 self.xcode_settings = self.msvs_settings = None
372 if self.flavor == 'mac': 374 if self.flavor == 'mac':
373 self.xcode_settings = gyp.xcode_emulation.XcodeSettings(spec) 375 self.xcode_settings = gyp.xcode_emulation.XcodeSettings(spec)
374 if self.flavor == 'win': 376 if self.flavor == 'win':
375 self.msvs_settings = gyp.msvs_emulation.MsvsSettings(spec, 377 self.msvs_settings = gyp.msvs_emulation.MsvsSettings(spec,
376 generator_flags) 378 generator_flags)
377 target_platform = self.msvs_settings.GetTargetPlatform(config_name) 379 target_platform = self.msvs_settings.GetTargetPlatform(config_name)
378 self.ninja.variable('arch', self.win_env[target_platform]) 380 self.ninja.variable('arch', self.win_env[target_platform])
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 elif spec['type'] == 'static_library': 947 elif spec['type'] == 'static_library':
946 self.target.binary = self.ComputeOutput(spec) 948 self.target.binary = self.ComputeOutput(spec)
947 variables = [] 949 variables = []
948 postbuild = self.GetPostbuildCommand( 950 postbuild = self.GetPostbuildCommand(
949 spec, self.target.binary, self.target.binary) 951 spec, self.target.binary, self.target.binary)
950 if postbuild: 952 if postbuild:
951 variables.append(('postbuilds', postbuild)) 953 variables.append(('postbuilds', postbuild))
952 if self.xcode_settings: 954 if self.xcode_settings:
953 variables.append(('libtool_flags', 955 variables.append(('libtool_flags',
954 self.xcode_settings.GetLibtoolflags(config_name))) 956 self.xcode_settings.GetLibtoolflags(config_name)))
955 self.ninja.build(self.target.binary, 'alink', link_deps, 957 if (self.flavor not in ('mac', 'win') and not
956 order_only=compile_deps, variables=variables) 958 self.is_standalone_static_library):
959 self.ninja.build(self.target.binary, 'alink_thin', link_deps,
960 order_only=compile_deps, variables=variables)
961 else:
962 self.ninja.build(self.target.binary, 'alink', link_deps,
963 order_only=compile_deps, variables=variables)
957 else: 964 else:
958 self.WriteLink(spec, config_name, config, link_deps) 965 self.WriteLink(spec, config_name, config, link_deps)
959 return self.target.binary 966 return self.target.binary
960 967
961 def WriteMacBundle(self, spec, mac_bundle_depends): 968 def WriteMacBundle(self, spec, mac_bundle_depends):
962 assert self.is_mac_bundle 969 assert self.is_mac_bundle
963 package_framework = spec['type'] in ('shared_library', 'loadable_module') 970 package_framework = spec['type'] in ('shared_library', 'loadable_module')
964 output = self.ComputeMacBundleOutput() 971 output = self.ComputeMacBundleOutput()
965 postbuild = self.GetPostbuildCommand(spec, output, self.target.binary, 972 postbuild = self.GetPostbuildCommand(spec, output, self.target.binary,
966 is_command_start=not package_framework) 973 is_command_start=not package_framework)
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1130 return self.ExpandSpecial(path) 1137 return self.ExpandSpecial(path)
1131 1138
1132 # Some products go into the output root, libraries go into shared library 1139 # Some products go into the output root, libraries go into shared library
1133 # dir, and everything else goes into the normal place. 1140 # dir, and everything else goes into the normal place.
1134 type_in_output_root = ['executable', 'loadable_module'] 1141 type_in_output_root = ['executable', 'loadable_module']
1135 if self.flavor == 'mac' and self.toolset == 'target': 1142 if self.flavor == 'mac' and self.toolset == 'target':
1136 type_in_output_root += ['shared_library', 'static_library'] 1143 type_in_output_root += ['shared_library', 'static_library']
1137 elif self.flavor == 'win' and self.toolset == 'target': 1144 elif self.flavor == 'win' and self.toolset == 'target':
1138 type_in_output_root += ['shared_library'] 1145 type_in_output_root += ['shared_library']
1139 1146
1140 if type in type_in_output_root: 1147 if type in type_in_output_root or self.is_standalone_static_library:
1141 return filename 1148 return filename
1142 elif type == 'shared_library': 1149 elif type == 'shared_library':
1143 libdir = 'lib' 1150 libdir = 'lib'
1144 if self.toolset != 'target': 1151 if self.toolset != 'target':
1145 libdir = os.path.join('lib', '%s' % self.toolset) 1152 libdir = os.path.join('lib', '%s' % self.toolset)
1146 return os.path.join(libdir, filename) 1153 return os.path.join(libdir, filename)
1147 else: 1154 else:
1148 return self.GypPathToUniqueOutput(filename, qualified=False) 1155 return self.GypPathToUniqueOutput(filename, qualified=False)
1149 1156
1150 def WriteVariableList(self, var, values): 1157 def WriteVariableList(self, var, values):
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
1487 'asm', 1494 'asm',
1488 description='ASM $in', 1495 description='ASM $in',
1489 command=('%s gyp-win-tool asm-wrapper ' 1496 command=('%s gyp-win-tool asm-wrapper '
1490 '$arch $asm $defines $includes /c /Fo $out $in' % 1497 '$arch $asm $defines $includes /c /Fo $out $in' %
1491 sys.executable)) 1498 sys.executable))
1492 1499
1493 if flavor != 'mac' and flavor != 'win': 1500 if flavor != 'mac' and flavor != 'win':
1494 master_ninja.rule( 1501 master_ninja.rule(
1495 'alink', 1502 'alink',
1496 description='AR $out', 1503 description='AR $out',
1504 command='rm -f $out && $ar rcs $out $in')
1505 master_ninja.rule(
1506 'alink_thin',
1507 description='AR $out',
1497 command='rm -f $out && $ar rcsT $out $in') 1508 command='rm -f $out && $ar rcsT $out $in')
1498 1509
1499 # This allows targets that only need to depend on $lib's API to declare an 1510 # This allows targets that only need to depend on $lib's API to declare an
1500 # order-only dependency on $lib.TOC and avoid relinking such downstream 1511 # order-only dependency on $lib.TOC and avoid relinking such downstream
1501 # dependencies when $lib changes only in non-public ways. 1512 # dependencies when $lib changes only in non-public ways.
1502 # The resulting string leaves an uninterpolated %{suffix} which 1513 # The resulting string leaves an uninterpolated %{suffix} which
1503 # is used in the final substitution below. 1514 # is used in the final substitution below.
1504 mtime_preserving_solink_base = ( 1515 mtime_preserving_solink_base = (
1505 'if [ ! -e $lib -o ! -e ${lib}.TOC ]; then ' 1516 'if [ ! -e $lib -o ! -e ${lib}.TOC ]; then '
1506 '%(solink)s && %(extract_toc)s > ${lib}.TOC; else ' 1517 '%(solink)s && %(extract_toc)s > ${lib}.TOC; else '
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
1739 def GenerateOutput(target_list, target_dicts, data, params): 1750 def GenerateOutput(target_list, target_dicts, data, params):
1740 user_config = params.get('generator_flags', {}).get('config', None) 1751 user_config = params.get('generator_flags', {}).get('config', None)
1741 if user_config: 1752 if user_config:
1742 GenerateOutputForConfig(target_list, target_dicts, data, params, 1753 GenerateOutputForConfig(target_list, target_dicts, data, params,
1743 user_config) 1754 user_config)
1744 else: 1755 else:
1745 config_names = target_dicts[target_list[0]]['configurations'].keys() 1756 config_names = target_dicts[target_list[0]]['configurations'].keys()
1746 for config_name in config_names: 1757 for config_name in config_names:
1747 GenerateOutputForConfig(target_list, target_dicts, data, params, 1758 GenerateOutputForConfig(target_list, target_dicts, data, params,
1748 config_name) 1759 config_name)
OLDNEW
« no previous file with comments | « pylib/gyp/generator/msvs.py ('k') | pylib/gyp/input.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698