match chromium's approach for locating the most appropriate macos SDK to use

By doing this, the ninja generator for gyp works great on macos, resulting in faster (I think) and much, much terser builds.

BUG=

Review URL: https://codereview.appspot.com/7142047

git-svn-id: http://skia.googlecode.com/svn/trunk@7684 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
humper@google.com 2013-02-08 21:45:33 +00:00
parent 6438695222
commit 522dbd2e62
3 changed files with 74 additions and 2 deletions

View File

@ -195,6 +195,9 @@
['skia_os == "mac"',
{
'variables': {
'mac_sdk%': '<!(python <(DEPTH)/tools/find_mac_sdk.py 10.6)',
},
'defines': [
'SK_BUILD_FOR_MAC',
],
@ -228,7 +231,13 @@
},
'xcode_settings': {
'GCC_SYMBOLS_PRIVATE_EXTERN': 'NO',
'SDKROOT': '<(skia_osx_sdkroot)',
'conditions': [
['skia_osx_sdkroot==""', {
'SDKROOT': 'macosx<(mac_sdk)', # -isysroot
}, {
'SDKROOT': '<(skia_osx_sdkroot)', # -isysroot
}],
],
# trying to get this to work, but it needs clang I think...
# 'WARNING_CFLAGS': '-Wexit-time-destructors',
'CLANG_WARN_CXX0X_EXTENSIONS': 'NO',

View File

@ -87,7 +87,7 @@
'skia_angle%': 0,
'skia_directwrite%': 0,
'skia_gpu%': 1,
'skia_osx_sdkroot%': 'macosx',
'skia_osx_sdkroot%': '',
'skia_profile_enabled%': 0,
# Note: This is currently only turned on for linux and android.
# TODO: Turn on for Win and Mac as well.

63
tools/find_mac_sdk.py Executable file
View File

@ -0,0 +1,63 @@
#!/usr/bin/env python
# Copyright (c) 2012 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.
import os
import re
import subprocess
import sys
"""Prints the lowest locally available SDK version greater than or equal to a
given minimum sdk version to standard output.
Usage:
python find_sdk.py 10.6 # Ignores SDKs < 10.6
"""
def parse_version(version_str):
"""'10.6' => [10, 6]"""
return map(int, re.findall(r'(\d+)', version_str))
def find_sdk_dir():
job = subprocess.Popen(['xcode-select', '-print-path'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
out, err = job.communicate()
if job.returncode != 0:
print >>sys.stderr, out
print >>sys.stderr, err
raise Exception(('Error %d running xcode-select, you might have to run '
'|sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer| '
'if you are using Xcode 4.') % job.returncode)
# The Developer folder moved in Xcode 4.3.
xcode43_sdk_path = os.path.join(
out.rstrip(), 'Platforms/MacOSX.platform/Developer/SDKs')
if os.path.isdir(xcode43_sdk_path):
sdk_dir = xcode43_sdk_path
else:
sdk_dir = os.path.join(out.rstrip(), 'SDKs')
return sdk_dir
def main():
min_sdk_version = '10.6'
if len(sys.argv) > 0:
min_sdk_version = sys.argv[0]
sdk_dir = find_sdk_dir()
sdks = [re.findall('^MacOSX(10\.\d+)\.sdk$', s) for s in os.listdir(sdk_dir)]
sdks = [s[0] for s in sdks if s] # [['10.5'], ['10.6']] => ['10.5', '10.6']
sdks = [s for s in sdks # ['10.5', '10.6'] => ['10.6']
if parse_version(s) >= parse_version(min_sdk_version)]
if not sdks:
raise Exception('No %s+ SDK found' % min_sdk_version)
best_sdk = sorted(sdks, key=parse_version)[0]
return best_sdk
if __name__ == '__main__':
if sys.platform != 'darwin':
raise Exception("This script only runs on Mac")
print main()