Chromium Code Reviews| Index: pylib/gyp/xcode_emulation.py |
| diff --git a/pylib/gyp/xcode_emulation.py b/pylib/gyp/xcode_emulation.py |
| index 30f27d5832d99bd02ede773af5e59ed7c513b127..622981600b5831450f6c17a1eecc824a035cb7f5 100644 |
| --- a/pylib/gyp/xcode_emulation.py |
| +++ b/pylib/gyp/xcode_emulation.py |
| @@ -1418,17 +1418,43 @@ def _HasIOSTarget(targets): |
| return False |
| +def _IOSIsDeviceSDKROOT(sdkroot): |
| + """Tests if |sdkroot| is a SDK for building for device.""" |
| + return sdkroot == 'iphoneos' |
|
Mark Mentovai
2014/02/05 21:51:46
Shouldn’t this test be a little more comprehensive
sdefresne
2014/02/06 09:53:19
Done.
|
| + |
| + |
| +def _FilterIOSArchitectureForSDKROOT(xcode_settings): |
| + """Filter the ARCHS value from the |xcode_settings| dictionary to only |
| + contains architectures valid for the sdk configured in SDKROOT value.""" |
| + allowed_archs = ('i386', 'x86_64') |
| + if _IOSIsDeviceSDKROOT(xcode_settings.get('SDKROOT', '')): |
| + allowed_archs = ('armv7', 'armv7s', 'arm64') |
| + archs = set() |
| + for arch in (xcode_settings.get('ARCHS', []) or ['$(ARCHS_STANDARD)']): |
| + if arch == '$(ARCHS_STANDARD)': |
| + archs.update(allowed_archs[:-1]) |
| + elif arch == '$(ARCHS_STANDARD_INCLUDING_64_BIT)': |
| + archs.update(allowed_archs) |
| + elif arch in allowed_archs: |
| + archs.add(arch) |
| + valid_archs = set(xcode_settings.get('VALID_ARCHS', [])) |
| + if valid_archs: |
| + archs = archs & valid_archs |
| + xcode_settings['ARCHS'] = list(archs) |
| + |
| + |
| def _AddIOSDeviceConfigurations(targets): |
| """Clone all targets and append -iphoneos to the name. Configure these targets |
| - to build for iOS devices.""" |
| - for target_dict in targets.values(): |
| + to build for iOS devices and use correct architectures for those builds.""" |
| + for target_dict in targets.itervalues(): |
| for config_name in target_dict['configurations'].keys(): |
| config = target_dict['configurations'][config_name] |
| new_config_name = config_name + '-iphoneos' |
| new_config_dict = copy.deepcopy(config) |
| if target_dict['toolset'] == 'target': |
| - new_config_dict['xcode_settings']['ARCHS'] = ['armv7'] |
| new_config_dict['xcode_settings']['SDKROOT'] = 'iphoneos' |
| + _FilterIOSArchitectureForSDKROOT(new_config_dict['xcode_settings']) |
| + _FilterIOSArchitectureForSDKROOT(config['xcode_settings']) |
| target_dict['configurations'][new_config_name] = new_config_dict |
| return targets |