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

Unified Diff: pylib/gyp/xcode_emulation.py

Issue 138533006: Improve ninja's Xcode emulation (Closed) Base URL: http://gyp.googlecode.com/svn/trunk
Patch Set: Rebase & rename targets names in tests Created 6 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | test/ios/app-bundle/test-archs.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pylib/gyp/xcode_emulation.py
diff --git a/pylib/gyp/xcode_emulation.py b/pylib/gyp/xcode_emulation.py
index 7eaa45fa995834af3ab8466092882810d3022626..87edc0a2753fe938c2f45be3165f8ef118fa68f6 100644
--- a/pylib/gyp/xcode_emulation.py
+++ b/pylib/gyp/xcode_emulation.py
@@ -1429,18 +1429,66 @@ def _HasIOSTarget(targets):
return False
+def _IOSIsDeviceSDKROOT(sdkroot):
+ """Tests if |sdkroot| is a SDK for building for device."""
+ return 'iphoneos' in sdkroot.lower()
+
+
+def _IOSDefaultArchForSDKRoot(sdkroot):
+ """Returns the expansion of standard ARCHS macro depending on the version
+ of Xcode installed and configured, and which |sdkroot| to use (iphoneos or
+ simulator)."""
+ xcode_version, xcode_build = XcodeVersion()
+ if xcode_version < '0500':
+ if _IOSIsDeviceSDKROOT(sdkroot):
+ return {'$(ARCHS_STANDARD)': ['armv7']}
+ else:
+ return {'$(ARCHS_STANDARD)': ['i386']}
+ else:
+ if _IOSIsDeviceSDKROOT(sdkroot):
+ return {
+ '$(ARCHS_STANDARD)': ['armv7', 'armv7s'],
+ '$(ARCHS_STANDARD_INCLUDING_64_BIT)': ['armv7', 'armv7s', 'arm64'],
+ }
+ else:
+ return {
+ '$(ARCHS_STANDARD)': ['i386'],
+ '$(ARCHS_STANDARD_INCLUDING_64_BIT)': ['i386', 'x86_64'],
+ }
+
+
+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."""
+ defaults_archs = _IOSDefaultArchForSDKRoot(xcode_settings.get('SDKROOT', ''))
+ allowed_archs = set()
+ for archs in defaults_archs.itervalues():
+ allowed_archs.update(archs)
+ selected_archs = set()
+ for arch in (xcode_settings.get('ARCHS', []) or ['$(ARCHS_STANDARD)']):
+ if arch in defaults_archs:
+ selected_archs.update(defaults_archs[arch])
+ elif arch in allowed_archs:
+ selected_archs.add(arch)
+ valid_archs = set(xcode_settings.get('VALID_ARCHS', []))
+ if valid_archs:
+ selected_archs = selected_archs & valid_archs
+ xcode_settings['ARCHS'] = list(selected_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():
- 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'
- target_dict['configurations'][new_config_name] = new_config_dict
+ to build for iOS devices and use correct architectures for those builds."""
+ for target_dict in targets.itervalues():
+ toolset = target_dict['toolset']
+ configs = target_dict['configurations']
+ for config_name, config_dict in dict(configs).iteritems():
+ iphoneos_config_dict = copy.deepcopy(config_dict)
+ configs[config_name + '-iphoneos'] = iphoneos_config_dict
+ if toolset == 'target':
+ iphoneos_config_dict['xcode_settings']['SDKROOT'] = 'iphoneos'
+ _FilterIOSArchitectureForSDKROOT(iphoneos_config_dict['xcode_settings'])
+ _FilterIOSArchitectureForSDKROOT(config_dict['xcode_settings'])
return targets
def CloneConfigurationForDeviceAndEmulator(target_dicts):
« no previous file with comments | « no previous file | test/ios/app-bundle/test-archs.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698