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

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

Issue 10795044: Support Mac android cross compile. Base URL: http://gyp.googlecode.com/svn/trunk/
Patch Set: Created 8 years, 4 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
« pylib/gyp/generator/make.py ('K') | « pylib/gyp/generator/make.py ('k') | no next file » | 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 gyp 6 import gyp
7 import gyp.common 7 import gyp.common
8 import gyp.msvs_emulation 8 import gyp.msvs_emulation
9 import gyp.MSVSVersion 9 import gyp.MSVSVersion
10 import gyp.system_test 10 import gyp.system_test
(...skipping 1180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 1191
1192 return rule_name 1192 return rule_name
1193 1193
1194 1194
1195 def CalculateVariables(default_variables, params): 1195 def CalculateVariables(default_variables, params):
1196 """Calculate additional variables for use in the build (called by gyp).""" 1196 """Calculate additional variables for use in the build (called by gyp)."""
1197 global generator_additional_non_configuration_keys 1197 global generator_additional_non_configuration_keys
1198 global generator_additional_path_sections 1198 global generator_additional_path_sections
1199 cc_target = os.environ.get('CC.target', os.environ.get('CC', 'cc')) 1199 cc_target = os.environ.get('CC.target', os.environ.get('CC', 'cc'))
1200 flavor = gyp.common.GetFlavor(params) 1200 flavor = gyp.common.GetFlavor(params)
1201 default_variables.setdefault('HOST_OS', gyp.common.GetHostFlavor(params))
1201 if flavor == 'mac': 1202 if flavor == 'mac':
1202 default_variables.setdefault('OS', 'mac') 1203 default_variables.setdefault('OS', 'mac')
1203 default_variables.setdefault('SHARED_LIB_SUFFIX', '.dylib') 1204 default_variables.setdefault('SHARED_LIB_SUFFIX', '.dylib')
1204 default_variables.setdefault('SHARED_LIB_DIR', 1205 default_variables.setdefault('SHARED_LIB_DIR',
1205 generator_default_variables['PRODUCT_DIR']) 1206 generator_default_variables['PRODUCT_DIR'])
1206 default_variables.setdefault('LIB_DIR', 1207 default_variables.setdefault('LIB_DIR',
1207 generator_default_variables['PRODUCT_DIR']) 1208 generator_default_variables['PRODUCT_DIR'])
1208 1209
1209 # Copy additional generator configuration data from Xcode, which is shared 1210 # Copy additional generator configuration data from Xcode, which is shared
1210 # by the Mac Ninja generator. 1211 # by the Mac Ninja generator.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 os.makedirs(os.path.dirname(path)) 1265 os.makedirs(os.path.dirname(path))
1265 except OSError: 1266 except OSError:
1266 pass 1267 pass
1267 return open(path, mode) 1268 return open(path, mode)
1268 1269
1269 1270
1270 def GenerateOutputForConfig(target_list, target_dicts, data, params, 1271 def GenerateOutputForConfig(target_list, target_dicts, data, params,
1271 config_name): 1272 config_name):
1272 options = params['options'] 1273 options = params['options']
1273 flavor = gyp.common.GetFlavor(params) 1274 flavor = gyp.common.GetFlavor(params)
1275 host_flavor = gyp.common.GetHostFlavor(params)
1274 generator_flags = params.get('generator_flags', {}) 1276 generator_flags = params.get('generator_flags', {})
1275 1277
1276 # build_dir: relative path from source root to our output files. 1278 # build_dir: relative path from source root to our output files.
1277 # e.g. "out/Debug" 1279 # e.g. "out/Debug"
1278 build_dir = os.path.join(generator_flags.get('output_dir', 'out'), 1280 build_dir = os.path.join(generator_flags.get('output_dir', 'out'),
1279 config_name) 1281 config_name)
1280 1282
1281 toplevel_build = os.path.join(options.toplevel_dir, build_dir) 1283 toplevel_build = os.path.join(options.toplevel_dir, build_dir)
1282 1284
1283 master_ninja = ninja_syntax.Writer( 1285 master_ninja = ninja_syntax.Writer(
1284 OpenOutput(os.path.join(toplevel_build, 'build.ninja')), 1286 OpenOutput(os.path.join(toplevel_build, 'build.ninja')),
1285 width=120) 1287 width=120)
1286 1288
1287 # Put build-time support tools in out/{config_name}. 1289 # Put build-time support tools in out/{config_name}.
1288 gyp.common.CopyTool(flavor, toplevel_build) 1290 gyp.common.CopyTool(host_flavor, toplevel_build)
1289 1291
1290 # Grab make settings for CC/CXX. 1292 # Grab make settings for CC/CXX.
1291 if flavor == 'win': 1293 if flavor == 'win':
1292 cc = cxx = 'cl.exe' 1294 cc = cxx = 'cl.exe'
1293 gyp.msvs_emulation.GenerateEnvironmentFiles( 1295 gyp.msvs_emulation.GenerateEnvironmentFiles(
1294 toplevel_build, generator_flags, OpenOutput) 1296 toplevel_build, generator_flags, OpenOutput)
1295 else: 1297 else:
1296 cc, cxx = 'gcc', 'g++' 1298 cc, cxx = 'gcc', 'g++'
1297 build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0]) 1299 build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0])
1298 make_global_settings = data[build_file].get('make_global_settings', []) 1300 make_global_settings = data[build_file].get('make_global_settings', [])
1299 build_to_root = InvertRelativePath(build_dir) 1301 build_to_root = InvertRelativePath(build_dir)
1300 for key, value in make_global_settings: 1302 for key, value in make_global_settings:
1301 if key == 'CC': cc = os.path.join(build_to_root, value) 1303 if key == 'CC': cc = os.path.join(build_to_root, value)
1302 if key == 'CXX': cxx = os.path.join(build_to_root, value) 1304 if key == 'CXX': cxx = os.path.join(build_to_root, value)
1303 1305
1304 flock = 'flock' 1306 flock = 'flock'
1305 if flavor == 'mac': 1307 if host_flavor == 'mac':
1306 flock = './gyp-mac-tool flock' 1308 flock = './gyp-mac-tool flock'
1307 master_ninja.variable('cc', os.environ.get('CC', cc)) 1309 master_ninja.variable('cc', os.environ.get('CC', cc))
1308 master_ninja.variable('cxx', os.environ.get('CXX', cxx)) 1310 master_ninja.variable('cxx', os.environ.get('CXX', cxx))
1309 if flavor == 'win': 1311 if flavor == 'win':
1310 master_ninja.variable('ld', 'link.exe') 1312 master_ninja.variable('ld', 'link.exe')
1311 master_ninja.variable('idl', 'midl.exe') 1313 master_ninja.variable('idl', 'midl.exe')
1312 master_ninja.variable('ar', 'lib.exe') 1314 master_ninja.variable('ar', 'lib.exe')
1313 master_ninja.variable('rc', 'rc.exe') 1315 master_ninja.variable('rc', 'rc.exe')
1314 master_ninja.variable('asm', 'ml.exe') 1316 master_ninja.variable('asm', 'ml.exe')
1315 master_ninja.variable('mt', 'mt.exe') 1317 master_ninja.variable('mt', 'mt.exe')
1316 master_ninja.variable('use_dep_database', '1') 1318 master_ninja.variable('use_dep_database', '1')
1317 else: 1319 else:
1318 master_ninja.variable('ld', flock + ' linker.lock $cxx') 1320 master_ninja.variable('ld', flock + ' linker.lock $cxx')
1319 master_ninja.variable('ar', os.environ.get('AR', 'ar')) 1321 master_ninja.variable('ar', os.environ.get('AR', 'ar'))
1320 1322
1321 master_ninja.variable('ar_target', os.environ.get('AR_target', '$ar')) 1323 master_ninja.variable('ar_target', os.environ.get('AR_target', '$ar'))
1322 master_ninja.variable('cc_target', os.environ.get('CC_target', '$cc')) 1324 master_ninja.variable('cc_target', os.environ.get('CC_target', '$cc'))
1323 master_ninja.variable('cxx_target', os.environ.get('CXX_target', '$cxx')) 1325 master_ninja.variable('cxx_target', os.environ.get('CXX_target', '$cxx'))
1324 if flavor == 'win': 1326 if flavor == 'win':
1325 master_ninja.variable('ld_target', os.environ.get('LD_target', '$ld')) 1327 master_ninja.variable('ld_target', os.environ.get('LD_target', '$ld'))
1326 else: 1328 else:
1327 master_ninja.variable('ld_target', flock + ' linker.lock $cxx_target') 1329 master_ninja.variable('ld_target', flock + ' linker.lock $cxx_target')
1328 1330
1329 if flavor == 'mac': 1331 if host_flavor == 'mac':
1330 master_ninja.variable('mac_tool', os.path.join('.', 'gyp-mac-tool')) 1332 master_ninja.variable('mac_tool', os.path.join('.', 'gyp-mac-tool'))
1331 master_ninja.newline() 1333 master_ninja.newline()
1332 1334
1333 if flavor != 'win': 1335 if flavor != 'win':
1334 master_ninja.rule( 1336 master_ninja.rule(
1335 'cc', 1337 'cc',
1336 description='CC $out', 1338 description='CC $out',
1337 command=('$cc -MMD -MF $out.d $defines $includes $cflags $cflags_c ' 1339 command=('$cc -MMD -MF $out.d $defines $includes $cflags $cflags_c '
1338 '$cflags_pch_c -c $in -o $out'), 1340 '$cflags_pch_c -c $in -o $out'),
1339 depfile='$out.d') 1341 depfile='$out.d')
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
1544 'link', 1546 'link',
1545 description='LINK $out, POSTBUILDS', 1547 description='LINK $out, POSTBUILDS',
1546 command=('$ld $ldflags -o $out ' 1548 command=('$ld $ldflags -o $out '
1547 '$in $solibs $libs$postbuilds')) 1549 '$in $solibs $libs$postbuilds'))
1548 master_ninja.rule( 1550 master_ninja.rule(
1549 'infoplist', 1551 'infoplist',
1550 description='INFOPLIST $out', 1552 description='INFOPLIST $out',
1551 command=('$cc -E -P -Wno-trigraphs -x c $defines $in -o $out && ' 1553 command=('$cc -E -P -Wno-trigraphs -x c $defines $in -o $out && '
1552 'plutil -convert xml1 $out $out')) 1554 'plutil -convert xml1 $out $out'))
1553 master_ninja.rule( 1555 master_ninja.rule(
1554 'mac_tool',
1555 description='MACTOOL $mactool_cmd $in',
1556 command='$env $mac_tool $mactool_cmd $in $out')
1557 master_ninja.rule(
1558 'package_framework', 1556 'package_framework',
1559 description='PACKAGE FRAMEWORK $out, POSTBUILDS', 1557 description='PACKAGE FRAMEWORK $out, POSTBUILDS',
1560 command='$mac_tool package-framework $out $version$postbuilds ' 1558 command='$mac_tool package-framework $out $version$postbuilds '
1561 '&& touch $out') 1559 '&& touch $out')
1560
1561 if host_flavor == 'mac':
1562 master_ninja.rule(
1563 'mac_tool',
1564 description='MACTOOL $mactool_cmd $in',
1565 command='$env $mac_tool $mactool_cmd $in $out')
1566
1562 if flavor == 'win': 1567 if flavor == 'win':
1563 master_ninja.rule( 1568 master_ninja.rule(
1564 'stamp', 1569 'stamp',
1565 description='STAMP $out', 1570 description='STAMP $out',
1566 command='%s gyp-win-tool stamp $out' % sys.executable) 1571 command='%s gyp-win-tool stamp $out' % sys.executable)
1567 master_ninja.rule( 1572 master_ninja.rule(
1568 'copy', 1573 'copy',
1569 description='COPY $in $out', 1574 description='COPY $in $out',
1570 command='%s gyp-win-tool recursive-mirror $in $out' % sys.executable) 1575 command='%s gyp-win-tool recursive-mirror $in $out' % sys.executable)
1571 else: 1576 else:
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1649 1654
1650 user_config = params.get('generator_flags', {}).get('config', None) 1655 user_config = params.get('generator_flags', {}).get('config', None)
1651 if user_config: 1656 if user_config:
1652 GenerateOutputForConfig(target_list, target_dicts, data, params, 1657 GenerateOutputForConfig(target_list, target_dicts, data, params,
1653 user_config) 1658 user_config)
1654 else: 1659 else:
1655 config_names = target_dicts[target_list[0]]['configurations'].keys() 1660 config_names = target_dicts[target_list[0]]['configurations'].keys()
1656 for config_name in config_names: 1661 for config_name in config_names:
1657 GenerateOutputForConfig(target_list, target_dicts, data, params, 1662 GenerateOutputForConfig(target_list, target_dicts, data, params,
1658 config_name) 1663 config_name)
OLDNEW
« pylib/gyp/generator/make.py ('K') | « pylib/gyp/generator/make.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698