OLD | NEW |
---|---|
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 1249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1260 | 1260 |
1261 def OpenOutput(path, mode='w'): | 1261 def OpenOutput(path, mode='w'): |
1262 """Open |path| for writing, creating directories if necessary.""" | 1262 """Open |path| for writing, creating directories if necessary.""" |
1263 try: | 1263 try: |
1264 os.makedirs(os.path.dirname(path)) | 1264 os.makedirs(os.path.dirname(path)) |
1265 except OSError: | 1265 except OSError: |
1266 pass | 1266 pass |
1267 return open(path, mode) | 1267 return open(path, mode) |
1268 | 1268 |
1269 | 1269 |
1270 def CommandWithWrapper(cmd, wrappers, prog): | |
1271 wrapper = wrappers.get(cmd, '') | |
1272 if wrapper: | |
1273 return wrapper + ' ' + prog | |
1274 return prog | |
1275 | |
1276 | |
1270 def GenerateOutputForConfig(target_list, target_dicts, data, params, | 1277 def GenerateOutputForConfig(target_list, target_dicts, data, params, |
1271 config_name): | 1278 config_name): |
1272 options = params['options'] | 1279 options = params['options'] |
1273 flavor = gyp.common.GetFlavor(params) | 1280 flavor = gyp.common.GetFlavor(params) |
1274 generator_flags = params.get('generator_flags', {}) | 1281 generator_flags = params.get('generator_flags', {}) |
1275 | 1282 |
1276 # build_dir: relative path from source root to our output files. | 1283 # build_dir: relative path from source root to our output files. |
1277 # e.g. "out/Debug" | 1284 # e.g. "out/Debug" |
1278 build_dir = os.path.join(generator_flags.get('output_dir', 'out'), | 1285 build_dir = os.path.join(generator_flags.get('output_dir', 'out'), |
1279 config_name) | 1286 config_name) |
(...skipping 10 matching lines...) Expand all Loading... | |
1290 # Grab make settings for CC/CXX. | 1297 # Grab make settings for CC/CXX. |
1291 if flavor == 'win': | 1298 if flavor == 'win': |
1292 cc = cxx = 'cl.exe' | 1299 cc = cxx = 'cl.exe' |
1293 gyp.msvs_emulation.GenerateEnvironmentFiles( | 1300 gyp.msvs_emulation.GenerateEnvironmentFiles( |
1294 toplevel_build, generator_flags, OpenOutput) | 1301 toplevel_build, generator_flags, OpenOutput) |
1295 else: | 1302 else: |
1296 cc, cxx = 'gcc', 'g++' | 1303 cc, cxx = 'gcc', 'g++' |
1297 build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0]) | 1304 build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0]) |
1298 make_global_settings = data[build_file].get('make_global_settings', []) | 1305 make_global_settings = data[build_file].get('make_global_settings', []) |
1299 build_to_root = InvertRelativePath(build_dir) | 1306 build_to_root = InvertRelativePath(build_dir) |
1307 flock = 'flock' | |
1308 if flavor == 'mac': | |
1309 flock = './gyp-mac-tool flock' | |
1310 wrappers = {} | |
1311 if flavor != 'win': | |
1312 wrappers['link'] = flock + ' linker.lock' | |
1313 wrappers['link_target'] = flock + ' linker.lock' | |
1300 for key, value in make_global_settings: | 1314 for key, value in make_global_settings: |
1301 if key == 'CC': cc = os.path.join(build_to_root, value) | 1315 if key == 'CC': cc = os.path.join(build_to_root, value) |
1302 if key == 'CXX': cxx = os.path.join(build_to_root, value) | 1316 if key == 'CXX': cxx = os.path.join(build_to_root, value) |
1317 m = re.match('(.*)_wrapper', key) | |
Nico
2013/02/19 17:21:30
same comment as in the make generator
ukai
2013/02/20 07:22:53
Done.
| |
1318 if m: | |
1319 wrappers[m.group(1).lower()] = os.path.join(build_to_root, value) | |
Nico
2013/02/19 17:21:30
You don't use lower() in the make generator. Shoul
ukai
2013/02/20 07:22:53
Done.
| |
1303 | 1320 |
1304 flock = 'flock' | 1321 master_ninja.variable('cc', CommandWithWrapper('cc', wrappers, |
1305 if flavor == 'mac': | 1322 os.environ.get('CC', cc))) |
1306 flock = './gyp-mac-tool flock' | 1323 master_ninja.variable('cxx', CommandWithWrapper('cxx', wrappers, |
1307 master_ninja.variable('cc', os.environ.get('CC', cc)) | 1324 os.environ.get('CXX', cxx))) |
1308 master_ninja.variable('cxx', os.environ.get('CXX', cxx)) | |
1309 if flavor == 'win': | 1325 if flavor == 'win': |
1310 master_ninja.variable('ld', 'link.exe') | 1326 master_ninja.variable('ld', 'link.exe') |
1311 master_ninja.variable('idl', 'midl.exe') | 1327 master_ninja.variable('idl', 'midl.exe') |
1312 master_ninja.variable('ar', 'lib.exe') | 1328 master_ninja.variable('ar', 'lib.exe') |
1313 master_ninja.variable('rc', 'rc.exe') | 1329 master_ninja.variable('rc', 'rc.exe') |
1314 master_ninja.variable('asm', 'ml.exe') | 1330 master_ninja.variable('asm', 'ml.exe') |
1315 master_ninja.variable('mt', 'mt.exe') | 1331 master_ninja.variable('mt', 'mt.exe') |
1316 master_ninja.variable('use_dep_database', '1') | 1332 master_ninja.variable('use_dep_database', '1') |
1317 else: | 1333 else: |
1318 master_ninja.variable('ld', flock + ' linker.lock $cxx') | 1334 master_ninja.variable('ld', CommandWithWrapper('link', wrappers, '$cxx')) |
1319 master_ninja.variable('ar', os.environ.get('AR', 'ar')) | 1335 master_ninja.variable('ar', os.environ.get('AR', 'ar')) |
1320 | 1336 |
1321 master_ninja.variable('ar_target', os.environ.get('AR_target', '$ar')) | 1337 master_ninja.variable('ar_target', os.environ.get('AR_target', '$ar')) |
1322 master_ninja.variable('cc_target', os.environ.get('CC_target', '$cc')) | 1338 master_ninja.variable('cc_target', os.environ.get('CC_target', '$cc')) |
1323 master_ninja.variable('cxx_target', os.environ.get('CXX_target', '$cxx')) | 1339 master_ninja.variable('cxx_target', os.environ.get('CXX_target', '$cxx')) |
1324 if flavor == 'win': | 1340 if flavor == 'win': |
1325 master_ninja.variable('ld_target', os.environ.get('LD_target', '$ld')) | 1341 master_ninja.variable('ld_target', os.environ.get('LD_target', '$ld')) |
1326 else: | 1342 else: |
1327 master_ninja.variable('ld_target', flock + ' linker.lock $cxx_target') | 1343 master_ninja.variable('ld_target', |
1344 CommandWithWrapper('link_target', wrappers, | |
1345 '$cxx_target')) | |
1328 | 1346 |
1329 if flavor == 'mac': | 1347 if flavor == 'mac': |
1330 master_ninja.variable('mac_tool', os.path.join('.', 'gyp-mac-tool')) | 1348 master_ninja.variable('mac_tool', os.path.join('.', 'gyp-mac-tool')) |
1331 master_ninja.newline() | 1349 master_ninja.newline() |
1332 | 1350 |
1333 if flavor != 'win': | 1351 if flavor != 'win': |
1334 master_ninja.rule( | 1352 master_ninja.rule( |
1335 'cc', | 1353 'cc', |
1336 description='CC $out', | 1354 description='CC $out', |
1337 command=('$cc -MMD -MF $out.d $defines $includes $cflags $cflags_c ' | 1355 command=('$cc -MMD -MF $out.d $defines $includes $cflags $cflags_c ' |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1649 | 1667 |
1650 user_config = params.get('generator_flags', {}).get('config', None) | 1668 user_config = params.get('generator_flags', {}).get('config', None) |
1651 if user_config: | 1669 if user_config: |
1652 GenerateOutputForConfig(target_list, target_dicts, data, params, | 1670 GenerateOutputForConfig(target_list, target_dicts, data, params, |
1653 user_config) | 1671 user_config) |
1654 else: | 1672 else: |
1655 config_names = target_dicts[target_list[0]]['configurations'].keys() | 1673 config_names = target_dicts[target_list[0]]['configurations'].keys() |
1656 for config_name in config_names: | 1674 for config_name in config_names: |
1657 GenerateOutputForConfig(target_list, target_dicts, data, params, | 1675 GenerateOutputForConfig(target_list, target_dicts, data, params, |
1658 config_name) | 1676 config_name) |
OLD | NEW |